%PDF- %PDF-
Direktori : /home/graphicd/public_html/vebto/public/client/ |
Current File : /home/graphicd/public_html/vebto/public/client/936-es5.4c349652cd92731bb447.js.map |
{"version":3,"sources":["node_modules/@angular/material/__ivy_ngcc__/fesm2015/autocomplete.js","node_modules/@angular/material/__ivy_ngcc__/fesm2015/chips.js","node_modules/@angular/material/__ivy_ngcc__/fesm2015/form-field.js","node_modules/@angular/material/__ivy_ngcc__/fesm2015/slide-toggle.js","node_modules/fast-deep-equal/index.js","node_modules/lodash/_DataView.js","node_modules/lodash/_Hash.js","node_modules/lodash/_ListCache.js","node_modules/lodash/_Map.js","node_modules/lodash/_MapCache.js","node_modules/lodash/_Promise.js","node_modules/lodash/_Set.js","node_modules/lodash/_SetCache.js","node_modules/lodash/_Stack.js","node_modules/lodash/_Symbol.js","node_modules/lodash/_Uint8Array.js","node_modules/lodash/_WeakMap.js","node_modules/lodash/_arrayEach.js","node_modules/lodash/_arrayFilter.js","node_modules/lodash/_arrayIncludes.js","node_modules/lodash/_arrayIncludesWith.js","node_modules/lodash/_arrayLikeKeys.js","node_modules/lodash/_arrayMap.js","node_modules/lodash/_arrayPush.js","node_modules/lodash/_arraySome.js","node_modules/lodash/_assignValue.js","node_modules/lodash/_assocIndexOf.js","node_modules/lodash/_baseAssign.js","node_modules/lodash/_baseAssignIn.js","node_modules/lodash/_baseAssignValue.js","node_modules/lodash/_baseClone.js","node_modules/lodash/_baseCreate.js","node_modules/lodash/_baseFindIndex.js","node_modules/lodash/_baseGet.js","node_modules/lodash/_baseGetAllKeys.js","node_modules/lodash/_baseGetTag.js","node_modules/lodash/_baseHasIn.js","node_modules/lodash/_baseIndexOf.js","node_modules/lodash/_baseIsArguments.js","node_modules/lodash/_baseIsEqual.js","node_modules/lodash/_baseIsEqualDeep.js","node_modules/lodash/_baseIsMap.js","node_modules/lodash/_baseIsMatch.js","node_modules/lodash/_baseIsNaN.js","node_modules/lodash/_baseIsNative.js","node_modules/lodash/_baseIsSet.js","node_modules/lodash/_baseIsTypedArray.js","node_modules/lodash/_baseIteratee.js","node_modules/lodash/_baseKeys.js","node_modules/lodash/_baseKeysIn.js","node_modules/lodash/_baseMatches.js","node_modules/lodash/_baseMatchesProperty.js","node_modules/lodash/_baseProperty.js","node_modules/lodash/_basePropertyDeep.js","node_modules/lodash/_baseTimes.js","node_modules/lodash/_baseToString.js","node_modules/lodash/_baseUnary.js","node_modules/lodash/_baseUniq.js","node_modules/lodash/_cacheHas.js","node_modules/lodash/_castPath.js","node_modules/lodash/_cloneArrayBuffer.js","node_modules/lodash/_cloneBuffer.js","node_modules/lodash/_cloneDataView.js","node_modules/lodash/_cloneRegExp.js","node_modules/lodash/_cloneSymbol.js","node_modules/lodash/_cloneTypedArray.js","node_modules/lodash/_copyArray.js","node_modules/lodash/_copyObject.js","node_modules/lodash/_copySymbols.js","node_modules/lodash/_copySymbolsIn.js","node_modules/lodash/_coreJsData.js","node_modules/lodash/_createSet.js","node_modules/lodash/_defineProperty.js","node_modules/lodash/_equalArrays.js","node_modules/lodash/_equalByTag.js","node_modules/lodash/_equalObjects.js","node_modules/lodash/_freeGlobal.js","node_modules/lodash/_getAllKeys.js","node_modules/lodash/_getAllKeysIn.js","node_modules/lodash/_getMapData.js","node_modules/lodash/_getMatchData.js","node_modules/lodash/_getNative.js","node_modules/lodash/_getPrototype.js","node_modules/lodash/_getRawTag.js","node_modules/lodash/_getSymbols.js","node_modules/lodash/_getSymbolsIn.js","node_modules/lodash/_getTag.js","node_modules/lodash/_getValue.js","node_modules/lodash/_hasPath.js","node_modules/lodash/_hashClear.js","node_modules/lodash/_hashDelete.js","node_modules/lodash/_hashGet.js","node_modules/lodash/_hashHas.js","node_modules/lodash/_hashSet.js","node_modules/lodash/_initCloneArray.js","node_modules/lodash/_initCloneByTag.js","node_modules/lodash/_initCloneObject.js","node_modules/lodash/_isIndex.js","node_modules/lodash/_isKey.js","node_modules/lodash/_isKeyable.js","node_modules/lodash/_isMasked.js","node_modules/lodash/_isPrototype.js","node_modules/lodash/_isStrictComparable.js","node_modules/lodash/_listCacheClear.js","node_modules/lodash/_listCacheDelete.js","node_modules/lodash/_listCacheGet.js","node_modules/lodash/_listCacheHas.js","node_modules/lodash/_listCacheSet.js","node_modules/lodash/_mapCacheClear.js","node_modules/lodash/_mapCacheDelete.js","node_modules/lodash/_mapCacheGet.js","node_modules/lodash/_mapCacheHas.js","node_modules/lodash/_mapCacheSet.js","node_modules/lodash/_mapToArray.js","node_modules/lodash/_matchesStrictComparable.js","node_modules/lodash/_memoizeCapped.js","node_modules/lodash/_nativeCreate.js","node_modules/lodash/_nativeKeys.js","node_modules/lodash/_nativeKeysIn.js","node_modules/lodash/_nodeUtil.js","node_modules/lodash/_objectToString.js","node_modules/lodash/_overArg.js","node_modules/lodash/_root.js","node_modules/lodash/_setCacheAdd.js","node_modules/lodash/_setCacheHas.js","node_modules/lodash/_setToArray.js","node_modules/lodash/_stackClear.js","node_modules/lodash/_stackDelete.js","node_modules/lodash/_stackGet.js","node_modules/lodash/_stackHas.js","node_modules/lodash/_stackSet.js","node_modules/lodash/_strictIndexOf.js","node_modules/lodash/_stringToPath.js","node_modules/lodash/_toKey.js","node_modules/lodash/_toSource.js","node_modules/lodash/cloneDeep.js","node_modules/lodash/eq.js","node_modules/lodash/get.js","node_modules/lodash/hasIn.js","node_modules/lodash/identity.js","node_modules/lodash/isArguments.js","node_modules/lodash/isArray.js","node_modules/lodash/isArrayLike.js","node_modules/lodash/isBuffer.js","node_modules/lodash/isEqual.js","node_modules/lodash/isFunction.js","node_modules/lodash/isLength.js","node_modules/lodash/isMap.js","node_modules/lodash/isObject.js","node_modules/lodash/isObjectLike.js","node_modules/lodash/isSet.js","node_modules/lodash/isSymbol.js","node_modules/lodash/isTypedArray.js","node_modules/lodash/keys.js","node_modules/lodash/keysIn.js","node_modules/lodash/memoize.js","node_modules/lodash/noop.js","node_modules/lodash/property.js","node_modules/lodash/stubArray.js","node_modules/lodash/stubFalse.js","node_modules/lodash/toString.js","node_modules/lodash/uniqBy.js","node_modules/rxjs/_esm2015/internal/operators/throttle.js","node_modules/rxjs/_esm2015/internal/operators/throttleTime.js","src/app/drive/uploads/drive-upload-validator.ts","src/app/drive/state/actions/commands.ts","src/app/drive/state/models/drive-page.ts","src/app/drive/state/actions/events.ts","src/app/drive/state/models/drive-state-model-defaults.ts","src/app/drive/state/models/drive-state-model.ts","src/app/drive/messages/loading-toast/loading-toast-messages.ts","src/app/drive/upload-input-config.ts","src/app/drive/folders/api/folders-api-routes.enum.ts","src/app/drive/folders/api/folders-api.service.ts","src/app/drive/drive-entry-api.service.ts","src/app/drive/drive-urls.service.ts","src/app/drive/state/drive-state.ts","src/app/drive/sidebar/folders-tree/build-folder-tree.ts","src/app/drive/entries/supported-entry-types.ts","src/app/drive/files/components/file-icon/file-icon.component.ts","src/common/core/utils/kebab-case.ts","src/app/drive/files/components/file-icon/file-icon.component.html","src/app/drive/interactions/entry-drag-preview/entry-drag-preview.component.html","src/app/drive/interactions/entry-drag-preview/entry-drag-preview.component.ts","src/app/drive/permissions/drive-entry-permissions.ts","src/app/drive/sharing/shares-api.service.ts","src/app/drive/sharing/state/share-dialog.state.ts","src/app/drive/sharing/sharing-permissions-button/sharing-permissions-button.component.html","src/app/drive/sharing/sharing-permissions-button/sharing-permissions-button.component.ts","src/app/drive/sharing/entries-access-table/entries-access-table.component.html","src/app/drive/sharing/entries-access-table/entries-access-table.component.ts","src/app/drive/sharing/share-dialog/share-dialog.component.html","src/app/drive/sharing/share-dialog/share-dialog.component.ts","src/app/drive/sharing/links/shareable-links-api.service.ts","src/app/drive/sharing/links/share-link.state.ts","src/app/drive/sharing/links/link-options/link-options.component.html","src/app/drive/sharing/links/link-options/link-options.component.ts","src/app/drive/sharing/share-link-dialog/share-link-dialog.component.html","src/app/drive/sharing/share-link-dialog/share-link-dialog.component.ts","src/common/core/utils/share-link-socially.ts","src/app/drive/folders/components/crupdate-folder-dialog/crupdate-folder-dialog.component.html","src/app/drive/folders/components/crupdate-folder-dialog/crupdate-folder-dialog.component.ts","node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/tree.js","node_modules/@angular/material/__ivy_ngcc__/fesm2015/tree.js","src/app/drive/sidebar/folders-tree/folders-tree.service.ts","src/common/core/ui/context-menu/available-context-menus.ts","src/common/core/ui/context-menu/context-menu-ref.ts","src/common/core/ui/context-menu/context-menu-data.ts","src/common/core/ui/context-menu/context-menu.service.ts","src/common/core/ui/context-menu/context-menu.directive.ts","src/app/drive/interactions/drop-targets/base-drop-target.ts","src/app/drive/interactions/drop-targets/folder-drop-target.directive.ts","src/app/drive/sidebar/folders-tree/folders-tree.component.html","src/app/drive/sidebar/folders-tree/folders-tree.component.ts","src/app/drive/entries/move-entries-dialog/move-entries-dialog.component.ts","src/app/drive/entries/rename-entry-dialog/rename-entry-dialog.component.html","src/app/drive/entries/move-entries-dialog/move-entries-dialog.component.html","src/app/drive/entries/rename-entry-dialog/rename-entry-dialog.component.ts","src/app/drive/context-actions/drive-context-actions.ts","src/app/drive/context-actions/actions/entry-actions.ts","src/app/drive/context-actions/actions/folder-actions.ts","src/app/drive/context-actions/actions/shares-actions.ts","src/app/drive/context-actions/actions/trash-actions.ts","src/app/drive/context-actions/actions/trash-page-actions.ts","src/app/drive/interactions/drive-dom-cache.service.ts","src/app/drive/search/main-searchbar.component.ts","src/app/drive/search/drive-search-filters.ts","src/app/drive/search/main-searchbar.component.html","node_modules/rxjs/_esm2015/internal/operators/mapTo.js","node_modules/@angular/material/__ivy_ngcc__/fesm2015/sidenav.js","src/app/drive/sidebar/sidebar-action-buttons/sidebar-action-buttons.component.ts","src/app/drive/sidebar/sidebar-action-buttons/sidebar-action-buttons.component.html","src/app/drive/sidebar/available-space-indicator/available-space-indicator.component.html","src/app/drive/sidebar/available-space-indicator/available-space-indicator.component.ts","src/common/workspaces/workspace-selector/workspace-selector.component.html","src/common/workspaces/workspace-selector/workspace-selector.component.ts","src/app/drive/sidebar/sidebar.component.ts","src/app/drive/sidebar/sidebar.component.html","src/app/drive/details-sidebar/details-panel/entry-description-panel/entry-description-panel.component.html","src/app/drive/details-sidebar/details-panel/entry-description-panel/entry-description-panel.component.ts","src/app/drive/files/components/file-thumbnail/file-thumbnail.component.html","src/app/drive/files/components/file-thumbnail/file-thumbnail.component.ts","src/app/drive/details-sidebar/details-panel/details-panel.component.html","src/app/drive/details-sidebar/details-panel/details-panel.component.ts","src/app/drive/details-sidebar/details-sidebar.component.html","src/app/drive/details-sidebar/details-sidebar.component.ts","src/app/drive/files/components/files-grid/files-grid-item/files-grid-item.component.ts","src/app/drive/files/components/files-grid/files-grid-item/files-grid-item.component.html","src/app/drive/interactions/files-drag-select.service.ts","src/app/drive/interactions/drag-entry.service.ts","src/app/drive/interactions/drive-hammer-interactions.directive.ts","src/app/drive/interactions/toggle-selected-class.directive.ts","src/common/uploads/utils/read-uploaded-folders.ts","src/common/uploads/directives/upload-dropzone.directive.ts","src/common/core/ui/infinite-scroll/infinite.scroll.ts","src/app/drive/interactions/drive-infinite-scroll.directive.ts","src/app/drive/context-actions/components/drive-context-menu/drive-context-menu.component.ts","src/app/drive/context-actions/components/drive-context-menu/drive-context-menu.component.html","src/app/drive/drive-toolbar/entry-breadcrumbs/entry-breadcrumbs.component.html","src/app/drive/drive-toolbar/entry-breadcrumbs/entry-breadcrumbs.component.ts","src/app/drive/drive-toolbar/drive-toolbar.component.ts","src/app/drive/drive-toolbar/drive-toolbar.component.html","src/app/drive/entries/available-sorts.ts","src/app/drive/header/entries-sort-button/entries-sort-button.component.html","src/app/drive/header/entries-sort-button/entries-sort-button.component.ts","src/app/drive/context-actions/components/context-actions-container/context-actions-container.component.html","src/app/drive/context-actions/components/context-actions-container/context-actions-container.component.ts","src/app/drive/drive-toolbar/toolbar-actions/toolbar-actions.component.ts","src/app/drive/drive-toolbar/toolbar-actions/toolbar-actions.component.html","src/app/drive/header/file-list-header/file-list-header.component.ts","src/app/drive/header/file-list-header/file-list-header.component.html","src/app/drive/drive.component.html","src/app/drive/drive.component.ts","src/app/drive/files/components/files-grid/files-grid.component.html","src/app/drive/files/components/files-grid/files-grid.component.ts","src/app/drive/files/components/files-list/files-list.component.html","src/app/drive/files/components/files-list/files-list.component.ts","src/app/drive/messages/no-recent-entries/no-recent-entries.component.ts","src/app/drive/messages/no-recent-entries/no-recent-entries.component.html","src/app/drive/messages/no-trashed-entries/no-trashed-entries.component.ts","src/app/drive/messages/no-trashed-entries/no-trashed-entries.component.html","src/app/drive/messages/no-starred-entries/no-starred-entries.component.ts","src/app/drive/messages/no-starred-entries/no-starred-entries.component.html","src/app/drive/sharing/no-shared-entries/no-shared-entries.component.ts","src/app/drive/sharing/no-shared-entries/no-shared-entries.component.html","src/app/drive/messages/no-search-entries/no-search-entries.component.html","src/app/drive/messages/no-search-entries/no-search-entries.component.ts","src/app/drive/uploads/upload-dropzone/upload-dropzone.component.ts","src/app/drive/uploads/upload-dropzone/upload-dropzone.component.html","src/app/drive/messages/no-folder-entries/no-folder-entries.component.ts","src/app/drive/messages/no-folder-entries/no-folder-entries.component.html","src/app/drive/entries/entries-container/entries-container.component.html","src/app/drive/entries/entries-container/entries-container.component.ts","src/common/file-preview/current-preview-file.ts","src/common/file-preview/preview-url-transformer.ts","src/common/file-preview/base-file-preview.ts","src/common/file-preview/default-preview/default-preview.component.html","src/common/file-preview/default-preview/default-preview.component.ts","src/common/file-preview/text-preview/text-preview.component.html","src/common/file-preview/text-preview/text-preview.component.ts","src/common/file-preview/audio-preview/audio-preview.component.html","src/common/file-preview/audio-preview/audio-preview.component.ts","src/common/file-preview/video-preview/video-preview.component.html","src/common/file-preview/video-preview/video-preview.component.ts","src/common/file-preview/image-preview/image-preview.component.ts","src/common/file-preview/image-preview/image-preview.component.html","src/common/file-preview/pdf-preview/pdf-preview.component.ts","src/common/file-preview/pdf-preview/pdf-preview.component.html","src/common/file-preview/google-docs-viewer/google-docs-viewer.component.html","src/common/file-preview/google-docs-viewer/google-docs-viewer.component.ts","src/common/file-preview/available-previews.ts","src/common/file-preview/preview-files.service.ts","src/app/drive/preview/link-preview-container/link-preview-password-panel/link-preview-password-panel.component.html","src/app/drive/preview/link-preview-container/link-preview-password-panel/link-preview-password-panel.component.ts","src/app/drive/preview/file-preview-overlay/file-preview-toolbar/file-preview-toolbar.component.html","src/app/drive/preview/file-preview-overlay/file-preview-toolbar/file-preview-toolbar.component.ts","src/common/file-preview/preview-container/preview-container.component.html","src/common/file-preview/preview-container/preview-container.component.ts","src/app/drive/preview/file-preview-overlay/file-preview-overlay.component.html","src/app/drive/preview/file-preview-overlay/file-preview-overlay.component.ts","src/app/drive/preview/folder-preview/folder-preview.component.html","src/app/drive/preview/folder-preview/folder-preview.component.ts","src/app/drive/preview/link-preview-container/link-preview-container.component.html","src/app/drive/preview/link-preview-container/link-preview-container.component.ts","src/app/drive/drive-routing.module.ts","node_modules/@angular/material/__ivy_ngcc__/fesm2015/progress-spinner.js","src/app/drive/context-actions/drive-context-menus.ts","src/app/drive/state/handlers/overlay-handler.ts","src/app/drive/state/handlers/donwlod-handler.ts","src/app/drive/messages/loading-toast/loading-toast.component.ts","src/app/drive/messages/loading-toast/loading-toast.component.html","src/app/drive/state/handlers/toast-handler.ts","src/app/drive/uploads/uploads-panel/uploads-panel-item/uploads-panel-item.component.html","src/app/drive/uploads/uploads-panel/uploads-panel-item/uploads-panel-item.component.ts","src/app/drive/uploads/uploads-panel/uploads-panel.component.html","src/app/drive/uploads/uploads-panel/uploads-panel.component.ts","src/app/drive/drive.module.ts","src/app/drive/state/handlers/upload-panel-handler.ts","src/app/drive/state/handlers/dialog-handler.ts","src/app/drive/sharing/sharing.module.ts","src/app/drive/state/handlers/reset-scroll-handler.ts","src/app/drive/state/handlers/page-change-handler.ts","src/app/drive/state/handlers/page-load-handler.ts","src/app/drive/state/handlers/remove-star-handler.ts","src/common/core/ui/context-menu/context-menu.module.ts","src/common/file-preview/file-preview.module.ts","src/common/workspaces/workspace-selector/workspace-selector.module.ts","src/common/admin/file-entry-index/file-entry-index-filters.ts","src/common/auth/find-user-modal/find-user-modal.component.html","src/common/auth/find-user-modal/find-user-modal.component.ts","src/common/core/keybinds/keycodes.enum.ts","src/common/core/keybinds/keybinds.service.ts","src/common/core/ui/chips/chip-input/chip-input.component.html","src/common/core/ui/chips/chip-input/chip-input.component.ts","src/common/core/ui/chips/chips.module.ts","src/common/core/ui/skeleton/skeleton-animations.ts","src/common/core/ui/skeleton/skeleton.component.ts","src/common/core/ui/skeleton/skeleton.module.ts","src/common/core/utils/has-key.ts","src/common/core/utils/remove-null-from-object.ts","src/common/datatable/datatable-filters/search-input-with-filters/filter-config/datatable-filter.ts","src/common/datatable/datatable-filters/search-input-with-filters/filter-config/timestamp-filter.ts","src/common/datatable/datatable-filters/search-input-with-filters/filter-suggestions/filter-suggestions.component.html","src/common/datatable/datatable-filters/search-input-with-filters/filter-suggestions/filter-suggestions.component.ts","src/common/datatable/datatable-filters/search-input-with-filters/active-filters/select-model-control/select-model-control.component.html","src/common/datatable/datatable-filters/search-input-with-filters/active-filters/select-model-control/select-model-control.component.ts","src/common/datatable/datatable-filters/filter-operator-names.ts","src/common/datatable/datatable-filters/search-input-with-filters/active-filters/operator-select/operator-display-name.pipe.ts","src/common/datatable/datatable-filters/search-input-with-filters/active-filters/operator-select/operator-select.component.html","src/common/datatable/datatable-filters/search-input-with-filters/active-filters/operator-select/operator-select.component.ts","src/common/datatable/datatable-filters/search-input-with-filters/active-filters/active-filter/active-filter.component.html","src/common/datatable/datatable-filters/search-input-with-filters/active-filters/active-filter/active-filter.component.ts","src/common/datatable/datatable-filters/search-input-with-filters/active-filters/active-filters.component.html","src/common/datatable/datatable-filters/search-input-with-filters/active-filters/active-filters.component.ts","src/common/datatable/datatable-filters/search-input-with-filters/search-input-with-filters.component.html","src/common/datatable/datatable-filters/search-input-with-filters/search-input-with-filters.component.ts","src/common/datatable/datatable-filters/search-input-with-filters/search-input-with-filters.module.ts","src/common/datatable/datatable.module.ts","src/common/shared/paginator.service.ts","src/common/datatable/utils/sort-datatable-data.ts","src/common/datatable/utils/filter-datatable-data.ts","src/common/datatable/datatable.service.ts","src/common/datatable/delete-resource-message.ts","src/common/datatable/table-sort-header/table-sort-header.component.ts","src/common/datatable/table-sort-header/table-sort-header.component.html","src/common/uploads/directives/upload-button.directive.ts","src/common/uploads/formatted-file-size.pipe.ts","src/common/uploads/upload-queue/upload-queue-item.ts","src/common/uploads/validation/default-upload-validator.ts","src/common/uploads/upload-queue/upload-queue.service.ts","src/common/uploads/uploads.module.ts","src/common/uploads/utils/download-file-from-url.ts","src/common/uploads/validation/validations/allowed-extensions-validation.ts","src/common/uploads/validation/validations/blocked-extensions-validation.ts","src/common/workspaces/workspace-config.ts","src/common/workspaces/workspaces.service.ts","src/common/workspaces/types/workspace-invite-notif.ts"],"names":["_c0","MatAutocomplete_ng_template_0_Template","rf","ctx","ɵngcc0","formFieldId_r1","id","ctx_r0","_classList","ariaLabel","_getPanelAriaLabelledby","_c1","_uniqueAutocompleteIdCounter","MatAutocompleteSelectedEvent","constructor","source","option","this","_MatAutocompleteMixinBase","mixinDisableRipple","MatAutocompleteBase","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS","InjectionToken","providedIn","factory","autoActiveFirstOption","_MatAutocompleteBase","_changeDetectorRef","_elementRef","defaults","platform","super","_activeOptionChanges","Subscription","showPanel","_isOpen","displayWith","optionSelected","EventEmitter","opened","closed","optionActivated","inertGroups","SAFARI","_autoActiveFirstOption","value","coerceBooleanProperty","length","coerceStringArray","reduce","classList","className","_setVisibilityClasses","nativeElement","ngAfterContentInit","_keyManager","ActiveDescendantKeyManager","options","withWrap","change","subscribe","index","emit","toArray","_setVisibility","ngOnDestroy","unsubscribe","_setScrollTop","scrollTop","panel","_getScrollTop","markForCheck","_emitSelectEvent","event","labelId","ariaLabelledby","_visibleClass","_hiddenClass","ɵfac","t","ɵngcc1","ɵdir","type","viewQuery","_t","TemplateRef","template","first","inputs","panelWidth","outputs","features","MatAutocomplete","ɵMatAutocomplete_BaseFactory","arguments","ɵcmp","selectors","contentQueries","dirIndex","MAT_OPTGROUP","MatOption","optionGroups","hostAttrs","disableRipple","exportAs","provide","MAT_OPTION_PARENT_COMPONENT","useExisting","ngContentSelectors","decls","vars","consts","directives","ɵngcc2","styles","encapsulation","changeDetection","MAT_AUTOCOMPLETE_SCROLL_STRATEGY","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER","deps","Overlay","useFactory","overlay","scrollStrategies","reposition","MAT_AUTOCOMPLETE_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","MatAutocompleteTrigger","multi","_MatAutocompleteTriggerBase","_element","_overlay","_viewContainerRef","_zone","scrollStrategy","_dir","_formField","_document","_viewportRuler","_defaults","_componentDestroyed","_autocompleteDisabled","_manuallyFloatingLabel","_viewportSubscription","_canOpenOnNextFocus","_closeKeyEventStream","Subject","_windowBlurHandler","activeElement","panelOpen","_onChange","_onTouched","position","autocompleteAttribute","_overlayAttached","optionSelections","defer","autocomplete","merge","map","onSelectionChange","onStable","pipe","take","switchMap","_scrollStrategy","newScrollPosition","ngAfterViewInit","window","_getWindow","runOutsideAngular","addEventListener","ngOnChanges","changes","_positionStrategy","_setStrategyPositions","_overlayRef","updatePosition","removeEventListener","_destroyPanel","complete","openPanel","_attachOverlay","_floatLabel","closePanel","_resetLabel","hasAttached","detach","_closingActionsSubscription","detectChanges","tabOut","filter","_getOutsideClickStream","detachments","of","MatOptionSelectionChange","activeItem","fromEvent","clickTarget","_isInsideShadowRoot","composedPath","target","formField","customOrigin","connectedTo","elementRef","contains","overlayElement","writeValue","Promise","resolve","then","_setTriggerValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","disabled","_handleKeydown","keyCode","ESCAPE","hasModifierKey","preventDefault","activeOption","ENTER","_selectViaInteraction","_resetActiveItem","prevActiveItem","isArrowKey","UP_ARROW","DOWN_ARROW","TAB","onKeydown","_canOpen","_scrollToOption","activeItemIndex","_handleInput","parseFloat","_previousValue","_handleFocus","shouldAnimate","floatLabel","_animateAndLockLabel","_subscribeToClosingActions","firstStable","optionChanges","tap","reapplyLastPosition","delay","wasOpen","panelClosingActions","_setValueAndClose","dispose","toDisplay","inputValue","_control","_clearPreviousSelectedOption","focus","skip","forEach","selected","deselect","_a","_getShadowRoot","overlayRef","setOrigin","_getConnectedElement","updateSize","width","_getPanelWidth","_portal","TemplatePortal","getLabelId","create","_getOverlayConfig","keydownEvents","next","stopPropagation","attach","OverlayConfig","positionStrategy","_getOverlayPosition","direction","panelClass","overlayPanelClass","strategy","flexibleConnectedTo","withFlexibleDimensions","withPush","positions","belowPositions","originX","originY","overlayX","overlayY","_aboveClass","abovePositions","withPositions","getConnectedOverlayOrigin","_getHostWidth","getBoundingClientRect","setFirstItemActive","setActiveItem","element","readOnly","defaultView","labelCount","_countGroupLabelsBeforeOption","_getHostElement","_getOptionScrollPosition","offsetTop","offsetHeight","ɵngcc3","ɵngcc4","MAT_FORM_FIELD","DOCUMENT","ɵngcc5","autocompleteDisabled","ɵMatAutocompleteTrigger_BaseFactory","hostVars","hostBindings","$event","toString","MatAutocompleteModule","ɵmod","ɵinj","providers","imports","OverlayModule","MatOptionModule","MatCommonModule","CommonModule","CdkScrollableModule","MAT_CHIP_REMOVE","MAT_CHIP_AVATAR","MAT_CHIP_TRAILING_ICON","_MatChipMixinBase","mixinTabIndex","mixinColor","MatChip","_ngZone","globalRippleOptions","animationMode","tabIndex","_hasFocus","chipListSelectable","_chipListMultiple","_chipListDisabled","_selected","_selectable","_disabled","_removable","_onFocus","_onBlur","selectionChange","destroyed","removed","_addHostClassName","_chipRippleTarget","createElement","add","appendChild","_chipRipple","RippleRenderer","setupTriggerEvents","rippleConfig","_animationsDisabled","parseInt","coercedValue","_dispatchSelectionChange","_value","textContent","selectable","hasAttribute","tagName","toLowerCase","chip","_removeTriggerEvents","select","selectViaInteraction","toggleSelected","isUserInput","remove","removable","_handleClick","DELETE","BACKSPACE","SPACE","_blur","run","MAT_RIPPLE_GLOBAL_OPTIONS","ANIMATION_MODULE_TYPE","avatar","trailingIcon","removeIcon","ariaSelected","color","MatChipRemove","_parentChip","nodeName","setAttribute","parentChip","MAT_CHIPS_DEFAULT_OPTIONS","_MatChipListMixinBase","mixinErrorState","_defaultErrorStateMatcher","_parentForm","_parentFormGroup","ngControl","nextUniqueId","MatChipListChange","MatChipList","controlType","_lastDestroyedChipIndex","_destroyed","_uid","_tabIndex","_userTabIndex","_multiple","_compareWith","o1","o2","_required","ariaOrientation","valueChange","valueAccessor","multiple","_selectionModel","empty","_syncChipsState","_initializeSelection","_chipInput","stateChanges","placeholder","_placeholder","focused","_hasFocusedChip","chips","FocusKeyManager","withVerticalOrientation","withHomeAndEnd","withHorizontalOrientation","takeUntil","dir","_allowFocusEscape","startWith","_resetChips","_updateTabIndex","_updateFocusForDestroyedChips","ngOnInit","SelectionModel","undefined","ngDoCheck","updateErrorState","_dropSubscriptions","registerInput","inputElement","setDescribedByIds","ids","_ariaDescribedby","join","_setSelectionByValue","onContainerClick","_originatesFromChip","_focusInput","_keydown","_isInputEmpty","setLastItemActive","newChipIndex","Math","min","_isValidIndex","_clearSelection","Array","isArray","currentValue","_selectValue","_sortValues","correspondingChip","find","clear","_propagateChanges","fallbackValue","valueToEmit","setTimeout","_markAsTouched","_listenToChipsFocus","_listenToChipsSelection","_listenToChipsRemoved","_chipFocusSubscription","_chipBlurSubscription","_chipSelectionSubscription","_chipRemoveSubscription","chipSelectionChanges","isSelected","chipFocusChanges","chipIndex","indexOf","updateActiveItem","chipBlurChanges","chipRemoveChanges","currentElement","parentElement","some","role","required","errorState","compareWith","errorStateMatcher","MatFormFieldControl","nextUniqueId$1","MatChipInput","_defaultOptions","_addOnBlur","separatorKeyCodes","chipEnd","_inputElement","_chipList","_emitChipEnd","addOnBlur","_focus","_isSeparatorKey","input","_onInput","Set","has","invalid","chipList","ɵ0","MatChipsModule","ErrorStateMatcher","useValue","MatFormFieldModule","ObserversModule","_c2","_c3","enterDuration","_c4","MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS","disableToggleValue","MAT_SLIDE_TOGGLE_VALUE_ACCESSOR","MatSlideToggle","MatSlideToggleChange","checked","_MatSlideToggleMixinBase","mixinDisabled","_focusMonitor","_animationMode","_","_uniqueId","_checked","name","labelPosition","toggleChange","monitor","focusOrigin","stopMonitoring","_onChangeEvent","_emitChangeEvent","_onInputClick","origin","focusVia","toggle","_onLabelTextChange","_thumbEl","_thumbBarEl","_r0","_r4","inputId","trim","_MatSlideToggleRequiredValidatorModule","MatSlideToggleModule","MatRippleModule","module","exports","equal","a","b","i","keys","RegExp","flags","valueOf","Object","prototype","hasOwnProperty","call","key","DataView","require","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","entries","entry","set","get","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","setCacheAdd","setCacheHas","SetCache","values","__data__","push","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","data","size","root","Symbol","Uint8Array","WeakMap","array","iteratee","predicate","resIndex","result","baseIndexOf","comparator","baseTimes","isArguments","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","String","offset","baseAssignValue","eq","object","objValue","copyObject","keysIn","defineProperty","arrayEach","assignValue","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","isMap","isObject","isSet","cloneableTags","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","tag","isFunc","stacked","subValue","props","objectCreate","baseCreate","proto","fromIndex","fromRight","castPath","toKey","path","arrayPush","keysFunc","symbolsFunc","getRawTag","objectToString","symToStringTag","toStringTag","baseFindIndex","baseIsNaN","strictIndexOf","baseGetTag","isObjectLike","baseIsEqualDeep","baseIsEqual","other","equalArrays","equalByTag","equalObjects","objectTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isFunction","isMasked","toSource","reIsHostCtor","reIsNative","Function","replace","test","isLength","typedArrayTags","baseMatches","baseMatchesProperty","identity","property","isPrototype","nativeKeys","nativeKeysIn","isProto","baseIsMatch","getMatchData","matchesStrictComparable","hasIn","isKey","isStrictComparable","baseGet","n","arrayMap","isSymbol","symbolProto","symbolToString","baseToString","func","arrayIncludes","arrayIncludesWith","cacheHas","createSet","setToArray","includes","isCommon","seen","outer","computed","seenIndex","cache","stringToPath","arrayBuffer","byteLength","freeExports","nodeType","freeModule","Buffer","allocUnsafe","buffer","slice","copy","cloneArrayBuffer","dataView","byteOffset","reFlags","regexp","exec","lastIndex","symbolValueOf","symbol","typedArray","isNew","newValue","getSymbols","getSymbolsIn","noop","getNative","e","arraySome","isPartial","arrLength","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","mapToArray","message","convert","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","freeGlobal","global","baseGetAllKeys","isKeyable","baseIsNative","getValue","getPrototype","getPrototypeOf","objectProto","nativeObjectToString","isOwn","unmasked","arrayFilter","stubArray","propertyIsEnumerable","nativeGetSymbols","getOwnPropertySymbols","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ArrayBuffer","Ctor","ctorString","hasFunc","nativeCreate","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","reIsUint","reIsDeepProp","reIsPlainProp","uid","coreJsData","maskSrcKey","IE_PROTO","assocIndexOf","splice","pop","getMapData","memoize","freeProcess","process","nodeUtil","types","binding","transform","arg","freeSelf","self","pairs","LARGE_ARRAY_SIZE","memoizeCapped","rePropName","reEscapeChar","string","charCodeAt","match","number","quote","subString","funcToString","CLONE_DEEP_FLAG","defaultValue","baseHasIn","hasPath","baseIsArguments","stubFalse","baseIsMap","baseUnary","nodeIsMap","baseIsSet","nodeIsSet","baseIsTypedArray","nodeIsTypedArray","arrayLikeKeys","baseKeys","isArrayLike","baseKeysIn","resolver","TypeError","memoized","args","apply","Cache","baseProperty","basePropertyDeep","baseIteratee","baseUniq","defaultThrottleConfig","leading","trailing","throttleTime","duration","scheduler","async","config","lift","ThrottleTimeOperator","subscriber","ThrottleTimeSubscriber","destination","_hasTrailingValue","_trailingValue","_next","throttled","schedule","dispatchNext","_complete","clearThrottle","Subscriber","LoadUserFolders","LoadUserSpaceUsage","BuildFolderTree","folders","OpenFolder","folder","OpenSearchPage","queryParams","SelectEntries","SelectAllEntries","DeselectAllEntries","DeleteSelectedEntries","OpenUploadsPanel","CloseUploadsPanel","AddEntries","MoveEntries","OpenDialog","dialog","OpenConfirmDialog","confirmAction","SetViewMode","mode","ToggleDetailsSidebar","ToggleSidebar","UploadFiles","files","RestoreTrashedEntries","DeleteTrashedEntriesForever","EmptyTrash","OpenFilePreview","DownloadEntries","link","password","AddStar","RemoveStar","RemoveEntries","LoadMoreEntries","loadMore","ReloadPageEntries","page","CopySelectedEntries","OpenUploadWindow","ShowLoadingToast","HideLoadingToast","ResetState","UpdateEntries","SetCurrentUser","user","SetWorkspace","workspace","UpdateEntryDescription","description","DrivePage","params","viewName","folderHash","hasActions","sortColumn","sortDirection","RECENT_PAGE","disableSort","recentOnly","SEARCH_PAGE","SHARES_PAGE","sharedOnly","TRASH_PAGE","deletedOnly","WORKSPACE_INDEX_PAGE","STARRED_PAGE","starredOnly","FolderPage","hash","RecentEntriesPageOpened","orderBy","FolderPageOpened","SharesFolderOpened","TrashPageOpened","WorkspacesIndexPageOpened","SearchPageOpened","StarredPageOpened","EntriesSelectedViaDrag","EntrySelectedViaContextMenu","EntryTapped","ctrlKey","EntryDoubleTapped","FileDeleteSuccess","deletedFiles","EntryContextMenuOpened","NewFolderCreated","EntryRenamed","newName","StartedDragging","StoppedDragging","MoveEntriesSuccess","oldLocation","MoveEntriesFailed","messages","TrashedEntriesDeleteSuccess","TrashedEntriesRestoreSuccess","NotEnoughSpaceError","UserSpaceUsageChanged","BreakpointChanged","status","DRIVE_STATE_MODEL_DEFAULTS","isMobile","activePage","folderTree","flatFolders","userFoldersLoaded","selectedEntries","dragging","loading","uploadsPanelOpen","viewMode","detailsVisible","sidebarOpen","currentUser","activeWorkspace","spaceUsage","available","used","meta","currentPage","lastPage","LoadingToastMessages","DRIVE_UPLOAD_INPUT_CONFIG","FOLDERS_API_ROUTES","FoldersApiService","http","GET_ALL","post","CREATE","DriveEntryApiService","userId","entryId","put","emptyTrash","entryIds","DriveUrlsService","driveRoot","DriveUploadValidator","DEFAULT_MAX_FILE_SIZE_MB","validations","maxSize","getMaxFileSize","i18n","allowedExtensions","getAllowedExtensions","blockedExtensions","getBlockedExtensions","extensions","settings","convertToBytes","getJson","DriveState","foldersApi","entriesApi","router","driveUrls","uploads","store","localStore","validator","workspaces","toast","uploadInputConfig","getAllForCurrentUser","response","patchState","rootFolder","dispatch","action","getState","tree","hashTable","len","children","treeHash","parent_id","parent","oldState","newState","orderDir","query","filters","transformQueryParams","getEntriesForFolder","state","concat","last_page","current_page","currentFolder","deleted_at","title","body","ok","navigate","current","alreadySelected","findIndex","curr","entryDoubleTapped","selectSnapshot","selectedEntryIds","actions","selectedEntryParent","canMoveEntriesTo","moveEntries","finalize","errResponse","errors","currentEntries","newEntries","newSize","sum","file_size","enoughSpaceLeftToUpload","destinationId","start","httpParams","parentId","fileEntry","all_parents","newEntry","deleteForever","restoredEntries","restore","addStar","tags","removeStar","removeTag","open","replacements","count","copyEntries","location","activeWorkspace$","directory","getSpaceUsage","mainEntries","updatedEntry","mainIndex","selectedIndex","update","setState","folderId","file","f","every","spaceUsed","spaceAvail","permission","folderUser","users","u","owns_entry","entry_permissions","activeFolder","userHasPermission","edit","workspace_id","member","is_owner","permissions","p","movingEntries","startsWith","cancelUncompleted","selectedEntry","selectedEntryOrActiveFolder","userSpaceUsed","userSpaceAvailable","SUPPORTED_ENTRY_TYPES","FileIconComponent","mime","split","EntryDragPreviewComponent","DRIVE_ENTRY_FULL_PERMISSIONS","view","download","SharesApiService","SetInitialUsers","UpdateUserPermissions","RemoveUser","SetUsers","ShareEntries","payload","ShareEntriesFailed","ShareDialogState","sharesApi","all","uniqueUsers","assign","varies","usersWithAccess","original","toggleUserLoading","changePermissions","updateUsers","detachUser","loadingUsers","shareEntries","updateEntriesInDriveStore","errorResponse","isLoading","newUsers","updatedEntries","SharingPermissionsButtonComponent","api","compact","updateUserPermissions","newPermissions","selectPermission","EntriesAccessTableComponent","x","ShareDialogComponent","dialogRef","actions$","destroyed$","suggestUserEmails","getAll","perPage","email","resetModel","bindToShareError","bindToShareModel","emails","shareModel","setErrorMessages","valueChanges","ShareableLinksApiService","linkId","LoadShareableLink","UpdateShareableLink","CreateShareableLink","DeleteShareableLink","ToggleOptionsPanel","LinkCopySuccess","ResetShareLinkState","defaultState","optionsPanelVisible","backendErrors","linkOptions","allowDownload","allowEdit","expiresAt","ShareLinkState","linksApi","entry_id","cachedLink","findByEntryId","autoCreate","LinkOptionsComponent","form","date","time","passwordVisible","expirationVisible","bindToLinkChange","getPayload","link$","hydrateExpirationForm","setValue","expires_at","patchValue","allow_edit","allow_download","parts","substr","Date","toJSON","saveChanges","toggleOptionsPanel","ShareLinkDialogComponent","shareableLink$","subscriptions","close","bindToOptionsPanelToggle","s","focusInput","getBaseUrl","sub","optionsVisible","network","image","url","base","href","left","innerWidth","top","innerHeight","document","getElementById","height","padding","opacity","overflow","CrupdateFolderDialogComponent","folderName","setErrors","confirm","FlatTreeControl","getLevel","isExpandable","trackBy","node","getDescendants","dataNode","results","dataNodes","expandAll","expansionModel","_trackByValue","expand","collapse","isExpanded","toggleDescendants","collapseDescendants","expandDescendants","collapseAll","toBeProcessed","CDK_TREE_NODE_OUTLET_NODE","CdkTreeNodeOutlet","viewContainer","_node","CdkTreeNodeOutletContext","$implicit","CdkTreeNodeDef","when","CdkTree","_differs","_onDestroy","_levels","viewChange","BehaviorSubject","end","Number","MAX_VALUE","nodeData","_dataSource","dataSource","_switchDataSource","_dataDiffer","_nodeOutlet","disconnect","_dataSubscription","ngAfterContentChecked","defaultNodeDefs","_nodeDefs","def","_defaultNodeDef","_observeRenderChanges","dataStream","isDataSource","connect","isObservable","renderNodeChanges","parentData","dataDiffer","diff","forEachOperation","item","adjustedPreviousIndex","currentIndex","previousIndex","insertNode","move","_getNodeDef","context","level","treeControl","createEmbeddedView","CdkTreeNode","mostRecentTreeNode","_tree","_dataChanges","_role","_data","_setRoleFromData","_setExpanded","_expanded","_isAriaExpanded","_parentNodeAriaLevel","nodeElement","coerceNumberProperty","getAttribute","cssUnitPattern","CdkTreeNodePadding","_treeNode","indentUnits","_indent","_setPadding","_level","_setLevelInput","indent","_setIndentInput","_paddingIndent","nodeLevel","forceChange","_currentPadding","paddingProp","resetProp","style","units","CdkTreeNodeToggle","_recursive","_toggle","recursive","CdkTreeModule","_MatTreeNodeMixinBase","MatTreeNode","MatTreeNodeDef","ɵMatTreeNodeDef_BaseFactory","MatTreeNodePadding","ɵMatTreeNodePadding_BaseFactory","MatTreeNodeOutlet","MatTree","ɵMatTree_BaseFactory","MatTreeNodeToggle","ɵMatTreeNodeToggle_BaseFactory","MatTreeModule","MatTreeFlattener","transformFunction","getChildren","_flattenNode","resultNodes","parentMap","flatNode","childrenNodes","_flattenChildren","child","childParentMap","flattenNodes","structuredData","expandFlattenedNodes","nodes","currentExpand","MatTreeFlatDataSource","_treeControl","_treeFlattener","initialData","_flattenedData","_expandedData","collectionViewer","changed","DataSource","FoldersTreeService","createTreeFlattener","createTreeControl","createTreeDataSource","items","flattener","transformer","control","expandable","AVAILABLE_CONTEXT_MENUS","ContextMenuRef","backdropClick","attachments","backdropElement","CONTEXT_MENU_DATA","ContextMenu","zone","injector","events","component","createOverlay","openContextMenu","portal","bindEventsToOverlay","removeLastOrigin","getMenuPositionStrategy","hasBackdrop","backdropClass","contextMenuElement","createOriginFromEvent","primary","lastOrigin","HTMLElement","EventTarget","clientY","offsetY","clientX","offsetX","ContextMenuDirective","el","contextMenu","_availableMenus","disableContextMenu","availableMenus","getMenuComponent","getMenuData","BaseDropTarget","subs","onDragStart","onDragEnd","enter","onDragEnter","leave","onDragLeave","classes","canDrop","active","removeDragOverClass","executeAction","FolderDropTargetDirective","FoldersTreeComponent","expanded","showRootNode","folderSelected","selectedFolderId$","sub1","userFolders","fs","sub2","MoveEntriesDialogComponent","destination$","loading$","canMove$","failure","success","RenameEntryDialogComponent","entryName","DriveContextActions","updateStatus","multipleEntriesSelected","allStarred","allSelectedEntriesStarred","onlyFoldersSelected","getSelectedFolder","getSelectedEntries","EntryActions","icon","showInCompact","execute","visible","hasPermission","autoFocus","separatorBefore","openUploadWindow","FolderActions","noopTrue","SharesActions","shares","TrashActions","bodyBold","TrashPageActions","DriveDomCacheService","MainSearchbarComponent","driveApi","currentUSer","label","operator","defaultOperator","searchControl","filterChange$","metaSub","searchEl","combineLatest","distinctUntilChanged","debounceTime","oldParams","inSearchPage","routerState","snapshot","openSearchPage","mapTo","MapToOperator","MapToSubscriber","MatDrawerContainer_div_0_Template","_r3","_onBackdropClicked","_isShowingBackdrop","MatDrawerContainer_mat_drawer_content_3_Template","MatSidenavContainer_div_0_Template","MatSidenavContainer_mat_sidenav_content_3_Template","_c5","matDrawerAnimations","transformDrawer","trigger","transition","animate","MAT_DRAWER_DEFAULT_AUTOSIZE","MAT_DRAWER_CONTAINER","MatDrawerContent","_container","scrollDispatcher","ngZone","_contentMarginChanges","CdkScrollable","MatDrawerContainer","_contentMargins","right","MatDrawer","_focusTrapFactory","_platform","_doc","_elementFocusedBeforeDrawerWasOpened","_enableAnimations","_position","_mode","_disableClose","_opened","_animationStarted","_animationEnd","_animationState","openedChange","_openedStream","o","openedStart","fromState","toState","_closedStream","closedStart","onPositionChanged","_modeChanged","_takeFocus","_isFocusWithinDrawer","_restoreFocus","disableClose","y","_updateFocusTrapState","_autoFocus","_focusTrap","focusInitialElementWhenReady","hasMovedFocus","_openedVia","blur","activeEl","isBrowser","destroy","openedVia","_closeViaBackdropClick","_setOpen","isOpen","restoreFocus","_getWidth","offsetWidth","enabled","_animationStartListener","_animationDoneListener","animation","viewportRuler","defaultAutosize","_drawers","QueryList","_doCheckSubject","_validateDrawers","updateContentMargins","_autosize","_start","_end","_backdropOverride","_userContent","_content","_allDrawers","drawer","reset","notifyOnChanges","_watchDrawerToggle","_watchDrawerPosition","_watchDrawerMode","_isDrawerOpen","_left","_right","_isPushed","_setContainerClass","onMicrotaskEmpty","isAdd","_closeModalDrawersViaBackdrop","_canHaveBackdrop","autosize","MatSidenavContent","changeDetectorRef","container","MatSidenavContainer","MatSidenav","ɵMatSidenav_BaseFactory","_fixedInViewport","_fixedTopGap","_fixedBottomGap","fixedInViewport","fixedTopGap","fixedBottomGap","ɵMatSidenavContainer_BaseFactory","MatSidenavModule","PlatformModule","SidebarActionButtonsComponent","openUploadsPanel","openNewFolderDialog","canUpload","AvailableSpaceIndicatorComponent","spaceUsedPercent","WorkspaceSelectorComponent","modal","vcr","cd","indexUserWorkspaces","m","WorkspaceModule","components","crupdateModal","viewContainerRef","manageMembers","menuTrigger","closeMenu","resource","afterClosed","confirmed","SidebarComponent","urls","openFolder","EntryDescriptionPanelComponent","editingDescription$","savingDescription$","textArea","queryList","FileThumbnailComponent","thumbnail","separator","DetailsPanelComponent","owner$","DetailsSidebarComponent","FilesGridItemComponent","driveEntry","FilesDragSelectService","initial","cacheClientRects","createSelectBox","bindScroll","gridElements","getGridElements","hammerToRelative","scrollCont","selectBox","lastPanEvent","resizeBox","removeSelectBox","dispatchSelectedAction","unbindScroll","newPos","getNewSelectorPosition","scrollAndRepositionSelector","selectIntersectingElements","tmp","x1","y1","x2","y2","bottom","area","rectToRelative","filesContRect","edge","reachedAreaEdge","scrollBy","scrollDiff","scrollValue","abs","scrollHeight","applyPosition","selectedBoxRect","gridItem","rect","center","dataset","filesCont","scrollContRect","from","querySelectorAll","scrollListener","DragEntryService","domCache","dragPreview","DriveHammerInteractionsDirective","dragSelect","dragEntry","bindToHammer","hammerManager","enable","createHammerManager","onPanStart","onPan","onPanEnd","onTap","onDoubleTap","Hammer","Manager","Tap","pan","Pan","doubleTap","taps","recognizeWith","on","gridElement","getEntryEl","panService","getEntryByEl","en","entryEl","srcEvent","metaKey","closest","ToggleSelectedClassDirective","els","readDirRecursive","readEntriesRecursive","createReader","childEntry","isDirectory","transformFileEntry","reader","allEntries","readEntries","fullPath","UploadDropzoneDirective","disableDropzoneClick","disableDropzone","uploadConfig","filesDropped","handleDragEnter","handleDragOver","handleDragLeave","handleDrop","clickButton","handleClick","removeClassesFromDropzone","emitUploadEvent","dropzoneDisabled","dataTransfer","dropEffect","newEl","elementFromPoint","kind","webkitGetAsEntry","hasFiles","InfiniteScroll","threshold","scrollSub","getScrollContainer","capture","passive","onScroll","canLoadMore","targetCanScroll","scrollY","documentElement","loadMoreItems","DriveInfiniteScrollDirective","canLoadMoreEntries","DriveContextMenuComponent","EntryBreadcrumbsComponent","breadcrumb","foldersLoaded","bindToActivePage","activePageSub","breadcrumbs","getRootBreadcrumb","folderPath","getBreadcrumbForFolder","allFolders","pathFolder","workspaceId","activeId$","ROOT_FOLDER_PAGE","userOwnsActiveFolder","generateBreadCrumb","DriveToolbarComponent","AVAILABLE_SORTS","DEFAULT_VALUE","column","EntriesSortButtonComponent","btnDisabled","availableSorts","sort$","propagateChange","sort","ContextActionsContainerComponent","hasMoreActions$","subscription","combined","setActions","moreActionsButton","getActions","setActionsForEntry","isOwner","userOwnsSelectedEntries","ToolbarActionsComponent","toggleViewMode","ToggleDetails","anythingSelected","detailsOpen","FileListHeaderComponent","sortFormControl","emitEvent","DriveComponent","route","localStorage","breakpoints","sub3","setViewMode","cacheDemoElements","observeBreakpointChanges","bindToWorkspace","getModel","model$","filesContainer","scrollContainer","observe","matches","w","bindToNotificationClick","toggleSidebar","uploadFiles","FilesGridComponent","disableInteractions","FilesListComponent","datatable","init","v","NoRecentEntriesComponent","NoTrashedEntriesComponent","NoStarredEntriesComponent","NoSharedEntriesComponent","NoSearchEntriesComponent","noQueryOrFilters$","UploadDropzoneComponent","NoFolderEntriesComponent","EntriesContainerComponent","keybinds","tabindex","keybindSub","listenOn","addWithPreventDefault","activePageName","entriesEmpty","CURRENT_PREVIEW_FILE","PREVIEW_URL_TRANSFORMER","BaseFilePreview","sanitizer","filePreviewWrapper","bypassSecurityTrustResourceUrl","getSrc","responseType","DefaultPreviewComponent","TextPreviewComponent","content$","fileTooLarge$","loadFileContents","getContents","content","AudioPreviewComponent","invalidMedia","canPlayVideo","src","player","play","canPlayType","playerEl","VideoPreviewComponent","ImagePreviewComponent","PdfPreviewComponent","GoogleDocsViewerComponent","showDefaultPreview$","showDefaultPreview","iframe","onload","clearTimeout","timeoutRef","stopLoading","getIframeSrc","reject","previewUrl","preview_token","getFullPreviewUrl","encodeURIComponent","AVAILABLE_PREVIEWS","DefaultPreviews","text","video","audio","pdf","spreadsheet","powerPoint","word","PreviewFilesService","availablePreviews","previewUriTransformer","asObservable","haveNext","updateMeta","updatePortal","havePrevious","newPointer","oldPointer","pointer","total","getCurrent","createInjector","activeFile","injectionTokens","LinkPreviewPasswordPanelComponent","links","passwordControl","passwordError$","passwordValid","checkPassword","handlePasswordCheck","submitPassword","previewFiles","FilePreviewToolbarComponent","showLogo","disableDownload","showCloseButton","PreviewContainerComponent","downloadSub","comp","instance","FilePreviewOverlayComponent","bindToDownload","previewContainer","optionsButton","shareableLink","closeOverlay","FolderPreviewComponent","linkApi","breadcrumb$","pagination$","loadChildren","generateBreadcrumb","setPagination","folderChildren","ent","activeEntry","hideMoreOptionsBtn","getEntry","openPreviewOverlay","makeLinkHash","subFolder","replaceChildren","order","findByHash","withEntries","pagination","onClick","LinkPreviewContainerComponent","data$","passwordPanelVisible$","linkChanged","setBackgroundClass","togglePasswordPanel","showPreview","importEntry","dashboardRoutes","canActivate","WorkspaceWrapperModule","DriveRoutingModule","MatProgressSpinner__svg_circle_1_Template","_spinnerAnimationLabel","_getStrokeDashOffset","_getStrokeCircumference","_getCircleStrokeWidth","_getCircleRadius","MatProgressSpinner__svg_circle_2_Template","ctx_r1","MatSpinner__svg_circle_1_Template","MatSpinner__svg_circle_2_Template","_MatProgressSpinnerMixinBase","MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS","diameter","MatProgressSpinner","_diameter","_fallbackAnimation","trackedDiameters","_diameters","_getSpinnerAnimationLabel","head","EDGE","TRIDENT","_noopAnimations","_forceAnimations","strokeWidth","_styleRoot","_attachStyleNode","_strokeWidth","max","_getViewBox","viewBox","PI","styleRoot","currentDiameter","diameters","diametersForElement","styleTag","_getAnimationText","strokeCircumference","MatSpinner","MatProgressSpinnerModule","DRIVE_CONTEXT_MENUS","OverlayHandler","DownloadHandler","getDownloadUrl","hashes","getEntryHashes","LoadingToastComponent","ToastHandler","entriesDeleted","entriesStarred","entriesUnstarred","entriesMoveFailed","folderCreated","entriesMoved","entriesDeletedForever","entriesRestoredFromTrash","entryRenamed","linkCopiedToClipboard","notEnoughSpace","loadingToast","onAction","oldName","toastRef","openComponent","dismiss","UploadsPanelItemComponent","uploadQueue","progress","upload","progress$","animationFrame","isEmpty","DriveModule","UploadsPanelComponent","activeUploads","minimized$","toggleMinimized","overlayConfig","mobilePosition","UploadPanelHandler","overlayPanel","closeUploadsPanel","uploadPanelRef","DialogHandler","openConfirmDialog","beforeClosed","SharingModule","ResetScrollHandler","scrollTo","PageChangeHandler","PageLoadHandler","urlAfterRedirects","isLoggedIn","getPageLoadAction","getPageUriParams","pageName","search","firstChild","uri","RemoveStarHandler","ContextMenuModule","FilePreviewModule","useClass","WorkspaceSelectorModule","STATE_HANDLERS","handler","ext","FILE_ENTRY_TYPE_FILTER","FILE_ENTRY_INDEX_FILTERS","FindUserModalComponent","searchFormControl","users$","searchUsers","normalizeUser","display_name","model_type","Keycodes","Keybinds","bindings","callback","keybind","parseKeybindString","keybindString","fireIfInputFocused","executeBindings","bindingMatches","toUpperCase","ctrl","shiftKey","shift","parsed","part","ChipInputComponent","emailsInput","selectMode","formControl","items$","suggestedValues$","suggestFn","bindToSearchControl","parseEmailsOnPaste","propagate","matAutocomplete","duplicate","findValueIndex","inputEl","filtered","clipboardData","getData","selection","getSelection","rangeCount","deleteFromDocument","addFromAutocomplete","ChipsModule","SKELETON_ANIMATIONS","SkeletonComponent","theme","variant","dark","isDarkMode","SkeletonModule","hasKey","val","removeNullFromObject","obj","DatatableFilter","FilterOperator","FilterControlType","Select","inputType","operators","componentData","ALL_PRIMITIVE_OPERATORS","ne","gt","gte","lt","lte","TimestampFilter","toISOString","CreatedAtFilter","UpdatedAtFilter","filterSelected","FilterSuggestionsComponent","originalOrder","anyFocused","k","filterKey","SelectModelControlComponent","value$","openSelectModelDialog","model","FILTER_OPERATOR_NAMES","doesntHave","OperatorDisplayNamePipe","isMobile$","OperatorSelectComponent","resizeSelect","ActiveFilterComponent","compareFilterValueFn","val1","val2","resizeInput","valueInput","ActiveFiltersComponent","fb","opts","group","controls","addControl","last","focusValueInput","removeControl","removeByKey","controlKey","getFocusedIndex","previous","SearchInputWithFiltersComponent","filterChange","inputFocus","filterBarHeight","filterDropdownVisible$","keyedFilters","haveFiltersOrQuery$","watchForSizeChanges","setFiltersFromQuery","setupKeybinds","subscribeToCloseActions","bindToFormValueChange","activeFilters","searchInput","closeActionsStream$","searchInputIsFocused","selectionStart","formData","encodeFilterFormData","ResizeObserver","contentRect","box","qp","decodeFilterString","filterValue","cursorAtStartOfSearchInput","focusLast","removeCurrentlyFocused","focusPrevious","getByIndex","lastIsFocused","cursorAtEndOfSearchInput","suggestions","toggleFilterDropdown","newIndex","focusItemAt","getFocusedFilter","addFilterFromDropdownClick","btoa","JSON","stringify","filterString","filtersFromQuery","parse","atob","decodeURIComponent","SearchInputWithFiltersModule","DatatableModule","Paginator","params$","paginatedOnce$","response$","dontUpdateQueryParams","perPageCacheKey","noResults$","r","userParams","currentQueryParams","per_page","paginate","cursor","next_cursor","prev_cursor","newPerPage","firstPagination","updateQueryParams","replaceUrl","sortingDataAccessor","sortHeaderId","numberValue","filterDatatableData","dataStr","objectToStr","transformedFilter","currentTerm","DatatableService","filters$","searchTerm$","staticParams$","paginator","ignoreNextParamChange","originalData$","selectedRows$","tableData","staticParams","connectToPaginator","initialSearchTerm","searchControlSub","mainSub","applyLocalTransforms","paginatorSub","pairwise","prev","infiniteScroll","valueA","valueB","valueAType","valueBType","comparatorResult","cmp","modifiedResource","DELETE_RESOURCE_MESSAGE","TableSortHeaderComponent","datable","focusMonitor","arrowVisible","arrowDirection","columnName","sortSub","onMouseLeave","getDirection","changeSort","UploadButtonDirective","filesSelected","FormattedFileSizePipe","precision","bytes","isNaN","isFinite","UploadQueueItem","queueId","canceled$","processing$","uploadedResponse$","ReplaySubject","percentage","error$","customData","uploadedFile","completed","setProgress","eta","DefaultUploadValidator","showToast","UploadQueueService","defaultValidator","uploads$","totalProgress$","uploadsAdded$","count$","pending","queueItem","c","uploadQueueItems","transformUploads","transformed","updateCount","mergeMap","uploadQueueItem","catchError","handleUploadFailure","bubbleError","throwError","E","handleUploadEvent","willProcessFiles","queueItemId","speed","totalBytes","completedBytes","updateTotalProgress","addError","cancel","activeUpload","validate","failed","errorMessage","updateProgress","completeUpload","msg","showLearnMoreButton","isAdmin","errorUpload","inProgress","UploadsModule","downloadFileFromUrl","click","removeChild","AllowedExtensionsValidation","extension","BlockedExtensionsValidation","WORKSPACE_CONFIG","PERSONAL_WORKSPACE","default","WorkspacesService","cookie","notifications","available$","getIdFromCookie","cookieName","BASE_URI","pushAndSelect","inviteId","roleId","memberId","member_id","clickedOnNotification$","notification","err","handleWorkspaceInviteClickError","deleteInvite","notif"],"mappings":"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","sourceRoot":"webpack:///","sourcesContent":["import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty, coerceStringArray } from '@angular/cdk/coercion';\nimport { Platform, _getShadowRoot } from '@angular/cdk/platform';\nimport { InjectionToken, EventEmitter, Directive, ChangeDetectorRef, ElementRef, Inject, ViewChild, TemplateRef, Input, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, forwardRef, ViewContainerRef, NgZone, Optional, Host, NgModule } from '@angular/core';\nimport { mixinDisableRipple, MAT_OPTION_PARENT_COMPONENT, MAT_OPTGROUP, MatOption, MatOptionSelectionChange, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MatOptionModule, MatCommonModule } from '@angular/material/core';\nimport { Subscription, Subject, defer, merge, of, fromEvent } from 'rxjs';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';\nimport { ViewportRuler, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ESCAPE, hasModifierKey, ENTER, UP_ARROW, DOWN_ARROW, TAB } from '@angular/cdk/keycodes';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormField, MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { take, switchMap, filter, map, tap, delay } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Autocomplete IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/platform';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from '@angular/cdk/overlay';\nimport * as ɵngcc4 from '@angular/cdk/bidi';\nimport * as ɵngcc5 from '@angular/cdk/scrolling';\nimport * as ɵngcc6 from '@angular/material/form-field';\n\nconst _c0 = [\"panel\"];\nfunction MatAutocomplete_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0, 1);\n ɵngcc0.ɵɵprojection(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const formFieldId_r1 = ctx.id;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"id\", ctx_r0.id)(\"ngClass\", ctx_r0._classList);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r0.ariaLabel || null)(\"aria-labelledby\", ctx_r0._getPanelAriaLabelledby(formFieldId_r1));\n} }\nconst _c1 = [\"*\"];\nlet _uniqueAutocompleteIdCounter = 0;\n/** Event object that is emitted when an autocomplete option is selected. */\nclass MatAutocompleteSelectedEvent {\n constructor(\n /** Reference to the autocomplete panel that emitted the event. */\n source, \n /** Option that was selected. */\n option) {\n this.source = source;\n this.option = option;\n }\n}\n// Boilerplate for applying mixins to MatAutocomplete.\n/** @docs-private */\nclass MatAutocompleteBase {\n}\nconst _MatAutocompleteMixinBase = mixinDisableRipple(MatAutocompleteBase);\n/** Injection token to be used to override the default options for `mat-autocomplete`. */\nconst MAT_AUTOCOMPLETE_DEFAULT_OPTIONS = new InjectionToken('mat-autocomplete-default-options', {\n providedIn: 'root',\n factory: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY,\n});\n/** @docs-private */\nfunction MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY() {\n return { autoActiveFirstOption: false };\n}\n/** Base class with all of the `MatAutocomplete` functionality. */\nclass _MatAutocompleteBase extends _MatAutocompleteMixinBase {\n constructor(_changeDetectorRef, _elementRef, defaults, platform) {\n super();\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._activeOptionChanges = Subscription.EMPTY;\n /** Whether the autocomplete panel should be visible, depending on option length. */\n this.showPanel = false;\n this._isOpen = false;\n /** Function that maps an option's control value to its display value in the trigger. */\n this.displayWith = null;\n /** Event that is emitted whenever an option from the list is selected. */\n this.optionSelected = new EventEmitter();\n /** Event that is emitted when the autocomplete panel is opened. */\n this.opened = new EventEmitter();\n /** Event that is emitted when the autocomplete panel is closed. */\n this.closed = new EventEmitter();\n /** Emits whenever an option is activated using the keyboard. */\n this.optionActivated = new EventEmitter();\n this._classList = {};\n /** Unique ID to be used by autocomplete trigger's \"aria-owns\" property. */\n this.id = `mat-autocomplete-${_uniqueAutocompleteIdCounter++}`;\n // TODO(crisbeto): the problem that the `inertGroups` option resolves is only present on\n // Safari using VoiceOver. We should occasionally check back to see whether the bug\n // wasn't resolved in VoiceOver, and if it has, we can remove this and the `inertGroups`\n // option altogether.\n this.inertGroups = (platform === null || platform === void 0 ? void 0 : platform.SAFARI) || false;\n this._autoActiveFirstOption = !!defaults.autoActiveFirstOption;\n }\n /** Whether the autocomplete panel is open. */\n get isOpen() { return this._isOpen && this.showPanel; }\n /**\n * Whether the first option should be highlighted when the autocomplete panel is opened.\n * Can be configured globally through the `MAT_AUTOCOMPLETE_DEFAULT_OPTIONS` token.\n */\n get autoActiveFirstOption() { return this._autoActiveFirstOption; }\n set autoActiveFirstOption(value) {\n this._autoActiveFirstOption = coerceBooleanProperty(value);\n }\n /**\n * Takes classes set on the host mat-autocomplete element and applies them to the panel\n * inside the overlay container to allow for easy styling.\n */\n set classList(value) {\n if (value && value.length) {\n this._classList = coerceStringArray(value).reduce((classList, className) => {\n classList[className] = true;\n return classList;\n }, {});\n }\n else {\n this._classList = {};\n }\n this._setVisibilityClasses(this._classList);\n this._elementRef.nativeElement.className = '';\n }\n ngAfterContentInit() {\n this._keyManager = new ActiveDescendantKeyManager(this.options).withWrap();\n this._activeOptionChanges = this._keyManager.change.subscribe(index => {\n this.optionActivated.emit({ source: this, option: this.options.toArray()[index] || null });\n });\n // Set the initial visibility state.\n this._setVisibility();\n }\n ngOnDestroy() {\n this._activeOptionChanges.unsubscribe();\n }\n /**\n * Sets the panel scrollTop. This allows us to manually scroll to display options\n * above or below the fold, as they are not actually being focused when active.\n */\n _setScrollTop(scrollTop) {\n if (this.panel) {\n this.panel.nativeElement.scrollTop = scrollTop;\n }\n }\n /** Returns the panel's scrollTop. */\n _getScrollTop() {\n return this.panel ? this.panel.nativeElement.scrollTop : 0;\n }\n /** Panel should hide itself when the option list is empty. */\n _setVisibility() {\n this.showPanel = !!this.options.length;\n this._setVisibilityClasses(this._classList);\n this._changeDetectorRef.markForCheck();\n }\n /** Emits the `select` event. */\n _emitSelectEvent(option) {\n const event = new MatAutocompleteSelectedEvent(this, option);\n this.optionSelected.emit(event);\n }\n /** Gets the aria-labelledby for the autocomplete panel. */\n _getPanelAriaLabelledby(labelId) {\n if (this.ariaLabel) {\n return null;\n }\n const labelExpression = labelId ? labelId + ' ' : '';\n return this.ariaLabelledby ? labelExpression + this.ariaLabelledby : labelId;\n }\n /** Sets the autocomplete visibility classes on a classlist based on the panel is visible. */\n _setVisibilityClasses(classList) {\n classList[this._visibleClass] = this.showPanel;\n classList[this._hiddenClass] = !this.showPanel;\n }\n}\n_MatAutocompleteBase.ɵfac = function _MatAutocompleteBase_Factory(t) { return new (t || _MatAutocompleteBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Platform)); };\n_MatAutocompleteBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: _MatAutocompleteBase, viewQuery: function _MatAutocompleteBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(TemplateRef, 7);\n ɵngcc0.ɵɵviewQuery(_c0, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.panel = _t.first);\n } }, inputs: { displayWith: \"displayWith\", autoActiveFirstOption: \"autoActiveFirstOption\", classList: [\"class\", \"classList\"], ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], panelWidth: \"panelWidth\" }, outputs: { optionSelected: \"optionSelected\", opened: \"opened\", closed: \"closed\", optionActivated: \"optionActivated\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n_MatAutocompleteBase.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: ElementRef },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,] }] },\n { type: Platform }\n];\n_MatAutocompleteBase.propDecorators = {\n template: [{ type: ViewChild, args: [TemplateRef, { static: true },] }],\n panel: [{ type: ViewChild, args: ['panel',] }],\n ariaLabel: [{ type: Input, args: ['aria-label',] }],\n ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],\n displayWith: [{ type: Input }],\n autoActiveFirstOption: [{ type: Input }],\n panelWidth: [{ type: Input }],\n optionSelected: [{ type: Output }],\n opened: [{ type: Output }],\n closed: [{ type: Output }],\n optionActivated: [{ type: Output }],\n classList: [{ type: Input, args: ['class',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(_MatAutocompleteBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS]\n }] }, { type: ɵngcc1.Platform }]; }, { displayWith: [{\n type: Input\n }], optionSelected: [{\n type: Output\n }], opened: [{\n type: Output\n }], closed: [{\n type: Output\n }], optionActivated: [{\n type: Output\n }], autoActiveFirstOption: [{\n type: Input\n }], classList: [{\n type: Input,\n args: ['class']\n }], template: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], panel: [{\n type: ViewChild,\n args: ['panel']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], panelWidth: [{\n type: Input\n }] }); })();\nclass MatAutocomplete extends _MatAutocompleteBase {\n constructor() {\n super(...arguments);\n this._visibleClass = 'mat-autocomplete-visible';\n this._hiddenClass = 'mat-autocomplete-hidden';\n }\n}\nMatAutocomplete.ɵfac = /*@__PURE__*/ function () { let ɵMatAutocomplete_BaseFactory; return function MatAutocomplete_Factory(t) { return (ɵMatAutocomplete_BaseFactory || (ɵMatAutocomplete_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatAutocomplete)))(t || MatAutocomplete); }; }();\nMatAutocomplete.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatAutocomplete, selectors: [[\"mat-autocomplete\"]], contentQueries: function MatAutocomplete_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_OPTGROUP, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatOption, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.optionGroups = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.options = _t);\n } }, hostAttrs: [1, \"mat-autocomplete\"], inputs: { disableRipple: \"disableRipple\" }, exportAs: [\"matAutocomplete\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c1, decls: 1, vars: 0, consts: [[\"role\", \"listbox\", 1, \"mat-autocomplete-panel\", 3, \"id\", \"ngClass\"], [\"panel\", \"\"]], template: function MatAutocomplete_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵtemplate(0, MatAutocomplete_ng_template_0_Template, 3, 4, \"ng-template\");\n } }, directives: [ɵngcc2.NgClass], styles: [\".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}.mat-autocomplete-panel-above .mat-autocomplete-panel{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.mat-autocomplete-panel .mat-divider-horizontal{margin-top:-1px}.cdk-high-contrast-active .mat-autocomplete-panel{outline:solid 1px}mat-autocomplete{display:none}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatAutocomplete.propDecorators = {\n optionGroups: [{ type: ContentChildren, args: [MAT_OPTGROUP, { descendants: true },] }],\n options: [{ type: ContentChildren, args: [MatOption, { descendants: true },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatAutocomplete, [{\n type: Component,\n args: [{\n selector: 'mat-autocomplete',\n template: \"<ng-template let-formFieldId=\\\"id\\\">\\n <div class=\\\"mat-autocomplete-panel\\\"\\n role=\\\"listbox\\\"\\n [id]=\\\"id\\\"\\n [attr.aria-label]=\\\"ariaLabel || null\\\"\\n [attr.aria-labelledby]=\\\"_getPanelAriaLabelledby(formFieldId)\\\"\\n [ngClass]=\\\"_classList\\\"\\n #panel>\\n <ng-content></ng-content>\\n </div>\\n</ng-template>\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'matAutocomplete',\n inputs: ['disableRipple'],\n host: {\n 'class': 'mat-autocomplete'\n },\n providers: [\n { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatAutocomplete }\n ],\n styles: [\".mat-autocomplete-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;visibility:hidden;max-width:none;max-height:256px;position:relative;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.mat-autocomplete-panel.mat-autocomplete-visible{visibility:visible}.mat-autocomplete-panel.mat-autocomplete-hidden{visibility:hidden}.mat-autocomplete-panel-above .mat-autocomplete-panel{border-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.mat-autocomplete-panel .mat-divider-horizontal{margin-top:-1px}.cdk-high-contrast-active .mat-autocomplete-panel{outline:solid 1px}mat-autocomplete{display:none}\\n\"]\n }]\n }], null, { optionGroups: [{\n type: ContentChildren,\n args: [MAT_OPTGROUP, { descendants: true }]\n }], options: [{\n type: ContentChildren,\n args: [MatOption, { descendants: true }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Base class containing all of the functionality for `MatAutocompleteOrigin`. */\nclass _MatAutocompleteOriginBase {\n constructor(\n /** Reference to the element on which the directive is applied. */\n elementRef) {\n this.elementRef = elementRef;\n }\n}\n_MatAutocompleteOriginBase.ɵfac = function _MatAutocompleteOriginBase_Factory(t) { return new (t || _MatAutocompleteOriginBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\n_MatAutocompleteOriginBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: _MatAutocompleteOriginBase });\n_MatAutocompleteOriginBase.ctorParameters = () => [\n { type: ElementRef }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(_MatAutocompleteOriginBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, null); })();\n/**\n * Directive applied to an element to make it usable\n * as a connection point for an autocomplete panel.\n */\nclass MatAutocompleteOrigin extends _MatAutocompleteOriginBase {\n}\nMatAutocompleteOrigin.ɵfac = /*@__PURE__*/ function () { let ɵMatAutocompleteOrigin_BaseFactory; return function MatAutocompleteOrigin_Factory(t) { return (ɵMatAutocompleteOrigin_BaseFactory || (ɵMatAutocompleteOrigin_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatAutocompleteOrigin)))(t || MatAutocompleteOrigin); }; }();\nMatAutocompleteOrigin.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatAutocompleteOrigin, selectors: [[\"\", \"matAutocompleteOrigin\", \"\"]], exportAs: [\"matAutocompleteOrigin\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatAutocompleteOrigin, [{\n type: Directive,\n args: [{\n selector: '[matAutocompleteOrigin]',\n exportAs: 'matAutocompleteOrigin'\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The following style constants are necessary to save here in order\n * to properly calculate the scrollTop of the panel. Because we are not\n * actually focusing the active item, scroll must be handled manually.\n */\n/**\n * The height of each autocomplete option.\n * @deprecated No longer being used. To be removed.\n * @breaking-change 12.0.0\n */\nconst AUTOCOMPLETE_OPTION_HEIGHT = 48;\n/**\n * The total height of the autocomplete panel.\n * @deprecated No longer being used. To be removed.\n * @breaking-change 12.0.0\n */\nconst AUTOCOMPLETE_PANEL_HEIGHT = 256;\n/** Injection token that determines the scroll handling while the autocomplete panel is open. */\nconst MAT_AUTOCOMPLETE_SCROLL_STRATEGY = new InjectionToken('mat-autocomplete-scroll-strategy');\n/** @docs-private */\nfunction MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** @docs-private */\nconst MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY,\n};\n/**\n * Provider that allows the autocomplete to register as a ControlValueAccessor.\n * @docs-private\n */\nconst MAT_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatAutocompleteTrigger),\n multi: true\n};\n/**\n * Creates an error to be thrown when attempting to use an autocomplete trigger without a panel.\n * @docs-private\n */\nfunction getMatAutocompleteMissingPanelError() {\n return Error('Attempting to open an undefined instance of `mat-autocomplete`. ' +\n 'Make sure that the id passed to the `matAutocomplete` is correct and that ' +\n 'you\\'re attempting to open it after the ngAfterContentInit hook.');\n}\n/** Base class with all of the `MatAutocompleteTrigger` functionality. */\nclass _MatAutocompleteTriggerBase {\n constructor(_element, _overlay, _viewContainerRef, _zone, _changeDetectorRef, scrollStrategy, _dir, _formField, _document, _viewportRuler, _defaults) {\n this._element = _element;\n this._overlay = _overlay;\n this._viewContainerRef = _viewContainerRef;\n this._zone = _zone;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._formField = _formField;\n this._document = _document;\n this._viewportRuler = _viewportRuler;\n this._defaults = _defaults;\n this._componentDestroyed = false;\n this._autocompleteDisabled = false;\n /** Whether or not the label state is being overridden. */\n this._manuallyFloatingLabel = false;\n /** Subscription to viewport size changes. */\n this._viewportSubscription = Subscription.EMPTY;\n /**\n * Whether the autocomplete can open the next time it is focused. Used to prevent a focused,\n * closed autocomplete from being reopened if the user switches to another browser tab and then\n * comes back.\n */\n this._canOpenOnNextFocus = true;\n /** Stream of keyboard events that can close the panel. */\n this._closeKeyEventStream = new Subject();\n /**\n * Event handler for when the window is blurred. Needs to be an\n * arrow function in order to preserve the context.\n */\n this._windowBlurHandler = () => {\n // If the user blurred the window while the autocomplete is focused, it means that it'll be\n // refocused when they come back. In this case we want to skip the first focus event, if the\n // pane was closed, in order to avoid reopening it unintentionally.\n this._canOpenOnNextFocus =\n this._document.activeElement !== this._element.nativeElement || this.panelOpen;\n };\n /** `View -> model callback called when value changes` */\n this._onChange = () => { };\n /** `View -> model callback called when autocomplete has been touched` */\n this._onTouched = () => { };\n /**\n * Position of the autocomplete panel relative to the trigger element. A position of `auto`\n * will render the panel underneath the trigger if there is enough space for it to fit in\n * the viewport, otherwise the panel will be shown above it. If the position is set to\n * `above` or `below`, the panel will always be shown above or below the trigger. no matter\n * whether it fits completely in the viewport.\n */\n this.position = 'auto';\n /**\n * `autocomplete` attribute to be set on the input element.\n * @docs-private\n */\n this.autocompleteAttribute = 'off';\n this._overlayAttached = false;\n /** Stream of autocomplete option selections. */\n this.optionSelections = defer(() => {\n if (this.autocomplete && this.autocomplete.options) {\n return merge(...this.autocomplete.options.map(option => option.onSelectionChange));\n }\n // If there are any subscribers before `ngAfterViewInit`, the `autocomplete` will be undefined.\n // Return a stream that we'll replace with the real one once everything is in place.\n return this._zone.onStable\n .pipe(take(1), switchMap(() => this.optionSelections));\n });\n this._scrollStrategy = scrollStrategy;\n }\n /**\n * Whether the autocomplete is disabled. When disabled, the element will\n * act as a regular input and the user won't be able to open the panel.\n */\n get autocompleteDisabled() { return this._autocompleteDisabled; }\n set autocompleteDisabled(value) {\n this._autocompleteDisabled = coerceBooleanProperty(value);\n }\n ngAfterViewInit() {\n const window = this._getWindow();\n if (typeof window !== 'undefined') {\n this._zone.runOutsideAngular(() => window.addEventListener('blur', this._windowBlurHandler));\n }\n }\n ngOnChanges(changes) {\n if (changes['position'] && this._positionStrategy) {\n this._setStrategyPositions(this._positionStrategy);\n if (this.panelOpen) {\n this._overlayRef.updatePosition();\n }\n }\n }\n ngOnDestroy() {\n const window = this._getWindow();\n if (typeof window !== 'undefined') {\n window.removeEventListener('blur', this._windowBlurHandler);\n }\n this._viewportSubscription.unsubscribe();\n this._componentDestroyed = true;\n this._destroyPanel();\n this._closeKeyEventStream.complete();\n }\n /** Whether or not the autocomplete panel is open. */\n get panelOpen() {\n return this._overlayAttached && this.autocomplete.showPanel;\n }\n /** Opens the autocomplete suggestion panel. */\n openPanel() {\n this._attachOverlay();\n this._floatLabel();\n }\n /** Closes the autocomplete suggestion panel. */\n closePanel() {\n this._resetLabel();\n if (!this._overlayAttached) {\n return;\n }\n if (this.panelOpen) {\n // Only emit if the panel was visible.\n this.autocomplete.closed.emit();\n }\n this.autocomplete._isOpen = this._overlayAttached = false;\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n this._closingActionsSubscription.unsubscribe();\n }\n // Note that in some cases this can end up being called after the component is destroyed.\n // Add a check to ensure that we don't try to run change detection on a destroyed view.\n if (!this._componentDestroyed) {\n // We need to trigger change detection manually, because\n // `fromEvent` doesn't seem to do it at the proper time.\n // This ensures that the label is reset when the\n // user clicks outside.\n this._changeDetectorRef.detectChanges();\n }\n }\n /**\n * Updates the position of the autocomplete suggestion panel to ensure that it fits all options\n * within the viewport.\n */\n updatePosition() {\n if (this._overlayAttached) {\n this._overlayRef.updatePosition();\n }\n }\n /**\n * A stream of actions that should close the autocomplete panel, including\n * when an option is selected, on blur, and when TAB is pressed.\n */\n get panelClosingActions() {\n return merge(this.optionSelections, this.autocomplete._keyManager.tabOut.pipe(filter(() => this._overlayAttached)), this._closeKeyEventStream, this._getOutsideClickStream(), this._overlayRef ?\n this._overlayRef.detachments().pipe(filter(() => this._overlayAttached)) :\n of()).pipe(\n // Normalize the output so we return a consistent type.\n map(event => event instanceof MatOptionSelectionChange ? event : null));\n }\n /** The currently active option, coerced to MatOption type. */\n get activeOption() {\n if (this.autocomplete && this.autocomplete._keyManager) {\n return this.autocomplete._keyManager.activeItem;\n }\n return null;\n }\n /** Stream of clicks outside of the autocomplete panel. */\n _getOutsideClickStream() {\n return merge(fromEvent(this._document, 'click'), fromEvent(this._document, 'auxclick'), fromEvent(this._document, 'touchend'))\n .pipe(filter(event => {\n // If we're in the Shadow DOM, the event target will be the shadow root, so we have to\n // fall back to check the first element in the path of the click event.\n const clickTarget = (this._isInsideShadowRoot && event.composedPath ? event.composedPath()[0] :\n event.target);\n const formField = this._formField ? this._formField._elementRef.nativeElement : null;\n const customOrigin = this.connectedTo ? this.connectedTo.elementRef.nativeElement : null;\n return this._overlayAttached && clickTarget !== this._element.nativeElement &&\n (!formField || !formField.contains(clickTarget)) &&\n (!customOrigin || !customOrigin.contains(clickTarget)) &&\n (!!this._overlayRef && !this._overlayRef.overlayElement.contains(clickTarget));\n }));\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n Promise.resolve(null).then(() => this._setTriggerValue(value));\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._onChange = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this._element.nativeElement.disabled = isDisabled;\n }\n _handleKeydown(event) {\n const keyCode = event.keyCode;\n // Prevent the default action on all escape key presses. This is here primarily to bring IE\n // in line with other browsers. By default, pressing escape on IE will cause it to revert\n // the input value to the one that it had on focus, however it won't dispatch any events\n // which means that the model value will be out of sync with the view.\n if (keyCode === ESCAPE && !hasModifierKey(event)) {\n event.preventDefault();\n }\n if (this.activeOption && keyCode === ENTER && this.panelOpen) {\n this.activeOption._selectViaInteraction();\n this._resetActiveItem();\n event.preventDefault();\n }\n else if (this.autocomplete) {\n const prevActiveItem = this.autocomplete._keyManager.activeItem;\n const isArrowKey = keyCode === UP_ARROW || keyCode === DOWN_ARROW;\n if (this.panelOpen || keyCode === TAB) {\n this.autocomplete._keyManager.onKeydown(event);\n }\n else if (isArrowKey && this._canOpen()) {\n this.openPanel();\n }\n if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {\n this._scrollToOption(this.autocomplete._keyManager.activeItemIndex || 0);\n }\n }\n }\n _handleInput(event) {\n let target = event.target;\n let value = target.value;\n // Based on `NumberValueAccessor` from forms.\n if (target.type === 'number') {\n value = value == '' ? null : parseFloat(value);\n }\n // If the input has a placeholder, IE will fire the `input` event on page load,\n // focus and blur, in addition to when the user actually changed the value. To\n // filter out all of the extra events, we save the value on focus and between\n // `input` events, and we check whether it changed.\n // See: https://connect.microsoft.com/IE/feedback/details/885747/\n if (this._previousValue !== value) {\n this._previousValue = value;\n this._onChange(value);\n if (this._canOpen() && this._document.activeElement === event.target) {\n this.openPanel();\n }\n }\n }\n _handleFocus() {\n if (!this._canOpenOnNextFocus) {\n this._canOpenOnNextFocus = true;\n }\n else if (this._canOpen()) {\n this._previousValue = this._element.nativeElement.value;\n this._attachOverlay();\n this._floatLabel(true);\n }\n }\n /**\n * In \"auto\" mode, the label will animate down as soon as focus is lost.\n * This causes the value to jump when selecting an option with the mouse.\n * This method manually floats the label until the panel can be closed.\n * @param shouldAnimate Whether the label should be animated when it is floated.\n */\n _floatLabel(shouldAnimate = false) {\n if (this._formField && this._formField.floatLabel === 'auto') {\n if (shouldAnimate) {\n this._formField._animateAndLockLabel();\n }\n else {\n this._formField.floatLabel = 'always';\n }\n this._manuallyFloatingLabel = true;\n }\n }\n /** If the label has been manually elevated, return it to its normal state. */\n _resetLabel() {\n if (this._manuallyFloatingLabel) {\n this._formField.floatLabel = 'auto';\n this._manuallyFloatingLabel = false;\n }\n }\n /**\n * This method listens to a stream of panel closing actions and resets the\n * stream every time the option list changes.\n */\n _subscribeToClosingActions() {\n const firstStable = this._zone.onStable.pipe(take(1));\n const optionChanges = this.autocomplete.options.changes.pipe(tap(() => this._positionStrategy.reapplyLastPosition()), \n // Defer emitting to the stream until the next tick, because changing\n // bindings in here will cause \"changed after checked\" errors.\n delay(0));\n // When the zone is stable initially, and when the option list changes...\n return merge(firstStable, optionChanges)\n .pipe(\n // create a new stream of panelClosingActions, replacing any previous streams\n // that were created, and flatten it so our stream only emits closing events...\n switchMap(() => {\n const wasOpen = this.panelOpen;\n this._resetActiveItem();\n this.autocomplete._setVisibility();\n if (this.panelOpen) {\n this._overlayRef.updatePosition();\n // If the `panelOpen` state changed, we need to make sure to emit the `opened`\n // event, because we may not have emitted it when the panel was attached. This\n // can happen if the users opens the panel and there are no options, but the\n // options come in slightly later or as a result of the value changing.\n if (wasOpen !== this.panelOpen) {\n this.autocomplete.opened.emit();\n }\n }\n return this.panelClosingActions;\n }), \n // when the first closing event occurs...\n take(1))\n // set the value, close the panel, and complete.\n .subscribe(event => this._setValueAndClose(event));\n }\n /** Destroys the autocomplete suggestion panel. */\n _destroyPanel() {\n if (this._overlayRef) {\n this.closePanel();\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n _setTriggerValue(value) {\n const toDisplay = this.autocomplete && this.autocomplete.displayWith ?\n this.autocomplete.displayWith(value) :\n value;\n // Simply falling back to an empty string if the display value is falsy does not work properly.\n // The display value can also be the number zero and shouldn't fall back to an empty string.\n const inputValue = toDisplay != null ? toDisplay : '';\n // If it's used within a `MatFormField`, we should set it through the property so it can go\n // through change detection.\n if (this._formField) {\n this._formField._control.value = inputValue;\n }\n else {\n this._element.nativeElement.value = inputValue;\n }\n this._previousValue = inputValue;\n }\n /**\n * This method closes the panel, and if a value is specified, also sets the associated\n * control to that value. It will also mark the control as dirty if this interaction\n * stemmed from the user.\n */\n _setValueAndClose(event) {\n if (event && event.source) {\n this._clearPreviousSelectedOption(event.source);\n this._setTriggerValue(event.source.value);\n this._onChange(event.source.value);\n this._element.nativeElement.focus();\n this.autocomplete._emitSelectEvent(event.source);\n }\n this.closePanel();\n }\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n _clearPreviousSelectedOption(skip) {\n this.autocomplete.options.forEach(option => {\n if (option !== skip && option.selected) {\n option.deselect();\n }\n });\n }\n _attachOverlay() {\n var _a;\n if (!this.autocomplete && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatAutocompleteMissingPanelError();\n }\n // We want to resolve this once, as late as possible so that we can be\n // sure that the element has been moved into its final place in the DOM.\n if (this._isInsideShadowRoot == null) {\n this._isInsideShadowRoot = !!_getShadowRoot(this._element.nativeElement);\n }\n let overlayRef = this._overlayRef;\n if (!overlayRef) {\n this._portal = new TemplatePortal(this.autocomplete.template, this._viewContainerRef, { id: (_a = this._formField) === null || _a === void 0 ? void 0 : _a.getLabelId() });\n overlayRef = this._overlay.create(this._getOverlayConfig());\n this._overlayRef = overlayRef;\n // Use the `keydownEvents` in order to take advantage of\n // the overlay event targeting provided by the CDK overlay.\n overlayRef.keydownEvents().subscribe(event => {\n // Close when pressing ESCAPE or ALT + UP_ARROW, based on the a11y guidelines.\n // See: https://www.w3.org/TR/wai-aria-practices-1.1/#textbox-keyboard-interaction\n if ((event.keyCode === ESCAPE && !hasModifierKey(event)) ||\n (event.keyCode === UP_ARROW && hasModifierKey(event, 'altKey'))) {\n this._resetActiveItem();\n this._closeKeyEventStream.next();\n // We need to stop propagation, otherwise the event will eventually\n // reach the input itself and cause the overlay to be reopened.\n event.stopPropagation();\n event.preventDefault();\n }\n });\n this._viewportSubscription = this._viewportRuler.change().subscribe(() => {\n if (this.panelOpen && overlayRef) {\n overlayRef.updateSize({ width: this._getPanelWidth() });\n }\n });\n }\n else {\n // Update the trigger, panel width and direction, in case anything has changed.\n this._positionStrategy.setOrigin(this._getConnectedElement());\n overlayRef.updateSize({ width: this._getPanelWidth() });\n }\n if (overlayRef && !overlayRef.hasAttached()) {\n overlayRef.attach(this._portal);\n this._closingActionsSubscription = this._subscribeToClosingActions();\n }\n const wasOpen = this.panelOpen;\n this.autocomplete._setVisibility();\n this.autocomplete._isOpen = this._overlayAttached = true;\n // We need to do an extra `panelOpen` check in here, because the\n // autocomplete won't be shown if there are no options.\n if (this.panelOpen && wasOpen !== this.panelOpen) {\n this.autocomplete.opened.emit();\n }\n }\n _getOverlayConfig() {\n var _a;\n return new OverlayConfig({\n positionStrategy: this._getOverlayPosition(),\n scrollStrategy: this._scrollStrategy(),\n width: this._getPanelWidth(),\n direction: this._dir,\n panelClass: (_a = this._defaults) === null || _a === void 0 ? void 0 : _a.overlayPanelClass,\n });\n }\n _getOverlayPosition() {\n const strategy = this._overlay.position()\n .flexibleConnectedTo(this._getConnectedElement())\n .withFlexibleDimensions(false)\n .withPush(false);\n this._setStrategyPositions(strategy);\n this._positionStrategy = strategy;\n return strategy;\n }\n /** Sets the positions on a position strategy based on the directive's input state. */\n _setStrategyPositions(positionStrategy) {\n // Note that we provide horizontal fallback positions, even though by default the dropdown\n // width matches the input, because consumers can override the width. See #18854.\n const belowPositions = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' }\n ];\n // The overlay edge connected to the trigger should have squared corners, while\n // the opposite end has rounded corners. We apply a CSS class to swap the\n // border-radius based on the overlay position.\n const panelClass = this._aboveClass;\n const abovePositions = [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', panelClass },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', panelClass }\n ];\n let positions;\n if (this.position === 'above') {\n positions = abovePositions;\n }\n else if (this.position === 'below') {\n positions = belowPositions;\n }\n else {\n positions = [...belowPositions, ...abovePositions];\n }\n positionStrategy.withPositions(positions);\n }\n _getConnectedElement() {\n if (this.connectedTo) {\n return this.connectedTo.elementRef;\n }\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._element;\n }\n _getPanelWidth() {\n return this.autocomplete.panelWidth || this._getHostWidth();\n }\n /** Returns the width of the input element, so the panel width can match it. */\n _getHostWidth() {\n return this._getConnectedElement().nativeElement.getBoundingClientRect().width;\n }\n /**\n * Resets the active item to -1 so arrow events will activate the\n * correct options, or to 0 if the consumer opted into it.\n */\n _resetActiveItem() {\n const autocomplete = this.autocomplete;\n if (autocomplete.autoActiveFirstOption) {\n // Note that we go through `setFirstItemActive`, rather than `setActiveItem(0)`, because\n // the former will find the next enabled option, if the first one is disabled.\n autocomplete._keyManager.setFirstItemActive();\n }\n else {\n autocomplete._keyManager.setActiveItem(-1);\n }\n }\n /** Determines whether the panel can be opened. */\n _canOpen() {\n const element = this._element.nativeElement;\n return !element.readOnly && !element.disabled && !this._autocompleteDisabled;\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n var _a;\n return ((_a = this._document) === null || _a === void 0 ? void 0 : _a.defaultView) || window;\n }\n /** Scrolls to a particular option in the list. */\n _scrollToOption(index) {\n // Given that we are not actually focusing active options, we must manually adjust scroll\n // to reveal options below the fold. First, we find the offset of the option from the top\n // of the panel. If that offset is below the fold, the new scrollTop will be the offset -\n // the panel height + the option height, so the active option will be just visible at the\n // bottom of the panel. If that offset is above the top of the visible panel, the new scrollTop\n // will become the offset. If that offset is visible within the panel already, the scrollTop is\n // not adjusted.\n const autocomplete = this.autocomplete;\n const labelCount = _countGroupLabelsBeforeOption(index, autocomplete.options, autocomplete.optionGroups);\n if (index === 0 && labelCount === 1) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n autocomplete._setScrollTop(0);\n }\n else if (autocomplete.panel) {\n const option = autocomplete.options.toArray()[index];\n if (option) {\n const element = option._getHostElement();\n const newScrollPosition = _getOptionScrollPosition(element.offsetTop, element.offsetHeight, autocomplete._getScrollTop(), autocomplete.panel.nativeElement.offsetHeight);\n autocomplete._setScrollTop(newScrollPosition);\n }\n }\n }\n}\n_MatAutocompleteTriggerBase.ɵfac = function _MatAutocompleteTriggerBase_Factory(t) { return new (t || _MatAutocompleteTriggerBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Overlay), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(MAT_AUTOCOMPLETE_SCROLL_STRATEGY), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(MAT_FORM_FIELD, 9), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc5.ViewportRuler), ɵngcc0.ɵɵdirectiveInject(MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, 8)); };\n_MatAutocompleteTriggerBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: _MatAutocompleteTriggerBase, inputs: { position: [\"matAutocompletePosition\", \"position\"], autocompleteAttribute: [\"autocomplete\", \"autocompleteAttribute\"], autocompleteDisabled: [\"matAutocompleteDisabled\", \"autocompleteDisabled\"], autocomplete: [\"matAutocomplete\", \"autocomplete\"], connectedTo: [\"matAutocompleteConnectedTo\", \"connectedTo\"] }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n_MatAutocompleteTriggerBase.ctorParameters = () => [\n { type: ElementRef },\n { type: Overlay },\n { type: ViewContainerRef },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY,] }] },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: MatFormField, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD,] }, { type: Host }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: ViewportRuler },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,] }] }\n];\n_MatAutocompleteTriggerBase.propDecorators = {\n autocomplete: [{ type: Input, args: ['matAutocomplete',] }],\n position: [{ type: Input, args: ['matAutocompletePosition',] }],\n connectedTo: [{ type: Input, args: ['matAutocompleteConnectedTo',] }],\n autocompleteAttribute: [{ type: Input, args: ['autocomplete',] }],\n autocompleteDisabled: [{ type: Input, args: ['matAutocompleteDisabled',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(_MatAutocompleteTriggerBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc3.Overlay }, { type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY]\n }] }, { type: ɵngcc4.Directionality, decorators: [{\n type: Optional\n }] }, { type: ɵngcc6.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }, {\n type: Host\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc5.ViewportRuler }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_AUTOCOMPLETE_DEFAULT_OPTIONS]\n }] }]; }, { position: [{\n type: Input,\n args: ['matAutocompletePosition']\n }], autocompleteAttribute: [{\n type: Input,\n args: ['autocomplete']\n }], autocompleteDisabled: [{\n type: Input,\n args: ['matAutocompleteDisabled']\n }], autocomplete: [{\n type: Input,\n args: ['matAutocomplete']\n }], connectedTo: [{\n type: Input,\n args: ['matAutocompleteConnectedTo']\n }] }); })();\nclass MatAutocompleteTrigger extends _MatAutocompleteTriggerBase {\n constructor() {\n super(...arguments);\n this._aboveClass = 'mat-autocomplete-panel-above';\n }\n}\nMatAutocompleteTrigger.ɵfac = /*@__PURE__*/ function () { let ɵMatAutocompleteTrigger_BaseFactory; return function MatAutocompleteTrigger_Factory(t) { return (ɵMatAutocompleteTrigger_BaseFactory || (ɵMatAutocompleteTrigger_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatAutocompleteTrigger)))(t || MatAutocompleteTrigger); }; }();\nMatAutocompleteTrigger.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatAutocompleteTrigger, selectors: [[\"input\", \"matAutocomplete\", \"\"], [\"textarea\", \"matAutocomplete\", \"\"]], hostAttrs: [1, \"mat-autocomplete-trigger\"], hostVars: 7, hostBindings: function MatAutocompleteTrigger_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focusin\", function MatAutocompleteTrigger_focusin_HostBindingHandler() { return ctx._handleFocus(); })(\"blur\", function MatAutocompleteTrigger_blur_HostBindingHandler() { return ctx._onTouched(); })(\"input\", function MatAutocompleteTrigger_input_HostBindingHandler($event) { return ctx._handleInput($event); })(\"keydown\", function MatAutocompleteTrigger_keydown_HostBindingHandler($event) { return ctx._handleKeydown($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"autocomplete\", ctx.autocompleteAttribute)(\"role\", ctx.autocompleteDisabled ? null : \"combobox\")(\"aria-autocomplete\", ctx.autocompleteDisabled ? null : \"list\")(\"aria-activedescendant\", ctx.panelOpen && ctx.activeOption ? ctx.activeOption.id : null)(\"aria-expanded\", ctx.autocompleteDisabled ? null : ctx.panelOpen.toString())(\"aria-owns\", ctx.autocompleteDisabled || !ctx.panelOpen ? null : ctx.autocomplete == null ? null : ctx.autocomplete.id)(\"aria-haspopup\", !ctx.autocompleteDisabled);\n } }, exportAs: [\"matAutocompleteTrigger\"], features: [ɵngcc0.ɵɵProvidersFeature([MAT_AUTOCOMPLETE_VALUE_ACCESSOR]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatAutocompleteTrigger, [{\n type: Directive,\n args: [{\n selector: `input[matAutocomplete], textarea[matAutocomplete]`,\n host: {\n 'class': 'mat-autocomplete-trigger',\n '[attr.autocomplete]': 'autocompleteAttribute',\n '[attr.role]': 'autocompleteDisabled ? null : \"combobox\"',\n '[attr.aria-autocomplete]': 'autocompleteDisabled ? null : \"list\"',\n '[attr.aria-activedescendant]': '(panelOpen && activeOption) ? activeOption.id : null',\n '[attr.aria-expanded]': 'autocompleteDisabled ? null : panelOpen.toString()',\n '[attr.aria-owns]': '(autocompleteDisabled || !panelOpen) ? null : autocomplete?.id',\n '[attr.aria-haspopup]': '!autocompleteDisabled',\n // Note: we use `focusin`, as opposed to `focus`, in order to open the panel\n // a little earlier. This avoids issues where IE delays the focusing of the input.\n '(focusin)': '_handleFocus()',\n '(blur)': '_onTouched()',\n '(input)': '_handleInput($event)',\n '(keydown)': '_handleKeydown($event)'\n },\n exportAs: 'matAutocompleteTrigger',\n providers: [MAT_AUTOCOMPLETE_VALUE_ACCESSOR]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatAutocompleteModule {\n}\nMatAutocompleteModule.ɵfac = function MatAutocompleteModule_Factory(t) { return new (t || MatAutocompleteModule)(); };\nMatAutocompleteModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatAutocompleteModule });\nMatAutocompleteModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [[\n OverlayModule,\n MatOptionModule,\n MatCommonModule,\n CommonModule\n ], CdkScrollableModule,\n MatOptionModule,\n MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatAutocompleteModule, [{\n type: NgModule,\n args: [{\n imports: [\n OverlayModule,\n MatOptionModule,\n MatCommonModule,\n CommonModule\n ],\n exports: [\n MatAutocomplete,\n MatAutocompleteTrigger,\n MatAutocompleteOrigin,\n CdkScrollableModule,\n MatOptionModule,\n MatCommonModule,\n ],\n declarations: [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin],\n providers: [MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatAutocompleteModule, { declarations: function () { return [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin]; }, imports: function () { return [OverlayModule,\n MatOptionModule,\n MatCommonModule,\n CommonModule]; }, exports: function () { return [MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteOrigin, CdkScrollableModule,\n MatOptionModule,\n MatCommonModule]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AUTOCOMPLETE_OPTION_HEIGHT, AUTOCOMPLETE_PANEL_HEIGHT, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS, MAT_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY, MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_AUTOCOMPLETE_VALUE_ACCESSOR, MatAutocomplete, MatAutocompleteModule, MatAutocompleteOrigin, MatAutocompleteSelectedEvent, MatAutocompleteTrigger, _MatAutocompleteBase, _MatAutocompleteOriginBase, _MatAutocompleteTriggerBase, getMatAutocompleteMissingPanelError };\n\n//# sourceMappingURL=autocomplete.js.map","import { SPACE, BACKSPACE, DELETE, TAB, hasModifierKey, ENTER } from '@angular/cdk/keycodes';\nimport { InjectionToken, Directive, EventEmitter, ElementRef, NgZone, Optional, Inject, ChangeDetectorRef, Attribute, ContentChild, Input, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, Self, ContentChildren, NgModule } from '@angular/core';\nimport { mixinTabIndex, mixinColor, mixinDisableRipple, RippleRenderer, MAT_RIPPLE_GLOBAL_OPTIONS, mixinErrorState, ErrorStateMatcher, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subject, merge } from 'rxjs';\nimport { take, takeUntil, startWith } from 'rxjs/operators';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { NgForm, FormGroupDirective, NgControl } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Event object emitted by MatChip when selected or deselected. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/platform';\nimport * as ɵngcc2 from '@angular/cdk/bidi';\nimport * as ɵngcc3 from '@angular/forms';\nimport * as ɵngcc4 from '@angular/material/core';\n\nconst _c0 = [\"*\"];\nclass MatChipSelectionChange {\n constructor(\n /** Reference to the chip that emitted the event. */\n source, \n /** Whether the chip that emitted the event is selected. */\n selected, \n /** Whether the selection change was a result of a user interaction. */\n isUserInput = false) {\n this.source = source;\n this.selected = selected;\n this.isUserInput = isUserInput;\n }\n}\n/**\n * Injection token that can be used to reference instances of `MatChipRemove`. It serves as\n * alternative token to the actual `MatChipRemove` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_CHIP_REMOVE = new InjectionToken('MatChipRemove');\n/**\n * Injection token that can be used to reference instances of `MatChipAvatar`. It serves as\n * alternative token to the actual `MatChipAvatar` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_CHIP_AVATAR = new InjectionToken('MatChipAvatar');\n/**\n * Injection token that can be used to reference instances of `MatChipTrailingIcon`. It serves as\n * alternative token to the actual `MatChipTrailingIcon` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_CHIP_TRAILING_ICON = new InjectionToken('MatChipTrailingIcon');\n// Boilerplate for applying mixins to MatChip.\n/** @docs-private */\nclass MatChipBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatChipMixinBase = mixinTabIndex(mixinColor(mixinDisableRipple(MatChipBase), 'primary'), -1);\n/**\n * Dummy directive to add CSS class to chip avatar.\n * @docs-private\n */\nclass MatChipAvatar {\n}\nMatChipAvatar.ɵfac = function MatChipAvatar_Factory(t) { return new (t || MatChipAvatar)(); };\nMatChipAvatar.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatChipAvatar, selectors: [[\"mat-chip-avatar\"], [\"\", \"matChipAvatar\", \"\"]], hostAttrs: [1, \"mat-chip-avatar\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: MAT_CHIP_AVATAR, useExisting: MatChipAvatar }])] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatChipAvatar, [{\n type: Directive,\n args: [{\n selector: 'mat-chip-avatar, [matChipAvatar]',\n host: { 'class': 'mat-chip-avatar' },\n providers: [{ provide: MAT_CHIP_AVATAR, useExisting: MatChipAvatar }]\n }]\n }], null, null); })();\n/**\n * Dummy directive to add CSS class to chip trailing icon.\n * @docs-private\n */\nclass MatChipTrailingIcon {\n}\nMatChipTrailingIcon.ɵfac = function MatChipTrailingIcon_Factory(t) { return new (t || MatChipTrailingIcon)(); };\nMatChipTrailingIcon.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatChipTrailingIcon, selectors: [[\"mat-chip-trailing-icon\"], [\"\", \"matChipTrailingIcon\", \"\"]], hostAttrs: [1, \"mat-chip-trailing-icon\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: MAT_CHIP_TRAILING_ICON, useExisting: MatChipTrailingIcon }])] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatChipTrailingIcon, [{\n type: Directive,\n args: [{\n selector: 'mat-chip-trailing-icon, [matChipTrailingIcon]',\n host: { 'class': 'mat-chip-trailing-icon' },\n providers: [{ provide: MAT_CHIP_TRAILING_ICON, useExisting: MatChipTrailingIcon }]\n }]\n }], null, null); })();\n/**\n * Material design styled Chip component. Used inside the MatChipList component.\n */\nclass MatChip extends _MatChipMixinBase {\n constructor(_elementRef, _ngZone, platform, globalRippleOptions, _changeDetectorRef, _document, animationMode, tabIndex) {\n super(_elementRef);\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n /** Whether the chip has focus. */\n this._hasFocus = false;\n /** Whether the chip list is selectable */\n this.chipListSelectable = true;\n /** Whether the chip list is in multi-selection mode. */\n this._chipListMultiple = false;\n /** Whether the chip list as a whole is disabled. */\n this._chipListDisabled = false;\n this._selected = false;\n this._selectable = true;\n this._disabled = false;\n this._removable = true;\n /** Emits when the chip is focused. */\n this._onFocus = new Subject();\n /** Emits when the chip is blured. */\n this._onBlur = new Subject();\n /** Emitted when the chip is selected or deselected. */\n this.selectionChange = new EventEmitter();\n /** Emitted when the chip is destroyed. */\n this.destroyed = new EventEmitter();\n /** Emitted when a chip is to be removed. */\n this.removed = new EventEmitter();\n this._addHostClassName();\n // Dynamically create the ripple target, append it within the chip, and use it as the\n // chip's ripple target. Adding the class '.mat-chip-ripple' ensures that it will have\n // the proper styles.\n this._chipRippleTarget = _document.createElement('div');\n this._chipRippleTarget.classList.add('mat-chip-ripple');\n this._elementRef.nativeElement.appendChild(this._chipRippleTarget);\n this._chipRipple = new RippleRenderer(this, _ngZone, this._chipRippleTarget, platform);\n this._chipRipple.setupTriggerEvents(_elementRef);\n this.rippleConfig = globalRippleOptions || {};\n this._animationsDisabled = animationMode === 'NoopAnimations';\n this.tabIndex = tabIndex != null ? (parseInt(tabIndex) || -1) : -1;\n }\n /**\n * Whether ripples are disabled on interaction\n * @docs-private\n */\n get rippleDisabled() {\n return this.disabled || this.disableRipple || this._animationsDisabled ||\n !!this.rippleConfig.disabled;\n }\n /** Whether the chip is selected. */\n get selected() { return this._selected; }\n set selected(value) {\n const coercedValue = coerceBooleanProperty(value);\n if (coercedValue !== this._selected) {\n this._selected = coercedValue;\n this._dispatchSelectionChange();\n }\n }\n /** The value of the chip. Defaults to the content inside `<mat-chip>` tags. */\n get value() {\n return this._value !== undefined\n ? this._value\n : this._elementRef.nativeElement.textContent;\n }\n set value(value) { this._value = value; }\n /**\n * Whether or not the chip is selectable. When a chip is not selectable,\n * changes to its selected state are always ignored. By default a chip is\n * selectable, and it becomes non-selectable if its parent chip list is\n * not selectable.\n */\n get selectable() { return this._selectable && this.chipListSelectable; }\n set selectable(value) {\n this._selectable = coerceBooleanProperty(value);\n }\n /** Whether the chip is disabled. */\n get disabled() { return this._chipListDisabled || this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n }\n /**\n * Determines whether or not the chip displays the remove styling and emits (removed) events.\n */\n get removable() { return this._removable; }\n set removable(value) {\n this._removable = coerceBooleanProperty(value);\n }\n /** The ARIA selected applied to the chip. */\n get ariaSelected() {\n // Remove the `aria-selected` when the chip is deselected in single-selection mode, because\n // it adds noise to NVDA users where \"not selected\" will be read out for each chip.\n return this.selectable && (this._chipListMultiple || this.selected) ?\n this.selected.toString() : null;\n }\n _addHostClassName() {\n const basicChipAttrName = 'mat-basic-chip';\n const element = this._elementRef.nativeElement;\n if (element.hasAttribute(basicChipAttrName) ||\n element.tagName.toLowerCase() === basicChipAttrName) {\n element.classList.add(basicChipAttrName);\n return;\n }\n else {\n element.classList.add('mat-standard-chip');\n }\n }\n ngOnDestroy() {\n this.destroyed.emit({ chip: this });\n this._chipRipple._removeTriggerEvents();\n }\n /** Selects the chip. */\n select() {\n if (!this._selected) {\n this._selected = true;\n this._dispatchSelectionChange();\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Deselects the chip. */\n deselect() {\n if (this._selected) {\n this._selected = false;\n this._dispatchSelectionChange();\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Select this chip and emit selected event */\n selectViaInteraction() {\n if (!this._selected) {\n this._selected = true;\n this._dispatchSelectionChange(true);\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Toggles the current selected state of this chip. */\n toggleSelected(isUserInput = false) {\n this._selected = !this.selected;\n this._dispatchSelectionChange(isUserInput);\n this._changeDetectorRef.markForCheck();\n return this.selected;\n }\n /** Allows for programmatic focusing of the chip. */\n focus() {\n if (!this._hasFocus) {\n this._elementRef.nativeElement.focus();\n this._onFocus.next({ chip: this });\n }\n this._hasFocus = true;\n }\n /**\n * Allows for programmatic removal of the chip. Called by the MatChipList when the DELETE or\n * BACKSPACE keys are pressed.\n *\n * Informs any listeners of the removal request. Does not remove the chip from the DOM.\n */\n remove() {\n if (this.removable) {\n this.removed.emit({ chip: this });\n }\n }\n /** Handles click events on the chip. */\n _handleClick(event) {\n if (this.disabled) {\n event.preventDefault();\n }\n else {\n event.stopPropagation();\n }\n }\n /** Handle custom key presses. */\n _handleKeydown(event) {\n if (this.disabled) {\n return;\n }\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE:\n // If we are removable, remove the focused chip\n this.remove();\n // Always prevent so page navigation does not occur\n event.preventDefault();\n break;\n case SPACE:\n // If we are selectable, toggle the focused chip\n if (this.selectable) {\n this.toggleSelected(true);\n }\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n }\n }\n _blur() {\n // When animations are enabled, Angular may end up removing the chip from the DOM a little\n // earlier than usual, causing it to be blurred and throwing off the logic in the chip list\n // that moves focus not the next item. To work around the issue, we defer marking the chip\n // as not focused until the next time the zone stabilizes.\n this._ngZone.onStable\n .pipe(take(1))\n .subscribe(() => {\n this._ngZone.run(() => {\n this._hasFocus = false;\n this._onBlur.next({ chip: this });\n });\n });\n }\n _dispatchSelectionChange(isUserInput = false) {\n this.selectionChange.emit({\n source: this,\n isUserInput,\n selected: this._selected\n });\n }\n}\nMatChip.ɵfac = function MatChip_Factory(t) { return new (t || MatChip)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Platform), ɵngcc0.ɵɵdirectiveInject(MAT_RIPPLE_GLOBAL_OPTIONS, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵinjectAttribute('tabindex')); };\nMatChip.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatChip, selectors: [[\"mat-basic-chip\"], [\"\", \"mat-basic-chip\", \"\"], [\"mat-chip\"], [\"\", \"mat-chip\", \"\"]], contentQueries: function MatChip_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_CHIP_AVATAR, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_CHIP_TRAILING_ICON, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_CHIP_REMOVE, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.avatar = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.trailingIcon = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.removeIcon = _t.first);\n } }, hostAttrs: [\"role\", \"option\", 1, \"mat-chip\", \"mat-focus-indicator\"], hostVars: 14, hostBindings: function MatChip_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function MatChip_click_HostBindingHandler($event) { return ctx._handleClick($event); })(\"keydown\", function MatChip_keydown_HostBindingHandler($event) { return ctx._handleKeydown($event); })(\"focus\", function MatChip_focus_HostBindingHandler() { return ctx.focus(); })(\"blur\", function MatChip_blur_HostBindingHandler() { return ctx._blur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? null : ctx.tabIndex)(\"disabled\", ctx.disabled || null)(\"aria-disabled\", ctx.disabled.toString())(\"aria-selected\", ctx.ariaSelected);\n ɵngcc0.ɵɵclassProp(\"mat-chip-selected\", ctx.selected)(\"mat-chip-with-avatar\", ctx.avatar)(\"mat-chip-with-trailing-icon\", ctx.trailingIcon || ctx.removeIcon)(\"mat-chip-disabled\", ctx.disabled)(\"_mat-animation-noopable\", ctx._animationsDisabled);\n } }, inputs: { color: \"color\", disableRipple: \"disableRipple\", tabIndex: \"tabIndex\", selected: \"selected\", value: \"value\", selectable: \"selectable\", disabled: \"disabled\", removable: \"removable\" }, outputs: { selectionChange: \"selectionChange\", destroyed: \"destroyed\", removed: \"removed\" }, exportAs: [\"matChip\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatChip.ctorParameters = () => [\n { type: ElementRef },\n { type: NgZone },\n { type: Platform },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_RIPPLE_GLOBAL_OPTIONS,] }] },\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] }\n];\nMatChip.propDecorators = {\n avatar: [{ type: ContentChild, args: [MAT_CHIP_AVATAR,] }],\n trailingIcon: [{ type: ContentChild, args: [MAT_CHIP_TRAILING_ICON,] }],\n removeIcon: [{ type: ContentChild, args: [MAT_CHIP_REMOVE,] }],\n selected: [{ type: Input }],\n value: [{ type: Input }],\n selectable: [{ type: Input }],\n disabled: [{ type: Input }],\n removable: [{ type: Input }],\n selectionChange: [{ type: Output }],\n destroyed: [{ type: Output }],\n removed: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatChip, [{\n type: Directive,\n args: [{\n selector: `mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]`,\n inputs: ['color', 'disableRipple', 'tabIndex'],\n exportAs: 'matChip',\n host: {\n 'class': 'mat-chip mat-focus-indicator',\n '[attr.tabindex]': 'disabled ? null : tabIndex',\n 'role': 'option',\n '[class.mat-chip-selected]': 'selected',\n '[class.mat-chip-with-avatar]': 'avatar',\n '[class.mat-chip-with-trailing-icon]': 'trailingIcon || removeIcon',\n '[class.mat-chip-disabled]': 'disabled',\n '[class._mat-animation-noopable]': '_animationsDisabled',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-selected]': 'ariaSelected',\n '(click)': '_handleClick($event)',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': 'focus()',\n '(blur)': '_blur()'\n }\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc1.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RIPPLE_GLOBAL_OPTIONS]\n }] }, { type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, { selectionChange: [{\n type: Output\n }], destroyed: [{\n type: Output\n }], removed: [{\n type: Output\n }], selected: [{\n type: Input\n }], value: [{\n type: Input\n }], selectable: [{\n type: Input\n }], disabled: [{\n type: Input\n }], removable: [{\n type: Input\n }], avatar: [{\n type: ContentChild,\n args: [MAT_CHIP_AVATAR]\n }], trailingIcon: [{\n type: ContentChild,\n args: [MAT_CHIP_TRAILING_ICON]\n }], removeIcon: [{\n type: ContentChild,\n args: [MAT_CHIP_REMOVE]\n }] }); })();\n/**\n * Applies proper (click) support and adds styling for use with the Material Design \"cancel\" icon\n * available at https://material.io/icons/#ic_cancel.\n *\n * Example:\n *\n * `<mat-chip>\n * <mat-icon matChipRemove>cancel</mat-icon>\n * </mat-chip>`\n *\n * You *may* use a custom icon, but you may need to override the `mat-chip-remove` positioning\n * styles to properly center the icon within the chip.\n */\nclass MatChipRemove {\n constructor(_parentChip, elementRef) {\n this._parentChip = _parentChip;\n if (elementRef.nativeElement.nodeName === 'BUTTON') {\n elementRef.nativeElement.setAttribute('type', 'button');\n }\n }\n /** Calls the parent chip's public `remove()` method if applicable. */\n _handleClick(event) {\n const parentChip = this._parentChip;\n if (parentChip.removable && !parentChip.disabled) {\n parentChip.remove();\n }\n // We need to stop event propagation because otherwise the event will bubble up to the\n // form field and cause the `onContainerClick` method to be invoked. This method would then\n // reset the focused chip that has been focused after chip removal. Usually the parent\n // the parent click listener of the `MatChip` would prevent propagation, but it can happen\n // that the chip is being removed before the event bubbles up.\n event.stopPropagation();\n }\n}\nMatChipRemove.ɵfac = function MatChipRemove_Factory(t) { return new (t || MatChipRemove)(ɵngcc0.ɵɵdirectiveInject(MatChip), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nMatChipRemove.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatChipRemove, selectors: [[\"\", \"matChipRemove\", \"\"]], hostAttrs: [1, \"mat-chip-remove\", \"mat-chip-trailing-icon\"], hostBindings: function MatChipRemove_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function MatChipRemove_click_HostBindingHandler($event) { return ctx._handleClick($event); });\n } }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: MAT_CHIP_REMOVE, useExisting: MatChipRemove }])] });\nMatChipRemove.ctorParameters = () => [\n { type: MatChip },\n { type: ElementRef }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatChipRemove, [{\n type: Directive,\n args: [{\n selector: '[matChipRemove]',\n host: {\n 'class': 'mat-chip-remove mat-chip-trailing-icon',\n '(click)': '_handleClick($event)'\n },\n providers: [{ provide: MAT_CHIP_REMOVE, useExisting: MatChipRemove }]\n }]\n }], function () { return [{ type: MatChip }, { type: ɵngcc0.ElementRef }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token to be used to override the default options for the chips module. */\nconst MAT_CHIPS_DEFAULT_OPTIONS = new InjectionToken('mat-chips-default-options');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatChipList.\n/** @docs-private */\nclass MatChipListBase {\n constructor(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, \n /** @docs-private */\n ngControl) {\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this.ngControl = ngControl;\n }\n}\nconst _MatChipListMixinBase = mixinErrorState(MatChipListBase);\n// Increasing integer for generating unique ids for chip-list components.\nlet nextUniqueId = 0;\n/** Change event object that is emitted when the chip list value has changed. */\nclass MatChipListChange {\n constructor(\n /** Chip list that emitted the event. */\n source, \n /** Value of the chip list when the event was emitted. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n/**\n * A material design chips component (named ChipList for its similarity to the List component).\n */\nclass MatChipList extends _MatChipListMixinBase {\n constructor(_elementRef, _changeDetectorRef, _dir, _parentForm, _parentFormGroup, _defaultErrorStateMatcher, \n /** @docs-private */\n ngControl) {\n super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this.ngControl = ngControl;\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n this.controlType = 'mat-chip-list';\n /**\n * When a chip is destroyed, we store the index of the destroyed chip until the chips\n * query list notifies about the update. This is necessary because we cannot determine an\n * appropriate chip that should receive focus until the array of chips updated completely.\n */\n this._lastDestroyedChipIndex = null;\n /** Subject that emits when the component has been destroyed. */\n this._destroyed = new Subject();\n /** Uid of the chip list */\n this._uid = `mat-chip-list-${nextUniqueId++}`;\n /** Tab index for the chip list. */\n this._tabIndex = 0;\n /**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use _tabIndex\n */\n this._userTabIndex = null;\n /** Function when touched */\n this._onTouched = () => { };\n /** Function when changed */\n this._onChange = () => { };\n this._multiple = false;\n this._compareWith = (o1, o2) => o1 === o2;\n this._required = false;\n this._disabled = false;\n /** Orientation of the chip list. */\n this.ariaOrientation = 'horizontal';\n this._selectable = true;\n /** Event emitted when the selected chip list value has been changed by the user. */\n this.change = new EventEmitter();\n /**\n * Event that emits whenever the raw value of the chip-list changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n this.valueChange = new EventEmitter();\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n /** The array of selected chips inside chip list. */\n get selected() {\n return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];\n }\n /** The ARIA role applied to the chip list. */\n get role() { return this.empty ? null : 'listbox'; }\n /** Whether the user should be allowed to select multiple chips. */\n get multiple() { return this._multiple; }\n set multiple(value) {\n this._multiple = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n /**\n * A function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n get compareWith() { return this._compareWith; }\n set compareWith(fn) {\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get value() { return this._value; }\n set value(value) {\n this.writeValue(value);\n this._value = value;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get id() {\n return this._chipInput ? this._chipInput.id : this._uid;\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get required() { return this._required; }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get placeholder() {\n return this._chipInput ? this._chipInput.placeholder : this._placeholder;\n }\n set placeholder(value) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n /** Whether any chips or the matChipInput inside of this chip-list has focus. */\n get focused() {\n return (this._chipInput && this._chipInput.focused) || this._hasFocusedChip();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty() {\n return (!this._chipInput || this._chipInput.empty) && (!this.chips || this.chips.length === 0);\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() { return !this.empty || this.focused; }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get disabled() { return this.ngControl ? !!this.ngControl.disabled : this._disabled; }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._syncChipsState();\n }\n /**\n * Whether or not this chip list is selectable. When a chip list is not selectable,\n * the selected states for all the chips inside the chip list are always ignored.\n */\n get selectable() { return this._selectable; }\n set selectable(value) {\n this._selectable = coerceBooleanProperty(value);\n if (this.chips) {\n this.chips.forEach(chip => chip.chipListSelectable = this._selectable);\n }\n }\n set tabIndex(value) {\n this._userTabIndex = value;\n this._tabIndex = value;\n }\n /** Combined stream of all of the child chips' selection change events. */\n get chipSelectionChanges() {\n return merge(...this.chips.map(chip => chip.selectionChange));\n }\n /** Combined stream of all of the child chips' focus change events. */\n get chipFocusChanges() {\n return merge(...this.chips.map(chip => chip._onFocus));\n }\n /** Combined stream of all of the child chips' blur change events. */\n get chipBlurChanges() {\n return merge(...this.chips.map(chip => chip._onBlur));\n }\n /** Combined stream of all of the child chips' remove change events. */\n get chipRemoveChanges() {\n return merge(...this.chips.map(chip => chip.destroyed));\n }\n ngAfterContentInit() {\n this._keyManager = new FocusKeyManager(this.chips)\n .withWrap()\n .withVerticalOrientation()\n .withHomeAndEnd()\n .withHorizontalOrientation(this._dir ? this._dir.value : 'ltr');\n if (this._dir) {\n this._dir.change\n .pipe(takeUntil(this._destroyed))\n .subscribe(dir => this._keyManager.withHorizontalOrientation(dir));\n }\n this._keyManager.tabOut.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._allowFocusEscape();\n });\n // When the list changes, re-subscribe\n this.chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {\n if (this.disabled) {\n // Since this happens after the content has been\n // checked, we need to defer it to the next tick.\n Promise.resolve().then(() => {\n this._syncChipsState();\n });\n }\n this._resetChips();\n // Reset chips selected/deselected status\n this._initializeSelection();\n // Check to see if we need to update our tab index\n this._updateTabIndex();\n // Check to see if we have a destroyed chip and need to refocus\n this._updateFocusForDestroyedChips();\n this.stateChanges.next();\n });\n }\n ngOnInit() {\n this._selectionModel = new SelectionModel(this.multiple, undefined, false);\n this.stateChanges.next();\n }\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n if (this.ngControl.disabled !== this._disabled) {\n this.disabled = !!this.ngControl.disabled;\n }\n }\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this.stateChanges.complete();\n this._dropSubscriptions();\n }\n /** Associates an HTML input element with this chip list. */\n registerInput(inputElement) {\n this._chipInput = inputElement;\n // We use this attribute to match the chip list to its input in test harnesses.\n // Set the attribute directly here to avoid \"changed after checked\" errors.\n this._elementRef.nativeElement.setAttribute('data-mat-chip-input', inputElement.id);\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) { this._ariaDescribedby = ids.join(' '); }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n if (this.chips) {\n this._setSelectionByValue(value, false);\n }\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._onChange = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.stateChanges.next();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick(event) {\n if (!this._originatesFromChip(event)) {\n this.focus();\n }\n }\n /**\n * Focuses the first non-disabled chip in this chip list, or the associated input when there\n * are no eligible chips.\n */\n focus(options) {\n if (this.disabled) {\n return;\n }\n // TODO: ARIA says this should focus the first `selected` chip if any are selected.\n // Focus on first element if there's no chipInput inside chip-list\n if (this._chipInput && this._chipInput.focused) {\n // do nothing\n }\n else if (this.chips.length > 0) {\n this._keyManager.setFirstItemActive();\n this.stateChanges.next();\n }\n else {\n this._focusInput(options);\n this.stateChanges.next();\n }\n }\n /** Attempt to focus an input if we have one. */\n _focusInput(options) {\n if (this._chipInput) {\n this._chipInput.focus(options);\n }\n }\n /**\n * Pass events to the keyboard manager. Available here for tests.\n */\n _keydown(event) {\n const target = event.target;\n // If they are on an empty input and hit backspace, focus the last chip\n if (event.keyCode === BACKSPACE && this._isInputEmpty(target)) {\n this._keyManager.setLastItemActive();\n event.preventDefault();\n }\n else if (target && target.classList.contains('mat-chip')) {\n this._keyManager.onKeydown(event);\n this.stateChanges.next();\n }\n }\n /**\n * Check the tab index as you should not be allowed to focus an empty list.\n */\n _updateTabIndex() {\n // If we have 0 chips, we should not allow keyboard focus\n this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);\n }\n /**\n * If the amount of chips changed, we need to update the\n * key manager state and focus the next closest chip.\n */\n _updateFocusForDestroyedChips() {\n // Move focus to the closest chip. If no other chips remain, focus the chip-list itself.\n if (this._lastDestroyedChipIndex != null) {\n if (this.chips.length) {\n const newChipIndex = Math.min(this._lastDestroyedChipIndex, this.chips.length - 1);\n this._keyManager.setActiveItem(newChipIndex);\n }\n else {\n this.focus();\n }\n }\n this._lastDestroyedChipIndex = null;\n }\n /**\n * Utility to ensure all indexes are valid.\n *\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of chips.\n */\n _isValidIndex(index) {\n return index >= 0 && index < this.chips.length;\n }\n _isInputEmpty(element) {\n if (element && element.nodeName.toLowerCase() === 'input') {\n let input = element;\n return !input.value;\n }\n return false;\n }\n _setSelectionByValue(value, isUserInput = true) {\n this._clearSelection();\n this.chips.forEach(chip => chip.deselect());\n if (Array.isArray(value)) {\n value.forEach(currentValue => this._selectValue(currentValue, isUserInput));\n this._sortValues();\n }\n else {\n const correspondingChip = this._selectValue(value, isUserInput);\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what chip the user interacted with last.\n if (correspondingChip) {\n if (isUserInput) {\n this._keyManager.setActiveItem(correspondingChip);\n }\n }\n }\n }\n /**\n * Finds and selects the chip based on its value.\n * @returns Chip that has the corresponding value.\n */\n _selectValue(value, isUserInput = true) {\n const correspondingChip = this.chips.find(chip => {\n return chip.value != null && this._compareWith(chip.value, value);\n });\n if (correspondingChip) {\n isUserInput ? correspondingChip.selectViaInteraction() : correspondingChip.select();\n this._selectionModel.select(correspondingChip);\n }\n return correspondingChip;\n }\n _initializeSelection() {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl || this._value) {\n this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._value, false);\n this.stateChanges.next();\n }\n });\n }\n /**\n * Deselects every chip in the list.\n * @param skip Chip that should not be deselected.\n */\n _clearSelection(skip) {\n this._selectionModel.clear();\n this.chips.forEach(chip => {\n if (chip !== skip) {\n chip.deselect();\n }\n });\n this.stateChanges.next();\n }\n /**\n * Sorts the model values, ensuring that they keep the same\n * order that they have in the panel.\n */\n _sortValues() {\n if (this._multiple) {\n this._selectionModel.clear();\n this.chips.forEach(chip => {\n if (chip.selected) {\n this._selectionModel.select(chip);\n }\n });\n this.stateChanges.next();\n }\n }\n /** Emits change event to set the model value. */\n _propagateChanges(fallbackValue) {\n let valueToEmit = null;\n if (Array.isArray(this.selected)) {\n valueToEmit = this.selected.map(chip => chip.value);\n }\n else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n this._value = valueToEmit;\n this.change.emit(new MatChipListChange(this, valueToEmit));\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this._changeDetectorRef.markForCheck();\n }\n /** When blurred, mark the field as touched when focus moved outside the chip list. */\n _blur() {\n if (!this._hasFocusedChip()) {\n this._keyManager.setActiveItem(-1);\n }\n if (!this.disabled) {\n if (this._chipInput) {\n // If there's a chip input, we should check whether the focus moved to chip input.\n // If the focus is not moved to chip input, mark the field as touched. If the focus moved\n // to chip input, do nothing.\n // Timeout is needed to wait for the focus() event trigger on chip input.\n setTimeout(() => {\n if (!this.focused) {\n this._markAsTouched();\n }\n });\n }\n else {\n // If there's no chip input, then mark the field as touched.\n this._markAsTouched();\n }\n }\n }\n /** Mark the field as touched */\n _markAsTouched() {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n /**\n * Removes the `tabindex` from the chip list and resets it back afterwards, allowing the\n * user to tab out of it. This prevents the list from capturing focus and redirecting\n * it back to the first chip, creating a focus trap, if it user tries to tab away.\n */\n _allowFocusEscape() {\n if (this._tabIndex !== -1) {\n this._tabIndex = -1;\n setTimeout(() => {\n this._tabIndex = this._userTabIndex || 0;\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n _resetChips() {\n this._dropSubscriptions();\n this._listenToChipsFocus();\n this._listenToChipsSelection();\n this._listenToChipsRemoved();\n }\n _dropSubscriptions() {\n if (this._chipFocusSubscription) {\n this._chipFocusSubscription.unsubscribe();\n this._chipFocusSubscription = null;\n }\n if (this._chipBlurSubscription) {\n this._chipBlurSubscription.unsubscribe();\n this._chipBlurSubscription = null;\n }\n if (this._chipSelectionSubscription) {\n this._chipSelectionSubscription.unsubscribe();\n this._chipSelectionSubscription = null;\n }\n if (this._chipRemoveSubscription) {\n this._chipRemoveSubscription.unsubscribe();\n this._chipRemoveSubscription = null;\n }\n }\n /** Listens to user-generated selection events on each chip. */\n _listenToChipsSelection() {\n this._chipSelectionSubscription = this.chipSelectionChanges.subscribe(event => {\n event.source.selected\n ? this._selectionModel.select(event.source)\n : this._selectionModel.deselect(event.source);\n // For single selection chip list, make sure the deselected value is unselected.\n if (!this.multiple) {\n this.chips.forEach(chip => {\n if (!this._selectionModel.isSelected(chip) && chip.selected) {\n chip.deselect();\n }\n });\n }\n if (event.isUserInput) {\n this._propagateChanges();\n }\n });\n }\n /** Listens to user-generated selection events on each chip. */\n _listenToChipsFocus() {\n this._chipFocusSubscription = this.chipFocusChanges.subscribe(event => {\n let chipIndex = this.chips.toArray().indexOf(event.chip);\n if (this._isValidIndex(chipIndex)) {\n this._keyManager.updateActiveItem(chipIndex);\n }\n this.stateChanges.next();\n });\n this._chipBlurSubscription = this.chipBlurChanges.subscribe(() => {\n this._blur();\n this.stateChanges.next();\n });\n }\n _listenToChipsRemoved() {\n this._chipRemoveSubscription = this.chipRemoveChanges.subscribe(event => {\n const chip = event.chip;\n const chipIndex = this.chips.toArray().indexOf(event.chip);\n // In case the chip that will be removed is currently focused, we temporarily store\n // the index in order to be able to determine an appropriate sibling chip that will\n // receive focus.\n if (this._isValidIndex(chipIndex) && chip._hasFocus) {\n this._lastDestroyedChipIndex = chipIndex;\n }\n });\n }\n /** Checks whether an event comes from inside a chip element. */\n _originatesFromChip(event) {\n let currentElement = event.target;\n while (currentElement && currentElement !== this._elementRef.nativeElement) {\n if (currentElement.classList.contains('mat-chip')) {\n return true;\n }\n currentElement = currentElement.parentElement;\n }\n return false;\n }\n /** Checks whether any of the chips is focused. */\n _hasFocusedChip() {\n return this.chips && this.chips.some(chip => chip._hasFocus);\n }\n /** Syncs the list's state with the individual chips. */\n _syncChipsState() {\n if (this.chips) {\n this.chips.forEach(chip => {\n chip._chipListDisabled = this._disabled;\n chip._chipListMultiple = this.multiple;\n });\n }\n }\n}\nMatChipList.ɵfac = function MatChipList_Factory(t) { return new (t || MatChipList)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.NgForm, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.FormGroupDirective, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.ErrorStateMatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.NgControl, 10)); };\nMatChipList.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatChipList, selectors: [[\"mat-chip-list\"]], contentQueries: function MatChipList_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatChip, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.chips = _t);\n } }, hostAttrs: [1, \"mat-chip-list\"], hostVars: 15, hostBindings: function MatChipList_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function MatChipList_focus_HostBindingHandler() { return ctx.focus(); })(\"blur\", function MatChipList_blur_HostBindingHandler() { return ctx._blur(); })(\"keydown\", function MatChipList_keydown_HostBindingHandler($event) { return ctx._keydown($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"id\", ctx._uid);\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? null : ctx._tabIndex)(\"aria-describedby\", ctx._ariaDescribedby || null)(\"aria-required\", ctx.role ? ctx.required : null)(\"aria-disabled\", ctx.disabled.toString())(\"aria-invalid\", ctx.errorState)(\"aria-multiselectable\", ctx.multiple)(\"role\", ctx.role)(\"aria-orientation\", ctx.ariaOrientation);\n ɵngcc0.ɵɵclassProp(\"mat-chip-list-disabled\", ctx.disabled)(\"mat-chip-list-invalid\", ctx.errorState)(\"mat-chip-list-required\", ctx.required);\n } }, inputs: { ariaOrientation: [\"aria-orientation\", \"ariaOrientation\"], multiple: \"multiple\", compareWith: \"compareWith\", value: \"value\", required: \"required\", placeholder: \"placeholder\", disabled: \"disabled\", selectable: \"selectable\", tabIndex: \"tabIndex\", errorStateMatcher: \"errorStateMatcher\" }, outputs: { change: \"change\", valueChange: \"valueChange\" }, exportAs: [\"matChipList\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: MatFormFieldControl, useExisting: MatChipList }]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[1, \"mat-chip-list-wrapper\"]], template: function MatChipList_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, styles: [\".mat-chip{position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;transform:translateZ(0);border:none;-webkit-appearance:none;-moz-appearance:none}.mat-standard-chip{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:inline-flex;padding:7px 12px;border-radius:16px;align-items:center;cursor:default;min-height:32px;height:1px}._mat-animation-noopable.mat-standard-chip{transition:none;animation:none}.mat-standard-chip .mat-chip-remove.mat-icon{width:18px;height:18px}.mat-standard-chip::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;opacity:0;content:\\\"\\\";pointer-events:none;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-standard-chip:hover::after{opacity:.12}.mat-standard-chip:focus{outline:none}.mat-standard-chip:focus::after{opacity:.16}.cdk-high-contrast-active .mat-standard-chip{outline:solid 1px}.cdk-high-contrast-active .mat-standard-chip:focus{outline:dotted 2px}.mat-standard-chip.mat-chip-disabled::after{opacity:0}.mat-standard-chip.mat-chip-disabled .mat-chip-remove,.mat-standard-chip.mat-chip-disabled .mat-chip-trailing-icon{cursor:default}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar,.mat-standard-chip.mat-chip-with-avatar{padding-top:0;padding-bottom:0}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-right:8px;padding-left:0}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-left:8px;padding-right:0}.mat-standard-chip.mat-chip-with-trailing-icon{padding-top:7px;padding-bottom:7px;padding-right:8px;padding-left:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon{padding-left:8px;padding-right:12px}.mat-standard-chip.mat-chip-with-avatar{padding-left:0;padding-right:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-avatar{padding-right:0;padding-left:12px}.mat-standard-chip .mat-chip-avatar{width:24px;height:24px;margin-right:8px;margin-left:4px}[dir=rtl] .mat-standard-chip .mat-chip-avatar{margin-left:8px;margin-right:4px}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{width:18px;height:18px;cursor:pointer}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{margin-left:8px;margin-right:0}[dir=rtl] .mat-standard-chip .mat-chip-remove,[dir=rtl] .mat-standard-chip .mat-chip-trailing-icon{margin-right:8px;margin-left:0}.mat-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit;overflow:hidden}.mat-chip-list-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:-4px}.mat-chip-list-wrapper input.mat-input-element,.mat-chip-list-wrapper .mat-standard-chip{margin:4px}.mat-chip-list-stacked .mat-chip-list-wrapper{flex-direction:column;align-items:flex-start}.mat-chip-list-stacked .mat-chip-list-wrapper .mat-standard-chip{width:100%}.mat-chip-avatar{border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden;object-fit:cover}input.mat-chip-input{width:150px;margin:4px;flex:1 0 150px}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatChipList.ctorParameters = () => [\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: NgForm, decorators: [{ type: Optional }] },\n { type: FormGroupDirective, decorators: [{ type: Optional }] },\n { type: ErrorStateMatcher },\n { type: NgControl, decorators: [{ type: Optional }, { type: Self }] }\n];\nMatChipList.propDecorators = {\n errorStateMatcher: [{ type: Input }],\n multiple: [{ type: Input }],\n compareWith: [{ type: Input }],\n value: [{ type: Input }],\n required: [{ type: Input }],\n placeholder: [{ type: Input }],\n disabled: [{ type: Input }],\n ariaOrientation: [{ type: Input, args: ['aria-orientation',] }],\n selectable: [{ type: Input }],\n tabIndex: [{ type: Input }],\n change: [{ type: Output }],\n valueChange: [{ type: Output }],\n chips: [{ type: ContentChildren, args: [MatChip, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatChipList, [{\n type: Component,\n args: [{\n selector: 'mat-chip-list',\n template: `<div class=\"mat-chip-list-wrapper\"><ng-content></ng-content></div>`,\n exportAs: 'matChipList',\n host: {\n '[attr.tabindex]': 'disabled ? null : _tabIndex',\n '[attr.aria-describedby]': '_ariaDescribedby || null',\n '[attr.aria-required]': 'role ? required : null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-multiselectable]': 'multiple',\n '[attr.role]': 'role',\n '[class.mat-chip-list-disabled]': 'disabled',\n '[class.mat-chip-list-invalid]': 'errorState',\n '[class.mat-chip-list-required]': 'required',\n '[attr.aria-orientation]': 'ariaOrientation',\n 'class': 'mat-chip-list',\n '(focus)': 'focus()',\n '(blur)': '_blur()',\n '(keydown)': '_keydown($event)',\n '[id]': '_uid'\n },\n providers: [{ provide: MatFormFieldControl, useExisting: MatChipList }],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-chip{position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;transform:translateZ(0);border:none;-webkit-appearance:none;-moz-appearance:none}.mat-standard-chip{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:inline-flex;padding:7px 12px;border-radius:16px;align-items:center;cursor:default;min-height:32px;height:1px}._mat-animation-noopable.mat-standard-chip{transition:none;animation:none}.mat-standard-chip .mat-chip-remove.mat-icon{width:18px;height:18px}.mat-standard-chip::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;opacity:0;content:\\\"\\\";pointer-events:none;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-standard-chip:hover::after{opacity:.12}.mat-standard-chip:focus{outline:none}.mat-standard-chip:focus::after{opacity:.16}.cdk-high-contrast-active .mat-standard-chip{outline:solid 1px}.cdk-high-contrast-active .mat-standard-chip:focus{outline:dotted 2px}.mat-standard-chip.mat-chip-disabled::after{opacity:0}.mat-standard-chip.mat-chip-disabled .mat-chip-remove,.mat-standard-chip.mat-chip-disabled .mat-chip-trailing-icon{cursor:default}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar,.mat-standard-chip.mat-chip-with-avatar{padding-top:0;padding-bottom:0}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-right:8px;padding-left:0}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-left:8px;padding-right:0}.mat-standard-chip.mat-chip-with-trailing-icon{padding-top:7px;padding-bottom:7px;padding-right:8px;padding-left:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon{padding-left:8px;padding-right:12px}.mat-standard-chip.mat-chip-with-avatar{padding-left:0;padding-right:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-avatar{padding-right:0;padding-left:12px}.mat-standard-chip .mat-chip-avatar{width:24px;height:24px;margin-right:8px;margin-left:4px}[dir=rtl] .mat-standard-chip .mat-chip-avatar{margin-left:8px;margin-right:4px}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{width:18px;height:18px;cursor:pointer}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{margin-left:8px;margin-right:0}[dir=rtl] .mat-standard-chip .mat-chip-remove,[dir=rtl] .mat-standard-chip .mat-chip-trailing-icon{margin-right:8px;margin-left:0}.mat-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit;overflow:hidden}.mat-chip-list-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:-4px}.mat-chip-list-wrapper input.mat-input-element,.mat-chip-list-wrapper .mat-standard-chip{margin:4px}.mat-chip-list-stacked .mat-chip-list-wrapper{flex-direction:column;align-items:flex-start}.mat-chip-list-stacked .mat-chip-list-wrapper .mat-standard-chip{width:100%}.mat-chip-avatar{border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden;object-fit:cover}input.mat-chip-input{width:150px;margin:4px;flex:1 0 150px}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc2.Directionality, decorators: [{\n type: Optional\n }] }, { type: ɵngcc3.NgForm, decorators: [{\n type: Optional\n }] }, { type: ɵngcc3.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: ɵngcc4.ErrorStateMatcher }, { type: ɵngcc3.NgControl, decorators: [{\n type: Optional\n }, {\n type: Self\n }] }]; }, { ariaOrientation: [{\n type: Input,\n args: ['aria-orientation']\n }], change: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], multiple: [{\n type: Input\n }], compareWith: [{\n type: Input\n }], value: [{\n type: Input\n }], required: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], disabled: [{\n type: Input\n }], selectable: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], errorStateMatcher: [{\n type: Input\n }], chips: [{\n type: ContentChildren,\n args: [MatChip, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Increasing integer for generating unique ids.\nlet nextUniqueId$1 = 0;\n/**\n * Directive that adds chip-specific behaviors to an input element inside `<mat-form-field>`.\n * May be placed inside or outside of an `<mat-chip-list>`.\n */\nclass MatChipInput {\n constructor(_elementRef, _defaultOptions) {\n this._elementRef = _elementRef;\n this._defaultOptions = _defaultOptions;\n /** Whether the control is focused. */\n this.focused = false;\n this._addOnBlur = false;\n /**\n * The list of key codes that will trigger a chipEnd event.\n *\n * Defaults to `[ENTER]`.\n */\n this.separatorKeyCodes = this._defaultOptions.separatorKeyCodes;\n /** Emitted when a chip is to be added. */\n this.chipEnd = new EventEmitter();\n /** The input's placeholder text. */\n this.placeholder = '';\n /** Unique id for the input. */\n this.id = `mat-chip-list-input-${nextUniqueId$1++}`;\n this._disabled = false;\n this._inputElement = this._elementRef.nativeElement;\n }\n /** Register input for chip list */\n set chipList(value) {\n if (value) {\n this._chipList = value;\n this._chipList.registerInput(this);\n }\n }\n /**\n * Whether or not the chipEnd event will be emitted when the input is blurred.\n */\n get addOnBlur() { return this._addOnBlur; }\n set addOnBlur(value) { this._addOnBlur = coerceBooleanProperty(value); }\n /** Whether the input is disabled. */\n get disabled() { return this._disabled || (this._chipList && this._chipList.disabled); }\n set disabled(value) { this._disabled = coerceBooleanProperty(value); }\n /** Whether the input is empty. */\n get empty() { return !this._inputElement.value; }\n ngOnChanges() {\n this._chipList.stateChanges.next();\n }\n /** Utility method to make host definition/tests more clear. */\n _keydown(event) {\n // Allow the user's focus to escape when they're tabbing forward. Note that we don't\n // want to do this when going backwards, because focus should go back to the first chip.\n if (event && event.keyCode === TAB && !hasModifierKey(event, 'shiftKey')) {\n this._chipList._allowFocusEscape();\n }\n this._emitChipEnd(event);\n }\n /** Checks to see if the blur should emit the (chipEnd) event. */\n _blur() {\n if (this.addOnBlur) {\n this._emitChipEnd();\n }\n this.focused = false;\n // Blur the chip list if it is not focused\n if (!this._chipList.focused) {\n this._chipList._blur();\n }\n this._chipList.stateChanges.next();\n }\n _focus() {\n this.focused = true;\n this._chipList.stateChanges.next();\n }\n /** Checks to see if the (chipEnd) event needs to be emitted. */\n _emitChipEnd(event) {\n if (!this._inputElement.value && !!event) {\n this._chipList._keydown(event);\n }\n if (!event || this._isSeparatorKey(event)) {\n this.chipEnd.emit({ input: this._inputElement, value: this._inputElement.value });\n if (event) {\n event.preventDefault();\n }\n }\n }\n _onInput() {\n // Let chip list know whenever the value changes.\n this._chipList.stateChanges.next();\n }\n /** Focuses the input. */\n focus(options) {\n this._inputElement.focus(options);\n }\n /** Checks whether a keycode is one of the configured separators. */\n _isSeparatorKey(event) {\n return !hasModifierKey(event) && new Set(this.separatorKeyCodes).has(event.keyCode);\n }\n}\nMatChipInput.ɵfac = function MatChipInput_Factory(t) { return new (t || MatChipInput)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(MAT_CHIPS_DEFAULT_OPTIONS)); };\nMatChipInput.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatChipInput, selectors: [[\"input\", \"matChipInputFor\", \"\"]], hostAttrs: [1, \"mat-chip-input\", \"mat-input-element\"], hostVars: 5, hostBindings: function MatChipInput_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function MatChipInput_keydown_HostBindingHandler($event) { return ctx._keydown($event); })(\"blur\", function MatChipInput_blur_HostBindingHandler() { return ctx._blur(); })(\"focus\", function MatChipInput_focus_HostBindingHandler() { return ctx._focus(); })(\"input\", function MatChipInput_input_HostBindingHandler() { return ctx._onInput(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"id\", ctx.id);\n ɵngcc0.ɵɵattribute(\"disabled\", ctx.disabled || null)(\"placeholder\", ctx.placeholder || null)(\"aria-invalid\", ctx._chipList && ctx._chipList.ngControl ? ctx._chipList.ngControl.invalid : null)(\"aria-required\", ctx._chipList && ctx._chipList.required || null);\n } }, inputs: { separatorKeyCodes: [\"matChipInputSeparatorKeyCodes\", \"separatorKeyCodes\"], placeholder: \"placeholder\", id: \"id\", chipList: [\"matChipInputFor\", \"chipList\"], addOnBlur: [\"matChipInputAddOnBlur\", \"addOnBlur\"], disabled: \"disabled\" }, outputs: { chipEnd: \"matChipInputTokenEnd\" }, exportAs: [\"matChipInput\", \"matChipInputFor\"], features: [ɵngcc0.ɵɵNgOnChangesFeature] });\nMatChipInput.ctorParameters = () => [\n { type: ElementRef },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_CHIPS_DEFAULT_OPTIONS,] }] }\n];\nMatChipInput.propDecorators = {\n chipList: [{ type: Input, args: ['matChipInputFor',] }],\n addOnBlur: [{ type: Input, args: ['matChipInputAddOnBlur',] }],\n separatorKeyCodes: [{ type: Input, args: ['matChipInputSeparatorKeyCodes',] }],\n chipEnd: [{ type: Output, args: ['matChipInputTokenEnd',] }],\n placeholder: [{ type: Input }],\n id: [{ type: Input }],\n disabled: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatChipInput, [{\n type: Directive,\n args: [{\n selector: 'input[matChipInputFor]',\n exportAs: 'matChipInput, matChipInputFor',\n host: {\n 'class': 'mat-chip-input mat-input-element',\n '(keydown)': '_keydown($event)',\n '(blur)': '_blur()',\n '(focus)': '_focus()',\n '(input)': '_onInput()',\n '[id]': 'id',\n '[attr.disabled]': 'disabled || null',\n '[attr.placeholder]': 'placeholder || null',\n '[attr.aria-invalid]': '_chipList && _chipList.ngControl ? _chipList.ngControl.invalid : null',\n '[attr.aria-required]': '_chipList && _chipList.required || null'\n }\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_CHIPS_DEFAULT_OPTIONS]\n }] }]; }, { separatorKeyCodes: [{\n type: Input,\n args: ['matChipInputSeparatorKeyCodes']\n }], chipEnd: [{\n type: Output,\n args: ['matChipInputTokenEnd']\n }], placeholder: [{\n type: Input\n }], id: [{\n type: Input\n }], chipList: [{\n type: Input,\n args: ['matChipInputFor']\n }], addOnBlur: [{\n type: Input,\n args: ['matChipInputAddOnBlur']\n }], disabled: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst CHIP_DECLARATIONS = [\n MatChipList,\n MatChip,\n MatChipInput,\n MatChipRemove,\n MatChipAvatar,\n MatChipTrailingIcon,\n];\nconst ɵ0 = {\n separatorKeyCodes: [ENTER]\n};\nclass MatChipsModule {\n}\nMatChipsModule.ɵfac = function MatChipsModule_Factory(t) { return new (t || MatChipsModule)(); };\nMatChipsModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatChipsModule });\nMatChipsModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [\n ErrorStateMatcher,\n {\n provide: MAT_CHIPS_DEFAULT_OPTIONS,\n useValue: ɵ0\n }\n ], imports: [[MatCommonModule]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatChipsModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: CHIP_DECLARATIONS,\n declarations: CHIP_DECLARATIONS,\n providers: [\n ErrorStateMatcher,\n {\n provide: MAT_CHIPS_DEFAULT_OPTIONS,\n useValue: ɵ0\n }\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatChipsModule, { declarations: function () { return [MatChipList, MatChip, MatChipInput, MatChipRemove, MatChipAvatar, MatChipTrailingIcon]; }, imports: function () { return [MatCommonModule]; }, exports: function () { return [MatChipList, MatChip, MatChipInput, MatChipRemove, MatChipAvatar, MatChipTrailingIcon]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_CHIPS_DEFAULT_OPTIONS, MAT_CHIP_AVATAR, MAT_CHIP_REMOVE, MAT_CHIP_TRAILING_ICON, MatChip, MatChipAvatar, MatChipInput, MatChipList, MatChipListChange, MatChipRemove, MatChipSelectionChange, MatChipTrailingIcon, MatChipsModule, ɵ0 };\n\n//# sourceMappingURL=chips.js.map","import { ObserversModule } from '@angular/cdk/observers';\nimport { CommonModule } from '@angular/common';\nimport { InjectionToken, Directive, Input, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, ChangeDetectorRef, Inject, Optional, NgZone, ViewChild, ContentChild, ContentChildren, NgModule } from '@angular/core';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject, merge, fromEvent } from 'rxjs';\nimport { startWith, takeUntil, take } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { Platform } from '@angular/cdk/platform';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/bidi';\nimport * as ɵngcc2 from '@angular/cdk/platform';\nimport * as ɵngcc3 from '@angular/common';\nimport * as ɵngcc4 from '@angular/cdk/observers';\n\nconst _c0 = [\"underline\"];\nconst _c1 = [\"connectionContainer\"];\nconst _c2 = [\"inputContainer\"];\nconst _c3 = [\"label\"];\nfunction MatFormField_ng_container_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 14);\n ɵngcc0.ɵɵelement(2, \"div\", 15);\n ɵngcc0.ɵɵelement(3, \"div\", 16);\n ɵngcc0.ɵɵelement(4, \"div\", 17);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"div\", 18);\n ɵngcc0.ɵɵelement(6, \"div\", 15);\n ɵngcc0.ɵɵelement(7, \"div\", 16);\n ɵngcc0.ɵɵelement(8, \"div\", 17);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n} }\nfunction MatFormField_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 19);\n ɵngcc0.ɵɵprojection(1, 1);\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction MatFormField_label_9_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵprojection(1, 2);\n ɵngcc0.ɵɵelementStart(2, \"span\");\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx_r10._control.placeholder);\n} }\nfunction MatFormField_label_9_ng_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 3, [\"*ngSwitchCase\", \"true\"]);\n} }\nfunction MatFormField_label_9_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 23);\n ɵngcc0.ɵɵtext(1, \" *\");\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction MatFormField_label_9_Template(rf, ctx) { if (rf & 1) {\n const _r14 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"label\", 20, 21);\n ɵngcc0.ɵɵlistener(\"cdkObserveContent\", function MatFormField_label_9_Template_label_cdkObserveContent_0_listener() { ɵngcc0.ɵɵrestoreView(_r14); const ctx_r13 = ɵngcc0.ɵɵnextContext(); return ctx_r13.updateOutlineGap(); });\n ɵngcc0.ɵɵtemplate(2, MatFormField_label_9_ng_container_2_Template, 4, 1, \"ng-container\", 12);\n ɵngcc0.ɵɵtemplate(3, MatFormField_label_9_ng_content_3_Template, 1, 0, \"ng-content\", 12);\n ɵngcc0.ɵɵtemplate(4, MatFormField_label_9_span_4_Template, 2, 0, \"span\", 22);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"mat-empty\", ctx_r4._control.empty && !ctx_r4._shouldAlwaysFloat())(\"mat-form-field-empty\", ctx_r4._control.empty && !ctx_r4._shouldAlwaysFloat())(\"mat-accent\", ctx_r4.color == \"accent\")(\"mat-warn\", ctx_r4.color == \"warn\");\n ɵngcc0.ɵɵproperty(\"cdkObserveContentDisabled\", ctx_r4.appearance != \"outline\")(\"id\", ctx_r4._labelId)(\"ngSwitch\", ctx_r4._hasLabel());\n ɵngcc0.ɵɵattribute(\"for\", ctx_r4._control.id)(\"aria-owns\", ctx_r4._control.id);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r4.hideRequiredMarker && ctx_r4._control.required && !ctx_r4._control.disabled);\n} }\nfunction MatFormField_div_10_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 24);\n ɵngcc0.ɵɵprojection(1, 4);\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction MatFormField_div_11_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 25, 26);\n ɵngcc0.ɵɵelement(2, \"span\", 27);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r6 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"mat-accent\", ctx_r6.color == \"accent\")(\"mat-warn\", ctx_r6.color == \"warn\");\n} }\nfunction MatFormField_div_13_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵprojection(1, 5);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r7 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@transitionMessages\", ctx_r7._subscriptAnimationState);\n} }\nfunction MatFormField_div_14_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 31);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r16 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx_r16._hintLabelId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r16.hintLabel);\n} }\nfunction MatFormField_div_14_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 28);\n ɵngcc0.ɵɵtemplate(1, MatFormField_div_14_div_1_Template, 2, 2, \"div\", 29);\n ɵngcc0.ɵɵprojection(2, 6);\n ɵngcc0.ɵɵelement(3, \"div\", 30);\n ɵngcc0.ɵɵprojection(4, 7);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r8 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@transitionMessages\", ctx_r8._subscriptAnimationState);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r8.hintLabel);\n} }\nconst _c4 = [\"*\", [[\"\", \"matPrefix\", \"\"]], [[\"mat-placeholder\"]], [[\"mat-label\"]], [[\"\", \"matSuffix\", \"\"]], [[\"mat-error\"]], [[\"mat-hint\", 3, \"align\", \"end\"]], [[\"mat-hint\", \"align\", \"end\"]]];\nconst _c5 = [\"*\", \"[matPrefix]\", \"mat-placeholder\", \"mat-label\", \"[matSuffix]\", \"mat-error\", \"mat-hint:not([align='end'])\", \"mat-hint[align='end']\"];\nlet nextUniqueId = 0;\n/**\n * Injection token that can be used to reference instances of `MatError`. It serves as\n * alternative token to the actual `MatError` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_ERROR = new InjectionToken('MatError');\n/** Single error message to be shown underneath the form field. */\nclass MatError {\n constructor() {\n this.id = `mat-error-${nextUniqueId++}`;\n }\n}\nMatError.ɵfac = function MatError_Factory(t) { return new (t || MatError)(); };\nMatError.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatError, selectors: [[\"mat-error\"]], hostAttrs: [\"role\", \"alert\", 1, \"mat-error\"], hostVars: 1, hostBindings: function MatError_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.id);\n } }, inputs: { id: \"id\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: MAT_ERROR, useExisting: MatError }])] });\nMatError.propDecorators = {\n id: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatError, [{\n type: Directive,\n args: [{\n selector: 'mat-error',\n host: {\n 'class': 'mat-error',\n 'role': 'alert',\n '[attr.id]': 'id'\n },\n providers: [{ provide: MAT_ERROR, useExisting: MatError }]\n }]\n }], function () { return []; }, { id: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the MatFormField.\n * @docs-private\n */\nconst matFormFieldAnimations = {\n /** Animation that transitions the form field's error and hint messages. */\n transitionMessages: trigger('transitionMessages', [\n // TODO(mmalerba): Use angular animations for label animation as well.\n state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),\n transition('void => enter', [\n style({ opacity: 0, transform: 'translateY(-5px)' }),\n animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),\n ]),\n ])\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** An interface which allows a control to work inside of a `MatFormField`. */\nclass MatFormFieldControl {\n}\nMatFormFieldControl.ɵfac = function MatFormFieldControl_Factory(t) { return new (t || MatFormFieldControl)(); };\nMatFormFieldControl.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatFormFieldControl });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatFormFieldControl, [{\n type: Directive\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** @docs-private */\nfunction getMatFormFieldPlaceholderConflictError() {\n return Error('Placeholder attribute and child element were both specified.');\n}\n/** @docs-private */\nfunction getMatFormFieldDuplicatedHintError(align) {\n return Error(`A hint was already declared for 'align=\"${align}\"'.`);\n}\n/** @docs-private */\nfunction getMatFormFieldMissingControlError() {\n return Error('mat-form-field must contain a MatFormFieldControl.');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet nextUniqueId$1 = 0;\n/**\n * Injection token that can be used to reference instances of `MatHint`. It serves as\n * alternative token to the actual `MatHint` class which could cause unnecessary\n * retention of the class and its directive metadata.\n *\n * *Note*: This is not part of the public API as the MDC-based form-field will not\n * need a lightweight token for `MatHint` and we want to reduce breaking changes.\n */\nconst _MAT_HINT = new InjectionToken('MatHint');\n/** Hint text to be shown underneath the form field control. */\nclass MatHint {\n constructor() {\n /** Whether to align the hint label at the start or end of the line. */\n this.align = 'start';\n /** Unique ID for the hint. Used for the aria-describedby on the form field control. */\n this.id = `mat-hint-${nextUniqueId$1++}`;\n }\n}\nMatHint.ɵfac = function MatHint_Factory(t) { return new (t || MatHint)(); };\nMatHint.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatHint, selectors: [[\"mat-hint\"]], hostAttrs: [1, \"mat-hint\"], hostVars: 4, hostBindings: function MatHint_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.id)(\"align\", null);\n ɵngcc0.ɵɵclassProp(\"mat-form-field-hint-end\", ctx.align === \"end\");\n } }, inputs: { align: \"align\", id: \"id\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: _MAT_HINT, useExisting: MatHint }])] });\nMatHint.propDecorators = {\n align: [{ type: Input }],\n id: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatHint, [{\n type: Directive,\n args: [{\n selector: 'mat-hint',\n host: {\n 'class': 'mat-hint',\n '[class.mat-form-field-hint-end]': 'align === \"end\"',\n '[attr.id]': 'id',\n // Remove align attribute to prevent it from interfering with layout.\n '[attr.align]': 'null'\n },\n providers: [{ provide: _MAT_HINT, useExisting: MatHint }]\n }]\n }], function () { return []; }, { align: [{\n type: Input\n }], id: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** The floating label for a `mat-form-field`. */\nclass MatLabel {\n}\nMatLabel.ɵfac = function MatLabel_Factory(t) { return new (t || MatLabel)(); };\nMatLabel.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatLabel, selectors: [[\"mat-label\"]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatLabel, [{\n type: Directive,\n args: [{\n selector: 'mat-label'\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The placeholder text for an `MatFormField`.\n * @deprecated Use `<mat-label>` to specify the label and the `placeholder` attribute to specify the\n * placeholder.\n * @breaking-change 8.0.0\n */\nclass MatPlaceholder {\n}\nMatPlaceholder.ɵfac = function MatPlaceholder_Factory(t) { return new (t || MatPlaceholder)(); };\nMatPlaceholder.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatPlaceholder, selectors: [[\"mat-placeholder\"]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatPlaceholder, [{\n type: Directive,\n args: [{\n selector: 'mat-placeholder'\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `MatPrefix`. It serves as\n * alternative token to the actual `MatPrefix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_PREFIX = new InjectionToken('MatPrefix');\n/** Prefix to be placed in front of the form field. */\nclass MatPrefix {\n}\nMatPrefix.ɵfac = function MatPrefix_Factory(t) { return new (t || MatPrefix)(); };\nMatPrefix.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatPrefix, selectors: [[\"\", \"matPrefix\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: MAT_PREFIX, useExisting: MatPrefix }])] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatPrefix, [{\n type: Directive,\n args: [{\n selector: '[matPrefix]',\n providers: [{ provide: MAT_PREFIX, useExisting: MatPrefix }]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token that can be used to reference instances of `MatSuffix`. It serves as\n * alternative token to the actual `MatSuffix` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SUFFIX = new InjectionToken('MatSuffix');\n/** Suffix to be placed at the end of the form field. */\nclass MatSuffix {\n}\nMatSuffix.ɵfac = function MatSuffix_Factory(t) { return new (t || MatSuffix)(); };\nMatSuffix.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatSuffix, selectors: [[\"\", \"matSuffix\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: MAT_SUFFIX, useExisting: MatSuffix }])] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSuffix, [{\n type: Directive,\n args: [{\n selector: '[matSuffix]',\n providers: [{ provide: MAT_SUFFIX, useExisting: MatSuffix }]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet nextUniqueId$2 = 0;\nconst floatingLabelScale = 0.75;\nconst outlineGapPadding = 5;\n/**\n * Boilerplate for applying mixins to MatFormField.\n * @docs-private\n */\nclass MatFormFieldBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\n/**\n * Base class to which we're applying the form field mixins.\n * @docs-private\n */\nconst _MatFormFieldMixinBase = mixinColor(MatFormFieldBase, 'primary');\n/**\n * Injection token that can be used to configure the\n * default options for all form field within an app.\n */\nconst MAT_FORM_FIELD_DEFAULT_OPTIONS = new InjectionToken('MAT_FORM_FIELD_DEFAULT_OPTIONS');\n/**\n * Injection token that can be used to inject an instances of `MatFormField`. It serves\n * as alternative token to the actual `MatFormField` class which would cause unnecessary\n * retention of the `MatFormField` class and its component metadata.\n */\nconst MAT_FORM_FIELD = new InjectionToken('MatFormField');\n/** Container for form controls that applies Material Design styling and behavior. */\nclass MatFormField extends _MatFormFieldMixinBase {\n constructor(_elementRef, _changeDetectorRef, \n /**\n * @deprecated `_labelOptions` parameter no longer being used. To be removed.\n * @breaking-change 12.0.0\n */\n // Use `ElementRef` here so Angular has something to inject.\n _labelOptions, _dir, _defaults, _platform, _ngZone, _animationMode) {\n super(_elementRef);\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._defaults = _defaults;\n this._platform = _platform;\n this._ngZone = _ngZone;\n /**\n * Whether the outline gap needs to be calculated\n * immediately on the next change detection run.\n */\n this._outlineGapCalculationNeededImmediately = false;\n /** Whether the outline gap needs to be calculated next time the zone has stabilized. */\n this._outlineGapCalculationNeededOnStable = false;\n this._destroyed = new Subject();\n /** Override for the logic that disables the label animation in certain cases. */\n this._showAlwaysAnimate = false;\n /** State of the mat-hint and mat-error animations. */\n this._subscriptAnimationState = '';\n this._hintLabel = '';\n // Unique id for the hint label.\n this._hintLabelId = `mat-hint-${nextUniqueId$2++}`;\n // Unique id for the label element.\n this._labelId = `mat-form-field-label-${nextUniqueId$2++}`;\n this.floatLabel = this._getDefaultFloatLabelState();\n this._animationsEnabled = _animationMode !== 'NoopAnimations';\n // Set the default through here so we invoke the setter on the first run.\n this.appearance = (_defaults && _defaults.appearance) ? _defaults.appearance : 'legacy';\n this._hideRequiredMarker = (_defaults && _defaults.hideRequiredMarker != null) ?\n _defaults.hideRequiredMarker : false;\n }\n /** The form-field appearance style. */\n get appearance() { return this._appearance; }\n set appearance(value) {\n const oldValue = this._appearance;\n this._appearance = value || (this._defaults && this._defaults.appearance) || 'legacy';\n if (this._appearance === 'outline' && oldValue !== value) {\n this._outlineGapCalculationNeededOnStable = true;\n }\n }\n /** Whether the required marker should be hidden. */\n get hideRequiredMarker() { return this._hideRequiredMarker; }\n set hideRequiredMarker(value) {\n this._hideRequiredMarker = coerceBooleanProperty(value);\n }\n /** Whether the floating label should always float or not. */\n _shouldAlwaysFloat() {\n return this.floatLabel === 'always' && !this._showAlwaysAnimate;\n }\n /** Whether the label can float or not. */\n _canLabelFloat() { return this.floatLabel !== 'never'; }\n /** Text for the form field hint. */\n get hintLabel() { return this._hintLabel; }\n set hintLabel(value) {\n this._hintLabel = value;\n this._processHints();\n }\n /**\n * Whether the label should always float, never float or float as the user types.\n *\n * Note: only the legacy appearance supports the `never` option. `never` was originally added as a\n * way to make the floating label emulate the behavior of a standard input placeholder. However\n * the form field now supports both floating labels and placeholders. Therefore in the non-legacy\n * appearances the `never` option has been disabled in favor of just using the placeholder.\n */\n get floatLabel() {\n return this.appearance !== 'legacy' && this._floatLabel === 'never' ? 'auto' : this._floatLabel;\n }\n set floatLabel(value) {\n if (value !== this._floatLabel) {\n this._floatLabel = value || this._getDefaultFloatLabelState();\n this._changeDetectorRef.markForCheck();\n }\n }\n get _control() {\n // TODO(crisbeto): we need this workaround in order to support both Ivy and ViewEngine.\n // We should clean this up once Ivy is the default renderer.\n return this._explicitFormFieldControl || this._controlNonStatic || this._controlStatic;\n }\n set _control(value) {\n this._explicitFormFieldControl = value;\n }\n /**\n * Gets the id of the label element. If no label is present, returns `null`.\n */\n getLabelId() {\n return this._hasFloatingLabel() ? this._labelId : null;\n }\n /**\n * Gets an ElementRef for the element that a overlay attached to the form-field should be\n * positioned relative to.\n */\n getConnectedOverlayOrigin() {\n return this._connectionContainerRef || this._elementRef;\n }\n ngAfterContentInit() {\n this._validateControlChild();\n const control = this._control;\n if (control.controlType) {\n this._elementRef.nativeElement.classList.add(`mat-form-field-type-${control.controlType}`);\n }\n // Subscribe to changes in the child control state in order to update the form field UI.\n control.stateChanges.pipe(startWith(null)).subscribe(() => {\n this._validatePlaceholders();\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n // Run change detection if the value changes.\n if (control.ngControl && control.ngControl.valueChanges) {\n control.ngControl.valueChanges\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._changeDetectorRef.markForCheck());\n }\n // Note that we have to run outside of the `NgZone` explicitly,\n // in order to avoid throwing users into an infinite loop\n // if `zone-patch-rxjs` is included.\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._outlineGapCalculationNeededOnStable) {\n this.updateOutlineGap();\n }\n });\n });\n // Run change detection and update the outline if the suffix or prefix changes.\n merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {\n this._outlineGapCalculationNeededOnStable = true;\n this._changeDetectorRef.markForCheck();\n });\n // Re-validate when the number of hints changes.\n this._hintChildren.changes.pipe(startWith(null)).subscribe(() => {\n this._processHints();\n this._changeDetectorRef.markForCheck();\n });\n // Update the aria-described by when the number of errors changes.\n this._errorChildren.changes.pipe(startWith(null)).subscribe(() => {\n this._syncDescribedByIds();\n this._changeDetectorRef.markForCheck();\n });\n if (this._dir) {\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (typeof requestAnimationFrame === 'function') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => this.updateOutlineGap());\n });\n }\n else {\n this.updateOutlineGap();\n }\n });\n }\n }\n ngAfterContentChecked() {\n this._validateControlChild();\n if (this._outlineGapCalculationNeededImmediately) {\n this.updateOutlineGap();\n }\n }\n ngAfterViewInit() {\n // Avoid animations on load.\n this._subscriptAnimationState = 'enter';\n this._changeDetectorRef.detectChanges();\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Determines whether a class from the NgControl should be forwarded to the host element. */\n _shouldForward(prop) {\n const ngControl = this._control ? this._control.ngControl : null;\n return ngControl && ngControl[prop];\n }\n _hasPlaceholder() {\n return !!(this._control && this._control.placeholder || this._placeholderChild);\n }\n _hasLabel() {\n return !!(this._labelChildNonStatic || this._labelChildStatic);\n }\n _shouldLabelFloat() {\n return this._canLabelFloat() &&\n ((this._control && this._control.shouldLabelFloat) || this._shouldAlwaysFloat());\n }\n _hideControlPlaceholder() {\n // In the legacy appearance the placeholder is promoted to a label if no label is given.\n return this.appearance === 'legacy' && !this._hasLabel() ||\n this._hasLabel() && !this._shouldLabelFloat();\n }\n _hasFloatingLabel() {\n // In the legacy appearance the placeholder is promoted to a label if no label is given.\n return this._hasLabel() || this.appearance === 'legacy' && this._hasPlaceholder();\n }\n /** Determines whether to display hints or errors. */\n _getDisplayedMessages() {\n return (this._errorChildren && this._errorChildren.length > 0 &&\n this._control.errorState) ? 'error' : 'hint';\n }\n /** Animates the placeholder up and locks it in position. */\n _animateAndLockLabel() {\n if (this._hasFloatingLabel() && this._canLabelFloat()) {\n // If animations are disabled, we shouldn't go in here,\n // because the `transitionend` will never fire.\n if (this._animationsEnabled && this._label) {\n this._showAlwaysAnimate = true;\n fromEvent(this._label.nativeElement, 'transitionend').pipe(take(1)).subscribe(() => {\n this._showAlwaysAnimate = false;\n });\n }\n this.floatLabel = 'always';\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Ensure that there is only one placeholder (either `placeholder` attribute on the child control\n * or child element with the `mat-placeholder` directive).\n */\n _validatePlaceholders() {\n if (this._control.placeholder && this._placeholderChild &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatFormFieldPlaceholderConflictError();\n }\n }\n /** Does any extra processing that is required when handling the hints. */\n _processHints() {\n this._validateHints();\n this._syncDescribedByIds();\n }\n /**\n * Ensure that there is a maximum of one of each `<mat-hint>` alignment specified, with the\n * attribute being considered as `align=\"start\"`.\n */\n _validateHints() {\n if (this._hintChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n let startHint;\n let endHint;\n this._hintChildren.forEach((hint) => {\n if (hint.align === 'start') {\n if (startHint || this.hintLabel) {\n throw getMatFormFieldDuplicatedHintError('start');\n }\n startHint = hint;\n }\n else if (hint.align === 'end') {\n if (endHint) {\n throw getMatFormFieldDuplicatedHintError('end');\n }\n endHint = hint;\n }\n });\n }\n }\n /** Gets the default float label state. */\n _getDefaultFloatLabelState() {\n return (this._defaults && this._defaults.floatLabel) || 'auto';\n }\n /**\n * Sets the list of element IDs that describe the child control. This allows the control to update\n * its `aria-describedby` attribute accordingly.\n */\n _syncDescribedByIds() {\n if (this._control) {\n let ids = [];\n // TODO(wagnermaciel): Remove the type check when we find the root cause of this bug.\n if (this._control.userAriaDescribedBy &&\n typeof this._control.userAriaDescribedBy === 'string') {\n ids.push(...this._control.userAriaDescribedBy.split(' '));\n }\n if (this._getDisplayedMessages() === 'hint') {\n const startHint = this._hintChildren ?\n this._hintChildren.find(hint => hint.align === 'start') : null;\n const endHint = this._hintChildren ?\n this._hintChildren.find(hint => hint.align === 'end') : null;\n if (startHint) {\n ids.push(startHint.id);\n }\n else if (this._hintLabel) {\n ids.push(this._hintLabelId);\n }\n if (endHint) {\n ids.push(endHint.id);\n }\n }\n else if (this._errorChildren) {\n ids.push(...this._errorChildren.map(error => error.id));\n }\n this._control.setDescribedByIds(ids);\n }\n }\n /** Throws an error if the form field's control is missing. */\n _validateControlChild() {\n if (!this._control && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatFormFieldMissingControlError();\n }\n }\n /**\n * Updates the width and position of the gap in the outline. Only relevant for the outline\n * appearance.\n */\n updateOutlineGap() {\n const labelEl = this._label ? this._label.nativeElement : null;\n if (this.appearance !== 'outline' || !labelEl || !labelEl.children.length ||\n !labelEl.textContent.trim()) {\n return;\n }\n if (!this._platform.isBrowser) {\n // getBoundingClientRect isn't available on the server.\n return;\n }\n // If the element is not present in the DOM, the outline gap will need to be calculated\n // the next time it is checked and in the DOM.\n if (!this._isAttachedToDOM()) {\n this._outlineGapCalculationNeededImmediately = true;\n return;\n }\n let startWidth = 0;\n let gapWidth = 0;\n const container = this._connectionContainerRef.nativeElement;\n const startEls = container.querySelectorAll('.mat-form-field-outline-start');\n const gapEls = container.querySelectorAll('.mat-form-field-outline-gap');\n if (this._label && this._label.nativeElement.children.length) {\n const containerRect = container.getBoundingClientRect();\n // If the container's width and height are zero, it means that the element is\n // invisible and we can't calculate the outline gap. Mark the element as needing\n // to be checked the next time the zone stabilizes. We can't do this immediately\n // on the next change detection, because even if the element becomes visible,\n // the `ClientRect` won't be reclaculated immediately. We reset the\n // `_outlineGapCalculationNeededImmediately` flag some we don't run the checks twice.\n if (containerRect.width === 0 && containerRect.height === 0) {\n this._outlineGapCalculationNeededOnStable = true;\n this._outlineGapCalculationNeededImmediately = false;\n return;\n }\n const containerStart = this._getStartEnd(containerRect);\n const labelChildren = labelEl.children;\n const labelStart = this._getStartEnd(labelChildren[0].getBoundingClientRect());\n let labelWidth = 0;\n for (let i = 0; i < labelChildren.length; i++) {\n labelWidth += labelChildren[i].offsetWidth;\n }\n startWidth = Math.abs(labelStart - containerStart) - outlineGapPadding;\n gapWidth = labelWidth > 0 ? labelWidth * floatingLabelScale + outlineGapPadding * 2 : 0;\n }\n for (let i = 0; i < startEls.length; i++) {\n startEls[i].style.width = `${startWidth}px`;\n }\n for (let i = 0; i < gapEls.length; i++) {\n gapEls[i].style.width = `${gapWidth}px`;\n }\n this._outlineGapCalculationNeededOnStable =\n this._outlineGapCalculationNeededImmediately = false;\n }\n /** Gets the start end of the rect considering the current directionality. */\n _getStartEnd(rect) {\n return (this._dir && this._dir.value === 'rtl') ? rect.right : rect.left;\n }\n /** Checks whether the form field is attached to the DOM. */\n _isAttachedToDOM() {\n const element = this._elementRef.nativeElement;\n if (element.getRootNode) {\n const rootNode = element.getRootNode();\n // If the element is inside the DOM the root node will be either the document\n // or the closest shadow root, otherwise it'll be the element itself.\n return rootNode && rootNode !== element;\n }\n // Otherwise fall back to checking if it's in the document. This doesn't account for\n // shadow DOM, however browser that support shadow DOM should support `getRootNode` as well.\n return document.documentElement.contains(element);\n }\n}\nMatFormField.ɵfac = function MatFormField_Factory(t) { return new (t || MatFormField)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(MAT_FORM_FIELD_DEFAULT_OPTIONS, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Platform), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatFormField.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatFormField, selectors: [[\"mat-form-field\"]], contentQueries: function MatFormField_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatFormFieldControl, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatFormFieldControl, 7);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatLabel, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatLabel, 7);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatPlaceholder, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_ERROR, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, _MAT_HINT, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_PREFIX, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_SUFFIX, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._controlNonStatic = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._controlStatic = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._labelChildNonStatic = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._labelChildStatic = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._placeholderChild = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._errorChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._hintChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._prefixChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._suffixChildren = _t);\n } }, viewQuery: function MatFormField_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 5);\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n ɵngcc0.ɵɵviewQuery(_c2, 5);\n ɵngcc0.ɵɵviewQuery(_c3, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.underlineRef = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._connectionContainerRef = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._inputContainerRef = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._label = _t.first);\n } }, hostAttrs: [1, \"mat-form-field\"], hostVars: 40, hostBindings: function MatFormField_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-form-field-appearance-standard\", ctx.appearance == \"standard\")(\"mat-form-field-appearance-fill\", ctx.appearance == \"fill\")(\"mat-form-field-appearance-outline\", ctx.appearance == \"outline\")(\"mat-form-field-appearance-legacy\", ctx.appearance == \"legacy\")(\"mat-form-field-invalid\", ctx._control.errorState)(\"mat-form-field-can-float\", ctx._canLabelFloat())(\"mat-form-field-should-float\", ctx._shouldLabelFloat())(\"mat-form-field-has-label\", ctx._hasFloatingLabel())(\"mat-form-field-hide-placeholder\", ctx._hideControlPlaceholder())(\"mat-form-field-disabled\", ctx._control.disabled)(\"mat-form-field-autofilled\", ctx._control.autofilled)(\"mat-focused\", ctx._control.focused)(\"ng-untouched\", ctx._shouldForward(\"untouched\"))(\"ng-touched\", ctx._shouldForward(\"touched\"))(\"ng-pristine\", ctx._shouldForward(\"pristine\"))(\"ng-dirty\", ctx._shouldForward(\"dirty\"))(\"ng-valid\", ctx._shouldForward(\"valid\"))(\"ng-invalid\", ctx._shouldForward(\"invalid\"))(\"ng-pending\", ctx._shouldForward(\"pending\"))(\"_mat-animation-noopable\", !ctx._animationsEnabled);\n } }, inputs: { color: \"color\", floatLabel: \"floatLabel\", appearance: \"appearance\", hideRequiredMarker: \"hideRequiredMarker\", hintLabel: \"hintLabel\" }, exportAs: [\"matFormField\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: MAT_FORM_FIELD, useExisting: MatFormField },\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c5, decls: 15, vars: 8, consts: [[1, \"mat-form-field-wrapper\"], [1, \"mat-form-field-flex\", 3, \"click\"], [\"connectionContainer\", \"\"], [4, \"ngIf\"], [\"class\", \"mat-form-field-prefix\", 4, \"ngIf\"], [1, \"mat-form-field-infix\"], [\"inputContainer\", \"\"], [1, \"mat-form-field-label-wrapper\"], [\"class\", \"mat-form-field-label\", 3, \"cdkObserveContentDisabled\", \"id\", \"mat-empty\", \"mat-form-field-empty\", \"mat-accent\", \"mat-warn\", \"ngSwitch\", \"cdkObserveContent\", 4, \"ngIf\"], [\"class\", \"mat-form-field-suffix\", 4, \"ngIf\"], [\"class\", \"mat-form-field-underline\", 4, \"ngIf\"], [1, \"mat-form-field-subscript-wrapper\", 3, \"ngSwitch\"], [4, \"ngSwitchCase\"], [\"class\", \"mat-form-field-hint-wrapper\", 4, \"ngSwitchCase\"], [1, \"mat-form-field-outline\"], [1, \"mat-form-field-outline-start\"], [1, \"mat-form-field-outline-gap\"], [1, \"mat-form-field-outline-end\"], [1, \"mat-form-field-outline\", \"mat-form-field-outline-thick\"], [1, \"mat-form-field-prefix\"], [1, \"mat-form-field-label\", 3, \"cdkObserveContentDisabled\", \"id\", \"ngSwitch\", \"cdkObserveContent\"], [\"label\", \"\"], [\"class\", \"mat-placeholder-required mat-form-field-required-marker\", \"aria-hidden\", \"true\", 4, \"ngIf\"], [\"aria-hidden\", \"true\", 1, \"mat-placeholder-required\", \"mat-form-field-required-marker\"], [1, \"mat-form-field-suffix\"], [1, \"mat-form-field-underline\"], [\"underline\", \"\"], [1, \"mat-form-field-ripple\"], [1, \"mat-form-field-hint-wrapper\"], [\"class\", \"mat-hint\", 3, \"id\", 4, \"ngIf\"], [1, \"mat-form-field-hint-spacer\"], [1, \"mat-hint\", 3, \"id\"]], template: function MatFormField_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c4);\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1, 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatFormField_Template_div_click_1_listener($event) { return ctx._control.onContainerClick && ctx._control.onContainerClick($event); });\n ɵngcc0.ɵɵtemplate(3, MatFormField_ng_container_3_Template, 9, 0, \"ng-container\", 3);\n ɵngcc0.ɵɵtemplate(4, MatFormField_div_4_Template, 2, 0, \"div\", 4);\n ɵngcc0.ɵɵelementStart(5, \"div\", 5, 6);\n ɵngcc0.ɵɵprojection(7);\n ɵngcc0.ɵɵelementStart(8, \"span\", 7);\n ɵngcc0.ɵɵtemplate(9, MatFormField_label_9_Template, 5, 16, \"label\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(10, MatFormField_div_10_Template, 2, 0, \"div\", 9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(11, MatFormField_div_11_Template, 3, 4, \"div\", 10);\n ɵngcc0.ɵɵelementStart(12, \"div\", 11);\n ɵngcc0.ɵɵtemplate(13, MatFormField_div_13_Template, 2, 1, \"div\", 12);\n ɵngcc0.ɵɵtemplate(14, MatFormField_div_14_Template, 5, 2, \"div\", 13);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.appearance == \"outline\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx._prefixChildren.length);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx._hasFloatingLabel());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx._suffixChildren.length);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.appearance != \"outline\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx._getDisplayedMessages());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"error\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"hint\");\n } }, directives: [ɵngcc3.NgIf, ɵngcc3.NgSwitch, ɵngcc3.NgSwitchCase, ɵngcc4.CdkObserveContent], styles: [\".mat-form-field{display:inline-block;position:relative;text-align:left}[dir=rtl] .mat-form-field{text-align:right}.mat-form-field-wrapper{position:relative}.mat-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-form-field-prefix,.mat-form-field-suffix{white-space:nowrap;flex:none;position:relative}.mat-form-field-infix{display:block;position:relative;flex:auto;min-width:0;width:180px}.cdk-high-contrast-active .mat-form-field-infix{border-image:linear-gradient(transparent, transparent)}.mat-form-field-label-wrapper{position:absolute;left:0;box-sizing:content-box;width:100%;height:100%;overflow:hidden;pointer-events:none}[dir=rtl] .mat-form-field-label-wrapper{left:auto;right:0}.mat-form-field-label{position:absolute;left:0;font:inherit;pointer-events:none;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),width 400ms cubic-bezier(0.25, 0.8, 0.25, 1);display:none}[dir=rtl] .mat-form-field-label{transform-origin:100% 0;left:auto;right:0}.mat-form-field-empty.mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{display:block}.mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:block;transition:none}.mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float .mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:block}.mat-form-field-label:not(.mat-form-field-empty){transition:none}.mat-form-field-underline{position:absolute;width:100%;pointer-events:none;transform:scale3d(1, 1.0001, 1)}.mat-form-field-ripple{position:absolute;left:0;width:100%;transform-origin:50%;transform:scaleX(0.5);opacity:0;transition:background-color 300ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-form-field.mat-focused .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple{opacity:1;transform:none;transition:transform 300ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 300ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-subscript-wrapper{position:absolute;box-sizing:border-box;width:100%;overflow:hidden}.mat-form-field-subscript-wrapper .mat-icon,.mat-form-field-label-wrapper .mat-icon{width:1em;height:1em;font-size:inherit;vertical-align:baseline}.mat-form-field-hint-wrapper{display:flex}.mat-form-field-hint-spacer{flex:1 0 1em}.mat-error{display:block}.mat-form-field-control-wrapper{position:relative}.mat-form-field-hint-end{order:1}.mat-form-field._mat-animation-noopable .mat-form-field-label,.mat-form-field._mat-animation-noopable .mat-form-field-ripple{transition:none}\\n\", \".mat-form-field-appearance-fill .mat-form-field-flex{border-radius:4px 4px 0 0;padding:.75em .75em 0 .75em}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-flex{outline:solid 1px}.mat-form-field-appearance-fill .mat-form-field-underline::before{content:\\\"\\\";display:block;position:absolute;bottom:0;height:1px;width:100%}.mat-form-field-appearance-fill .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-fill:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-fill._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}.mat-form-field-appearance-fill .mat-form-field-subscript-wrapper{padding:0 1em}\\n\", \".mat-input-element{font:inherit;background:transparent;color:currentColor;border:none;outline:none;padding:0;margin:0;width:100%;max-width:100%;vertical-align:bottom;text-align:inherit;box-sizing:content-box}.mat-input-element:-moz-ui-invalid{box-shadow:none}.mat-input-element::-ms-clear,.mat-input-element::-ms-reveal{display:none}.mat-input-element,.mat-input-element::-webkit-search-cancel-button,.mat-input-element::-webkit-search-decoration,.mat-input-element::-webkit-search-results-button,.mat-input-element::-webkit-search-results-decoration{-webkit-appearance:none}.mat-input-element::-webkit-contacts-auto-fill-button,.mat-input-element::-webkit-caps-lock-indicator,.mat-input-element::-webkit-credentials-auto-fill-button{visibility:hidden}.mat-input-element[type=date],.mat-input-element[type=datetime],.mat-input-element[type=datetime-local],.mat-input-element[type=month],.mat-input-element[type=week],.mat-input-element[type=time]{line-height:1}.mat-input-element[type=date]::after,.mat-input-element[type=datetime]::after,.mat-input-element[type=datetime-local]::after,.mat-input-element[type=month]::after,.mat-input-element[type=week]::after,.mat-input-element[type=time]::after{content:\\\" \\\";white-space:pre;width:1px}.mat-input-element::-webkit-inner-spin-button,.mat-input-element::-webkit-calendar-picker-indicator,.mat-input-element::-webkit-clear-button{font-size:.75em}.mat-input-element::placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-moz-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-moz-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-webkit-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-webkit-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element:-ms-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element:-ms-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-form-field-hide-placeholder .mat-input-element::placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-moz-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-webkit-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element:-ms-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}textarea.mat-input-element{resize:vertical;overflow:auto}textarea.mat-input-element.cdk-textarea-autosize{resize:none}textarea.mat-input-element{padding:2px 0;margin:-2px 0}select.mat-input-element{-moz-appearance:none;-webkit-appearance:none;position:relative;background-color:transparent;display:inline-flex;box-sizing:border-box;padding-top:1em;top:-1em;margin-bottom:-1em}select.mat-input-element::-ms-expand{display:none}select.mat-input-element::-moz-focus-inner{border:0}select.mat-input-element:not(:disabled){cursor:pointer}select.mat-input-element::-ms-value{color:inherit;background:none}.mat-focused .cdk-high-contrast-active select.mat-input-element::-ms-value{color:inherit}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{content:\\\"\\\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;position:absolute;top:50%;right:0;margin-top:-2.5px;pointer-events:none}[dir=rtl] .mat-form-field-type-mat-native-select .mat-form-field-infix::after{right:auto;left:0}.mat-form-field-type-mat-native-select .mat-input-element{padding-right:15px}[dir=rtl] .mat-form-field-type-mat-native-select .mat-input-element{padding-right:0;padding-left:15px}.mat-form-field-type-mat-native-select .mat-form-field-label-wrapper{max-width:calc(100% - 10px)}.mat-form-field-type-mat-native-select.mat-form-field-appearance-outline .mat-form-field-infix::after{margin-top:-5px}.mat-form-field-type-mat-native-select.mat-form-field-appearance-fill .mat-form-field-infix::after{margin-top:-10px}\\n\", \".mat-form-field-appearance-legacy .mat-form-field-label{transform:perspective(100px);-ms-transform:none}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon{width:1em}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button{font:inherit;vertical-align:baseline}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button .mat-icon{font-size:inherit}.mat-form-field-appearance-legacy .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-legacy .mat-form-field-ripple{top:0;height:2px;overflow:hidden}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-legacy.mat-form-field-invalid:not(.mat-focused) .mat-form-field-ripple{height:1px}\\n\", \".mat-form-field-appearance-outline .mat-form-field-wrapper{margin:.25em 0}.mat-form-field-appearance-outline .mat-form-field-flex{padding:0 .75em 0 .75em;margin-top:-0.25em;position:relative}.mat-form-field-appearance-outline .mat-form-field-prefix,.mat-form-field-appearance-outline .mat-form-field-suffix{top:.25em}.mat-form-field-appearance-outline .mat-form-field-outline{display:flex;position:absolute;top:.25em;left:0;right:0;bottom:0;pointer-events:none}.mat-form-field-appearance-outline .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-end{border:1px solid currentColor;min-width:5px}.mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:5px 0 0 5px;border-right-style:none}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-start{border-right-style:solid;border-left-style:none;border-radius:0 5px 5px 0}.mat-form-field-appearance-outline .mat-form-field-outline-end{border-radius:0 5px 5px 0;border-left-style:none;flex-grow:1}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-end{border-left-style:solid;border-right-style:none;border-radius:5px 0 0 5px}.mat-form-field-appearance-outline .mat-form-field-outline-gap{border-radius:.000001px;border:1px solid currentColor;border-left-style:none;border-right-style:none}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-outline-gap{border-top-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline-thick{opacity:0}.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-end,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-gap{border-width:2px}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline{opacity:0;transition:opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline{opacity:0;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline .mat-form-field-subscript-wrapper{padding:0 1em}.mat-form-field-appearance-outline._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-start,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-end,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-gap{transition:none}\\n\", \".mat-form-field-appearance-standard .mat-form-field-flex{padding-top:.75em}.mat-form-field-appearance-standard .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-standard .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-standard:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-standard._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}\\n\"], encapsulation: 2, data: { animation: [matFormFieldAnimations.transitionMessages] }, changeDetection: 0 });\nMatFormField.ctorParameters = () => [\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Inject, args: [ElementRef,] }] },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD_DEFAULT_OPTIONS,] }] },\n { type: Platform },\n { type: NgZone },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatFormField.propDecorators = {\n appearance: [{ type: Input }],\n hideRequiredMarker: [{ type: Input }],\n hintLabel: [{ type: Input }],\n floatLabel: [{ type: Input }],\n underlineRef: [{ type: ViewChild, args: ['underline',] }],\n _connectionContainerRef: [{ type: ViewChild, args: ['connectionContainer', { static: true },] }],\n _inputContainerRef: [{ type: ViewChild, args: ['inputContainer',] }],\n _label: [{ type: ViewChild, args: ['label',] }],\n _controlNonStatic: [{ type: ContentChild, args: [MatFormFieldControl,] }],\n _controlStatic: [{ type: ContentChild, args: [MatFormFieldControl, { static: true },] }],\n _labelChildNonStatic: [{ type: ContentChild, args: [MatLabel,] }],\n _labelChildStatic: [{ type: ContentChild, args: [MatLabel, { static: true },] }],\n _placeholderChild: [{ type: ContentChild, args: [MatPlaceholder,] }],\n _errorChildren: [{ type: ContentChildren, args: [MAT_ERROR, { descendants: true },] }],\n _hintChildren: [{ type: ContentChildren, args: [_MAT_HINT, { descendants: true },] }],\n _prefixChildren: [{ type: ContentChildren, args: [MAT_PREFIX, { descendants: true },] }],\n _suffixChildren: [{ type: ContentChildren, args: [MAT_SUFFIX, { descendants: true },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatFormField, [{\n type: Component,\n args: [{\n selector: 'mat-form-field',\n exportAs: 'matFormField',\n template: \"<div class=\\\"mat-form-field-wrapper\\\">\\n <div class=\\\"mat-form-field-flex\\\" #connectionContainer\\n (click)=\\\"_control.onContainerClick && _control.onContainerClick($event)\\\">\\n\\n <!-- Outline used for outline appearance. -->\\n <ng-container *ngIf=\\\"appearance == 'outline'\\\">\\n <div class=\\\"mat-form-field-outline\\\">\\n <div class=\\\"mat-form-field-outline-start\\\"></div>\\n <div class=\\\"mat-form-field-outline-gap\\\"></div>\\n <div class=\\\"mat-form-field-outline-end\\\"></div>\\n </div>\\n <div class=\\\"mat-form-field-outline mat-form-field-outline-thick\\\">\\n <div class=\\\"mat-form-field-outline-start\\\"></div>\\n <div class=\\\"mat-form-field-outline-gap\\\"></div>\\n <div class=\\\"mat-form-field-outline-end\\\"></div>\\n </div>\\n </ng-container>\\n\\n <div class=\\\"mat-form-field-prefix\\\" *ngIf=\\\"_prefixChildren.length\\\">\\n <ng-content select=\\\"[matPrefix]\\\"></ng-content>\\n </div>\\n\\n <div class=\\\"mat-form-field-infix\\\" #inputContainer>\\n <ng-content></ng-content>\\n\\n <span class=\\\"mat-form-field-label-wrapper\\\">\\n <!-- We add aria-owns as a workaround for an issue in JAWS & NVDA where the label isn't\\n read if it comes before the control in the DOM. -->\\n <label class=\\\"mat-form-field-label\\\"\\n (cdkObserveContent)=\\\"updateOutlineGap()\\\"\\n [cdkObserveContentDisabled]=\\\"appearance != 'outline'\\\"\\n [id]=\\\"_labelId\\\"\\n [attr.for]=\\\"_control.id\\\"\\n [attr.aria-owns]=\\\"_control.id\\\"\\n [class.mat-empty]=\\\"_control.empty && !_shouldAlwaysFloat()\\\"\\n [class.mat-form-field-empty]=\\\"_control.empty && !_shouldAlwaysFloat()\\\"\\n [class.mat-accent]=\\\"color == 'accent'\\\"\\n [class.mat-warn]=\\\"color == 'warn'\\\"\\n #label\\n *ngIf=\\\"_hasFloatingLabel()\\\"\\n [ngSwitch]=\\\"_hasLabel()\\\">\\n\\n <!-- @breaking-change 8.0.0 remove in favor of mat-label element an placeholder attr. -->\\n <ng-container *ngSwitchCase=\\\"false\\\">\\n <ng-content select=\\\"mat-placeholder\\\"></ng-content>\\n <span>{{_control.placeholder}}</span>\\n </ng-container>\\n\\n <ng-content select=\\\"mat-label\\\" *ngSwitchCase=\\\"true\\\"></ng-content>\\n\\n <!-- @breaking-change 8.0.0 remove `mat-placeholder-required` class -->\\n <span\\n class=\\\"mat-placeholder-required mat-form-field-required-marker\\\"\\n aria-hidden=\\\"true\\\"\\n *ngIf=\\\"!hideRequiredMarker && _control.required && !_control.disabled\\\"> *</span>\\n </label>\\n </span>\\n </div>\\n\\n <div class=\\\"mat-form-field-suffix\\\" *ngIf=\\\"_suffixChildren.length\\\">\\n <ng-content select=\\\"[matSuffix]\\\"></ng-content>\\n </div>\\n </div>\\n\\n <!-- Underline used for legacy, standard, and box appearances. -->\\n <div class=\\\"mat-form-field-underline\\\" #underline\\n *ngIf=\\\"appearance != 'outline'\\\">\\n <span class=\\\"mat-form-field-ripple\\\"\\n [class.mat-accent]=\\\"color == 'accent'\\\"\\n [class.mat-warn]=\\\"color == 'warn'\\\"></span>\\n </div>\\n\\n <div class=\\\"mat-form-field-subscript-wrapper\\\"\\n [ngSwitch]=\\\"_getDisplayedMessages()\\\">\\n <div *ngSwitchCase=\\\"'error'\\\" [@transitionMessages]=\\\"_subscriptAnimationState\\\">\\n <ng-content select=\\\"mat-error\\\"></ng-content>\\n </div>\\n\\n <div class=\\\"mat-form-field-hint-wrapper\\\" *ngSwitchCase=\\\"'hint'\\\"\\n [@transitionMessages]=\\\"_subscriptAnimationState\\\">\\n <!-- TODO(mmalerba): use an actual <mat-hint> once all selectors are switched to mat-* -->\\n <div *ngIf=\\\"hintLabel\\\" [id]=\\\"_hintLabelId\\\" class=\\\"mat-hint\\\">{{hintLabel}}</div>\\n <ng-content select=\\\"mat-hint:not([align='end'])\\\"></ng-content>\\n <div class=\\\"mat-form-field-hint-spacer\\\"></div>\\n <ng-content select=\\\"mat-hint[align='end']\\\"></ng-content>\\n </div>\\n </div>\\n</div>\\n\",\n animations: [matFormFieldAnimations.transitionMessages],\n host: {\n 'class': 'mat-form-field',\n '[class.mat-form-field-appearance-standard]': 'appearance == \"standard\"',\n '[class.mat-form-field-appearance-fill]': 'appearance == \"fill\"',\n '[class.mat-form-field-appearance-outline]': 'appearance == \"outline\"',\n '[class.mat-form-field-appearance-legacy]': 'appearance == \"legacy\"',\n '[class.mat-form-field-invalid]': '_control.errorState',\n '[class.mat-form-field-can-float]': '_canLabelFloat()',\n '[class.mat-form-field-should-float]': '_shouldLabelFloat()',\n '[class.mat-form-field-has-label]': '_hasFloatingLabel()',\n '[class.mat-form-field-hide-placeholder]': '_hideControlPlaceholder()',\n '[class.mat-form-field-disabled]': '_control.disabled',\n '[class.mat-form-field-autofilled]': '_control.autofilled',\n '[class.mat-focused]': '_control.focused',\n '[class.ng-untouched]': '_shouldForward(\"untouched\")',\n '[class.ng-touched]': '_shouldForward(\"touched\")',\n '[class.ng-pristine]': '_shouldForward(\"pristine\")',\n '[class.ng-dirty]': '_shouldForward(\"dirty\")',\n '[class.ng-valid]': '_shouldForward(\"valid\")',\n '[class.ng-invalid]': '_shouldForward(\"invalid\")',\n '[class.ng-pending]': '_shouldForward(\"pending\")',\n '[class._mat-animation-noopable]': '!_animationsEnabled'\n },\n inputs: ['color'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: MAT_FORM_FIELD, useExisting: MatFormField },\n ],\n styles: [\".mat-form-field{display:inline-block;position:relative;text-align:left}[dir=rtl] .mat-form-field{text-align:right}.mat-form-field-wrapper{position:relative}.mat-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-form-field-prefix,.mat-form-field-suffix{white-space:nowrap;flex:none;position:relative}.mat-form-field-infix{display:block;position:relative;flex:auto;min-width:0;width:180px}.cdk-high-contrast-active .mat-form-field-infix{border-image:linear-gradient(transparent, transparent)}.mat-form-field-label-wrapper{position:absolute;left:0;box-sizing:content-box;width:100%;height:100%;overflow:hidden;pointer-events:none}[dir=rtl] .mat-form-field-label-wrapper{left:auto;right:0}.mat-form-field-label{position:absolute;left:0;font:inherit;pointer-events:none;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),width 400ms cubic-bezier(0.25, 0.8, 0.25, 1);display:none}[dir=rtl] .mat-form-field-label{transform-origin:100% 0;left:auto;right:0}.mat-form-field-empty.mat-form-field-label,.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label{display:block}.mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:block;transition:none}.mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float .mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:block}.mat-form-field-label:not(.mat-form-field-empty){transition:none}.mat-form-field-underline{position:absolute;width:100%;pointer-events:none;transform:scale3d(1, 1.0001, 1)}.mat-form-field-ripple{position:absolute;left:0;width:100%;transform-origin:50%;transform:scaleX(0.5);opacity:0;transition:background-color 300ms cubic-bezier(0.55, 0, 0.55, 0.2)}.mat-form-field.mat-focused .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple{opacity:1;transform:none;transition:transform 300ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 300ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-subscript-wrapper{position:absolute;box-sizing:border-box;width:100%;overflow:hidden}.mat-form-field-subscript-wrapper .mat-icon,.mat-form-field-label-wrapper .mat-icon{width:1em;height:1em;font-size:inherit;vertical-align:baseline}.mat-form-field-hint-wrapper{display:flex}.mat-form-field-hint-spacer{flex:1 0 1em}.mat-error{display:block}.mat-form-field-control-wrapper{position:relative}.mat-form-field-hint-end{order:1}.mat-form-field._mat-animation-noopable .mat-form-field-label,.mat-form-field._mat-animation-noopable .mat-form-field-ripple{transition:none}\\n\", \".mat-form-field-appearance-fill .mat-form-field-flex{border-radius:4px 4px 0 0;padding:.75em .75em 0 .75em}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-flex{outline:solid 1px}.mat-form-field-appearance-fill .mat-form-field-underline::before{content:\\\"\\\";display:block;position:absolute;bottom:0;height:1px;width:100%}.mat-form-field-appearance-fill .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-fill:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-fill._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}.mat-form-field-appearance-fill .mat-form-field-subscript-wrapper{padding:0 1em}\\n\", \".mat-input-element{font:inherit;background:transparent;color:currentColor;border:none;outline:none;padding:0;margin:0;width:100%;max-width:100%;vertical-align:bottom;text-align:inherit;box-sizing:content-box}.mat-input-element:-moz-ui-invalid{box-shadow:none}.mat-input-element::-ms-clear,.mat-input-element::-ms-reveal{display:none}.mat-input-element,.mat-input-element::-webkit-search-cancel-button,.mat-input-element::-webkit-search-decoration,.mat-input-element::-webkit-search-results-button,.mat-input-element::-webkit-search-results-decoration{-webkit-appearance:none}.mat-input-element::-webkit-contacts-auto-fill-button,.mat-input-element::-webkit-caps-lock-indicator,.mat-input-element::-webkit-credentials-auto-fill-button{visibility:hidden}.mat-input-element[type=date],.mat-input-element[type=datetime],.mat-input-element[type=datetime-local],.mat-input-element[type=month],.mat-input-element[type=week],.mat-input-element[type=time]{line-height:1}.mat-input-element[type=date]::after,.mat-input-element[type=datetime]::after,.mat-input-element[type=datetime-local]::after,.mat-input-element[type=month]::after,.mat-input-element[type=week]::after,.mat-input-element[type=time]::after{content:\\\" \\\";white-space:pre;width:1px}.mat-input-element::-webkit-inner-spin-button,.mat-input-element::-webkit-calendar-picker-indicator,.mat-input-element::-webkit-clear-button{font-size:.75em}.mat-input-element::placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-moz-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-moz-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element::-webkit-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element::-webkit-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-input-element:-ms-input-placeholder{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-input-element:-ms-input-placeholder:-ms-input-placeholder{-ms-user-select:text}.mat-form-field-hide-placeholder .mat-input-element::placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-moz-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-webkit-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element:-ms-input-placeholder{color:transparent !important;-webkit-text-fill-color:transparent;transition:none}textarea.mat-input-element{resize:vertical;overflow:auto}textarea.mat-input-element.cdk-textarea-autosize{resize:none}textarea.mat-input-element{padding:2px 0;margin:-2px 0}select.mat-input-element{-moz-appearance:none;-webkit-appearance:none;position:relative;background-color:transparent;display:inline-flex;box-sizing:border-box;padding-top:1em;top:-1em;margin-bottom:-1em}select.mat-input-element::-ms-expand{display:none}select.mat-input-element::-moz-focus-inner{border:0}select.mat-input-element:not(:disabled){cursor:pointer}select.mat-input-element::-ms-value{color:inherit;background:none}.mat-focused .cdk-high-contrast-active select.mat-input-element::-ms-value{color:inherit}.mat-form-field-type-mat-native-select .mat-form-field-infix::after{content:\\\"\\\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;position:absolute;top:50%;right:0;margin-top:-2.5px;pointer-events:none}[dir=rtl] .mat-form-field-type-mat-native-select .mat-form-field-infix::after{right:auto;left:0}.mat-form-field-type-mat-native-select .mat-input-element{padding-right:15px}[dir=rtl] .mat-form-field-type-mat-native-select .mat-input-element{padding-right:0;padding-left:15px}.mat-form-field-type-mat-native-select .mat-form-field-label-wrapper{max-width:calc(100% - 10px)}.mat-form-field-type-mat-native-select.mat-form-field-appearance-outline .mat-form-field-infix::after{margin-top:-5px}.mat-form-field-type-mat-native-select.mat-form-field-appearance-fill .mat-form-field-infix::after{margin-top:-10px}\\n\", \".mat-form-field-appearance-legacy .mat-form-field-label{transform:perspective(100px);-ms-transform:none}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon{width:1em}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button{font:inherit;vertical-align:baseline}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button .mat-icon{font-size:inherit}.mat-form-field-appearance-legacy .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-legacy .mat-form-field-ripple{top:0;height:2px;overflow:hidden}.cdk-high-contrast-active .mat-form-field-appearance-legacy .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-legacy.mat-form-field-invalid:not(.mat-focused) .mat-form-field-ripple{height:1px}\\n\", \".mat-form-field-appearance-outline .mat-form-field-wrapper{margin:.25em 0}.mat-form-field-appearance-outline .mat-form-field-flex{padding:0 .75em 0 .75em;margin-top:-0.25em;position:relative}.mat-form-field-appearance-outline .mat-form-field-prefix,.mat-form-field-appearance-outline .mat-form-field-suffix{top:.25em}.mat-form-field-appearance-outline .mat-form-field-outline{display:flex;position:absolute;top:.25em;left:0;right:0;bottom:0;pointer-events:none}.mat-form-field-appearance-outline .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-end{border:1px solid currentColor;min-width:5px}.mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:5px 0 0 5px;border-right-style:none}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-start{border-right-style:solid;border-left-style:none;border-radius:0 5px 5px 0}.mat-form-field-appearance-outline .mat-form-field-outline-end{border-radius:0 5px 5px 0;border-left-style:none;flex-grow:1}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-end{border-left-style:solid;border-right-style:none;border-radius:5px 0 0 5px}.mat-form-field-appearance-outline .mat-form-field-outline-gap{border-radius:.000001px;border:1px solid currentColor;border-left-style:none;border-right-style:none}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-outline-gap{border-top-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline-thick{opacity:0}.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-start,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-end,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-gap{border-width:2px}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline{opacity:0;transition:opacity 100ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline{opacity:0;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline .mat-form-field-subscript-wrapper{padding:0 1em}.mat-form-field-appearance-outline._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-start,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-end,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-gap{transition:none}\\n\", \".mat-form-field-appearance-standard .mat-form-field-flex{padding-top:.75em}.mat-form-field-appearance-standard .mat-form-field-underline{height:1px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-underline{height:0;border-top:solid 1px}.mat-form-field-appearance-standard .mat-form-field-ripple{bottom:0;height:2px}.cdk-high-contrast-active .mat-form-field-appearance-standard .mat-form-field-ripple{height:0;border-top:solid 2px}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}.cdk-high-contrast-active .mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}.mat-form-field-appearance-standard:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity 600ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-form-field-appearance-standard._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [ElementRef]\n }] }, { type: ɵngcc1.Directionality, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]\n }] }, { type: ɵngcc2.Platform }, { type: ɵngcc0.NgZone }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { floatLabel: [{\n type: Input\n }], appearance: [{\n type: Input\n }], hideRequiredMarker: [{\n type: Input\n }], hintLabel: [{\n type: Input\n }], underlineRef: [{\n type: ViewChild,\n args: ['underline']\n }], _connectionContainerRef: [{\n type: ViewChild,\n args: ['connectionContainer', { static: true }]\n }], _inputContainerRef: [{\n type: ViewChild,\n args: ['inputContainer']\n }], _label: [{\n type: ViewChild,\n args: ['label']\n }], _controlNonStatic: [{\n type: ContentChild,\n args: [MatFormFieldControl]\n }], _controlStatic: [{\n type: ContentChild,\n args: [MatFormFieldControl, { static: true }]\n }], _labelChildNonStatic: [{\n type: ContentChild,\n args: [MatLabel]\n }], _labelChildStatic: [{\n type: ContentChild,\n args: [MatLabel, { static: true }]\n }], _placeholderChild: [{\n type: ContentChild,\n args: [MatPlaceholder]\n }], _errorChildren: [{\n type: ContentChildren,\n args: [MAT_ERROR, { descendants: true }]\n }], _hintChildren: [{\n type: ContentChildren,\n args: [_MAT_HINT, { descendants: true }]\n }], _prefixChildren: [{\n type: ContentChildren,\n args: [MAT_PREFIX, { descendants: true }]\n }], _suffixChildren: [{\n type: ContentChildren,\n args: [MAT_SUFFIX, { descendants: true }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatFormFieldModule {\n}\nMatFormFieldModule.ɵfac = function MatFormFieldModule_Factory(t) { return new (t || MatFormFieldModule)(); };\nMatFormFieldModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatFormFieldModule });\nMatFormFieldModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[\n CommonModule,\n MatCommonModule,\n ObserversModule,\n ], MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatFormFieldModule, [{\n type: NgModule,\n args: [{\n declarations: [\n MatError,\n MatFormField,\n MatHint,\n MatLabel,\n MatPlaceholder,\n MatPrefix,\n MatSuffix,\n ],\n imports: [\n CommonModule,\n MatCommonModule,\n ObserversModule,\n ],\n exports: [\n MatCommonModule,\n MatError,\n MatFormField,\n MatHint,\n MatLabel,\n MatPlaceholder,\n MatPrefix,\n MatSuffix,\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatFormFieldModule, { declarations: function () { return [MatError, MatFormField, MatHint, MatLabel, MatPlaceholder, MatPrefix, MatSuffix]; }, imports: function () { return [CommonModule,\n MatCommonModule,\n ObserversModule]; }, exports: function () { return [MatCommonModule, MatError, MatFormField, MatHint, MatLabel, MatPlaceholder, MatPrefix, MatSuffix]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_ERROR, MAT_FORM_FIELD, MAT_FORM_FIELD_DEFAULT_OPTIONS, MAT_PREFIX, MAT_SUFFIX, MatError, MatFormField, MatFormFieldControl, MatFormFieldModule, MatHint, MatLabel, MatPlaceholder, MatPrefix, MatSuffix, _MAT_HINT, getMatFormFieldDuplicatedHintError, getMatFormFieldMissingControlError, getMatFormFieldPlaceholderConflictError, matFormFieldAnimations };\n\n//# sourceMappingURL=form-field.js.map","import { ObserversModule } from '@angular/cdk/observers';\nimport { InjectionToken, forwardRef, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, ChangeDetectorRef, Attribute, Inject, Optional, ViewChild, Input, Output, Directive, NgModule } from '@angular/core';\nimport { mixinTabIndex, mixinColor, mixinDisableRipple, mixinDisabled, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, CheckboxRequiredValidator } from '@angular/forms';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token to be used to override the default options for `mat-slide-toggle`. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/material/core';\nimport * as ɵngcc3 from '@angular/cdk/observers';\n\nconst _c0 = [\"thumbContainer\"];\nconst _c1 = [\"toggleBar\"];\nconst _c2 = [\"input\"];\nconst _c3 = function () { return { enterDuration: 150 }; };\nconst _c4 = [\"*\"];\nconst MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS = new InjectionToken('mat-slide-toggle-default-options', {\n providedIn: 'root',\n factory: () => ({ disableToggleValue: false })\n});\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Increasing integer for generating unique ids for slide-toggle components.\nlet nextUniqueId = 0;\n/** @docs-private */\nconst MAT_SLIDE_TOGGLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSlideToggle),\n multi: true\n};\n/** Change event object emitted by a MatSlideToggle. */\nclass MatSlideToggleChange {\n constructor(\n /** The source MatSlideToggle of the event. */\n source, \n /** The new `checked` value of the MatSlideToggle. */\n checked) {\n this.source = source;\n this.checked = checked;\n }\n}\n// Boilerplate for applying mixins to MatSlideToggle.\n/** @docs-private */\nclass MatSlideToggleBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatSlideToggleMixinBase = mixinTabIndex(mixinColor(mixinDisableRipple(mixinDisabled(MatSlideToggleBase)), 'accent'));\n/** Represents a slidable \"switch\" toggle that can be moved between on and off. */\nclass MatSlideToggle extends _MatSlideToggleMixinBase {\n constructor(elementRef, _focusMonitor, _changeDetectorRef, tabIndex, defaults, _animationMode) {\n super(elementRef);\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this.defaults = defaults;\n this._animationMode = _animationMode;\n this._onChange = (_) => { };\n this._onTouched = () => { };\n this._uniqueId = `mat-slide-toggle-${++nextUniqueId}`;\n this._required = false;\n this._checked = false;\n /** Name value will be applied to the input element if present. */\n this.name = null;\n /** A unique id for the slide-toggle input. If none is supplied, it will be auto-generated. */\n this.id = this._uniqueId;\n /** Whether the label should appear after or before the slide-toggle. Defaults to 'after'. */\n this.labelPosition = 'after';\n /** Used to set the aria-label attribute on the underlying input element. */\n this.ariaLabel = null;\n /** Used to set the aria-labelledby attribute on the underlying input element. */\n this.ariaLabelledby = null;\n /** An event will be dispatched each time the slide-toggle changes its value. */\n this.change = new EventEmitter();\n /**\n * An event will be dispatched each time the slide-toggle input is toggled.\n * This event is always emitted when the user toggles the slide toggle, but this does not mean\n * the slide toggle's value has changed.\n */\n this.toggleChange = new EventEmitter();\n this.tabIndex = parseInt(tabIndex) || 0;\n }\n /** Whether the slide-toggle is required. */\n get required() { return this._required; }\n set required(value) { this._required = coerceBooleanProperty(value); }\n /** Whether the slide-toggle element is checked or not. */\n get checked() { return this._checked; }\n set checked(value) {\n this._checked = coerceBooleanProperty(value);\n this._changeDetectorRef.markForCheck();\n }\n /** Returns the unique id for the visual hidden input. */\n get inputId() { return `${this.id || this._uniqueId}-input`; }\n ngAfterContentInit() {\n this._focusMonitor\n .monitor(this._elementRef, true)\n .subscribe(focusOrigin => {\n // Only forward focus manually when it was received programmatically or through the\n // keyboard. We should not do this for mouse/touch focus for two reasons:\n // 1. It can prevent clicks from landing in Chrome (see #18269).\n // 2. They're already handled by the wrapping `label` element.\n if (focusOrigin === 'keyboard' || focusOrigin === 'program') {\n this._inputElement.nativeElement.focus();\n }\n else if (!focusOrigin) {\n // When a focused element becomes disabled, the browser *immediately* fires a blur event.\n // Angular does not expect events to be raised during change detection, so any state\n // change (such as a form control's 'ng-touched') will cause a changed-after-checked\n // error. See https://github.com/angular/angular/issues/17793. To work around this,\n // we defer telling the form control it has been touched until the next tick.\n Promise.resolve().then(() => this._onTouched());\n }\n });\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n /** Method being called whenever the underlying input emits a change event. */\n _onChangeEvent(event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the component's `change` output.\n event.stopPropagation();\n this.toggleChange.emit();\n // When the slide toggle's config disables toggle change event by setting\n // `disableToggleValue: true`, the slide toggle's value does not change, and the\n // checked state of the underlying input needs to be changed back.\n if (this.defaults.disableToggleValue) {\n this._inputElement.nativeElement.checked = this.checked;\n return;\n }\n // Sync the value from the underlying input element with the component instance.\n this.checked = this._inputElement.nativeElement.checked;\n // Emit our custom change event only if the underlying input emitted one. This ensures that\n // there is no change event, when the checked state changes programmatically.\n this._emitChangeEvent();\n }\n /** Method being called whenever the slide-toggle has been clicked. */\n _onInputClick(event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `slide-toggle` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value) {\n this.checked = !!value;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn) {\n this._onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n /** Implemented as a part of ControlValueAccessor. */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n /** Focuses the slide-toggle. */\n focus(options, origin) {\n if (origin) {\n this._focusMonitor.focusVia(this._inputElement, origin, options);\n }\n else {\n this._inputElement.nativeElement.focus(options);\n }\n }\n /** Toggles the checked state of the slide-toggle. */\n toggle() {\n this.checked = !this.checked;\n this._onChange(this.checked);\n }\n /**\n * Emits a change event on the `change` output. Also notifies the FormControl about the change.\n */\n _emitChangeEvent() {\n this._onChange(this.checked);\n this.change.emit(new MatSlideToggleChange(this, this.checked));\n }\n /** Method being called whenever the label text changes. */\n _onLabelTextChange() {\n // Since the event of the `cdkObserveContent` directive runs outside of the zone, the\n // slide-toggle component will be only marked for check, but no actual change detection runs\n // automatically. Instead of going back into the zone in order to trigger a change detection\n // which causes *all* components to be checked (if explicitly marked or not using OnPush),\n // we only trigger an explicit change detection for the slide-toggle view and its children.\n this._changeDetectorRef.detectChanges();\n }\n}\nMatSlideToggle.ɵfac = function MatSlideToggle_Factory(t) { return new (t || MatSlideToggle)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵinjectAttribute('tabindex'), ɵngcc0.ɵɵdirectiveInject(MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatSlideToggle.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatSlideToggle, selectors: [[\"mat-slide-toggle\"]], viewQuery: function MatSlideToggle_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 5);\n ɵngcc0.ɵɵviewQuery(_c1, 5);\n ɵngcc0.ɵɵviewQuery(_c2, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._thumbEl = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._thumbBarEl = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._inputElement = _t.first);\n } }, hostAttrs: [1, \"mat-slide-toggle\"], hostVars: 12, hostBindings: function MatSlideToggle_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"id\", ctx.id);\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? null : -1)(\"aria-label\", null)(\"aria-labelledby\", null);\n ɵngcc0.ɵɵclassProp(\"mat-checked\", ctx.checked)(\"mat-disabled\", ctx.disabled)(\"mat-slide-toggle-label-before\", ctx.labelPosition == \"before\")(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\");\n } }, inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", color: \"color\", tabIndex: \"tabIndex\", name: \"name\", id: \"id\", labelPosition: \"labelPosition\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], required: \"required\", checked: \"checked\" }, outputs: { change: \"change\", toggleChange: \"toggleChange\" }, exportAs: [\"matSlideToggle\"], features: [ɵngcc0.ɵɵProvidersFeature([MAT_SLIDE_TOGGLE_VALUE_ACCESSOR]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c4, decls: 16, vars: 18, consts: [[1, \"mat-slide-toggle-label\"], [\"label\", \"\"], [1, \"mat-slide-toggle-bar\"], [\"toggleBar\", \"\"], [\"type\", \"checkbox\", \"role\", \"switch\", 1, \"mat-slide-toggle-input\", \"cdk-visually-hidden\", 3, \"id\", \"required\", \"tabIndex\", \"checked\", \"disabled\", \"change\", \"click\"], [\"input\", \"\"], [1, \"mat-slide-toggle-thumb-container\"], [\"thumbContainer\", \"\"], [1, \"mat-slide-toggle-thumb\"], [\"mat-ripple\", \"\", 1, \"mat-slide-toggle-ripple\", \"mat-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\"], [1, \"mat-ripple-element\", \"mat-slide-toggle-persistent-ripple\"], [1, \"mat-slide-toggle-content\", 3, \"cdkObserveContent\"], [\"labelContent\", \"\"], [2, \"display\", \"none\"]], template: function MatSlideToggle_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"label\", 0, 1);\n ɵngcc0.ɵɵelementStart(2, \"div\", 2, 3);\n ɵngcc0.ɵɵelementStart(4, \"input\", 4, 5);\n ɵngcc0.ɵɵlistener(\"change\", function MatSlideToggle_Template_input_change_4_listener($event) { return ctx._onChangeEvent($event); })(\"click\", function MatSlideToggle_Template_input_click_4_listener($event) { return ctx._onInputClick($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"div\", 6, 7);\n ɵngcc0.ɵɵelement(8, \"div\", 8);\n ɵngcc0.ɵɵelementStart(9, \"div\", 9);\n ɵngcc0.ɵɵelement(10, \"div\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(11, \"span\", 11, 12);\n ɵngcc0.ɵɵlistener(\"cdkObserveContent\", function MatSlideToggle_Template_span_cdkObserveContent_11_listener() { return ctx._onLabelTextChange(); });\n ɵngcc0.ɵɵelementStart(13, \"span\", 13);\n ɵngcc0.ɵɵtext(14, \"\\u00A0\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(15);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n const _r4 = ɵngcc0.ɵɵreference(12);\n ɵngcc0.ɵɵattribute(\"for\", ctx.inputId);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"mat-slide-toggle-bar-no-side-margin\", !_r4.textContent || !_r4.textContent.trim());\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.inputId)(\"required\", ctx.required)(\"tabIndex\", ctx.tabIndex)(\"checked\", ctx.checked)(\"disabled\", ctx.disabled);\n ɵngcc0.ɵɵattribute(\"name\", ctx.name)(\"aria-checked\", ctx.checked.toString())(\"aria-label\", ctx.ariaLabel)(\"aria-labelledby\", ctx.ariaLabelledby);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵproperty(\"matRippleTrigger\", _r0)(\"matRippleDisabled\", ctx.disableRipple || ctx.disabled)(\"matRippleCentered\", true)(\"matRippleRadius\", 20)(\"matRippleAnimation\", ɵngcc0.ɵɵpureFunction0(17, _c3));\n } }, directives: [ɵngcc2.MatRipple, ɵngcc3.CdkObserveContent], styles: [\".mat-slide-toggle{display:inline-block;height:24px;max-width:100%;line-height:24px;white-space:nowrap;outline:none;-webkit-tap-highlight-color:transparent}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(16px, 0, 0)}[dir=rtl] .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(-16px, 0, 0)}.mat-slide-toggle.mat-disabled{opacity:.38}.mat-slide-toggle.mat-disabled .mat-slide-toggle-label,.mat-slide-toggle.mat-disabled .mat-slide-toggle-thumb-container{cursor:default}.mat-slide-toggle-label{display:flex;flex:1;flex-direction:row;align-items:center;height:inherit;cursor:pointer}.mat-slide-toggle-content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-slide-toggle-label-before .mat-slide-toggle-label{order:1}.mat-slide-toggle-label-before .mat-slide-toggle-bar{order:2}[dir=rtl] .mat-slide-toggle-label-before .mat-slide-toggle-bar,.mat-slide-toggle-bar{margin-right:8px;margin-left:0}[dir=rtl] .mat-slide-toggle-bar,.mat-slide-toggle-label-before .mat-slide-toggle-bar{margin-left:8px;margin-right:0}.mat-slide-toggle-bar-no-side-margin{margin-left:0;margin-right:0}.mat-slide-toggle-thumb-container{position:absolute;z-index:1;width:20px;height:20px;top:-3px;left:0;transform:translate3d(0, 0, 0);transition:all 80ms linear;transition-property:transform}._mat-animation-noopable .mat-slide-toggle-thumb-container{transition:none}[dir=rtl] .mat-slide-toggle-thumb-container{left:auto;right:0}.mat-slide-toggle-thumb{height:20px;width:20px;border-radius:50%}.mat-slide-toggle-bar{position:relative;width:36px;height:14px;flex-shrink:0;border-radius:8px}.mat-slide-toggle-input{bottom:0;left:10px}[dir=rtl] .mat-slide-toggle-input{left:auto;right:10px}.mat-slide-toggle-bar,.mat-slide-toggle-thumb{transition:all 80ms linear;transition-property:background-color;transition-delay:50ms}._mat-animation-noopable .mat-slide-toggle-bar,._mat-animation-noopable .mat-slide-toggle-thumb{transition:none}.mat-slide-toggle .mat-slide-toggle-ripple{position:absolute;top:calc(50% - 20px);left:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-slide-toggle .mat-slide-toggle-ripple .mat-ripple-element:not(.mat-slide-toggle-persistent-ripple){opacity:.12}.mat-slide-toggle-persistent-ripple{width:100%;height:100%;transform:none}.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:.04}.mat-slide-toggle:not(.mat-disabled).cdk-keyboard-focused .mat-slide-toggle-persistent-ripple{opacity:.12}.mat-slide-toggle-persistent-ripple,.mat-slide-toggle.mat-disabled .mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:0}@media(hover: none){.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{display:none}}.cdk-high-contrast-active .mat-slide-toggle-thumb,.cdk-high-contrast-active .mat-slide-toggle-bar{border:1px solid}.cdk-high-contrast-active .mat-slide-toggle.cdk-keyboard-focused .mat-slide-toggle-bar{outline:2px dotted;outline-offset:5px}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatSlideToggle.ctorParameters = () => [\n { type: ElementRef },\n { type: FocusMonitor },\n { type: ChangeDetectorRef },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatSlideToggle.propDecorators = {\n _thumbEl: [{ type: ViewChild, args: ['thumbContainer',] }],\n _thumbBarEl: [{ type: ViewChild, args: ['toggleBar',] }],\n name: [{ type: Input }],\n id: [{ type: Input }],\n labelPosition: [{ type: Input }],\n ariaLabel: [{ type: Input, args: ['aria-label',] }],\n ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],\n required: [{ type: Input }],\n checked: [{ type: Input }],\n change: [{ type: Output }],\n toggleChange: [{ type: Output }],\n _inputElement: [{ type: ViewChild, args: ['input',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSlideToggle, [{\n type: Component,\n args: [{\n selector: 'mat-slide-toggle',\n exportAs: 'matSlideToggle',\n host: {\n 'class': 'mat-slide-toggle',\n '[id]': 'id',\n // Needs to be `-1` so it can still receive programmatic focus.\n '[attr.tabindex]': 'disabled ? null : -1',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[class.mat-checked]': 'checked',\n '[class.mat-disabled]': 'disabled',\n '[class.mat-slide-toggle-label-before]': 'labelPosition == \"before\"',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"'\n },\n template: \"<label [attr.for]=\\\"inputId\\\" class=\\\"mat-slide-toggle-label\\\" #label>\\n <div #toggleBar class=\\\"mat-slide-toggle-bar\\\"\\n [class.mat-slide-toggle-bar-no-side-margin]=\\\"!labelContent.textContent || !labelContent.textContent.trim()\\\">\\n\\n <input #input class=\\\"mat-slide-toggle-input cdk-visually-hidden\\\" type=\\\"checkbox\\\"\\n role=\\\"switch\\\"\\n [id]=\\\"inputId\\\"\\n [required]=\\\"required\\\"\\n [tabIndex]=\\\"tabIndex\\\"\\n [checked]=\\\"checked\\\"\\n [disabled]=\\\"disabled\\\"\\n [attr.name]=\\\"name\\\"\\n [attr.aria-checked]=\\\"checked.toString()\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledby\\\"\\n (change)=\\\"_onChangeEvent($event)\\\"\\n (click)=\\\"_onInputClick($event)\\\">\\n\\n <div class=\\\"mat-slide-toggle-thumb-container\\\" #thumbContainer>\\n <div class=\\\"mat-slide-toggle-thumb\\\"></div>\\n <div class=\\\"mat-slide-toggle-ripple mat-focus-indicator\\\" mat-ripple\\n [matRippleTrigger]=\\\"label\\\"\\n [matRippleDisabled]=\\\"disableRipple || disabled\\\"\\n [matRippleCentered]=\\\"true\\\"\\n [matRippleRadius]=\\\"20\\\"\\n [matRippleAnimation]=\\\"{enterDuration: 150}\\\">\\n\\n <div class=\\\"mat-ripple-element mat-slide-toggle-persistent-ripple\\\"></div>\\n </div>\\n </div>\\n\\n </div>\\n\\n <span class=\\\"mat-slide-toggle-content\\\" #labelContent (cdkObserveContent)=\\\"_onLabelTextChange()\\\">\\n <!-- Add an invisible span so JAWS can read the label -->\\n <span style=\\\"display:none\\\"> </span>\\n <ng-content></ng-content>\\n </span>\\n</label>\\n\",\n providers: [MAT_SLIDE_TOGGLE_VALUE_ACCESSOR],\n inputs: ['disabled', 'disableRipple', 'color', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-slide-toggle{display:inline-block;height:24px;max-width:100%;line-height:24px;white-space:nowrap;outline:none;-webkit-tap-highlight-color:transparent}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(16px, 0, 0)}[dir=rtl] .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(-16px, 0, 0)}.mat-slide-toggle.mat-disabled{opacity:.38}.mat-slide-toggle.mat-disabled .mat-slide-toggle-label,.mat-slide-toggle.mat-disabled .mat-slide-toggle-thumb-container{cursor:default}.mat-slide-toggle-label{display:flex;flex:1;flex-direction:row;align-items:center;height:inherit;cursor:pointer}.mat-slide-toggle-content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-slide-toggle-label-before .mat-slide-toggle-label{order:1}.mat-slide-toggle-label-before .mat-slide-toggle-bar{order:2}[dir=rtl] .mat-slide-toggle-label-before .mat-slide-toggle-bar,.mat-slide-toggle-bar{margin-right:8px;margin-left:0}[dir=rtl] .mat-slide-toggle-bar,.mat-slide-toggle-label-before .mat-slide-toggle-bar{margin-left:8px;margin-right:0}.mat-slide-toggle-bar-no-side-margin{margin-left:0;margin-right:0}.mat-slide-toggle-thumb-container{position:absolute;z-index:1;width:20px;height:20px;top:-3px;left:0;transform:translate3d(0, 0, 0);transition:all 80ms linear;transition-property:transform}._mat-animation-noopable .mat-slide-toggle-thumb-container{transition:none}[dir=rtl] .mat-slide-toggle-thumb-container{left:auto;right:0}.mat-slide-toggle-thumb{height:20px;width:20px;border-radius:50%}.mat-slide-toggle-bar{position:relative;width:36px;height:14px;flex-shrink:0;border-radius:8px}.mat-slide-toggle-input{bottom:0;left:10px}[dir=rtl] .mat-slide-toggle-input{left:auto;right:10px}.mat-slide-toggle-bar,.mat-slide-toggle-thumb{transition:all 80ms linear;transition-property:background-color;transition-delay:50ms}._mat-animation-noopable .mat-slide-toggle-bar,._mat-animation-noopable .mat-slide-toggle-thumb{transition:none}.mat-slide-toggle .mat-slide-toggle-ripple{position:absolute;top:calc(50% - 20px);left:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-slide-toggle .mat-slide-toggle-ripple .mat-ripple-element:not(.mat-slide-toggle-persistent-ripple){opacity:.12}.mat-slide-toggle-persistent-ripple{width:100%;height:100%;transform:none}.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:.04}.mat-slide-toggle:not(.mat-disabled).cdk-keyboard-focused .mat-slide-toggle-persistent-ripple{opacity:.12}.mat-slide-toggle-persistent-ripple,.mat-slide-toggle.mat-disabled .mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:0}@media(hover: none){.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{display:none}}.cdk-high-contrast-active .mat-slide-toggle-thumb,.cdk-high-contrast-active .mat-slide-toggle-bar{border:1px solid}.cdk-high-contrast-active .mat-slide-toggle.cdk-keyboard-focused .mat-slide-toggle-bar{outline:2px dotted;outline-offset:5px}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.FocusMonitor }, { type: ɵngcc0.ChangeDetectorRef }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { name: [{\n type: Input\n }], id: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], change: [{\n type: Output\n }], toggleChange: [{\n type: Output\n }], required: [{\n type: Input\n }], checked: [{\n type: Input\n }], _thumbEl: [{\n type: ViewChild,\n args: ['thumbContainer']\n }], _thumbBarEl: [{\n type: ViewChild,\n args: ['toggleBar']\n }], _inputElement: [{\n type: ViewChild,\n args: ['input']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MatSlideToggleRequiredValidator),\n multi: true\n};\n/**\n * Validator for Material slide-toggle components with the required attribute in a\n * template-driven form. The default validator for required form controls asserts\n * that the control value is not undefined but that is not appropriate for a slide-toggle\n * where the value is always defined.\n *\n * Required slide-toggle form controls are valid when checked.\n */\nclass MatSlideToggleRequiredValidator extends CheckboxRequiredValidator {\n}\nMatSlideToggleRequiredValidator.ɵfac = /*@__PURE__*/ function () { let ɵMatSlideToggleRequiredValidator_BaseFactory; return function MatSlideToggleRequiredValidator_Factory(t) { return (ɵMatSlideToggleRequiredValidator_BaseFactory || (ɵMatSlideToggleRequiredValidator_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatSlideToggleRequiredValidator)))(t || MatSlideToggleRequiredValidator); }; }();\nMatSlideToggleRequiredValidator.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatSlideToggleRequiredValidator, selectors: [[\"mat-slide-toggle\", \"required\", \"\", \"formControlName\", \"\"], [\"mat-slide-toggle\", \"required\", \"\", \"formControl\", \"\"], [\"mat-slide-toggle\", \"required\", \"\", \"ngModel\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSlideToggleRequiredValidator, [{\n type: Directive,\n args: [{\n selector: `mat-slide-toggle[required][formControlName],\n mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]`,\n providers: [MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** This module is used by both original and MDC-based slide-toggle implementations. */\nclass _MatSlideToggleRequiredValidatorModule {\n}\n_MatSlideToggleRequiredValidatorModule.ɵfac = function _MatSlideToggleRequiredValidatorModule_Factory(t) { return new (t || _MatSlideToggleRequiredValidatorModule)(); };\n_MatSlideToggleRequiredValidatorModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: _MatSlideToggleRequiredValidatorModule });\n_MatSlideToggleRequiredValidatorModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(_MatSlideToggleRequiredValidatorModule, [{\n type: NgModule,\n args: [{\n exports: [MatSlideToggleRequiredValidator],\n declarations: [MatSlideToggleRequiredValidator]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(_MatSlideToggleRequiredValidatorModule, { declarations: [MatSlideToggleRequiredValidator], exports: [MatSlideToggleRequiredValidator] }); })();\nclass MatSlideToggleModule {\n}\nMatSlideToggleModule.ɵfac = function MatSlideToggleModule_Factory(t) { return new (t || MatSlideToggleModule)(); };\nMatSlideToggleModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatSlideToggleModule });\nMatSlideToggleModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[\n _MatSlideToggleRequiredValidatorModule,\n MatRippleModule,\n MatCommonModule,\n ObserversModule,\n ], _MatSlideToggleRequiredValidatorModule, MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSlideToggleModule, [{\n type: NgModule,\n args: [{\n imports: [\n _MatSlideToggleRequiredValidatorModule,\n MatRippleModule,\n MatCommonModule,\n ObserversModule,\n ],\n exports: [\n _MatSlideToggleRequiredValidatorModule,\n MatSlideToggle,\n MatCommonModule\n ],\n declarations: [MatSlideToggle]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatSlideToggleModule, { declarations: function () { return [MatSlideToggle]; }, imports: function () { return [_MatSlideToggleRequiredValidatorModule, MatRippleModule,\n MatCommonModule,\n ObserversModule]; }, exports: function () { return [_MatSlideToggleRequiredValidatorModule, MatSlideToggle, MatCommonModule]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS, MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR, MAT_SLIDE_TOGGLE_VALUE_ACCESSOR, MatSlideToggle, MatSlideToggleChange, MatSlideToggleModule, MatSlideToggleRequiredValidator, _MatSlideToggleRequiredValidatorModule };\n\n//# sourceMappingURL=slide-toggle.js.map","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var baseIteratee = require('./_baseIteratee'),\n baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\n","import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';\nexport const defaultThrottleConfig = {\n leading: true,\n trailing: false\n};\nexport function throttle(durationSelector, config = defaultThrottleConfig) {\n return (source) => source.lift(new ThrottleOperator(durationSelector, !!config.leading, !!config.trailing));\n}\nclass ThrottleOperator {\n constructor(durationSelector, leading, trailing) {\n this.durationSelector = durationSelector;\n this.leading = leading;\n this.trailing = trailing;\n }\n call(subscriber, source) {\n return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));\n }\n}\nclass ThrottleSubscriber extends SimpleOuterSubscriber {\n constructor(destination, durationSelector, _leading, _trailing) {\n super(destination);\n this.destination = destination;\n this.durationSelector = durationSelector;\n this._leading = _leading;\n this._trailing = _trailing;\n this._hasValue = false;\n }\n _next(value) {\n this._hasValue = true;\n this._sendValue = value;\n if (!this._throttled) {\n if (this._leading) {\n this.send();\n }\n else {\n this.throttle(value);\n }\n }\n }\n send() {\n const { _hasValue, _sendValue } = this;\n if (_hasValue) {\n this.destination.next(_sendValue);\n this.throttle(_sendValue);\n }\n this._hasValue = false;\n this._sendValue = undefined;\n }\n throttle(value) {\n const duration = this.tryDurationSelector(value);\n if (!!duration) {\n this.add(this._throttled = innerSubscribe(duration, new SimpleInnerSubscriber(this)));\n }\n }\n tryDurationSelector(value) {\n try {\n return this.durationSelector(value);\n }\n catch (err) {\n this.destination.error(err);\n return null;\n }\n }\n throttlingDone() {\n const { _throttled, _trailing } = this;\n if (_throttled) {\n _throttled.unsubscribe();\n }\n this._throttled = undefined;\n if (_trailing) {\n this.send();\n }\n }\n notifyNext() {\n this.throttlingDone();\n }\n notifyComplete() {\n this.throttlingDone();\n }\n}\n//# sourceMappingURL=throttle.js.map","import { Subscriber } from '../Subscriber';\nimport { async } from '../scheduler/async';\nimport { defaultThrottleConfig } from './throttle';\nexport function throttleTime(duration, scheduler = async, config = defaultThrottleConfig) {\n return (source) => source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing));\n}\nclass ThrottleTimeOperator {\n constructor(duration, scheduler, leading, trailing) {\n this.duration = duration;\n this.scheduler = scheduler;\n this.leading = leading;\n this.trailing = trailing;\n }\n call(subscriber, source) {\n return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));\n }\n}\nclass ThrottleTimeSubscriber extends Subscriber {\n constructor(destination, duration, scheduler, leading, trailing) {\n super(destination);\n this.duration = duration;\n this.scheduler = scheduler;\n this.leading = leading;\n this.trailing = trailing;\n this._hasTrailingValue = false;\n this._trailingValue = null;\n }\n _next(value) {\n if (this.throttled) {\n if (this.trailing) {\n this._trailingValue = value;\n this._hasTrailingValue = true;\n }\n }\n else {\n this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));\n if (this.leading) {\n this.destination.next(value);\n }\n else if (this.trailing) {\n this._trailingValue = value;\n this._hasTrailingValue = true;\n }\n }\n }\n _complete() {\n if (this._hasTrailingValue) {\n this.destination.next(this._trailingValue);\n this.destination.complete();\n }\n else {\n this.destination.complete();\n }\n }\n clearThrottle() {\n const throttled = this.throttled;\n if (throttled) {\n if (this.trailing && this._hasTrailingValue) {\n this.destination.next(this._trailingValue);\n this._trailingValue = null;\n this._hasTrailingValue = false;\n }\n throttled.unsubscribe();\n this.remove(throttled);\n this.throttled = null;\n }\n }\n}\nfunction dispatchNext(arg) {\n const { subscriber } = arg;\n subscriber.clearThrottle();\n}\n//# sourceMappingURL=throttleTime.js.map","import { Injectable } from '@angular/core';\nimport { UploadValidator } from '@common/uploads/validation/upload-validator';\nimport { FileSizeValidation } from '@common/uploads/validation/validations/file-size-validation';\nimport { convertToBytes } from '@common/core/utils/convertToBytes';\nimport { AllowedExtensionsValidation } from '@common/uploads/validation/validations/allowed-extensions-validation';\nimport { BlockedExtensionsValidation } from '@common/uploads/validation/validations/blocked-extensions-validation';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DriveUploadValidator extends UploadValidator {\n protected readonly DEFAULT_MAX_FILE_SIZE_MB = 8;\n\n protected initValidations() {\n this.validations.push(\n new FileSizeValidation(\n {maxSize: this.getMaxFileSize()},\n this.i18n\n )\n );\n\n const allowedExtensions = this.getAllowedExtensions(),\n blockedExtensions = this.getBlockedExtensions();\n\n if (allowedExtensions && allowedExtensions.length) {\n this.validations.push(new AllowedExtensionsValidation(\n {extensions: allowedExtensions}, this.i18n\n ));\n }\n\n if (blockedExtensions && blockedExtensions.length) {\n this.validations.push(new BlockedExtensionsValidation(\n {extensions: blockedExtensions}, this.i18n\n ));\n }\n }\n\n protected getMaxFileSize(): number {\n return this.settings.get(\n 'uploads.max_size',\n convertToBytes(this.DEFAULT_MAX_FILE_SIZE_MB, 'MB')\n );\n }\n\n protected getAllowedExtensions() {\n return this.settings.getJson('uploads.allowed_extensions');\n }\n\n protected getBlockedExtensions() {\n return this.settings.getJson('uploads.blocked_extensions');\n }\n}\n","import { DriveFolder } from '../../folders/models/driveFolder';\nimport { DriveEntry } from '../../files/models/drive-entry';\nimport { ConfirmModalData } from '@common/core/ui/confirm-modal/confirm-modal.component';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { UploadedFile } from '@common/uploads/uploaded-file';\nimport { SortColumn, SortDirection } from '../../entries/available-sorts';\nimport { LoadEntriesAction } from './events';\nimport { DriveApiIndexParams } from '../../drive-entry-api.service';\nimport { FileEntry } from '@common/uploads/types/file-entry';\nimport { ShareableLink } from '../../sharing/links/models/shareable-link';\nimport { MatDialogConfig } from '@angular/material/dialog';\nimport { User } from '../../../../common/core/types/models/User';\nimport { Workspace } from '../../../../common/workspaces/types/workspace';\nimport { DrivePage } from '../models/drive-page';\n\nexport class LoadUserFolders {\n static readonly type = '[Drive] Load User Folders';\n}\n\nexport class LoadUserSpaceUsage {\n static readonly type = '[Drive] Load User Space Usage';\n}\n\nexport class BuildFolderTree {\n static readonly type = '[Drive] Build Folder Tree';\n constructor(public folders?: DriveFolder[]) {}\n}\n\nexport class OpenFolder {\n static readonly type = '[Drive] Open Folder';\n constructor(public folder?: DriveFolder) {}\n}\n\nexport class OpenSearchPage {\n static readonly type = '[Drive] Open Search Page';\n constructor(public queryParams?: {\n filters?: string,\n query?: string,\n }) {}\n}\n\nexport class SelectEntries {\n static readonly type = '[Drive] Select Entries';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class SelectAllEntries {\n static readonly type = '[Drive] Select All Entries';\n}\n\nexport class DeselectAllEntries {\n static readonly type = '[Drive] Deselect All Entries';\n}\n\nexport class DeleteSelectedEntries {\n static readonly type = '[Drive] Delete Selected Entries';\n}\n\nexport class OpenUploadsPanel {\n static readonly type = '[Drive] Open UploadsApiService Panel';\n}\n\nexport class CloseUploadsPanel {\n static readonly type = '[Drive] Close UploadsApiService Panel';\n}\n\nexport class AddEntries {\n static readonly type = '[Drive] Add Entries';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class MoveEntries {\n static readonly type = '[Drive API] Move Entries';\n constructor(public destination: DriveFolder, public entries?: DriveEntry[]) {}\n}\n\nexport class OpenDialog {\n static readonly type = '[Drive] Open Dialog';\n constructor(public dialog: ComponentType<any>, public data?: object, public config?: MatDialogConfig) {}\n}\n\nexport class OpenConfirmDialog {\n static readonly type = '[Drive] Open Confirm Dialog';\n constructor(public data: ConfirmModalData, public confirmAction: any) {}\n}\n\nexport class SetViewMode {\n static readonly type = '[Drive] Set View Mode';\n constructor(public mode: 'list'|'grid') {}\n}\n\nexport class ToggleDetailsSidebar {\n static readonly type = '[Drive] Toggle Details';\n}\n\nexport class ToggleSidebar {\n static readonly type = '[Drive] Toggle Sidebar';\n}\n\nexport class UploadFiles {\n static readonly type = '[Drive] Upload Files';\n constructor(public files: UploadedFile[]) {}\n}\n\nexport class RestoreTrashedEntries {\n static readonly type = '[Drive] Restore Trashed Entries';\n constructor(public entries?: DriveEntry[]) {}\n}\n\nexport class DeleteTrashedEntriesForever {\n static readonly type = '[Drive] Delete Trashed Entries Forever';\n}\n\nexport class EmptyTrash {\n static readonly type = '[Drive] Empty Trash';\n}\n\nexport class OpenFilePreview {\n static readonly type = '[Drive] Open File Preview Overlay';\n constructor(public entries?: DriveEntry[]) {}\n}\n\nexport class DownloadEntries {\n static readonly type = '[Drive] Download Files';\n constructor(public entries?: FileEntry[], public link?: ShareableLink, public password?: string) {}\n}\n\nexport class AddStar {\n static readonly type = '[Drive] Add a Star';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class RemoveStar {\n static readonly type = '[Drive] Remove Star';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class RemoveEntries {\n static readonly type = '[Drive] Remove Entries';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class ChangeSort {\n static readonly type = '[Drive] Change Sort';\n constructor(public sort: SortColumn, public direction: SortDirection = 'desc') {}\n}\n\nexport class LoadMoreEntries implements LoadEntriesAction {\n static readonly type = '[Drive Infinite Scroll] Load More Entries';\n public loadMore = true;\n constructor(public queryParams: DriveApiIndexParams = {}) {}\n}\n\nexport class ReloadPageEntries implements LoadEntriesAction {\n static readonly type = '[Drive] Reload Page Entries';\n constructor(public queryParams: DriveApiIndexParams = {}, public page?: DrivePage) {}\n}\n\nexport class CopySelectedEntries {\n static readonly type = '[Drive] Copy Selected Entries';\n}\n\nexport class OpenUploadWindow {\n static readonly type = '[Drive] Open Upload Window';\n constructor(public type: 'file'|'directory') {}\n}\n\nexport class ShowLoadingToast {\n static readonly type = '[Drive] Show Loading Toast';\n constructor(public message: string) {}\n}\n\nexport class HideLoadingToast {\n static readonly type = '[Drive] Hide Loading Toast';\n}\n\nexport class ResetState {\n static readonly type = '[Drive] Reset State';\n}\n\nexport class UpdateEntries {\n static readonly type = '[Drive] Update Entries';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class SetCurrentUser {\n static readonly type = '[Drive] Set Current User';\n constructor(public user: User) {}\n}\n\nexport class SetWorkspace {\n static readonly type = '[Drive] Set Workspace';\n constructor(public workspace: Workspace) {}\n}\n\nexport class UpdateEntryDescription {\n static readonly type = '[Drive] Update Entry Description';\n constructor(public entry: FileEntry, public description: string) {}\n}\n\n\n\n\n\n","import { DrivePageType } from './available-pages';\nimport { DriveFolder } from '../../folders/models/driveFolder';\nimport { SortColumn, SortDirection } from '../../entries/available-sorts';\n\nexport const DRIVE_PAGE_NAMES: {[key: string]: DrivePageType} = {\n FOLDER: 'folder',\n RECENT: 'recent',\n TRASH: 'trash',\n SHARES: 'shares',\n STARRED: 'starred',\n SEARCH: 'search',\n WORKSPACES: 'workspaces',\n};\n\nexport interface DrivePageParams {\n name: DrivePageType;\n viewName: string;\n folder?: DriveFolder;\n folderHash?: string;\n hasActions?: boolean;\n disableSort?: boolean;\n sortColumn?: SortColumn;\n queryParams?: object;\n sortDirection?: SortDirection;\n}\n\nexport class DrivePage implements DrivePageParams {\n name = null;\n viewName = null;\n folder = null;\n folderHash = null;\n hasActions = false;\n sortColumn = 'updated_at' as SortColumn;\n sortDirection = 'desc' as SortDirection;\n queryParams = {};\n\n constructor(params: DrivePageParams) {\n Object.keys(params).forEach(key => {\n this[key] = params[key];\n });\n }\n}\n\nexport const RECENT_PAGE = new DrivePage({\n name: DRIVE_PAGE_NAMES.RECENT,\n viewName: 'Recent',\n disableSort: true,\n sortColumn: 'created_at',\n sortDirection: 'desc',\n queryParams: {\n recentOnly: true,\n }\n});\n\nexport const SEARCH_PAGE = new DrivePage({\n name: DRIVE_PAGE_NAMES.SEARCH,\n viewName: 'Search results',\n});\n\nexport const SHARES_PAGE = new DrivePage({\n name: DRIVE_PAGE_NAMES.SHARES,\n viewName: 'Shared',\n queryParams: {\n sharedOnly: true,\n }\n});\n\nexport const TRASH_PAGE = new DrivePage({\n name: DRIVE_PAGE_NAMES.TRASH,\n viewName: 'Trash',\n hasActions: true,\n queryParams: {\n deletedOnly: true,\n }\n});\n\nexport const WORKSPACE_INDEX_PAGE = new DrivePage({\n name: DRIVE_PAGE_NAMES.WORKSPACES,\n viewName: 'Workspaces',\n});\n\nexport const STARRED_PAGE = new DrivePage({\n name: DRIVE_PAGE_NAMES.STARRED,\n viewName: 'Starred',\n queryParams: {\n starredOnly: true,\n }\n});\n\nexport class FolderPage extends DrivePage {\n constructor(folder?: DriveFolder) {\n super({\n name: DRIVE_PAGE_NAMES.FOLDER,\n viewName: folder?.name,\n folder,\n folderHash: folder?.hash,\n hasActions: true\n });\n }\n}\n","import { DriveEntry } from '../../files/models/drive-entry';\nimport { DriveFolder } from '../../folders/models/driveFolder';\nimport { DriveApiIndexParams } from '../../drive-entry-api.service';\nimport { SortColumn } from '../../entries/available-sorts';\nimport {\n DrivePage,\n FolderPage,\n RECENT_PAGE,\n SEARCH_PAGE,\n SHARES_PAGE,\n STARRED_PAGE,\n TRASH_PAGE,\n WORKSPACE_INDEX_PAGE,\n} from '../models/drive-page';\n\nexport interface LoadEntriesAction {\n queryParams: DriveApiIndexParams;\n page?: DrivePage;\n folder?: DriveFolder;\n loadMore?: boolean;\n}\n\nexport class RecentEntriesPageOpened implements LoadEntriesAction {\n static readonly type = '[Drive] Recent Entries Page Opened';\n public page = RECENT_PAGE;\n public queryParams = {orderBy: 'created_at' as SortColumn, recentOnly: true};\n}\n\nexport class FolderPageOpened implements LoadEntriesAction {\n static readonly type = '[Drive] Folder Page Opened';\n public page: DrivePage;\n public queryParams = {};\n constructor(folderHash: string|null) {\n this.page = new FolderPage({hash: folderHash} as DriveFolder);\n }\n}\n\nexport class SharesFolderOpened implements LoadEntriesAction {\n static readonly type = '[Drive] Shared folder opened';\n public page = SHARES_PAGE;\n public queryParams = {sharedOnly: true};\n}\n\nexport class TrashPageOpened implements LoadEntriesAction {\n static readonly type = '[Drive] Trash Page Opened';\n public page = TRASH_PAGE;\n public queryParams = {deletedOnly: true};\n}\n\nexport class WorkspacesIndexPageOpened {\n static readonly type = '[Drive] Workspaces Index Page Opened';\n public page = WORKSPACE_INDEX_PAGE;\n}\n\nexport class SearchPageOpened implements LoadEntriesAction {\n static readonly type = '[Drive] Search Page Opened';\n public page = SEARCH_PAGE;\n constructor(public queryParams: {\n filters?: string;\n query?: string;\n } = {}) {}\n}\n\nexport class StarredPageOpened implements LoadEntriesAction {\n static readonly type = '[Drive] Starred Entries Page Opened';\n public page = STARRED_PAGE;\n public queryParams = {starredOnly: true};\n}\n\nexport class EntriesSelectedViaDrag {\n static readonly type = '[Drive] Entries Selected Via Drag';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class EntrySelectedViaContextMenu {\n static readonly type = '[Drive] File Selected Via ContextMenu';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class EntryTapped {\n static readonly type = '[Drive] User Tapped File';\n constructor(public entry: DriveEntry, public ctrlKey = false) {}\n}\n\nexport class EntryDoubleTapped {\n static readonly type = '[Drive] User Double Tapped Entry';\n constructor(public entry: DriveEntry) {}\n}\n\nexport class FileDeleteSuccess {\n static readonly type = '[Drive] Successfully Deleted Files';\n constructor(public deletedFiles: DriveEntry[]) {}\n}\n\nexport class EntryContextMenuOpened {\n static readonly type = '[Drive] Entry Context Menu Opened';\n constructor(public entry: DriveEntry) {}\n}\n\nexport class NewFolderCreated {\n static readonly type = '[Drive] New Folder Created';\n constructor(public folder: DriveFolder) {}\n}\n\nexport class EntryRenamed {\n static readonly type = '[Drive] Entry Renamed';\n constructor(public entry: DriveEntry, public newName: string) {}\n}\n\nexport class StartedDragging {\n static readonly type = '[Drive] Started Dragging';\n}\n\nexport class StoppedDragging {\n static readonly type = '[Drive] Stopped Dragging';\n}\n\nexport class MoveEntriesSuccess {\n static readonly type = '[Drive API] Move Entries Success';\n constructor(\n public destination: number,\n public oldLocation: number,\n public entries: DriveEntry[]\n ) {}\n}\n\nexport class MoveEntriesFailed {\n static readonly type = '[Drive API] Move Entries Failed';\n constructor(public messages: object) {}\n}\n\nexport class TrashedEntriesDeleteSuccess {\n static readonly type = '[Drive API] Trashed Entries Delete Forever Success';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class TrashedEntriesRestoreSuccess {\n static readonly type = '[Drive API] Trashed Entries Restore Success';\n constructor(public entries: DriveEntry[]) {}\n}\n\nexport class NotEnoughSpaceError {\n static readonly type = '[Drive] Not Enough Space Error';\n}\n\nexport class UserSpaceUsageChanged {\n static readonly type = '[Drive] User Space Usage Changed';\n}\n\nexport class BreakpointChanged {\n static readonly type = '[Drive] BreakpointChanged';\n constructor(public status: {isMobile: boolean}) {}\n}\n\n\n","import { DriveStateModel } from './drive-state-model';\n\nexport const DRIVE_STATE_MODEL_DEFAULTS: DriveStateModel = {\n isMobile: false,\n activePage: null,\n folderTree: [],\n flatFolders: [],\n userFoldersLoaded: false,\n entries: [],\n selectedEntries: [],\n dragging: false,\n loading: false,\n uploadsPanelOpen: false,\n viewMode: 'grid' as 'grid'|'list',\n detailsVisible: true,\n sidebarOpen: true,\n currentUser: null,\n activeWorkspace: null,\n spaceUsage: {\n available: null,\n used: null,\n },\n meta: {\n sortColumn: 'updated_at',\n sortDirection: 'desc',\n currentPage: 0,\n lastPage: 0,\n },\n};\n","import { SortColumn, SortDirection } from '../../entries/available-sorts';\nimport { DriveEntry } from '../../files/models/drive-entry';\nimport { DriveFolder } from '../../folders/models/driveFolder';\nimport { DrivePage } from './drive-page';\nimport { UserSpaceUsage } from './user-space-usage';\nimport { User } from '@common/core/types/models/User';\nimport { Workspace } from '../../../../common/workspaces/types/workspace';\n\nexport interface DriveStateModel {\n isMobile: boolean;\n activePage: DrivePage;\n folderTree: DriveFolder[];\n flatFolders: DriveFolder[];\n userFoldersLoaded: boolean;\n entries: DriveEntry[];\n selectedEntries: DriveEntry[];\n spaceUsage: UserSpaceUsage;\n rootFolder?: DriveFolder;\n meta: {\n currentPage: number;\n lastPage: number;\n sortColumn: SortColumn;\n sortDirection: SortDirection;\n filters?: string|null,\n query?: string|null\n };\n dragging: boolean;\n loading: boolean;\n uploadsPanelOpen: boolean;\n viewMode: 'list'|'grid';\n detailsVisible: boolean;\n sidebarOpen: boolean;\n currentUser: User|null;\n activeWorkspace: Workspace|null;\n}\n\nexport const VIEW_MODE_KEY = 'bedrive.viewMode';\n","export enum LoadingToastMessages {\n copyEntries = 'Copying items...',\n emptyTrash = 'Emptying trash...',\n moveEntries = 'Moving items...',\n}\n","import { InjectionToken } from '@angular/core';\nimport { UploadInputConfig } from '../../common/uploads/upload-input-config';\n\nexport const DRIVE_UPLOAD_INPUT_CONFIG = new InjectionToken<UploadInputConfig>('DRIVE_UPLOAD_INPUT_CONFIG');","export enum FOLDERS_API_ROUTES {\n GET_ALL = 'drive/folders',\n CREATE = 'drive/folders',\n}\n","import {Injectable} from '@angular/core';\nimport {AppHttpClient} from '@common/core/http/app-http-client.service';\nimport {FOLDERS_API_ROUTES} from './folders-api-routes.enum';\nimport {DriveFolder} from '../models/driveFolder';\nimport {CurrentUser} from '@common/auth/current-user';\nimport { BackendResponse } from '@common/core/types/backend-response';\nimport { PaginatedBackendResponse } from '@common/core/types/pagination/paginated-backend-response';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FoldersApiService {\n\n constructor(\n private http: AppHttpClient,\n private currentUser: CurrentUser\n ) {}\n\n public getAll(params?: {userId?: number}): PaginatedBackendResponse<DriveFolder> {\n return this.http.get(FOLDERS_API_ROUTES.GET_ALL, params);\n }\n\n public getAllForCurrentUser(): BackendResponse<{folders: DriveFolder[], rootFolder: DriveFolder}> {\n return this.http.get('drive/users/' + this.currentUser.get('id') + '/folders');\n }\n\n public create(params: {name: string, parentId: number|null}): BackendResponse<{folder: DriveFolder}> {\n return this.http.post(FOLDERS_API_ROUTES.CREATE, params);\n }\n\n public getByHash(hash: string): BackendResponse<{folder: DriveFolder}> {\n return this.http.get('drive/folders/find', {hash});\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AppHttpClient } from '@common/core/http/app-http-client.service';\nimport { DriveEntry } from './files/models/drive-entry';\nimport { BackendResponse } from '@common/core/types/backend-response';\nimport { DriveFolder } from './folders/models/driveFolder';\nimport { Observable } from 'rxjs';\nimport { CurrentUser } from '@common/auth/current-user';\nimport { Tag } from '@common/core/types/models/Tag';\nimport { SortColumn, SortDirection } from './entries/available-sorts';\nimport { UserSpaceUsage } from './state/models/user-space-usage';\nimport { PaginationResponse } from '@common/core/types/pagination/pagination-response';\n\nexport interface DriveApiIndexParams {\n orderBy?: SortColumn;\n orderDir?: SortDirection;\n folderId?: number;\n userId?: number;\n query?: string;\n filters?: string;\n deletedOnly?: boolean;\n starredOnly?: boolean;\n sharedOnly?: boolean;\n per_page?: number;\n page?: number;\n recentOnly?: boolean;\n}\n\nexport interface DriveEntriesPaginationResponse extends PaginationResponse<DriveFolder> {\n folder: DriveFolder;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DriveEntryApiService {\n constructor(private http: AppHttpClient, private currentUser: CurrentUser) {}\n\n public getEntriesForFolder(params: DriveApiIndexParams = {}): Observable<DriveEntriesPaginationResponse> {\n return this.http.get('drive/entries', params);\n }\n\n public getCurrentUserEntries(params: DriveApiIndexParams): Observable<DriveEntriesPaginationResponse> {\n params.userId = this.currentUser.get('id');\n return this.http.get('drive/entries', params);\n }\n\n public update(entryId: number, params: {name?: string, description?: string}): BackendResponse<{fileEntry: DriveEntry}> {\n return this.http.put('uploads/' + entryId, params);\n }\n\n public delete(params: {entryIds?: number[], deleteForever?: boolean, emptyTrash?: boolean}): BackendResponse<void> {\n return this.http.delete('drive/entries', params);\n }\n\n public copy(params: {entryIds: number[]}): BackendResponse<{entries: DriveEntry[]}> {\n return this.http.post('drive/entries/copy', params);\n }\n\n public restore(params: {entryIds: number[]}): BackendResponse<void> {\n return this.http.post('drive/entries/restore', params);\n }\n\n public emptyTrash(): BackendResponse<void> {\n return this.delete({emptyTrash: true});\n }\n\n public moveEntries(params: {entryIds: number[], destination: number}): BackendResponse<{entries: DriveEntry[]}> {\n return this.http.post('drive/entries/move', params);\n }\n\n public addStar(entryIds: number[]): BackendResponse<{tag: Tag}> {\n return this.http.post('drive/entries/star', {entryIds});\n }\n\n public removeStar(entryIds: number[]): BackendResponse<{tag: Tag}> {\n return this.http.post('drive/entries/unstar', {entryIds});\n }\n\n public getSpaceUsage(): BackendResponse<UserSpaceUsage> {\n return this.http.get('drive/user/space-usage');\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DriveFolder } from './folders/models/driveFolder';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DriveUrlsService {\n public driveRoot() {\n return '/drive';\n }\n\n public folder(folder: DriveFolder) {\n if ( ! folder?.id) {\n return this.driveRoot();\n } else {\n return `/drive/folders/${(folder as DriveFolder).hash}`;\n }\n }\n}\n","import {DriveFolder} from '../folders/models/driveFolder';\nimport {DriveEntry} from '../files/models/drive-entry';\nimport {Action, Selector, State, StateContext, Store} from '@ngxs/store';\nimport {FoldersApiService} from '../folders/api/folders-api.service';\nimport {finalize, tap} from 'rxjs/operators';\nimport {DriveApiIndexParams, DriveEntryApiService} from '../drive-entry-api.service';\nimport {Router} from '@angular/router';\nimport {DriveUrlsService} from '../drive-urls.service';\nimport {\n AddEntries,\n AddStar,\n BuildFolderTree,\n CopySelectedEntries,\n DeleteSelectedEntries,\n DeleteTrashedEntriesForever,\n DeselectAllEntries,\n EmptyTrash,\n HideLoadingToast,\n LoadMoreEntries,\n LoadUserFolders,\n LoadUserSpaceUsage,\n MoveEntries,\n OpenConfirmDialog,\n OpenFilePreview,\n OpenFolder,\n OpenSearchPage,\n OpenUploadsPanel,\n OpenUploadWindow,\n ReloadPageEntries,\n RemoveEntries,\n RemoveStar,\n ResetState,\n RestoreTrashedEntries,\n SelectAllEntries,\n SelectEntries,\n SetCurrentUser,\n SetViewMode,\n SetWorkspace,\n ShowLoadingToast,\n ToggleDetailsSidebar,\n ToggleSidebar,\n UpdateEntries,\n UpdateEntryDescription,\n UploadFiles,\n} from './actions/commands';\nimport {\n BreakpointChanged,\n EntriesSelectedViaDrag,\n EntryContextMenuOpened,\n EntryDoubleTapped,\n EntryRenamed,\n EntrySelectedViaContextMenu,\n EntryTapped,\n FileDeleteSuccess,\n FolderPageOpened,\n LoadEntriesAction,\n MoveEntriesFailed,\n MoveEntriesSuccess,\n NewFolderCreated,\n NotEnoughSpaceError,\n RecentEntriesPageOpened,\n SearchPageOpened,\n SharesFolderOpened,\n StarredPageOpened,\n StartedDragging,\n StoppedDragging,\n TrashedEntriesDeleteSuccess,\n TrashedEntriesRestoreSuccess,\n TrashPageOpened,\n UserSpaceUsageChanged,\n WorkspacesIndexPageOpened,\n} from './actions/events';\nimport {DriveStateModel, VIEW_MODE_KEY} from './models/drive-state-model';\nimport {DRIVE_STATE_MODEL_DEFAULTS} from './models/drive-state-model-defaults';\nimport {LocalStorage} from '@common/core/services/local-storage.service';\nimport {UploadQueueService} from '@common/uploads/upload-queue/upload-queue.service';\nimport {DriveUploadValidator} from '../uploads/drive-upload-validator';\nimport {openUploadWindow} from '@common/uploads/utils/open-upload-window';\nimport {Inject, Injectable} from '@angular/core';\nimport {UploadInputConfig} from '@common/uploads/upload-input-config';\nimport {UploadedFile} from '@common/uploads/uploaded-file';\nimport {UserSpaceUsage} from './models/user-space-usage';\nimport {LoadingToastMessages} from '../messages/loading-toast/loading-toast-messages';\nimport {User} from '@common/core/types/models/User';\nimport {DRIVE_PAGE_NAMES, DrivePage, TRASH_PAGE} from './models/drive-page';\nimport {DRIVE_UPLOAD_INPUT_CONFIG} from '../upload-input-config';\nimport {Tag} from '@common/core/types/models/Tag';\nimport {FileEntry} from '@common/uploads/types/file-entry';\nimport {hasKey} from '@common/core/utils/has-key';\nimport {BackendErrorResponse} from '../../../common/core/types/backend-error-response';\nimport {buildFolderTree} from '../sidebar/folders-tree/build-folder-tree';\nimport {WorkspacesService} from '../../../common/workspaces/workspaces.service';\nimport {Workspace} from '../../../common/workspaces/types/workspace';\nimport {Toast} from '../../../common/core/ui/toast.service';\n\n@State<DriveStateModel>({\n name: 'drive',\n defaults: DRIVE_STATE_MODEL_DEFAULTS,\n})\n@Injectable()\nexport class DriveState {\n constructor(\n private foldersApi: FoldersApiService,\n private entriesApi: DriveEntryApiService,\n private router: Router,\n private driveUrls: DriveUrlsService,\n private uploads: UploadQueueService,\n private store: Store,\n private localStore: LocalStorage,\n private validator: DriveUploadValidator,\n private workspaces: WorkspacesService,\n private toast: Toast,\n @Inject(DRIVE_UPLOAD_INPUT_CONFIG) private uploadInputConfig: UploadInputConfig\n ) {}\n\n @Selector()\n static flatFolders(state: DriveStateModel) {\n return state.flatFolders;\n }\n\n @Selector()\n static userFoldersLoaded(state: DriveStateModel) {\n return state.userFoldersLoaded;\n }\n\n @Selector()\n static activePage(state: DriveStateModel) {\n return state.activePage;\n }\n\n @Selector()\n static activePageName(state: DriveStateModel) {\n return state.activePage.name;\n }\n\n @Selector()\n static userFolders(state: DriveStateModel) {\n return state.folderTree;\n }\n\n @Selector()\n static selectedEntries(state: DriveStateModel) {\n return state.selectedEntries;\n }\n\n @Selector([DriveState.selectedEntries])\n static selectedEntryIds(state: DriveStateModel, selectedEntries: DriveEntry[]) {\n return selectedEntries.map(entry => entry.id);\n }\n\n @Selector([DriveState.selectedEntries])\n static selectedEntry(state: DriveStateModel, selected: DriveEntry[]) {\n return selected ? selected[selected.length - 1] : null;\n }\n\n @Selector([DriveState.selectedEntry])\n static selectedEntryOrActiveFolder(state: DriveStateModel, selected: DriveEntry[]) {\n return selected || state.activePage.folder;\n }\n\n @Selector([DriveState.selectedEntryOrActiveFolder, DriveState.flatFolders])\n static selectedEntryParent(\n state: DriveStateModel,\n selected: DriveFolder,\n folders: DriveFolder[]\n ) {\n if (!selected || !folders || !selected.parent_id) {\n return state.rootFolder;\n }\n return folders.find(f => f.id === selected.parent_id);\n }\n\n @Selector([DriveState.selectedEntries])\n static anythingSelected(state: DriveStateModel, selectedEntries: DriveEntry[]) {\n return selectedEntries.length > 0;\n }\n\n @Selector([DriveState.selectedEntries])\n static allSelectedEntriesStarred(\n state: DriveStateModel,\n selectedEntries: DriveEntry[]\n ) {\n return selectedEntries.every(\n entry => !!entry.tags.find(tag => tag.name === 'starred')\n );\n }\n\n @Selector([DriveState.selectedEntries])\n static onlyFoldersSelected(state: DriveStateModel, selectedEntries: DriveEntry[]) {\n return selectedEntries.every(entry => entry.type === 'folder');\n }\n\n @Selector()\n static entries(state: DriveStateModel) {\n return state.entries;\n }\n\n @Selector()\n static entriesEmpty(state: DriveStateModel) {\n // only return true if entries have already loaded\n return state.meta.currentPage && !state.loading && state.entries.length === 0;\n }\n\n @Selector([DriveState.selectedEntries])\n static multipleEntriesSelected(\n state: DriveStateModel,\n selectedEntries: DriveEntry[]\n ) {\n return selectedEntries.length > 1;\n }\n\n @Selector()\n static activeFolder(state: DriveStateModel) {\n return state.activePage.folder;\n }\n\n @Selector()\n static rootFolder(state: DriveStateModel) {\n return state.rootFolder;\n }\n\n @Selector()\n static meta(state: DriveStateModel) {\n return state.meta;\n }\n\n @Selector()\n static dragging(state: DriveStateModel) {\n return state.dragging;\n }\n\n @Selector()\n static loading(state: DriveStateModel) {\n return state.loading;\n }\n\n @Selector()\n static currentPage(state: DriveStateModel) {\n return state.meta.currentPage;\n }\n\n @Selector()\n static viewMode(state: DriveStateModel) {\n return state.viewMode;\n }\n\n @Selector()\n static detailsOpen(state: DriveStateModel) {\n return state.detailsVisible;\n }\n\n @Selector()\n static sidebarOpen(state: DriveStateModel) {\n return state.sidebarOpen;\n }\n\n @Selector()\n static sortColumn(state: DriveStateModel) {\n return state.meta.sortColumn;\n }\n\n @Selector()\n static sortDirection(state: DriveStateModel) {\n return state.meta.sortDirection;\n }\n\n @Selector()\n static canLoadMoreEntries(state: DriveStateModel) {\n return state.meta.currentPage < state.meta.lastPage;\n }\n\n @Selector()\n static userSpaceUsed(state: DriveStateModel) {\n return state.spaceUsage.used;\n }\n\n @Selector()\n static userSpaceAvailable(state: DriveStateModel) {\n return state.spaceUsage.available;\n }\n\n @Selector([DriveState.userSpaceUsed, DriveState.userSpaceAvailable])\n static spaceUsedPercent(\n state: DriveStateModel,\n spaceUsed: number,\n spaceAvail: number\n ) {\n // null means that user has unlimited space available\n return spaceAvail === null ? 0 : (spaceUsed * 100) / spaceAvail;\n }\n\n @Selector()\n static isMobile(state: DriveStateModel) {\n return state.isMobile;\n }\n\n static userHasPermission(\n permission: 'edit' | 'owner',\n folder: DriveEntry,\n user: User\n ) {\n // we are not in a folder view, can bail\n if (!folder || !user) return false;\n\n // check if user is the owner of currently open folder\n const folderUser = (folder as DriveEntry).users.find(u => u.id === user.id);\n if (folderUser.owns_entry || folderUser.entry_permissions[permission]) {\n return true;\n }\n }\n\n @Selector()\n static currentUser(state: DriveStateModel) {\n return state.currentUser;\n }\n\n @Selector()\n static activeWorkspace(state: DriveStateModel) {\n return state.activeWorkspace;\n }\n\n @Selector([DriveState.activeFolder, DriveState.currentUser])\n static userOwnsActiveFolder(\n state: DriveStateModel,\n activeFolder: DriveEntry,\n currentUser: User\n ) {\n return DriveState.userHasPermission('owner', activeFolder, currentUser);\n }\n\n @Selector([DriveState.selectedEntries, DriveState.currentUser])\n static userOwnsSelectedEntries(\n state: DriveStateModel,\n selectedEntries: DriveEntry[],\n currentUser: User\n ) {\n return selectedEntries.every(entry => {\n return DriveState.userHasPermission('owner', entry, currentUser);\n });\n }\n\n @Selector([DriveState.selectedEntries, DriveState.currentUser])\n static userCanEditSelectedEntries(\n state: DriveStateModel,\n entries: DriveEntry[],\n currentUser: User\n ) {\n return entries.every(entry => {\n const user = entry.users.find(u => u.id === currentUser.id);\n return user && (user.owns_entry || user.entry_permissions.edit);\n });\n }\n\n @Selector([DriveState.activePage, DriveState.currentUser, DriveState.activeWorkspace])\n static canUpload(\n state: DriveStateModel,\n page: DrivePage,\n currentUser: User,\n workspace: Workspace\n ) {\n if (!page.folder || !currentUser || !workspace) {\n return false;\n }\n\n // check if user can create files in this workspace\n if (workspace?.id && page.folder.workspace_id === workspace.id) {\n const member = workspace.currentUser;\n return (\n member &&\n (member.is_owner ||\n member.permissions.findIndex(p => p.name === 'files.create') > -1)\n );\n\n // check if user has \"edit\" permission for folder if it's not part of workspace\n } else {\n return DriveState.userHasPermission('edit', page.folder, currentUser);\n }\n }\n\n @Action(LoadUserFolders)\n loadUserFolders(ctx: StateContext<DriveStateModel>) {\n return this.foldersApi.getAllForCurrentUser().pipe(\n tap(response => {\n ctx.patchState({rootFolder: response.rootFolder});\n return ctx.dispatch(new BuildFolderTree(response.folders));\n })\n );\n }\n\n @Action(BuildFolderTree)\n buildFolderTree(ctx: StateContext<DriveStateModel>, action: BuildFolderTree) {\n const flatFolders = action.folders || ctx.getState().flatFolders;\n const tree = buildFolderTree(flatFolders);\n ctx.patchState({\n folderTree: tree,\n flatFolders,\n userFoldersLoaded: true,\n });\n }\n\n @Action(WorkspacesIndexPageOpened)\n workspacesIndexPageOpened(\n ctx: StateContext<DriveStateModel>,\n action: WorkspacesIndexPageOpened\n ) {\n ctx.patchState({activePage: action.page});\n }\n\n @Action(FolderPageOpened)\n @Action(RecentEntriesPageOpened)\n @Action(TrashPageOpened)\n @Action(StarredPageOpened)\n @Action(SearchPageOpened, {cancelUncompleted: true}) // cancel search when typing in search bar\n @Action(SharesFolderOpened)\n @Action(ReloadPageEntries)\n @Action(LoadMoreEntries)\n loadDriveEntries(ctx: StateContext<DriveStateModel>, action: LoadEntriesAction) {\n const oldState = ctx.getState();\n const newState = {\n loading: true,\n meta: {...oldState.meta},\n } as Partial<DriveStateModel>;\n\n // only replace active page if it's actually specified, this way\n // \"Reload\" and \"LoadMore\" actions will not remove active page\n newState.activePage = action.page ? action.page : oldState.activePage;\n\n // set sorting from specified query params or specified page or currently active page\n newState.meta.sortColumn =\n action.queryParams.orderBy ||\n oldState.meta.sortColumn ||\n newState.activePage.sortColumn;\n newState.meta.sortDirection =\n action.queryParams.orderDir ||\n oldState.meta.sortDirection ||\n newState.activePage.sortDirection;\n\n // if it's not search page, clear type and query\n if (newState.activePage.name !== DRIVE_PAGE_NAMES.SEARCH) {\n newState.meta.query = null;\n newState.meta.filters = null;\n }\n\n newState.meta.query = action.queryParams.query || newState.meta.query;\n newState.meta.filters = action.queryParams.filters || newState.meta.filters;\n\n ctx.patchState(newState);\n const params = this.transformQueryParams({\n ...action.queryParams,\n ...newState.activePage.queryParams,\n });\n\n if (\n newState.activePage.name === DRIVE_PAGE_NAMES.SEARCH &&\n !newState.meta.query &&\n !newState.meta.filters\n ) {\n return ctx.patchState({\n entries: [],\n loading: false,\n activePage: newState.activePage,\n meta: {\n ...newState.meta,\n lastPage: 1,\n currentPage: 1,\n },\n });\n }\n\n return this.entriesApi.getEntriesForFolder(params).pipe(\n tap(\n response => {\n const entries = action.loadMore ? oldState.entries : [];\n\n const state = {\n entries: entries.concat(response.data),\n meta: {\n ...newState.meta,\n lastPage: response.last_page,\n currentPage: response.current_page,\n },\n loading: false,\n } as Partial<DriveStateModel>;\n\n state.activePage = {\n ...newState.activePage,\n folder: response.folder,\n };\n\n return ctx.patchState(state);\n },\n () => {\n return ctx.patchState({loading: false});\n }\n )\n );\n }\n\n @Action(OpenFolder, {cancelUncompleted: true})\n openFolder(ctx: StateContext<DriveStateModel>, action: OpenFolder) {\n const currentFolder = ctx.getState().activePage.folder;\n if (currentFolder && action.folder.id === currentFolder.id) return;\n\n if (action.folder && action.folder.deleted_at) {\n return ctx.dispatch(\n new OpenConfirmDialog(\n {\n title: 'Folder is in trash',\n body: 'To view this folder, you need to restore it first.',\n ok: 'Restore',\n },\n new RestoreTrashedEntries([action.folder as DriveFolder])\n )\n );\n } else {\n ctx.patchState({loading: true});\n return this.router.navigate([this.driveUrls.folder(action.folder)]);\n }\n }\n\n @Action(OpenSearchPage, {cancelUncompleted: true})\n openSearchPage(ctx: StateContext<DriveStateModel>, action: OpenSearchPage) {\n ctx.patchState({loading: true});\n return this.router.navigate(['/drive/search'], {queryParams: action.queryParams});\n }\n\n @Action(EntriesSelectedViaDrag)\n @Action(EntrySelectedViaContextMenu)\n @Action(SelectEntries)\n selectEntries(\n ctx: StateContext<DriveStateModel>,\n action: EntriesSelectedViaDrag | EntrySelectedViaContextMenu | SelectEntries\n ) {\n ctx.patchState({selectedEntries: action.entries});\n }\n\n @Action(DeselectAllEntries)\n deselectAllEntries(ctx: StateContext<DriveStateModel>) {\n if (!ctx.getState().selectedEntries.length) return;\n ctx.patchState({selectedEntries: []});\n }\n\n @Action(SelectAllEntries)\n SelectAllEntries(ctx: StateContext<DriveStateModel>) {\n ctx.patchState({selectedEntries: ctx.getState().entries.slice()});\n }\n\n @Action(EntryTapped)\n entryTapped(ctx: StateContext<DriveStateModel>, action: EntryTapped) {\n const current = ctx.getState().selectedEntries.slice();\n let alreadySelected = false;\n\n // remove entry with matching ID (if exists) to avoid duplicates\n const i = current.findIndex(curr => curr.id === action.entry.id);\n if (i > -1) {\n current.splice(i, 1);\n alreadySelected = true;\n }\n\n if (action.ctrlKey) {\n if (alreadySelected) {\n ctx.patchState({selectedEntries: current});\n } else {\n ctx.patchState({selectedEntries: [...current, action.entry]});\n }\n } else {\n ctx.patchState({selectedEntries: [action.entry]});\n }\n\n if (ctx.getState().isMobile) {\n this.entryDoubleTapped(ctx, action);\n }\n }\n\n @Action(EntryDoubleTapped)\n entryDoubleTapped(ctx: StateContext<DriveStateModel>, action: EntryDoubleTapped) {\n if (action.entry.type === 'folder') {\n return ctx.dispatch(new OpenFolder(action.entry as DriveFolder));\n } else {\n return ctx.dispatch(new OpenFilePreview([action.entry]));\n }\n }\n\n @Action(DeleteSelectedEntries)\n deleteSelectedEntries(ctx: StateContext<DriveStateModel>) {\n const entries = this.store.selectSnapshot(DriveState.selectedEntries),\n entryIds = this.store.selectSnapshot(DriveState.selectedEntryIds),\n flatFolders = this.store.selectSnapshot(DriveState.flatFolders),\n activePage = ctx.getState().activePage;\n\n return this.entriesApi.delete({entryIds}).pipe(\n tap(() => {\n // filter out deleted entries\n const newEntries = ctx\n .getState()\n .entries.filter(entry => entryIds.indexOf(entry.id) === -1);\n\n const newState = {entries: newEntries} as Partial<DriveStateModel>,\n actions = [new FileDeleteSuccess(entries)] as any[];\n\n // clear selected entries\n newState.selectedEntries = [];\n\n // if selected folder was active, navigate to its parent\n if (activePage.folder && entryIds.indexOf(activePage.folder.id) > -1) {\n this.store.dispatch(\n new OpenFolder(\n this.store.selectSnapshot(DriveState.selectedEntryParent)\n )\n );\n }\n\n // rebuild folders tree\n const folders = entries.filter(entry => entry.type === 'folder');\n if (folders.length) {\n folders.forEach(folder => delete flatFolders[folder.id]);\n newState.flatFolders = flatFolders;\n actions.push(new BuildFolderTree());\n }\n\n ctx.patchState(newState);\n return ctx.dispatch(actions);\n })\n );\n }\n\n @Action(EntryContextMenuOpened)\n fileContextMenuOpened(\n ctx: StateContext<DriveStateModel>,\n action: EntryContextMenuOpened\n ) {\n if (!action?.entry?.id) return;\n\n const fileAlreadySelected = ctx\n .getState()\n .selectedEntries.find(entry => entry.id === action.entry.id);\n\n if (!fileAlreadySelected) {\n return ctx.dispatch(new EntrySelectedViaContextMenu([action.entry]));\n }\n }\n\n @Action(NewFolderCreated)\n newFolderCreated(ctx: StateContext<DriveStateModel>, action: NewFolderCreated) {\n const state = ctx.getState();\n const parentFolderId = action.folder.parent_id;\n\n // start new folder into user folders cache\n const newState: Partial<DriveStateModel> = {\n flatFolders: [...state.flatFolders, action.folder],\n };\n\n // push new folder into parent folder entries, if parent is currently open\n if (parentFolderId === state.activePage.folder.id) {\n newState.entries = [action.folder, ...state.entries];\n }\n\n ctx.patchState(newState);\n\n // rebuild folder tree\n return ctx.dispatch(new BuildFolderTree());\n }\n\n @Action(EntryRenamed)\n entryRenamed(ctx: StateContext<DriveStateModel>, action: EntryRenamed) {\n const state = ctx.getState(),\n newState = {entries: state.entries.slice()} as Partial<DriveStateModel>,\n i = newState.entries.findIndex(curr => curr.id === action.entry.id);\n\n // rename entry inside main entries array\n if (i > -1) {\n newState.entries[i] = {...newState.entries[i], name: action.newName};\n }\n\n // rename entry inside selected entries array\n newState.selectedEntries = [{...state.selectedEntries[0], name: action.newName}];\n\n // rename active folder\n if (state.activePage.folder && state.activePage.folder.id === action.entry.id) {\n newState.activePage = {...state.activePage, folder: action.entry};\n }\n\n // rebuild folder tree\n if (action.entry.type === 'folder') {\n const flatFolders = {...state.flatFolders};\n flatFolders[action.entry.id] = {\n ...flatFolders[action.entry.id],\n name: action.newName,\n };\n newState.flatFolders = flatFolders;\n ctx.dispatch(new BuildFolderTree());\n }\n\n ctx.patchState(newState);\n }\n\n @Action(StartedDragging)\n startedDragging(ctx: StateContext<DriveStateModel>) {\n ctx.patchState({dragging: true});\n }\n\n @Action(StoppedDragging)\n stoppedDragging(ctx: StateContext<DriveStateModel>) {\n ctx.patchState({dragging: false});\n }\n\n @Action(MoveEntries)\n movieEntries(ctx: StateContext<DriveStateModel>, action: MoveEntries) {\n const entries = action.entries || ctx.getState().selectedEntries;\n\n if (!DriveState.canMoveEntriesTo(entries, action.destination)) return;\n\n ctx.dispatch(new ShowLoadingToast(LoadingToastMessages.moveEntries));\n\n const oldLocation = entries[0].parent_id;\n\n return this.entriesApi\n .moveEntries({\n entryIds: entries.map(entry => entry.id),\n destination: action.destination?.id,\n })\n .pipe(\n finalize(() => ctx.dispatch(new HideLoadingToast())),\n tap(\n response => {\n return ctx.dispatch(\n new MoveEntriesSuccess(\n action.destination?.id,\n oldLocation,\n response.entries\n )\n );\n },\n (errResponse: BackendErrorResponse) => {\n return ctx.dispatch(new MoveEntriesFailed(errResponse.errors));\n }\n )\n );\n }\n\n @Action(MoveEntriesSuccess)\n moveEntriesSuccess(ctx: StateContext<DriveStateModel>, action: MoveEntriesSuccess) {\n const state = ctx.getState(),\n entryIds = action.entries.map(entry => entry.id),\n folders = action.entries.filter(entry => entry.type === 'folder');\n\n // remove moved entries from old folder\n const newState = {\n selectedEntries: [],\n entries: state.entries.filter(entry => entryIds.indexOf(entry.id) === -1),\n } as Partial<DriveStateModel>;\n\n // rebuild folder tree\n if (folders.length) {\n newState.flatFolders = {...state.flatFolders};\n action.entries\n .filter(entry => entry.type === 'folder')\n .forEach(\n entry => (newState.flatFolders[entry.id] = entry as DriveFolder)\n );\n }\n\n // update active folder\n if (state.activePage.folder) {\n const folder = action.entries.find(\n entry => state.activePage.folder.id === entry.id\n );\n if (folder) newState.activePage = {...state.activePage, folder};\n }\n\n ctx.patchState(newState);\n return ctx.dispatch(new BuildFolderTree());\n }\n\n @Action(SetViewMode)\n setViewMode(ctx: StateContext<DriveStateModel>, action: SetViewMode) {\n this.localStore.set(VIEW_MODE_KEY, action.mode);\n ctx.patchState({viewMode: action.mode});\n }\n\n @Action(ToggleDetailsSidebar)\n toggleDetailsSidebar(ctx: StateContext<DriveStateModel>) {\n ctx.patchState({\n detailsVisible: !ctx.getState().detailsVisible,\n });\n }\n\n @Action(ToggleSidebar)\n toggleSidebar(ctx: StateContext<DriveStateModel>) {\n ctx.patchState({\n sidebarOpen: !ctx.getState().sidebarOpen,\n });\n }\n\n @Action(AddEntries)\n addEntries(ctx: StateContext<DriveStateModel>, action: AddEntries) {\n const currentEntries = ctx.getState().entries,\n spaceUsage = ctx.getState().spaceUsage;\n\n const newEntries = action.entries.filter(\n entry => !currentEntries.find(curr => curr.id === entry.id)\n );\n\n const newSize = newEntries\n .filter(entry => entry.type !== 'folder')\n .reduce((sum, entry) => sum + entry.file_size, 0);\n\n ctx.patchState({\n entries: [...newEntries, ...currentEntries],\n spaceUsage: {...spaceUsage, used: spaceUsage.used + newSize},\n });\n }\n\n @Action(UploadFiles)\n uploadFiles(ctx: StateContext<DriveStateModel>, action: UploadFiles) {\n if (!this.enoughSpaceLeftToUpload(ctx.getState().spaceUsage, action.files)) {\n return ctx.dispatch(new NotEnoughSpaceError());\n }\n\n if (!action.files.length) return;\n\n ctx.dispatch(new OpenUploadsPanel());\n\n const state = ctx.getState();\n const destinationPage = state.activePage;\n const destinationId = destinationPage.folder.id || null;\n\n const config = {\n httpParams: {parentId: destinationId},\n validator: this.validator,\n };\n\n return this.uploads.start(action.files, config).pipe(\n tap(response => {\n // get parent folders, if user has uploaded folders and not single files\n const entries = [...response.fileEntry.all_parents, response.fileEntry];\n\n // remove all entries that are not direct child of currently open folder\n const newEntries = entries.filter(\n newEntry => newEntry && newEntry.parent_id === destinationId\n );\n const currentPage = ctx.getState().activePage;\n\n // add newly uploaded files and created folders\n if (currentPage.folder && currentPage.folder.id === destinationId) {\n ctx.dispatch(new AddEntries(newEntries as DriveEntry[]));\n }\n\n // rebuild folder tree, if there are any folders\n const folders = entries.filter(entry => entry && entry.type === 'folder');\n if (folders.length) {\n const flatFolders = [\n ...ctx.getState().flatFolders,\n ...folders,\n ] as DriveFolder[];\n ctx.patchState({flatFolders});\n ctx.dispatch(new BuildFolderTree());\n }\n })\n );\n }\n\n @Action(DeleteTrashedEntriesForever)\n deleteTrashedEntriesForever(ctx: StateContext<DriveStateModel>) {\n const selectedEntries = this.store.selectSnapshot(DriveState.selectedEntries),\n entryIds = selectedEntries.map(entry => entry.id);\n\n const newEntries = ctx\n .getState()\n .entries.filter(entry => entryIds.indexOf(entry.id) === -1);\n\n return this.entriesApi.delete({entryIds, deleteForever: true}).pipe(\n tap(() => {\n ctx.patchState({\n entries: newEntries,\n selectedEntries: [],\n });\n\n return ctx.dispatch([\n new TrashedEntriesDeleteSuccess(selectedEntries),\n new UserSpaceUsageChanged(),\n ]);\n })\n );\n }\n\n @Action(RestoreTrashedEntries)\n restoreTrashedEntries(\n ctx: StateContext<DriveStateModel>,\n action: RestoreTrashedEntries\n ) {\n const activePage = this.store.selectSnapshot(DriveState.activePage);\n const restoredEntries =\n action.entries || this.store.selectSnapshot(DriveState.selectedEntries);\n const entryIds = restoredEntries.map(entry => entry.id);\n let newEntries: DriveEntry[];\n\n if (activePage.name === TRASH_PAGE.name) {\n newEntries = ctx\n .getState()\n .entries.filter(entry => entryIds.indexOf(entry.id) === -1);\n } else {\n newEntries = [...ctx.getState().entries, ...action.entries];\n }\n\n return this.entriesApi.restore({entryIds}).pipe(\n tap(() => {\n ctx.patchState({\n entries: newEntries,\n selectedEntries: [],\n });\n\n return ctx.dispatch(new TrashedEntriesRestoreSuccess(restoredEntries));\n })\n );\n }\n\n @Action(EmptyTrash, {cancelUncompleted: true})\n emptyTrash(ctx: StateContext<DriveStateModel>) {\n ctx.dispatch(new ShowLoadingToast(LoadingToastMessages.emptyTrash));\n\n return this.entriesApi.emptyTrash().pipe(\n finalize(() => ctx.dispatch(new HideLoadingToast())),\n tap(() => {\n ctx.patchState({\n entries: [],\n selectedEntries: [],\n });\n\n return ctx.dispatch(new UserSpaceUsageChanged());\n })\n );\n }\n\n @Action(AddStar, {cancelUncompleted: true})\n addStar(ctx: StateContext<DriveStateModel>, action: AddStar) {\n const state = ctx.getState();\n const ids = action.entries.map(entry => entry.id);\n\n return this.entriesApi.addStar(ids).pipe(\n tap(response => {\n const newEntries = state.entries.map(entry => {\n if (ids.indexOf(entry.id) > -1) {\n if (!entry.tags) entry.tags = [];\n entry.tags.push(response.tag);\n }\n return entry;\n });\n\n const selectedEntries = state.selectedEntries.map(entry => {\n entry.tags.push(response.tag);\n return entry;\n });\n\n ctx.patchState({\n entries: newEntries,\n selectedEntries,\n });\n })\n );\n }\n\n @Action(RemoveStar, {cancelUncompleted: true})\n removeStar(ctx: StateContext<DriveStateModel>, action: RemoveStar) {\n const state = ctx.getState(),\n ids = action.entries.map(entry => entry.id);\n\n return this.entriesApi.removeStar(ids).pipe(\n tap(response => {\n const newEntries = state.entries.map(entry => {\n if (ids.indexOf(entry.id) > -1) this.removeTag(entry, response.tag);\n return entry;\n });\n\n const selectedEntries = state.selectedEntries.map(entry =>\n this.removeTag(entry, response.tag)\n );\n\n ctx.patchState({\n entries: newEntries,\n selectedEntries,\n });\n })\n );\n }\n\n @Action(RemoveEntries)\n removeEntries(ctx: StateContext<DriveStateModel>, action: RemoveEntries) {\n const ids = action.entries.map(entry => entry.id);\n const newEntries = ctx\n .getState()\n .entries.filter(entry => ids.indexOf(entry.id) === -1);\n ctx.patchState({\n entries: newEntries,\n });\n this.toast.open({\n message: 'Removed :count items.',\n replacements: {count: ids.length},\n });\n }\n\n @Action(CopySelectedEntries)\n copySelectedEntries(ctx: StateContext<DriveStateModel>) {\n const entries = this.store.selectSnapshot(DriveState.selectedEntries),\n entryIds = entries.map(entry => entry.id),\n folders = entries.filter(entry => entry.type === 'folder'),\n oldState = ctx.getState();\n\n if (!this.enoughSpaceLeftToUpload(ctx.getState().spaceUsage, entries)) {\n return ctx.dispatch(new NotEnoughSpaceError());\n }\n\n ctx.dispatch(new ShowLoadingToast(LoadingToastMessages.copyEntries));\n\n return this.entriesApi.copy({entryIds}).pipe(\n finalize(() => ctx.dispatch(new HideLoadingToast())),\n tap(response => {\n const newState = {} as Partial<DriveStateModel>;\n\n // show copied entries, if we are in a folder view\n if (ctx.getState().activePage.folder) {\n newState.entries = oldState.entries.concat(response.entries);\n }\n\n // rebuild folder tree\n if (folders.length) {\n newState.flatFolders = {...oldState.flatFolders};\n response.entries\n .filter(folder => folder.type === 'folder')\n .forEach(folder =>\n newState.flatFolders.push(folder as DriveFolder)\n );\n }\n\n ctx.patchState(newState);\n\n // update user space usage\n ctx.dispatch(new UserSpaceUsageChanged());\n\n // rebuild folder tree\n if (folders.length) ctx.dispatch(new BuildFolderTree());\n\n const activePage = this.store.selectSnapshot(DriveState.activePage);\n const location =\n activePage.name === DRIVE_PAGE_NAMES.SHARES\n ? `${this.workspaces.activeWorkspace$.value.name} workspace`\n : activePage.folder.name;\n this.toast.open({\n message: `Copied :count file(s) into :location.`,\n replacements: {count: entryIds.length, location},\n });\n })\n );\n }\n\n @Action(OpenUploadWindow)\n openUploadWindow(ctx: StateContext<DriveStateModel>, action: OpenUploadWindow) {\n const config = {\n ...this.uploadInputConfig,\n directory: action.type === 'directory',\n };\n\n openUploadWindow(config).then(files => {\n if (!files || !files.length) return;\n ctx.dispatch(new UploadFiles(files));\n });\n }\n\n @Action(LoadUserSpaceUsage)\n @Action(UserSpaceUsageChanged)\n loadUserSpaceUsage(ctx: StateContext<DriveStateModel>) {\n return this.entriesApi.getSpaceUsage().pipe(\n tap(spaceUsage => {\n ctx.patchState({\n spaceUsage: {used: spaceUsage.used, available: spaceUsage.available},\n });\n })\n );\n }\n\n @Action(UpdateEntries)\n updateEntries(ctx: StateContext<DriveStateModel>, action: UpdateEntries) {\n const mainEntries = ctx.getState().entries.slice(),\n selectedEntries = ctx.getState().selectedEntries.slice();\n\n action.entries.forEach(updatedEntry => {\n // update main entries\n const mainIndex = mainEntries.findIndex(\n entry => updatedEntry.id === entry.id\n );\n mainEntries[mainIndex] = {...mainEntries[mainIndex], ...updatedEntry};\n\n // update selected entries\n const selectedIndex = selectedEntries.findIndex(\n entry => updatedEntry.id === entry.id\n );\n if (selectedIndex > -1) {\n selectedEntries[selectedIndex] = {\n ...selectedEntries[selectedIndex],\n ...updatedEntry,\n };\n }\n });\n\n ctx.patchState({entries: mainEntries, selectedEntries});\n }\n\n @Action(UpdateEntryDescription)\n updateEntryDescription(\n ctx: StateContext<DriveStateModel>,\n {entry, description}: UpdateEntryDescription\n ) {\n return this.entriesApi.update(entry.id, {description}).pipe(\n tap(response => {\n ctx.dispatch(new UpdateEntries([response.fileEntry]));\n })\n );\n }\n\n @Action(BreakpointChanged)\n breakpointChanged(ctx: StateContext<DriveStateModel>, action: BreakpointChanged) {\n ctx.patchState({\n isMobile: action.status.isMobile,\n sidebarOpen: !action.status.isMobile,\n detailsVisible: !action.status.isMobile,\n });\n }\n\n @Action(SetCurrentUser)\n setCurrentUser(ctx: StateContext<DriveStateModel>, action: SetCurrentUser) {\n ctx.patchState({currentUser: action.user});\n }\n\n @Action(SetWorkspace)\n setWorkspace(ctx: StateContext<DriveStateModel>, action: SetWorkspace) {\n ctx.patchState({activeWorkspace: action.workspace});\n }\n\n @Action(ResetState)\n resetState(ctx: StateContext<DriveStateModel>) {\n ctx.setState({...DRIVE_STATE_MODEL_DEFAULTS, viewMode: ctx.getState().viewMode});\n }\n\n private transformQueryParams(params: DriveApiIndexParams): DriveApiIndexParams {\n const page = this.store.selectSnapshot(DriveState.activePage),\n meta = this.store.selectSnapshot(DriveState.meta);\n\n const queryParams = {\n orderBy: meta.sortColumn,\n orderDir: meta.sortDirection,\n ...params,\n };\n\n if (page.name === DRIVE_PAGE_NAMES.FOLDER) {\n queryParams.folderId = page.folderHash;\n }\n if (meta.query) queryParams.query = meta.query;\n if (meta.filters) queryParams.filters = meta.filters;\n\n return queryParams;\n }\n\n /**\n * Check if user has enough space left to upload all specified files.\n */\n private enoughSpaceLeftToUpload(\n spaceUsage: UserSpaceUsage,\n files: (UploadedFile | FileEntry)[]\n ) {\n const newSize = files.reduce((sum, file) => {\n const size = hasKey('size', file) ? file.size : file.file_size;\n return sum + size;\n }, 0);\n const currentlyUsing = spaceUsage.used;\n const availableSpace = spaceUsage.available;\n return newSize + currentlyUsing < availableSpace;\n }\n\n private removeTag(entry: DriveEntry, tag: Tag) {\n entry.tags = entry.tags.filter(t => t.id !== tag.id);\n return entry;\n }\n\n static canMoveEntriesTo(movingEntries: DriveEntry[], destination?: DriveFolder) {\n if (destination && destination.type !== 'folder') return false;\n\n // should not be able to move folder into it's\n // own child or same folder it's already in\n return movingEntries.every(entry => {\n // entry is already in this folder\n if (destination?.id === entry.parent_id) return false;\n\n // trying to move folder into it's own child\n if (destination && destination.path.startsWith(entry.path)) return false;\n\n return true;\n });\n }\n}\n","import { DriveFolder } from '../../folders/models/driveFolder';\n\nexport function buildFolderTree(folders: DriveFolder[]) {\n const hashTable = {}; const tree = [];\n\n for (let i = 0, len = folders.length; i < len; i++) {\n const folder = folders[i];\n // clear children from previous builds, to prevent duplicates\n folder.children = [];\n hashTable[folder.id] = folder;\n }\n\n for (const treeHash in hashTable) {\n if ( ! hashTable.hasOwnProperty(treeHash)) continue;\n const folder = hashTable[treeHash];\n if (folder.parent_id) {\n const parent = hashTable[folder.parent_id];\n if (parent) {\n parent.children.push(folder);\n }\n } else {\n tree.push(folder);\n }\n }\n\n return tree;\n}\n","export const SUPPORTED_ENTRY_TYPES = [\n 'audio',\n 'video',\n 'text',\n 'pdf',\n 'archive',\n 'folder',\n 'shared-folder',\n 'image',\n 'powerPoint',\n 'word',\n 'spreadsheet',\n];\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, OnChanges } from '@angular/core';\nimport { SUPPORTED_ENTRY_TYPES } from '../../../entries/supported-entry-types';\nimport { kebabCase } from '@common/core/utils/kebab-case';\n\n@Component({\n selector: 'file-icon',\n templateUrl: './file-icon.component.html',\n styleUrls: ['./file-icon.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FileIconComponent implements OnChanges {\n @Input() type: string;\n @Input() mime: string;\n\n ngOnChanges() {\n if ( ! this.type && this.mime) {\n this.type = this.mime.split('/')[0];\n }\n if ( ! SUPPORTED_ENTRY_TYPES.includes(this.type)) {\n this.type = 'default';\n }\n }\n\n public getType() {\n return kebabCase(this.type);\n }\n}\n","import { snakeCase } from './snake-case';\n\nexport function kebabCase(text: string) {\n return snakeCase(text).replace('_', '-');\n}\n","<mat-icon\n [svgIcon]=\"getType() + '-file-custom'\"\n class=\"file-color\"\n [ngClass]=\"getType() + '-file'\"\n></mat-icon>","<ng-container *ngIf=\"entries | async as selectedEntries\">\n <ng-container *ngIf=\"selectedEntries[0]\">\n <file-icon [type]=\"selectedEntries[0].type\"></file-icon>\n <div class=\"text\">{{selectedEntries[0].name}}</div>\n <div class=\"selected-entry-count\" *ngIf=\"selectedEntries.length > 1\">{{selectedEntries.length}}</div>\n </ng-container>\n</ng-container>","import { Component, ViewEncapsulation, ChangeDetectionStrategy, HostBinding } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { DriveState } from '../../state/drive-state';\nimport { Observable } from 'rxjs';\nimport { DriveEntry } from '../../files/models/drive-entry';\n\n@Component({\n selector: 'entry-drag-preview',\n templateUrl: './entry-drag-preview.component.html',\n styleUrls: ['./entry-drag-preview.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntryDragPreviewComponent {\n @Select(DriveState.selectedEntries) entries: Observable<DriveEntry[]>;\n @HostBinding('class') className = 'files-grid-item-footer';\n @HostBinding('class.hidden') get dragging() {\n return !this.store.selectSnapshot(DriveState.dragging);\n }\n\n constructor(private store: Store) {}\n}\n","export interface DriveEntryPermissions {\n edit?: boolean;\n view?: boolean;\n download?: boolean;\n}\n\nexport const DRIVE_ENTRY_FULL_PERMISSIONS = {\n edit: true,\n view: true,\n download: true,\n};\n","import { Injectable } from '@angular/core';\nimport { AppHttpClient } from '@common/core/http/app-http-client.service';\nimport { DriveEntryUser } from '../files/models/drive-entry';\nimport { DriveEntryPermissions } from '../permissions/drive-entry-permissions';\nimport { BackendResponse } from '@common/core/types/backend-response';\nimport { FileEntry } from '@common/uploads/types/file-entry';\n\nexport interface DriveEntryApiParams {\n entries: FileEntry[];\n emails: string[];\n permissions: DriveEntryPermissions;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SharesApiService {\n constructor(private http: AppHttpClient) {}\n\n public changePermissions(userId: number, entryIds: number[], permissions: DriveEntryPermissions): BackendResponse<{users: DriveEntryUser[]}> {\n return this.http.put(`drive/shares/change-permissions/${userId}`, {permissions, entryIds});\n }\n\n /**\n * Attach specified users to entries.\n */\n public shareEntries(params: DriveEntryApiParams): BackendResponse<{users: DriveEntryUser[]}> {\n return this.http.post('drive/shares/add-users', {\n ...params,\n entryIds: params.entries.map(entry => entry.id)\n });\n }\n\n /**\n * Detach specified user from entries.\n */\n public detachUser(userId: number, entryIds: number[]): BackendResponse<{users: DriveEntryUser[]}> {\n return this.http.post('drive/shares/remove-user/' + userId, {entryIds});\n }\n}\n","import { Action, Selector, State, StateContext, Store } from '@ngxs/store';\nimport { DriveState } from '../../state/drive-state';\nimport { DriveEntryUser } from '../../files/models/drive-entry';\nimport { DriveEntryPermissions } from '../../permissions/drive-entry-permissions';\nimport { finalize, tap } from 'rxjs/operators';\nimport { SharesApiService } from '../shares-api.service';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport uniqBy from 'lodash/uniqBy';\nimport {\n BackendErrorMessages, BackendErrorResponse\n} from '@common/core/types/backend-error-response';\nimport { ShareDialogEntryPermissions } from '../share-dialog/types/ShareDialogEntryPermissions';\nimport { UpdateEntries } from '../../state/actions/commands';\nimport { Injectable } from '@angular/core';\n\nexport class SetInitialUsers {\n static readonly type = '[ShareDialog] Set Initial Users';\n}\n\nexport class UpdateUserPermissions {\n static readonly type = '[ShareDialog] Update User Permissions';\n constructor(public user: DriveEntryUser, public permissions: DriveEntryPermissions) {}\n}\n\nexport class RemoveUser {\n static readonly type = '[ShareDialog] Remove User';\n constructor(public user: DriveEntryUser) {}\n}\n\nexport class SetUsers {\n static readonly type = '[ShareDialog] Set Users';\n constructor(public users: DriveEntryUser[]) {}\n}\n\nexport class ResetState {\n static readonly type = '[ShareDialog] Reset';\n}\n\nexport class ShareEntries {\n static readonly type = '[ShareDialog] Share Entries';\n constructor(public payload: {emails: string[], permissions: DriveEntryPermissions}) {}\n}\n\nexport class ShareEntriesFailed {\n static readonly type = '[ShareDialog] Share Entries Failed';\n constructor(public messages: BackendErrorMessages) {}\n}\n\nexport interface ShareDialogEntryUser extends DriveEntryUser {\n removed?: boolean;\n entry_permissions: ShareDialogEntryPermissions;\n}\n\nexport interface ShareDialogStateModel {\n loading: boolean;\n loadingUsers: number[];\n original: ShareDialogEntryUser[];\n usersWithAccess: ShareDialogEntryUser[];\n}\n\n@State<ShareDialogStateModel>({\n name: 'shareDialog',\n defaults: {\n usersWithAccess: [],\n original: [],\n loading: false,\n loadingUsers: [],\n }\n})\n@Injectable()\nexport class ShareDialogState {\n constructor(\n private store: Store,\n private sharesApi: SharesApiService\n ) {}\n\n @Selector()\n static usersWithAccess(state: ShareDialogStateModel) {\n return state.usersWithAccess;\n }\n\n @Selector()\n static dirty(state: ShareDialogStateModel) {\n return !isEqual(state.original, state.usersWithAccess);\n }\n\n @Selector()\n static loading(state: ShareDialogStateModel) {\n return state.loading;\n }\n\n @Selector()\n static loadingUsers(state: ShareDialogStateModel) {\n return state.loadingUsers;\n }\n\n @Action(SetInitialUsers)\n setInitialUsers(ctx: StateContext<ShareDialogStateModel>) {\n const entries = this.store.selectSnapshot(DriveState.selectedEntries);\n\n let users = entries\n .map(entry => entry.users)\n .reduce((all, curr) => all.concat(curr), []);\n\n // make sure we don't override anything in main drive store\n users = cloneDeep(users);\n users = users.filter(user => !!user);\n\n // multiple entries might contain same users\n const uniqueUsers = uniqBy(users, user => user.id) as ShareDialogEntryUser[];\n\n // if permissions for same user are not same on\n // all selected entries, show \"varies\" permission\n if (entries.length > 1) {\n uniqueUsers.forEach(user => {\n const permissions = entries\n .map(entry => entry.users.find(u => u.id === user.id))\n .filter(u => !!u)\n .map(u => Object.assign({}, u.entry_permissions));\n\n if (entries.length !== permissions.length || permissions.some(p => !isEqual(p, permissions[0]))) {\n user.entry_permissions = {varies: true};\n }\n });\n }\n\n ctx.patchState({\n usersWithAccess: cloneDeep(uniqueUsers),\n original: uniqueUsers,\n });\n }\n\n @Action(SetUsers)\n setUsers(ctx: StateContext<ShareDialogStateModel>, action: SetUsers) {\n ctx.patchState({\n usersWithAccess: action.users,\n original: cloneDeep(action.users)\n });\n }\n\n @Action(UpdateUserPermissions)\n updateUserPermissions(ctx: StateContext<ShareDialogStateModel>, action: UpdateUserPermissions) {\n this.toggleUserLoading(ctx, action.user.id, true);\n const entryIds = this.store.selectSnapshot(DriveState.selectedEntries).map(e => e.id);\n const userId = action.user.id;\n return this.sharesApi.changePermissions(userId, entryIds, action.permissions).pipe(\n finalize(() => this.toggleUserLoading(ctx, action.user.id, false)),\n tap(response => this.updateUsers(ctx, response.users))\n );\n }\n\n @Action(RemoveUser)\n removeUser(ctx: StateContext<ShareDialogStateModel>, action: RemoveUser) {\n this.toggleUserLoading(ctx, action.user.id, true);\n return this.sharesApi.detachUser(\n action.user.id,\n this.store.selectSnapshot(DriveState.selectedEntries).map(e => e.id)\n ).pipe(\n finalize(() => this.toggleUserLoading(ctx, action.user.id, false)),\n tap(response => this.updateUsers(ctx, response.users))\n );\n }\n\n @Action(ResetState)\n resetState(ctx: StateContext<ShareDialogStateModel>) {\n ctx.setState({\n loading: false,\n usersWithAccess: [],\n original: [],\n loadingUsers: [],\n });\n }\n\n @Action(ShareEntries, {cancelUncompleted: true})\n shareEntries(ctx: StateContext<ShareDialogStateModel>, action: ShareEntries) {\n ctx.patchState({loading: true});\n\n const payload = {\n ...action.payload,\n entries: this.store.selectSnapshot(DriveState.selectedEntries)\n };\n\n return this.sharesApi.shareEntries(payload)\n .pipe(\n finalize(() => ctx.patchState({loading: false})),\n tap(response => {\n ctx.dispatch(new SetUsers(response.users));\n this.updateEntriesInDriveStore(response.users);\n }, (errorResponse: BackendErrorResponse) => {\n ctx.dispatch(new ShareEntriesFailed(errorResponse.errors));\n })\n );\n }\n\n private toggleUserLoading(ctx: StateContext<ShareDialogStateModel>, userId: number, isLoading: boolean) {\n if (isLoading) {\n ctx.patchState({loadingUsers: [...ctx.getState().loadingUsers, userId]});\n } else {\n ctx.patchState({loadingUsers: ctx.getState().loadingUsers.filter(u => u !== userId)});\n }\n }\n\n private updateUsers(ctx, newUsers: DriveEntryUser[]) {\n ctx.patchState({\n usersWithAccess: newUsers,\n original: cloneDeep(newUsers),\n });\n this.updateEntriesInDriveStore(newUsers);\n }\n\n private updateEntriesInDriveStore(newUsers: DriveEntryUser[]) {\n const entries = this.store.selectSnapshot(DriveState.selectedEntries);\n\n // update permissions in main drive store, otherwise we'll get old\n // permissions if user re-opens share dialog without page reload\n const updatedEntries = entries.map(entry => {\n entry.users = newUsers;\n return entry;\n });\n\n this.store.dispatch(new UpdateEntries(updatedEntries));\n }\n}\n","<button mat-flat-button color=\"gray\" [matMenuTriggerFor]=\"shareMenu\" [disabled]=\"(loadingUsers$ | async).includes(user?.id)\">\n <ng-container *ngIf=\"overallPermission() === 'varies'\">\n <mat-icon class=\"button-icon\" svgIcon=\"priority-high\"></mat-icon>\n <span class=\"button-text\" trans>Varies</span>\n </ng-container>\n\n <ng-container *ngIf=\"overallPermission() === 'edit'\">\n <mat-icon class=\"button-icon\" svgIcon=\"edit\"></mat-icon>\n <span class=\"button-text\" trans>Can edit</span>\n </ng-container>\n\n <ng-container *ngIf=\"overallPermission() === 'view'\">\n <mat-icon class=\"button-icon\" svgIcon=\"remove-red-eye\"></mat-icon>\n <span class=\"button-text\" trans>Can View</span>\n </ng-container>\n\n <ng-container *ngIf=\"overallPermission() === 'download'\">\n <mat-icon class=\"button-icon\" svgIcon=\"file-download\"></mat-icon>\n <span class=\"button-text\" trans>Can Download</span>\n </ng-container>\n\n <mat-icon class=\"dropdown-icon\" svgIcon=\"arrow-drop-down\"></mat-icon>\n</button>\n\n<mat-menu #shareMenu=\"matMenu\" classList=\"mat-menu-with-description\">\n <div mat-menu-item (click)=\"selectPermission('edit')\">\n <mat-icon class=\"mat-icon\" svgIcon=\"check\" [class.visually-hidden]=\"overallPermission() !== 'edit'\"></mat-icon>\n <div>\n <div trans>Can edit</div>\n <div class=\"description\" trans>People can edit, delete and copy the item to their own drive.</div>\n </div>\n </div>\n <div mat-menu-item (click)=\"selectPermission('download')\">\n <mat-icon class=\"mat-icon\" svgIcon=\"check\" [class.visually-hidden]=\"overallPermission() !== 'download'\"></mat-icon>\n <div>\n <div trans>Can download</div>\n <div class=\"description\" trans>People can view and download the item.</div>\n </div>\n </div>\n\n <div mat-menu-item (click)=\"selectPermission('view')\">\n <mat-icon class=\"mat-icon\" svgIcon=\"check\" [class.visually-hidden]=\"overallPermission() !== 'view'\"></mat-icon>\n <div>\n <div trans>Can view</div>\n <div class=\"description\" trans>People can view the item.</div>\n </div>\n </div>\n</mat-menu>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n DRIVE_ENTRY_FULL_PERMISSIONS, DriveEntryPermissions\n} from '../../permissions/drive-entry-permissions';\nimport { ShareDialogEntryPermissions } from '../share-dialog/types/ShareDialogEntryPermissions';\nimport { Select, Store } from '@ngxs/store';\nimport { SharesApiService } from '../shares-api.service';\nimport { Toast } from '../../../../common/core/ui/toast.service';\nimport {\n ShareDialogEntryUser, ShareDialogState, UpdateUserPermissions\n} from '../state/share-dialog.state';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'sharing-permissions-button',\n templateUrl: './sharing-permissions-button.component.html',\n styleUrls: ['./sharing-permissions-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SharingPermissionsButtonComponent {\n @Input() permissions: ShareDialogEntryPermissions = DRIVE_ENTRY_FULL_PERMISSIONS;\n @Input() user: ShareDialogEntryUser;\n @Output() change: EventEmitter<DriveEntryPermissions> = new EventEmitter();\n @Input() @HostBinding('class.compact') compact = false;\n @Select(ShareDialogState.loadingUsers) loadingUsers$: Observable<number[]>;\n\n constructor(\n private store: Store,\n private api: SharesApiService,\n private toast: Toast,\n ) {}\n\n public overallPermission(): keyof ShareDialogEntryPermissions {\n if (this.permissions.varies) {\n return 'varies';\n } else if (this.permissions.edit) {\n return 'edit';\n } else if (this.permissions.download) {\n return 'download';\n } else {\n return 'view';\n }\n }\n\n public selectPermission(permission: keyof ShareDialogEntryPermissions) {\n if (permission === 'edit') {\n this.permissions = {...DRIVE_ENTRY_FULL_PERMISSIONS};\n } else if (permission === 'download') {\n this.permissions = {...DRIVE_ENTRY_FULL_PERMISSIONS, edit: false};\n } else {\n this.permissions = {...DRIVE_ENTRY_FULL_PERMISSIONS, edit: false, download: false};\n }\n\n if (this.user) {\n this.updateUserPermissions(this.permissions);\n } else {\n this.change.emit(this.permissions);\n }\n }\n\n public updateUserPermissions(newPermissions: DriveEntryPermissions) {\n this.store.dispatch(new UpdateUserPermissions(this.user, newPermissions))\n .subscribe(() => {\n this.toast.open('Changed permissions.');\n });\n }\n}\n","<div class=\"header\" trans>Who has access</div>\n<div class=\"users-list\">\n <div class=\"list-item\" *ngIf=\"activeWorkspace$ | async as workspace\">\n <mat-icon svgIcon=\"groups\" class=\"list-item-img\"></mat-icon>\n <div class=\"text\">\n <div class=\"display_name\" [transValues]=\"{workspace: workspace.name}\" trans>Everyone at \":workspace\" workspace</div>\n <div class=\"email\">{{workspace.members_count}} {{ 'members' | trans }}</div>\n </div>\n </div>\n <div class=\"list-item\" *ngFor=\"let user of users | async; trackBy: trackByUser\" [class.removed]=\"user.removed\" [@flyInOut]=\"'in'\">\n <img [src]=\"user.avatar\" class=\"list-item-img\" alt=\"\">\n <div class=\"text\">\n <div class=\"display_name\">{{user.display_name}}</div>\n <div class=\"email\">{{user.email}}</div>\n </div>\n <div class=\"actions\">\n <span class=\"owner-label\" *ngIf=\"user.owns_entry || (currentUser.getModel().id === user.id); else permissionSelector\" trans>\n {{ user.owns_entry ? 'Owner' : 'You' }}\n </span>\n\n <ng-template #permissionSelector>\n <sharing-permissions-button [permissions]=\"user.entry_permissions\" [user]=\"user\"></sharing-permissions-button>\n <button mat-icon-button [disabled]=\"(loadingUsers$ | async).includes(user.id)\" (click)=\"removeUser(user)\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </ng-template>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { DriveEntryUser } from '../../files/models/drive-entry';\nimport {\n RemoveUser, ShareDialogEntryUser, ShareDialogState\n} from '../state/share-dialog.state';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { CurrentUser } from '../../../../common/auth/current-user';\nimport { WorkspacesService } from '../../../../common/workspaces/workspaces.service';\nimport { DriveState } from '../../state/drive-state';\nimport { filter, map, switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'entries-access-table',\n templateUrl: './entries-access-table.component.html',\n styleUrls: ['./entries-access-table.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('flyInOut', [\n state('in', style({transform: 'translateX(0)'})),\n transition('void => *', [\n style({transform: 'translateX(-100%)'}),\n animate(100)\n ]),\n transition('* => void', [\n animate(100, style({transform: 'translateX(100%)'}))\n ])\n ])\n ]\n})\nexport class EntriesAccessTableComponent {\n @Select(ShareDialogState.usersWithAccess) users: Observable<ShareDialogEntryUser[]>;\n @Select(ShareDialogState.loadingUsers) loadingUsers$: Observable<number[]>;\n public activeWorkspace$ = this.store.select(DriveState.selectedEntries)\n .pipe(\n map(entries => entries.every(e => e.workspace_id)),\n filter(x => !!x),\n switchMap(() => this.workspaces.activeWorkspace$)\n );\n\n constructor(\n private store: Store,\n public currentUser: CurrentUser,\n public workspaces: WorkspacesService,\n ) {}\n\n public removeUser(user: DriveEntryUser) {\n this.store.dispatch(new RemoveUser(user));\n }\n\n trackByUser(index: number, user: DriveEntryUser): number { return user.id; }\n}\n","<div class=\"modal-header\">\n <h2 mat-dialog-title trans>Add people</h2>\n <button type=\"button\" mat-icon-button (click)=\"dialogRef.close()\" class=\"close-button\" tabindex=\"-1\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <div class=\"emails-container\">\n <chip-input [formControl]=\"shareModel.emails\" [emailsInput]=\"true\" [suggestFn]=\"settings.get('share.suggest_emails') ? suggestUserEmails : null\" placeholder=\"Enter email addresses...\" email required></chip-input>\n <sharing-permissions-button [compact]=\"true\" (change)=\"shareModel.permissions = $event\"></sharing-permissions-button>\n </div>\n\n <div class=\"errors\">\n <div class=\"error\" *ngFor=\"let error of errors | async | keyvalue\">{{error.value}}</div>\n </div>\n\n <entries-access-table></entries-access-table>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\" [disabled]=\"loading$ | async\" trans>Close</button>\n <button type=\"submit\" mat-raised-button color=\"accent\" (click)=\"share()\" [disabled]=\"(loading$ | async)\" *ngIf=\"shareModel.emails.value?.length\" trans>Share</button>\n</mat-dialog-actions>\n\n","import { ChangeDetectionStrategy, Component, OnDestroy, ViewEncapsulation } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Actions, ofActionDispatched, Select, Store } from '@ngxs/store';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { DRIVE_ENTRY_FULL_PERMISSIONS, DriveEntryPermissions } from '../../permissions/drive-entry-permissions';\nimport { ResetState, SetInitialUsers, ShareDialogState, ShareEntries, ShareEntriesFailed } from '../state/share-dialog.state';\nimport { FormControl } from '@angular/forms';\nimport { BackendErrorMessages } from '@common/core/types/backend-error-response';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { Users } from '@common/auth/users.service';\nimport { Settings } from '@common/core/config/settings.service';\n\n@Component({\n selector: 'share-dialog',\n templateUrl: './share-dialog.component.html',\n styleUrls: ['./share-dialog.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ShareDialogComponent implements OnDestroy {\n @Select(ShareDialogState.loading) loading$: Observable<boolean>;\n\n private destroyed$ = new Subject();\n public errors: BehaviorSubject<BackendErrorMessages> = new BehaviorSubject({});\n public shareModel: { emails: FormControl, permissions: DriveEntryPermissions};\n\n constructor(\n public dialogRef: MatDialogRef<ShareDialogComponent>,\n public settings: Settings,\n private store: Store,\n private actions$: Actions,\n private users: Users,\n ) {\n this.resetModel();\n this.store.dispatch(new SetInitialUsers());\n\n this.bindToShareError();\n this.bindToShareModel();\n }\n\n ngOnDestroy() {\n this.store.dispatch(new ResetState());\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n public share() {\n const payload = {\n emails: this.shareModel.emails.value,\n permissions: this.shareModel.permissions,\n };\n\n this.store.dispatch(new ShareEntries(payload)).subscribe(() => {\n this.setErrorMessages();\n this.resetModel();\n });\n }\n\n private resetModel() {\n this.shareModel = {\n emails: new FormControl([]),\n permissions: DRIVE_ENTRY_FULL_PERMISSIONS\n };\n }\n\n private setErrorMessages(messages?: BackendErrorMessages) {\n this.errors.next(messages || {});\n }\n\n private bindToShareModel() {\n this.shareModel.emails.valueChanges\n .pipe(takeUntil(this.destroyed$))\n .subscribe(() => this.setErrorMessages());\n }\n\n private bindToShareError() {\n this.actions$.pipe(\n takeUntil(this.destroyed$),\n ofActionDispatched(ShareEntriesFailed)\n ).subscribe((action: ShareEntriesFailed) => {\n this.setErrorMessages(action.messages);\n });\n }\n\n suggestUserEmails = (query: string): Observable<string[]> => {\n return this.users.getAll({query, perPage: 7})\n .pipe(map(users => users.map(u => u.email)));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BackendResponse } from '@common/core/types/backend-response';\nimport { ShareableLink } from './models/shareable-link';\nimport { AppHttpClient } from '@common/core/http/app-http-client.service';\nimport { ShareableLinkOptions } from './models/shareable-link-options';\nimport { User } from '@common/core/types/models/User';\nimport { PaginationResponse } from '@common/core/types/pagination/pagination-response';\nimport { FileEntry } from '@common/uploads/types/file-entry';\n\nexport interface GetLinkData {\n link: ShareableLink;\n folderChildren: PaginationResponse<FileEntry>;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ShareableLinksApiService {\n constructor(private http: AppHttpClient) {}\n\n public findByEntryId(entryId: number, params: {autoCreate?: boolean}): BackendResponse<{ link: ShareableLink }> {\n return this.http.get(`drive/entries/${entryId}/shareable-link`, params);\n }\n\n public findByHash(hash: string, params?: {withEntries?: boolean, page?: number, order?: string}): BackendResponse<GetLinkData> {\n return this.http.get(`drive/shareable-links/${hash}`, params);\n }\n\n public create(entryId: number, params: Partial<ShareableLinkOptions>): BackendResponse<{ link: ShareableLink }> {\n return this.http.post(`drive/entries/${entryId}/shareable-link`, params);\n }\n\n public update(id: number, params: Partial<ShareableLinkOptions>): BackendResponse<{ link: ShareableLink }> {\n return this.http.put(`drive/shareable-links/${id}`, params);\n }\n\n public delete(id: number): BackendResponse<void> {\n return this.http.delete(`drive/shareable-links/${id})`);\n }\n\n public checkPassword(linkId: number, password: string): BackendResponse<{matches: boolean}> {\n return this.http.post(`drive/shareable-links/${linkId}/check-password`, {password});\n }\n\n /**\n * Import shareable link entry into current user's drive.\n */\n public importEntry(linkId: number, password?: string): BackendResponse<{users: User[]}> {\n return this.http.post(`drive/shareable-links/${linkId}/import`, {password});\n }\n}\n","import { Action, Selector, State, StateContext, Store } from '@ngxs/store';\nimport { ShareableLinkOptions } from './models/shareable-link-options';\nimport { ShareableLinksApiService } from './shareable-links-api.service';\nimport { ShareableLink } from './models/shareable-link';\nimport { finalize, tap } from 'rxjs/operators';\nimport { DriveState } from '../../state/drive-state';\nimport { Settings } from '@common/core/config/settings.service';\nimport {\n BackendErrorMessages, BackendErrorResponse\n} from '@common/core/types/backend-error-response';\nimport { Injectable } from '@angular/core';\n\nexport interface ShareLinkStateModel {\n cache: {[key: number]: ShareableLink};\n backendErrors: BackendErrorMessages;\n link: ShareableLink;\n loading: boolean;\n linkOptions: ShareableLinkOptions;\n optionsPanelVisible: boolean;\n}\n\nexport class LoadShareableLink {\n static readonly type = '[Shareable Link] Load From Backend';\n constructor(public options: {autoCreate?: boolean} = {}) {}\n}\n\nexport class UpdateShareableLink {\n static readonly type = '[Shareable Link] Update';\n constructor(public options: ShareableLinkOptions) {}\n}\n\nexport class CreateShareableLink {\n static readonly type = '[Shareable Link] Create';\n constructor(public options: ShareableLinkOptions) {}\n}\n\nexport class DeleteShareableLink {\n static readonly type = '[Shareable Link] Delete';\n}\n\nexport class ToggleOptionsPanel {\n static readonly type = '[Shareable Link] Toggle Options Panel Visibility';\n}\n\nexport class LinkCopySuccess {\n static readonly type = '[Shareable Link] Copy To Clipboard Success';\n}\n\nexport class ResetShareLinkState {\n static readonly type = '[Shareable Link] Reset State';\n}\n\nconst defaultState = {\n link: null,\n loading: false,\n optionsPanelVisible: true,\n backendErrors: {},\n cache: {},\n linkOptions: {\n allowDownload: false,\n allowEdit: false,\n expiresAt: null,\n password: null,\n }\n};\n\n@State<ShareLinkStateModel>({\n name: 'shareLink',\n defaults: defaultState\n})\n@Injectable()\nexport class ShareLinkState {\n constructor(\n private store: Store,\n private settings: Settings,\n private linksApi: ShareableLinksApiService\n ) {}\n\n @Selector()\n static loading(state: ShareLinkStateModel) {\n return state.loading;\n }\n\n @Selector()\n static link(state: ShareLinkStateModel) {\n return state.link;\n }\n\n @Selector()\n static optionsVisible(state: ShareLinkStateModel) {\n return ! state.loading && state.optionsPanelVisible;\n }\n\n @Selector()\n static backendErrors(state: ShareLinkStateModel) {\n return state.backendErrors;\n }\n\n @Action(CreateShareableLink)\n createShareableLink(ctx: StateContext<ShareLinkStateModel>, action: UpdateShareableLink) {\n const entryId = this.store.selectSnapshot(DriveState.selectedEntryIds)[0];\n\n ctx.patchState({loading: true});\n\n return this.linksApi.create(entryId, action.options)\n .pipe(\n finalize(() => ctx.patchState({loading: false, backendErrors: {}})),\n tap(response => {\n const link = response.link;\n ctx.patchState({\n cache: {...ctx.getState().cache, [link.entry_id]: link},\n link: response.link,\n optionsPanelVisible: false\n });\n }, (errorResponse: BackendErrorResponse) => {\n ctx.patchState({backendErrors: errorResponse.errors});\n })\n );\n }\n\n @Action(UpdateShareableLink)\n updateLink(ctx: StateContext<ShareLinkStateModel>, action: UpdateShareableLink) {\n const link = ctx.getState().link;\n\n ctx.patchState({loading: true});\n\n return this.linksApi.update(link.id, action.options)\n .pipe(\n finalize(() => ctx.patchState({loading: false, backendErrors: {}})),\n tap(response => ctx.patchState({\n link: response.link,\n cache: {...ctx.getState().cache, [link.entry_id]: response.link},\n optionsPanelVisible: false\n }), (errorResponse: BackendErrorResponse) => {\n ctx.patchState({backendErrors: errorResponse.errors});\n })\n );\n }\n\n @Action(LoadShareableLink)\n loadShareableLink(ctx: StateContext<ShareLinkStateModel>, action: LoadShareableLink) {\n const entryId = this.store.selectSnapshot(DriveState.selectedEntryIds)[0],\n cachedLink = ctx.getState().cache[entryId];\n\n if (cachedLink) {\n return ctx.patchState({link: cachedLink, optionsPanelVisible: false});\n }\n\n ctx.patchState({loading: true});\n\n return this.linksApi.findByEntryId(entryId, {autoCreate: action.options.autoCreate})\n .pipe(\n finalize(() => ctx.patchState({loading: false})),\n tap(response => ctx.patchState({\n link: response.link,\n optionsPanelVisible: false,\n cache: {...ctx.getState().cache, [response.link.entry_id]: response.link},\n }), () => {})\n );\n }\n\n @Action(DeleteShareableLink)\n deleteShareableLink(ctx: StateContext<ShareLinkStateModel>) {\n const link = ctx.getState().link;\n\n ctx.patchState({loading: true});\n\n return this.linksApi.delete(link.id)\n .pipe(\n finalize(() => ctx.patchState({loading: false})),\n tap(() => {\n const cache = ctx.getState().cache;\n delete cache[link.entry_id];\n\n ctx.patchState({\n link: null,\n cache: cache,\n });\n })\n );\n }\n\n @Action(ToggleOptionsPanel)\n toggleOptionsPanel(ctx: StateContext<ShareLinkStateModel>) {\n ctx.patchState({\n optionsPanelVisible: !ctx.getState().optionsPanelVisible\n });\n }\n\n @Action(ResetShareLinkState, {cancelUncompleted: true})\n resetShareLinkState(ctx: StateContext<ShareLinkStateModel>) {\n return ctx.patchState({...ctx.getState(), ...defaultState});\n }\n}\n","<form class=\"update-link-panel\" [formGroup]=\"form\" (ngSubmit)=\"saveChanges()\">\n <div class=\"link-options\">\n <div class=\"link-option\">\n <div class=\"label\" trans>Link expiration</div>\n <div class=\"content\">\n <mat-checkbox color=\"accent\" [formControl]=\"expirationVisible\" trans>Link is valid until:</mat-checkbox>\n <div class=\"input-container expiration-input-container\" formGroupName=\"expiresAt\" [class.hidden]=\"!expirationVisible.value\">\n <div class=\"date-input-container\">\n <input type=\"date\" formControlName=\"date\" class=\"date-input\" placeholder=\"Expiration date...\" trans-placeholder [min]=\"getMinDate()\">\n </div>\n <input type=\"time\" class=\"time-input\" formControlName=\"time\" placeholder=\"Expiration time...\" trans-placeholder>\n </div>\n <div class=\"error\" *ngIf=\"(backendErrors$ | async)?.expiresAt as error\">{{error}}</div>\n </div>\n </div>\n <div class=\"link-option\">\n <div class=\"label\" trans>Password Protect</div>\n <div class=\"content\">\n <mat-checkbox color=\"accent\" [formControl]=\"passwordVisible\" trans>Require password:</mat-checkbox>\n <ng-container *ngIf=\"passwordVisible.value\">\n <div class=\"input-container password-input-container\">\n <input type=\"password\" formControlName=\"password\" placeholder=\"Enter new password...\" trans-placeholder>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"link-option\">\n <div class=\"label\" trans>Allow editing</div>\n <mat-checkbox color=\"accent\" formControlName=\"allowEdit\" trans>Users with link can modify this item.</mat-checkbox>\n </div>\n <div class=\"link-option\">\n <div class=\"label\" trans>Allow download</div>\n <mat-checkbox color=\"accent\" formControlName=\"allowDownload\" trans>Users with link can download this item.</mat-checkbox>\n </div>\n </div>\n\n <button type=\"button\" (click)=\"toggleOptionsPanel()\" mat-button trans>Cancel</button>\n\n <button type=\"submit\" class=\"update-button\" mat-raised-button color=\"accent\" [disabled]=\"loading$ | async\">\n {{ ((link$ | async) ? 'Update Link' : 'Create Link') | trans }}\n </button>\n</form>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { Select, Store } from '@ngxs/store';\nimport { CreateShareableLink, ShareLinkState, ToggleOptionsPanel, UpdateShareableLink } from '../share-link.state';\nimport { Observable } from 'rxjs';\nimport { ShareableLink } from '../models/shareable-link';\nimport { filter } from 'rxjs/operators';\nimport { ShareableLinkOptions } from '../models/shareable-link-options';\nimport { BackendErrorMessages } from '@common/core/types/backend-error-response';\n\n@Component({\n selector: 'link-options',\n templateUrl: './link-options.component.html',\n styleUrls: ['./link-options.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LinkOptionsComponent implements OnInit {\n @Select(ShareLinkState.link) link$: Observable<ShareableLink>;\n @Select(ShareLinkState.loading) loading$: Observable<boolean>;\n @Select(ShareLinkState.backendErrors) backendErrors$: Observable<BackendErrorMessages>;\n\n public form = new FormGroup({\n password: new FormControl(),\n expiresAt: new FormGroup({\n date: new FormControl(),\n time: new FormControl(),\n }),\n allowEdit: new FormControl(false),\n allowDownload: new FormControl(true)\n });\n\n public passwordVisible = new FormControl(false);\n public expirationVisible = new FormControl(false);\n\n constructor(private store: Store) {}\n\n ngOnInit() {\n this.bindToLinkChange();\n }\n\n public toggleOptionsPanel() {\n this.store.dispatch(new ToggleOptionsPanel());\n }\n\n public saveChanges() {\n if (this.store.selectSnapshot(ShareLinkState.link)) {\n this.store.dispatch(new UpdateShareableLink(this.getPayload()));\n } else {\n this.store.dispatch(new CreateShareableLink(this.getPayload()));\n }\n }\n\n private getPayload() {\n const payload = {\n allowEdit: this.form.get('allowEdit').value,\n allowDownload: this.form.get('allowDownload').value,\n } as ShareableLinkOptions;\n\n if (this.expirationVisible.value) {\n payload.expiresAt = this.form.get('expiresAt.date').value;\n if (this.form.get('expiresAt.time').value) {\n payload.expiresAt += ' ' + this.form.get('expiresAt.time').value;\n }\n }\n\n // not sending \"password\" with request will remove it from link\n if (this.passwordVisible.value) {\n payload.password = this.form.get('password').value;\n }\n\n return payload;\n }\n\n private bindToLinkChange() {\n this.link$.pipe(filter(link => !!link))\n .subscribe(link => {\n this.hydrateExpirationForm(link);\n\n // show or hide password form field\n this.passwordVisible.setValue(!!link.password);\n this.expirationVisible.setValue(!!link.expires_at);\n\n this.form.patchValue({\n allowEdit: link.allow_edit,\n allowDownload: link.allow_download\n });\n });\n }\n\n private hydrateExpirationForm(link: ShareableLink) {\n if ( ! link || ! link.expires_at) return;\n\n const parts = link.expires_at.split(/[ T]/);\n\n this.form.get('expiresAt').setValue({\n date: parts[0],\n time: parts[1] ? parts[1].substr(0, 5) : '',\n });\n }\n\n public getMinDate(): string {\n return new Date().toJSON().split('T')[0];\n }\n}\n","<div class=\"modal-header\">\n <h2 mat-dialog-title trans>Shareable link</h2>\n <button type=\"button\" mat-icon-button (click)=\"close()\" class=\"close-button\" tabindex=\"-1\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <ng-container *ngIf=\"link$ | async\">\n <div class=\"title\">\n <div class=\"left\">\n {{ 'Link sharing is' | trans }}\n <span class=\"state on\"\n ><button class=\"on-text text no-style\" (click)=\"deleteLink()\" trans>\n on\n </button></span\n >\n </div>\n <div class=\"right\">\n <button type=\"button\" mat-icon-button (click)=\"deleteLink()\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"toggleOptionsPanel()\">\n <mat-icon svgIcon=\"settings\"></mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"link-container\">\n <div class=\"link-input-container input-container\">\n <input\n type=\"text\"\n id=\"link-input\"\n readonly\n (click)=\"focusInput()\"\n (change)=\"focusInput()\"\n [value]=\"shareableLink$ | async\"\n tabindex=\"1\"\n />\n <button mat-flat-button color=\"accent\" (click)=\"copyLinkToClipboard()\" trans>\n Copy\n </button>\n </div>\n <div class=\"social-icons\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"social-icon no-style facebook\"\n (click)=\"shareLink('facebook')\"\n >\n <mat-icon svgIcon=\"facebook\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n class=\"social-icon no-style twitter\"\n (click)=\"shareLink('twitter')\"\n >\n <mat-icon svgIcon=\"twitter\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n class=\"social-icon no-style mail\"\n (click)=\"shareLink('mail')\"\n >\n <mat-icon svgIcon=\"mail\"></mat-icon>\n </button>\n </div>\n </div>\n </ng-container>\n\n <link-options [@visibility]=\"optionsVisible$ | async\"></link-options>\n <loading-indicator\n [isVisible]=\"loading$ | async\"\n class=\"overlay-transparent\"\n ></loading-indicator>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button\n type=\"button\"\n mat-button\n class=\"submit-button\"\n (click)=\"close()\"\n [disabled]=\"loading$ | async\"\n trans\n >\n Close\n </button>\n</mat-dialog-actions>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, OnInit, OnDestroy, AfterViewInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Actions, ofActionDispatched, Select, Store } from '@ngxs/store';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport {\n DeleteShareableLink,\n LinkCopySuccess,\n LoadShareableLink, ResetShareLinkState,\n ShareLinkState,\n ToggleOptionsPanel\n} from '../links/share-link.state';\nimport { Settings } from '@common/core/config/settings.service';\nimport { ShareableLink } from '../links/models/shareable-link';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport copy from 'copy-to-clipboard';\nimport { Toast } from '@common/core/ui/toast.service';\nimport { ShareableNetworks, shareLinkSocially } from '@common/core/utils/share-link-socially';\n\n@Component({\n selector: 'share-link-dialog',\n templateUrl: './share-link-dialog.component.html',\n styleUrls: ['./share-link-dialog.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('visibility', [\n state('true', style({\n height: '*',\n padding: '*',\n opacity: '1',\n overflow: '*',\n })),\n state('false', style({\n height: '0',\n padding: '0',\n opacity: '0',\n overflow: 'hidden',\n })),\n transition('true <=> false', animate('225ms cubic-bezier(.4,0,.2,1)'))\n ]),\n ],\n})\nexport class ShareLinkDialogComponent implements AfterViewInit, OnInit, OnDestroy {\n @Select(ShareLinkState.loading) loading$: Observable<boolean>;\n @Select(ShareLinkState.link) link$: Observable<ShareableLink>;\n @Select(ShareLinkState.optionsVisible) optionsVisible$: Observable<boolean>;\n public shareableLink$ = new BehaviorSubject(null);\n private subscriptions: Subscription[] = [];\n\n constructor(\n protected store: Store,\n protected toast: Toast,\n protected actions$: Actions,\n protected settings: Settings,\n protected dialogRef: MatDialogRef<ShareLinkDialogComponent>,\n ) {}\n\n ngOnInit() {\n this.store.dispatch(new LoadShareableLink());\n this.bindToOptionsPanelToggle();\n }\n\n ngAfterViewInit() {\n this.bindToLinkChange();\n }\n\n ngOnDestroy() {\n this.store.dispatch(new ResetShareLinkState());\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n\n public toggleOptionsPanel() {\n this.store.dispatch(new ToggleOptionsPanel());\n }\n\n public deleteLink() {\n this.store.dispatch(new DeleteShareableLink()).subscribe(() => {\n this.toast.open('Link deleted.');\n this.dialogRef.close();\n });\n }\n\n public copyLinkToClipboard() {\n this.focusInput();\n const success = copy(this.shareableLink$.value);\n\n if (success) {\n this.store.dispatch(new LinkCopySuccess());\n }\n }\n\n private bindToLinkChange() {\n this.link$.subscribe(link => {\n if ( ! link) return;\n this.shareableLink$.next(this.settings.getBaseUrl() + '/drive/s/' + link.hash);\n setTimeout(() => this.focusInput());\n });\n }\n\n private bindToOptionsPanelToggle() {\n const sub = this.actions$.pipe(ofActionDispatched(ToggleOptionsPanel))\n .subscribe(() => {\n // close dialog if user canceled link creation\n if ( ! this.store.selectSnapshot(ShareLinkState.optionsVisible) && ! this.shareableLink$.value) {\n this.close();\n }\n });\n this.subscriptions.push(sub);\n }\n\n public shareLink(network: ShareableNetworks) {\n shareLinkSocially(network, this.shareableLink$.value);\n }\n\n public focusInput() {\n const input = document.getElementById('link-input') as HTMLInputElement;\n input.focus();\n input.select();\n }\n\n public close() {\n this.dialogRef.close();\n }\n}\n","export type ShareableNetworks = 'facebook'|'twitter'|'pinterest'|'tumblr'|'blogger'|'mail';\n\nexport function shareLinkSocially(network: ShareableNetworks, link: string, name?: string, image?: string) {\n const url = generateShareUrl(network, link, name, image);\n\n if (network === 'mail') {\n window.location.href = url;\n } else {\n openNewWindow(url);\n }\n}\n\nfunction openNewWindow(url: string) {\n const width = 575,\n height = 400,\n left = (window.innerWidth - width) / 2,\n top = (window.innerHeight - height) / 2,\n opts = 'status=1, scrollbars=1' + ',width=' + width + ',height=' + height + ',top=' + top + ',left=' + left;\n\n window.open(url, 'share', opts);\n}\n\nfunction generateShareUrl(type: string, link: string, name?: string, image?: string) {\n switch (type) {\n case 'facebook':\n return 'https://www.facebook.com/sharer/sharer.php?u=' + link ;\n case 'twitter':\n return `https://twitter.com/intent/tweet?text=${name}&url=${link}`;\n case 'google-plus':\n return 'https://plus.google.com/share?url=' + link ;\n case 'pinterest':\n return 'https://pinterest.com/pin/create/button/?url=' + link + '&media=' + image;\n case 'tumblr':\n const base = 'https://www.tumblr.com/widgets/share/tool?shareSource=legacy&canonicalUrl=&posttype=photo&title=&caption=';\n return base + name + '&content=' + image + '&url=' + link ;\n case 'blogger':\n return 'https://www.blogger.com/blog_this.pyra?t&u=' + link + '&n=' + name;\n case 'mail':\n return `mailto:?subject=Check out this link.&body=${link}`;\n }\n}\n","<div class=\"modal-header\">\n <h2 mat-dialog-title trans>New Folder</h2>\n <button type=\"button\" mat-icon-button (click)=\"close()\" class=\"close-button\" tabindex=\"-1\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<form ngNativeValidate (ngSubmit)=\"confirm()\">\n <mat-dialog-content class=\"many-inputs\">\n <div class=\"input-container\">\n <input type=\"text\" [formControl]=\"folderName\" placeholder=\"Folder name...\" trans-placeholder required min=\"3\">\n <div class=\"error\" *ngIf=\"errors.name\">{{errors.name}}</div>\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions>\n <button (click)=\"close()\" type=\"button\" mat-button class=\"cancel-button\" trans>Cancel</button>\n <button type=\"submit\" mat-raised-button color=\"accent\" class=\"submit-button\" [disabled]=\"loading | async\" trans>Create</button>\n </mat-dialog-actions>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DriveFolder } from '../../models/driveFolder';\nimport { FoldersApiService } from '../../api/folders-api.service';\nimport { Store } from '@ngxs/store';\nimport { BackendErrorResponse } from '@common/core/types/backend-error-response';\nimport { DriveState } from '../../../state/drive-state';\nimport { finalize } from 'rxjs/operators';\nimport { NewFolderCreated } from '../../../state/actions/events';\n\nexport interface CrupdateFolderDialogData {\n folder?: DriveFolder;\n}\n\nexport interface CrupdateFolderErrors {\n name?: string;\n}\n\n@Component({\n selector: 'crupdate-folder-dialog',\n templateUrl: './crupdate-folder-dialog.component.html',\n styleUrls: ['./crupdate-folder-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CrupdateFolderDialogComponent {\n public folderName = new FormControl();\n public loading = new BehaviorSubject(false);\n public errors: CrupdateFolderErrors = {};\n\n constructor(\n private dialogRef: MatDialogRef<CrupdateFolderDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: CrupdateFolderDialogData,\n private store: Store,\n private foldersApi: FoldersApiService,\n private changeDetection: ChangeDetectorRef,\n ) {}\n\n public confirm() {\n this.loading.next(true);\n\n const activeFolder = this.data.folder || this.store.selectSnapshot(DriveState.activeFolder);\n const params = {\n name: this.folderName.value,\n parentId: activeFolder?.id || null,\n };\n\n return this.foldersApi.create(params)\n .pipe(finalize(() => this.loading.next(false)))\n .subscribe(response => {\n this.setErrors();\n this.store.dispatch(new NewFolderCreated(response.folder));\n this.close();\n }, response => this.setErrors(response));\n }\n\n public setErrors(response?: BackendErrorResponse<CrupdateFolderErrors>) {\n this.errors = response ? response.errors : {};\n this.changeDetection.detectChanges();\n }\n\n public close() {\n this.dialogRef.close();\n }\n}\n","import { SelectionModel, isDataSource } from '@angular/cdk/collections';\nimport { isObservable, Subject, BehaviorSubject, of } from 'rxjs';\nimport { take, filter, takeUntil } from 'rxjs/operators';\nimport { InjectionToken, Directive, ViewContainerRef, Inject, Optional, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, IterableDiffers, ChangeDetectorRef, Input, ViewChild, ContentChildren, ElementRef, HostListener, NgModule } from '@angular/core';\nimport { coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directionality } from '@angular/cdk/bidi';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Base tree control. It has basic toggle/expand/collapse operations on a single data node. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/bidi';\nclass BaseTreeControl {\n constructor() {\n /** A selection model with multi-selection to track expansion status. */\n this.expansionModel = new SelectionModel(true);\n }\n /** Toggles one single data node's expanded/collapsed state. */\n toggle(dataNode) {\n this.expansionModel.toggle(this._trackByValue(dataNode));\n }\n /** Expands one single data node. */\n expand(dataNode) {\n this.expansionModel.select(this._trackByValue(dataNode));\n }\n /** Collapses one single data node. */\n collapse(dataNode) {\n this.expansionModel.deselect(this._trackByValue(dataNode));\n }\n /** Whether a given data node is expanded or not. Returns true if the data node is expanded. */\n isExpanded(dataNode) {\n return this.expansionModel.isSelected(this._trackByValue(dataNode));\n }\n /** Toggles a subtree rooted at `node` recursively. */\n toggleDescendants(dataNode) {\n this.expansionModel.isSelected(this._trackByValue(dataNode)) ?\n this.collapseDescendants(dataNode) :\n this.expandDescendants(dataNode);\n }\n /** Collapse all dataNodes in the tree. */\n collapseAll() {\n this.expansionModel.clear();\n }\n /** Expands a subtree rooted at given data node recursively. */\n expandDescendants(dataNode) {\n let toBeProcessed = [dataNode];\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.select(...toBeProcessed.map(value => this._trackByValue(value)));\n }\n /** Collapses a subtree rooted at given data node recursively. */\n collapseDescendants(dataNode) {\n let toBeProcessed = [dataNode];\n toBeProcessed.push(...this.getDescendants(dataNode));\n this.expansionModel.deselect(...toBeProcessed.map(value => this._trackByValue(value)));\n }\n _trackByValue(value) {\n return this.trackBy ? this.trackBy(value) : value;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Flat tree control. Able to expand/collapse a subtree recursively for flattened tree. */\nclass FlatTreeControl extends BaseTreeControl {\n /** Construct with flat tree data node functions getLevel and isExpandable. */\n constructor(getLevel, isExpandable, options) {\n super();\n this.getLevel = getLevel;\n this.isExpandable = isExpandable;\n this.options = options;\n if (this.options) {\n this.trackBy = this.options.trackBy;\n }\n }\n /**\n * Gets a list of the data node's subtree of descendent data nodes.\n *\n * To make this working, the `dataNodes` of the TreeControl must be flattened tree nodes\n * with correct levels.\n */\n getDescendants(dataNode) {\n const startIndex = this.dataNodes.indexOf(dataNode);\n const results = [];\n // Goes through flattened tree nodes in the `dataNodes` array, and get all descendants.\n // The level of descendants of a tree node must be greater than the level of the given\n // tree node.\n // If we reach a node whose level is equal to the level of the tree node, we hit a sibling.\n // If we reach a node whose level is greater than the level of the tree node, we hit a\n // sibling of an ancestor.\n for (let i = startIndex + 1; i < this.dataNodes.length && this.getLevel(dataNode) < this.getLevel(this.dataNodes[i]); i++) {\n results.push(this.dataNodes[i]);\n }\n return results;\n }\n /**\n * Expands all data nodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all flattened\n * data nodes of the tree.\n */\n expandAll() {\n this.expansionModel.select(...this.dataNodes.map(node => this._trackByValue(node)));\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Nested tree control. Able to expand/collapse a subtree recursively for NestedNode type. */\nclass NestedTreeControl extends BaseTreeControl {\n /** Construct with nested tree function getChildren. */\n constructor(getChildren, options) {\n super();\n this.getChildren = getChildren;\n this.options = options;\n if (this.options) {\n this.trackBy = this.options.trackBy;\n }\n }\n /**\n * Expands all dataNodes in the tree.\n *\n * To make this working, the `dataNodes` variable of the TreeControl must be set to all root level\n * data nodes of the tree.\n */\n expandAll() {\n this.expansionModel.clear();\n const allNodes = this.dataNodes.reduce((accumulator, dataNode) => [...accumulator, ...this.getDescendants(dataNode), dataNode], []);\n this.expansionModel.select(...allNodes.map(node => this._trackByValue(node)));\n }\n /** Gets a list of descendant dataNodes of a subtree rooted at given data node recursively. */\n getDescendants(dataNode) {\n const descendants = [];\n this._getDescendants(descendants, dataNode);\n // Remove the node itself\n return descendants.splice(1);\n }\n /** A helper function to get descendants recursively. */\n _getDescendants(descendants, dataNode) {\n descendants.push(dataNode);\n const childrenNodes = this.getChildren(dataNode);\n if (Array.isArray(childrenNodes)) {\n childrenNodes.forEach((child) => this._getDescendants(descendants, child));\n }\n else if (isObservable(childrenNodes)) {\n // TypeScript as of version 3.5 doesn't seem to treat `Boolean` like a function that\n // returns a `boolean` specifically in the context of `filter`, so we manually clarify that.\n childrenNodes.pipe(take(1), filter(Boolean))\n .subscribe(children => {\n for (const child of children) {\n this._getDescendants(descendants, child);\n }\n });\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token used to provide a `CdkTreeNode` to its outlet.\n * Used primarily to avoid circular imports.\n * @docs-private\n */\nconst CDK_TREE_NODE_OUTLET_NODE = new InjectionToken('CDK_TREE_NODE_OUTLET_NODE');\n/**\n * Outlet for nested CdkNode. Put `[cdkTreeNodeOutlet]` on a tag to place children dataNodes\n * inside the outlet.\n */\nclass CdkTreeNodeOutlet {\n constructor(viewContainer, _node) {\n this.viewContainer = viewContainer;\n this._node = _node;\n }\n}\nCdkTreeNodeOutlet.ɵfac = function CdkTreeNodeOutlet_Factory(t) { return new (t || CdkTreeNodeOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(CDK_TREE_NODE_OUTLET_NODE, 8)); };\nCdkTreeNodeOutlet.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNodeOutlet, selectors: [[\"\", \"cdkTreeNodeOutlet\", \"\"]] });\nCdkTreeNodeOutlet.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_TREE_NODE_OUTLET_NODE,] }, { type: Optional }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNodeOutlet, [{\n type: Directive,\n args: [{\n selector: '[cdkTreeNodeOutlet]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TREE_NODE_OUTLET_NODE]\n }, {\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Context provided to the tree node component. */\nclass CdkTreeNodeOutletContext {\n constructor(data) {\n this.$implicit = data;\n }\n}\n/**\n * Data node definition for the CdkTree.\n * Captures the node's template and a when predicate that describes when this node should be used.\n */\nclass CdkTreeNodeDef {\n /** @docs-private */\n constructor(template) {\n this.template = template;\n }\n}\nCdkTreeNodeDef.ɵfac = function CdkTreeNodeDef_Factory(t) { return new (t || CdkTreeNodeDef)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkTreeNodeDef.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNodeDef, selectors: [[\"\", \"cdkTreeNodeDef\", \"\"]], inputs: { when: [\"cdkTreeNodeDefWhen\", \"when\"] } });\nCdkTreeNodeDef.ctorParameters = () => [\n { type: TemplateRef }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNodeDef, [{\n type: Directive,\n args: [{\n selector: '[cdkTreeNodeDef]',\n inputs: [\n 'when: cdkTreeNodeDefWhen'\n ]\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Returns an error to be thrown when there is no usable data.\n * @docs-private\n */\nfunction getTreeNoValidDataSourceError() {\n return Error(`A valid data source must be provided.`);\n}\n/**\n * Returns an error to be thrown when there are multiple nodes that are missing a when function.\n * @docs-private\n */\nfunction getTreeMultipleDefaultNodeDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching node defs for a particular set of data.\n * @docs-private\n */\nfunction getTreeMissingMatchingNodeDefError() {\n return Error(`Could not find a matching node definition for the provided node data.`);\n}\n/**\n * Returns an error to be thrown when there are tree control.\n * @docs-private\n */\nfunction getTreeControlMissingError() {\n return Error(`Could not find a tree control for the tree.`);\n}\n/**\n * Returns an error to be thrown when tree control did not implement functions for flat/nested node.\n * @docs-private\n */\nfunction getTreeControlFunctionsMissingError() {\n return Error(`Could not find functions for nested/flat tree in tree control.`);\n}\n\n/**\n * CDK tree component that connects with a data source to retrieve data of type `T` and renders\n * dataNodes with hierarchy. Updates the dataNodes when new data is provided by the data source.\n */\nclass CdkTree {\n constructor(_differs, _changeDetectorRef) {\n this._differs = _differs;\n this._changeDetectorRef = _changeDetectorRef;\n /** Subject that emits when the component has been destroyed. */\n this._onDestroy = new Subject();\n /** Level of nodes */\n this._levels = new Map();\n // TODO(tinayuangao): Setup a listener for scrolling, emit the calculated view to viewChange.\n // Remove the MAX_VALUE in viewChange\n /**\n * Stream containing the latest information on what rows are being displayed on screen.\n * Can be used by the data source to as a heuristic of what data should be provided.\n */\n this.viewChange = new BehaviorSubject({ start: 0, end: Number.MAX_VALUE });\n }\n /**\n * Provides a stream containing the latest data array to render. Influenced by the tree's\n * stream of view window (what dataNodes are currently on screen).\n * Data source can be an observable of data array, or a data array to render.\n */\n get dataSource() { return this._dataSource; }\n set dataSource(dataSource) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n ngOnInit() {\n this._dataDiffer = this._differs.find([]).create(this.trackBy);\n if (!this.treeControl && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeControlMissingError();\n }\n }\n ngOnDestroy() {\n this._nodeOutlet.viewContainer.clear();\n this.viewChange.complete();\n this._onDestroy.next();\n this._onDestroy.complete();\n if (this._dataSource && typeof this._dataSource.disconnect === 'function') {\n this.dataSource.disconnect(this);\n }\n if (this._dataSubscription) {\n this._dataSubscription.unsubscribe();\n this._dataSubscription = null;\n }\n }\n ngAfterContentChecked() {\n const defaultNodeDefs = this._nodeDefs.filter(def => !def.when);\n if (defaultNodeDefs.length > 1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeMultipleDefaultNodeDefsError();\n }\n this._defaultNodeDef = defaultNodeDefs[0];\n if (this.dataSource && this._nodeDefs && !this._dataSubscription) {\n this._observeRenderChanges();\n }\n }\n // TODO(tinayuangao): Work on keyboard traversal and actions, make sure it's working for RTL\n // and nested trees.\n /**\n * Switch to the provided data source by resetting the data and unsubscribing from the current\n * render change subscription if one exists. If the data source is null, interpret this by\n * clearing the node outlet. Otherwise start listening for new data.\n */\n _switchDataSource(dataSource) {\n if (this._dataSource && typeof this._dataSource.disconnect === 'function') {\n this.dataSource.disconnect(this);\n }\n if (this._dataSubscription) {\n this._dataSubscription.unsubscribe();\n this._dataSubscription = null;\n }\n // Remove the all dataNodes if there is now no data source\n if (!dataSource) {\n this._nodeOutlet.viewContainer.clear();\n }\n this._dataSource = dataSource;\n if (this._nodeDefs) {\n this._observeRenderChanges();\n }\n }\n /** Set up a subscription for the data provided by the data source. */\n _observeRenderChanges() {\n let dataStream;\n if (isDataSource(this._dataSource)) {\n dataStream = this._dataSource.connect(this);\n }\n else if (isObservable(this._dataSource)) {\n dataStream = this._dataSource;\n }\n else if (Array.isArray(this._dataSource)) {\n dataStream = of(this._dataSource);\n }\n if (dataStream) {\n this._dataSubscription = dataStream.pipe(takeUntil(this._onDestroy))\n .subscribe(data => this.renderNodeChanges(data));\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getTreeNoValidDataSourceError();\n }\n }\n /** Check for changes made in the data and render each change (node added/removed/moved). */\n renderNodeChanges(data, dataDiffer = this._dataDiffer, viewContainer = this._nodeOutlet.viewContainer, parentData) {\n const changes = dataDiffer.diff(data);\n if (!changes) {\n return;\n }\n changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {\n if (item.previousIndex == null) {\n this.insertNode(data[currentIndex], currentIndex, viewContainer, parentData);\n }\n else if (currentIndex == null) {\n viewContainer.remove(adjustedPreviousIndex);\n this._levels.delete(item.item);\n }\n else {\n const view = viewContainer.get(adjustedPreviousIndex);\n viewContainer.move(view, currentIndex);\n }\n });\n this._changeDetectorRef.detectChanges();\n }\n /**\n * Finds the matching node definition that should be used for this node data. If there is only\n * one node definition, it is returned. Otherwise, find the node definition that has a when\n * predicate that returns true with the data. If none return true, return the default node\n * definition.\n */\n _getNodeDef(data, i) {\n if (this._nodeDefs.length === 1) {\n return this._nodeDefs.first;\n }\n const nodeDef = this._nodeDefs.find(def => def.when && def.when(i, data)) || this._defaultNodeDef;\n if (!nodeDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeMissingMatchingNodeDefError();\n }\n return nodeDef;\n }\n /**\n * Create the embedded view for the data node template and place it in the correct index location\n * within the data node view container.\n */\n insertNode(nodeData, index, viewContainer, parentData) {\n const node = this._getNodeDef(nodeData, index);\n // Node context that will be provided to created embedded view\n const context = new CdkTreeNodeOutletContext(nodeData);\n // If the tree is flat tree, then use the `getLevel` function in flat tree control\n // Otherwise, use the level of parent node.\n if (this.treeControl.getLevel) {\n context.level = this.treeControl.getLevel(nodeData);\n }\n else if (typeof parentData !== 'undefined' && this._levels.has(parentData)) {\n context.level = this._levels.get(parentData) + 1;\n }\n else {\n context.level = 0;\n }\n this._levels.set(nodeData, context.level);\n // Use default tree nodeOutlet, or nested node's nodeOutlet\n const container = viewContainer ? viewContainer : this._nodeOutlet.viewContainer;\n container.createEmbeddedView(node.template, context, index);\n // Set the data to just created `CdkTreeNode`.\n // The `CdkTreeNode` created from `createEmbeddedView` will be saved in static variable\n // `mostRecentTreeNode`. We get it from static variable and pass the node data to it.\n if (CdkTreeNode.mostRecentTreeNode) {\n CdkTreeNode.mostRecentTreeNode.data = nodeData;\n }\n }\n}\nCdkTree.ɵfac = function CdkTree_Factory(t) { return new (t || CdkTree)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nCdkTree.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CdkTree, selectors: [[\"cdk-tree\"]], contentQueries: function CdkTree_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkTreeNodeDef, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._nodeDefs = _t);\n } }, viewQuery: function CdkTree_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(CdkTreeNodeOutlet, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._nodeOutlet = _t.first);\n } }, hostAttrs: [\"role\", \"tree\", 1, \"cdk-tree\"], inputs: { dataSource: \"dataSource\", treeControl: \"treeControl\", trackBy: \"trackBy\" }, exportAs: [\"cdkTree\"], decls: 1, vars: 0, consts: [[\"cdkTreeNodeOutlet\", \"\"]], template: function CdkTree_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [CdkTreeNodeOutlet], encapsulation: 2 });\nCdkTree.ctorParameters = () => [\n { type: IterableDiffers },\n { type: ChangeDetectorRef }\n];\nCdkTree.propDecorators = {\n dataSource: [{ type: Input }],\n treeControl: [{ type: Input }],\n trackBy: [{ type: Input }],\n _nodeOutlet: [{ type: ViewChild, args: [CdkTreeNodeOutlet, { static: true },] }],\n _nodeDefs: [{ type: ContentChildren, args: [CdkTreeNodeDef, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTree, [{\n type: Component,\n args: [{\n selector: 'cdk-tree',\n exportAs: 'cdkTree',\n template: `<ng-container cdkTreeNodeOutlet></ng-container>`,\n host: {\n 'class': 'cdk-tree',\n 'role': 'tree'\n },\n encapsulation: ViewEncapsulation.None,\n // The \"OnPush\" status for the `CdkTree` component is effectively a noop, so we are removing it.\n // The view for `CdkTree` consists entirely of templates declared in other views. As they are\n // declared elsewhere, they are checked when their declaration points are checked.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default\n }]\n }], function () { return [{ type: ɵngcc0.IterableDiffers }, { type: ɵngcc0.ChangeDetectorRef }]; }, { dataSource: [{\n type: Input\n }], treeControl: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], _nodeOutlet: [{\n type: ViewChild,\n args: [CdkTreeNodeOutlet, { static: true }]\n }], _nodeDefs: [{\n type: ContentChildren,\n args: [CdkTreeNodeDef, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }] }); })();\n/**\n * Tree node for CdkTree. It contains the data in the tree node.\n */\nclass CdkTreeNode {\n constructor(_elementRef, _tree) {\n this._elementRef = _elementRef;\n this._tree = _tree;\n /** Subject that emits when the component has been destroyed. */\n this._destroyed = new Subject();\n /** Emits when the node's data has changed. */\n this._dataChanges = new Subject();\n CdkTreeNode.mostRecentTreeNode = this;\n // The classes are directly added here instead of in the host property because classes on\n // the host property are not inherited with View Engine. It is not set as a @HostBinding because\n // it is not set by the time it's children nodes try to read the class from it.\n // TODO: move to host after View Engine deprecation\n this._elementRef.nativeElement.classList.add('cdk-tree-node');\n this.role = 'treeitem';\n }\n /**\n * The role of the tree node.\n * @deprecated The correct role is 'treeitem', 'group' should not be used. This input will be\n * removed in a future version.\n * @breaking-change 12.0.0 Remove this input\n */\n get role() { return 'treeitem'; }\n set role(_role) {\n // TODO: move to host after View Engine deprecation\n this._elementRef.nativeElement.setAttribute('role', _role);\n }\n /** The tree node's data. */\n get data() { return this._data; }\n set data(value) {\n if (value !== this._data) {\n this._data = value;\n this._setRoleFromData();\n this._dataChanges.next();\n }\n }\n get isExpanded() {\n return this._tree.treeControl.isExpanded(this._data);\n }\n _setExpanded(_expanded) {\n this._isAriaExpanded = _expanded;\n this._elementRef.nativeElement.setAttribute('aria-expanded', `${_expanded}`);\n }\n get level() {\n // If the treeControl has a getLevel method, use it to get the level. Otherwise read the\n // aria-level off the parent node and use it as the level for this node (note aria-level is\n // 1-indexed, while this property is 0-indexed, so we don't need to increment).\n return this._tree.treeControl.getLevel ?\n this._tree.treeControl.getLevel(this._data) : this._parentNodeAriaLevel;\n }\n ngOnInit() {\n this._parentNodeAriaLevel = getParentNodeAriaLevel(this._elementRef.nativeElement);\n this._elementRef.nativeElement.setAttribute('aria-level', `${this.level + 1}`);\n }\n ngDoCheck() {\n // aria-expanded is be set here because the expanded state is stored in the tree control and\n // the node isn't aware when the state is changed.\n // It is not set using a @HostBinding because they sometimes get lost with Mixin based classes.\n // TODO: move to host after View Engine deprecation\n if (this.isExpanded != this._isAriaExpanded) {\n this._setExpanded(this.isExpanded);\n }\n }\n ngOnDestroy() {\n // If this is the last tree node being destroyed,\n // clear out the reference to avoid leaking memory.\n if (CdkTreeNode.mostRecentTreeNode === this) {\n CdkTreeNode.mostRecentTreeNode = null;\n }\n this._dataChanges.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Focuses the menu item. Implements for FocusableOption. */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n // TODO: role should eventually just be set in the component host\n _setRoleFromData() {\n if (!this._tree.treeControl.isExpandable && !this._tree.treeControl.getChildren &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeControlFunctionsMissingError();\n }\n this.role = 'treeitem';\n }\n}\nCdkTreeNode.ɵfac = function CdkTreeNode_Factory(t) { return new (t || CdkTreeNode)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CdkTree)); };\nCdkTreeNode.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNode, selectors: [[\"cdk-tree-node\"]], inputs: { role: \"role\" }, exportAs: [\"cdkTreeNode\"] });\n/**\n * The most recently created `CdkTreeNode`. We save it in static variable so we can retrieve it\n * in `CdkTree` and set the data to it.\n */\nCdkTreeNode.mostRecentTreeNode = null;\nCdkTreeNode.ctorParameters = () => [\n { type: ElementRef },\n { type: CdkTree }\n];\nCdkTreeNode.propDecorators = {\n role: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNode, [{\n type: Directive,\n args: [{\n selector: 'cdk-tree-node',\n exportAs: 'cdkTreeNode'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: CdkTree }]; }, { role: [{\n type: Input\n }] }); })();\nfunction getParentNodeAriaLevel(nodeElement) {\n let parent = nodeElement.parentElement;\n while (parent && !isNodeElement(parent)) {\n parent = parent.parentElement;\n }\n if (!parent) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw Error('Incorrect tree structure containing detached node.');\n }\n else {\n return -1;\n }\n }\n else if (parent.classList.contains('cdk-nested-tree-node')) {\n return coerceNumberProperty(parent.getAttribute('aria-level'));\n }\n else {\n // The ancestor element is the cdk-tree itself\n return 0;\n }\n}\nfunction isNodeElement(element) {\n const classList = element.classList;\n return !!((classList === null || classList === void 0 ? void 0 : classList.contains('cdk-nested-tree-node')) || (classList === null || classList === void 0 ? void 0 : classList.contains('cdk-tree')));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Nested node is a child of `<cdk-tree>`. It works with nested tree.\n * By using `cdk-nested-tree-node` component in tree node template, children of the parent node will\n * be added in the `cdkTreeNodeOutlet` in tree node template.\n * The children of node will be automatically added to `cdkTreeNodeOutlet`.\n */\nclass CdkNestedTreeNode extends CdkTreeNode {\n constructor(_elementRef, _tree, _differs) {\n super(_elementRef, _tree);\n this._elementRef = _elementRef;\n this._tree = _tree;\n this._differs = _differs;\n // The classes are directly added here instead of in the host property because classes on\n // the host property are not inherited with View Engine. It is not set as a @HostBinding because\n // it is not set by the time it's children nodes try to read the class from it.\n // TODO: move to host after View Engine deprecation\n this._elementRef.nativeElement.classList.add('cdk-nested-tree-node');\n }\n ngAfterContentInit() {\n this._dataDiffer = this._differs.find([]).create(this._tree.trackBy);\n if (!this._tree.treeControl.getChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTreeControlFunctionsMissingError();\n }\n const childrenNodes = this._tree.treeControl.getChildren(this.data);\n if (Array.isArray(childrenNodes)) {\n this.updateChildrenNodes(childrenNodes);\n }\n else if (isObservable(childrenNodes)) {\n childrenNodes.pipe(takeUntil(this._destroyed))\n .subscribe(result => this.updateChildrenNodes(result));\n }\n this.nodeOutlet.changes.pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateChildrenNodes());\n }\n // This is a workaround for https://github.com/angular/angular/issues/23091\n // In aot mode, the lifecycle hooks from parent class are not called.\n ngOnInit() {\n super.ngOnInit();\n }\n ngDoCheck() {\n super.ngDoCheck();\n }\n ngOnDestroy() {\n this._clear();\n super.ngOnDestroy();\n }\n /** Add children dataNodes to the NodeOutlet */\n updateChildrenNodes(children) {\n const outlet = this._getNodeOutlet();\n if (children) {\n this._children = children;\n }\n if (outlet && this._children) {\n const viewContainer = outlet.viewContainer;\n this._tree.renderNodeChanges(this._children, this._dataDiffer, viewContainer, this._data);\n }\n else {\n // Reset the data differ if there's no children nodes displayed\n this._dataDiffer.diff([]);\n }\n }\n /** Clear the children dataNodes. */\n _clear() {\n const outlet = this._getNodeOutlet();\n if (outlet) {\n outlet.viewContainer.clear();\n this._dataDiffer.diff([]);\n }\n }\n /** Gets the outlet for the current node. */\n _getNodeOutlet() {\n const outlets = this.nodeOutlet;\n // Note that since we use `descendants: true` on the query, we have to ensure\n // that we don't pick up the outlet of a child node by accident.\n return outlets && outlets.find(outlet => !outlet._node || outlet._node === this);\n }\n}\nCdkNestedTreeNode.ɵfac = function CdkNestedTreeNode_Factory(t) { return new (t || CdkNestedTreeNode)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(CdkTree), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers)); };\nCdkNestedTreeNode.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkNestedTreeNode, selectors: [[\"cdk-nested-tree-node\"]], contentQueries: function CdkNestedTreeNode_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkTreeNodeOutlet, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.nodeOutlet = _t);\n } }, inputs: { role: \"role\", disabled: \"disabled\", tabIndex: \"tabIndex\" }, exportAs: [\"cdkNestedTreeNode\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: CdkTreeNode, useExisting: CdkNestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: CdkNestedTreeNode }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkNestedTreeNode.ctorParameters = () => [\n { type: ElementRef },\n { type: CdkTree },\n { type: IterableDiffers }\n];\nCdkNestedTreeNode.propDecorators = {\n nodeOutlet: [{ type: ContentChildren, args: [CdkTreeNodeOutlet, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkNestedTreeNode, [{\n type: Directive,\n args: [{\n selector: 'cdk-nested-tree-node',\n exportAs: 'cdkNestedTreeNode',\n inputs: ['role', 'disabled', 'tabIndex'],\n providers: [\n { provide: CdkTreeNode, useExisting: CdkNestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: CdkNestedTreeNode }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: CdkTree }, { type: ɵngcc0.IterableDiffers }]; }, { nodeOutlet: [{\n type: ContentChildren,\n args: [CdkTreeNodeOutlet, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Regex used to split a string on its CSS units. */\nconst cssUnitPattern = /([A-Za-z%]+)$/;\n/**\n * Indent for the children tree dataNodes.\n * This directive will add left-padding to the node to show hierarchy.\n */\nclass CdkTreeNodePadding {\n constructor(_treeNode, _tree, _element, _dir) {\n this._treeNode = _treeNode;\n this._tree = _tree;\n this._element = _element;\n this._dir = _dir;\n /** Subject that emits when the component has been destroyed. */\n this._destroyed = new Subject();\n /** CSS units used for the indentation value. */\n this.indentUnits = 'px';\n this._indent = 40;\n this._setPadding();\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => this._setPadding(true));\n }\n // In Ivy the indentation binding might be set before the tree node's data has been added,\n // which means that we'll miss the first render. We have to subscribe to changes in the\n // data to ensure that everything is up to date.\n _treeNode._dataChanges.subscribe(() => this._setPadding());\n }\n /** The level of depth of the tree node. The padding will be `level * indent` pixels. */\n get level() { return this._level; }\n set level(value) { this._setLevelInput(value); }\n /**\n * The indent for each level. Can be a number or a CSS string.\n * Default number 40px from material design menu sub-menu spec.\n */\n get indent() { return this._indent; }\n set indent(indent) { this._setIndentInput(indent); }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** The padding indent value for the tree node. Returns a string with px numbers if not null. */\n _paddingIndent() {\n const nodeLevel = (this._treeNode.data && this._tree.treeControl.getLevel)\n ? this._tree.treeControl.getLevel(this._treeNode.data)\n : null;\n const level = this._level == null ? nodeLevel : this._level;\n return typeof level === 'number' ? `${level * this._indent}${this.indentUnits}` : null;\n }\n _setPadding(forceChange = false) {\n const padding = this._paddingIndent();\n if (padding !== this._currentPadding || forceChange) {\n const element = this._element.nativeElement;\n const paddingProp = this._dir && this._dir.value === 'rtl' ? 'paddingRight' : 'paddingLeft';\n const resetProp = paddingProp === 'paddingLeft' ? 'paddingRight' : 'paddingLeft';\n element.style[paddingProp] = padding || '';\n element.style[resetProp] = '';\n this._currentPadding = padding;\n }\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setLevelInput(value) {\n // Set to null as the fallback value so that _setPadding can fall back to the node level if the\n // consumer set the directive as `cdkTreeNodePadding=\"\"`. We still want to take this value if\n // they set 0 explicitly.\n this._level = coerceNumberProperty(value, null);\n this._setPadding();\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setIndentInput(indent) {\n let value = indent;\n let units = 'px';\n if (typeof indent === 'string') {\n const parts = indent.split(cssUnitPattern);\n value = parts[0];\n units = parts[1] || units;\n }\n this.indentUnits = units;\n this._indent = coerceNumberProperty(value);\n this._setPadding();\n }\n}\nCdkTreeNodePadding.ɵfac = function CdkTreeNodePadding_Factory(t) { return new (t || CdkTreeNodePadding)(ɵngcc0.ɵɵdirectiveInject(CdkTreeNode), ɵngcc0.ɵɵdirectiveInject(CdkTree), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Directionality, 8)); };\nCdkTreeNodePadding.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNodePadding, selectors: [[\"\", \"cdkTreeNodePadding\", \"\"]], inputs: { level: [\"cdkTreeNodePadding\", \"level\"], indent: [\"cdkTreeNodePaddingIndent\", \"indent\"] } });\nCdkTreeNodePadding.ctorParameters = () => [\n { type: CdkTreeNode },\n { type: CdkTree },\n { type: ElementRef },\n { type: Directionality, decorators: [{ type: Optional }] }\n];\nCdkTreeNodePadding.propDecorators = {\n level: [{ type: Input, args: ['cdkTreeNodePadding',] }],\n indent: [{ type: Input, args: ['cdkTreeNodePaddingIndent',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNodePadding, [{\n type: Directive,\n args: [{\n selector: '[cdkTreeNodePadding]'\n }]\n }], function () { return [{ type: CdkTreeNode }, { type: CdkTree }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.Directionality, decorators: [{\n type: Optional\n }] }]; }, { level: [{\n type: Input,\n args: ['cdkTreeNodePadding']\n }], indent: [{\n type: Input,\n args: ['cdkTreeNodePaddingIndent']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Node toggle to expand/collapse the node.\n */\nclass CdkTreeNodeToggle {\n constructor(_tree, _treeNode) {\n this._tree = _tree;\n this._treeNode = _treeNode;\n this._recursive = false;\n }\n /** Whether expand/collapse the node recursively. */\n get recursive() { return this._recursive; }\n set recursive(value) { this._recursive = coerceBooleanProperty(value); }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _toggle(event) {\n this.recursive\n ? this._tree.treeControl.toggleDescendants(this._treeNode.data)\n : this._tree.treeControl.toggle(this._treeNode.data);\n event.stopPropagation();\n }\n}\nCdkTreeNodeToggle.ɵfac = function CdkTreeNodeToggle_Factory(t) { return new (t || CdkTreeNodeToggle)(ɵngcc0.ɵɵdirectiveInject(CdkTree), ɵngcc0.ɵɵdirectiveInject(CdkTreeNode)); };\nCdkTreeNodeToggle.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CdkTreeNodeToggle, selectors: [[\"\", \"cdkTreeNodeToggle\", \"\"]], hostBindings: function CdkTreeNodeToggle_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function CdkTreeNodeToggle_click_HostBindingHandler($event) { return ctx._toggle($event); });\n } }, inputs: { recursive: [\"cdkTreeNodeToggleRecursive\", \"recursive\"] } });\nCdkTreeNodeToggle.ctorParameters = () => [\n { type: CdkTree },\n { type: CdkTreeNode }\n];\nCdkTreeNodeToggle.propDecorators = {\n recursive: [{ type: Input, args: ['cdkTreeNodeToggleRecursive',] }],\n _toggle: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeNodeToggle, [{\n type: Directive,\n args: [{ selector: '[cdkTreeNodeToggle]' }]\n }], function () { return [{ type: CdkTree }, { type: CdkTreeNode }]; }, { recursive: [{\n type: Input,\n args: ['cdkTreeNodeToggleRecursive']\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _toggle: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst EXPORTED_DECLARATIONS = [\n CdkNestedTreeNode,\n CdkTreeNodeDef,\n CdkTreeNodePadding,\n CdkTreeNodeToggle,\n CdkTree,\n CdkTreeNode,\n CdkTreeNodeOutlet,\n];\nclass CdkTreeModule {\n}\nCdkTreeModule.ɵfac = function CdkTreeModule_Factory(t) { return new (t || CdkTreeModule)(); };\nCdkTreeModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CdkTreeModule });\nCdkTreeModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdkTreeModule, [{\n type: NgModule,\n args: [{\n exports: EXPORTED_DECLARATIONS,\n declarations: EXPORTED_DECLARATIONS\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CdkTreeModule, { declarations: [CdkNestedTreeNode, CdkTreeNodeDef, CdkTreeNodePadding, CdkTreeNodeToggle, CdkTree, CdkTreeNode, CdkTreeNodeOutlet], exports: [CdkNestedTreeNode, CdkTreeNodeDef, CdkTreeNodePadding, CdkTreeNodeToggle, CdkTree, CdkTreeNode, CdkTreeNodeOutlet] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BaseTreeControl, CDK_TREE_NODE_OUTLET_NODE, CdkNestedTreeNode, CdkTree, CdkTreeModule, CdkTreeNode, CdkTreeNodeDef, CdkTreeNodeOutlet, CdkTreeNodeOutletContext, CdkTreeNodePadding, CdkTreeNodeToggle, FlatTreeControl, NestedTreeControl, getTreeControlFunctionsMissingError, getTreeControlMissingError, getTreeMissingMatchingNodeDefError, getTreeMultipleDefaultNodeDefsError, getTreeNoValidDataSourceError };\n\n//# sourceMappingURL=tree.js.map","import { CdkTreeNode, CdkTree, CdkTreeNodeDef, CdkNestedTreeNode, CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodePadding, CdkTreeNodeOutlet, CdkTreeNodeToggle, CdkTreeModule } from '@angular/cdk/tree';\nimport { Directive, ElementRef, Attribute, Input, IterableDiffers, ViewContainerRef, Inject, Optional, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, NgModule } from '@angular/core';\nimport { mixinTabIndex, mixinDisabled, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, merge } from 'rxjs';\nimport { take, map } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/tree';\nconst _MatTreeNodeMixinBase = mixinTabIndex(mixinDisabled(CdkTreeNode));\n/**\n * Wrapper for the CdkTree node with Material design styles.\n */\nclass MatTreeNode extends _MatTreeNodeMixinBase {\n constructor(_elementRef, _tree, tabIndex) {\n super(_elementRef, _tree);\n this._elementRef = _elementRef;\n this._tree = _tree;\n this.tabIndex = Number(tabIndex) || 0;\n // The classes are directly added here instead of in the host property because classes on\n // the host property are not inherited with View Engine. It is not set as a @HostBinding because\n // it is not set by the time it's children nodes try to read the class from it.\n // TODO: move to host after View Engine deprecation\n this._elementRef.nativeElement.classList.add('mat-tree-node');\n }\n // This is a workaround for https://github.com/angular/angular/issues/23091\n // In aot mode, the lifecycle hooks from parent class are not called.\n ngOnInit() {\n super.ngOnInit();\n }\n ngDoCheck() {\n super.ngDoCheck();\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\nMatTreeNode.ɵfac = function MatTreeNode_Factory(t) { return new (t || MatTreeNode)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.CdkTree), ɵngcc0.ɵɵinjectAttribute('tabindex')); };\nMatTreeNode.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNode, selectors: [[\"mat-tree-node\"]], inputs: { role: \"role\", disabled: \"disabled\", tabIndex: \"tabIndex\" }, exportAs: [\"matTreeNode\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTreeNode, useExisting: MatTreeNode }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatTreeNode.ctorParameters = () => [\n { type: ElementRef },\n { type: CdkTree },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNode, [{\n type: Directive,\n args: [{\n selector: 'mat-tree-node',\n exportAs: 'matTreeNode',\n inputs: ['role', 'disabled', 'tabIndex'],\n providers: [{ provide: CdkTreeNode, useExisting: MatTreeNode }]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.CdkTree }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, null); })();\n/**\n * Wrapper for the CdkTree node definition with Material design styles.\n * Captures the node's template and a when predicate that describes when this node should be used.\n */\nclass MatTreeNodeDef extends CdkTreeNodeDef {\n}\nMatTreeNodeDef.ɵfac = /*@__PURE__*/ function () { let ɵMatTreeNodeDef_BaseFactory; return function MatTreeNodeDef_Factory(t) { return (ɵMatTreeNodeDef_BaseFactory || (ɵMatTreeNodeDef_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTreeNodeDef)))(t || MatTreeNodeDef); }; }();\nMatTreeNodeDef.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNodeDef, selectors: [[\"\", \"matTreeNodeDef\", \"\"]], inputs: { when: [\"matTreeNodeDefWhen\", \"when\"], data: [\"matTreeNode\", \"data\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTreeNodeDef, useExisting: MatTreeNodeDef }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatTreeNodeDef.propDecorators = {\n data: [{ type: Input, args: ['matTreeNode',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNodeDef, [{\n type: Directive,\n args: [{\n selector: '[matTreeNodeDef]',\n inputs: [\n 'when: matTreeNodeDefWhen'\n ],\n providers: [{ provide: CdkTreeNodeDef, useExisting: MatTreeNodeDef }]\n }]\n }], null, { data: [{\n type: Input,\n args: ['matTreeNode']\n }] }); })();\n/**\n * Wrapper for the CdkTree nested node with Material design styles.\n */\nclass MatNestedTreeNode extends CdkNestedTreeNode {\n constructor(_elementRef, _tree, _differs, tabIndex) {\n super(_elementRef, _tree, _differs);\n this._elementRef = _elementRef;\n this._tree = _tree;\n this._differs = _differs;\n this._disabled = false;\n this.tabIndex = Number(tabIndex) || 0;\n // The classes are directly added here instead of in the host property because classes on\n // the host property are not inherited with View Engine. It is not set as a @HostBinding because\n // it is not set by the time it's children nodes try to read the class from it.\n // TODO: move to host after View Engine deprecation\n this._elementRef.nativeElement.classList.add('mat-nested-tree-node');\n }\n /** Whether the node is disabled. */\n get disabled() { return this._disabled; }\n set disabled(value) { this._disabled = coerceBooleanProperty(value); }\n /** Tabindex for the node. */\n get tabIndex() { return this.disabled ? -1 : this._tabIndex; }\n set tabIndex(value) {\n // If the specified tabIndex value is null or undefined, fall back to the default value.\n this._tabIndex = value != null ? value : 0;\n }\n // This is a workaround for https://github.com/angular/angular/issues/19145\n // In aot mode, the lifecycle hooks from parent class are not called.\n // TODO(tinayuangao): Remove when the angular issue #19145 is fixed\n ngOnInit() {\n super.ngOnInit();\n }\n ngDoCheck() {\n super.ngDoCheck();\n }\n ngAfterContentInit() {\n super.ngAfterContentInit();\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\nMatNestedTreeNode.ɵfac = function MatNestedTreeNode_Factory(t) { return new (t || MatNestedTreeNode)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.CdkTree), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers), ɵngcc0.ɵɵinjectAttribute('tabindex')); };\nMatNestedTreeNode.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatNestedTreeNode, selectors: [[\"mat-nested-tree-node\"]], inputs: { role: \"role\", disabled: \"disabled\", tabIndex: \"tabIndex\", node: [\"matNestedTreeNode\", \"node\"] }, exportAs: [\"matNestedTreeNode\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: CdkNestedTreeNode, useExisting: MatNestedTreeNode },\n { provide: CdkTreeNode, useExisting: MatNestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: MatNestedTreeNode }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatNestedTreeNode.ctorParameters = () => [\n { type: ElementRef },\n { type: CdkTree },\n { type: IterableDiffers },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] }\n];\nMatNestedTreeNode.propDecorators = {\n node: [{ type: Input, args: ['matNestedTreeNode',] }],\n disabled: [{ type: Input }],\n tabIndex: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatNestedTreeNode, [{\n type: Directive,\n args: [{\n selector: 'mat-nested-tree-node',\n exportAs: 'matNestedTreeNode',\n inputs: ['role', 'disabled', 'tabIndex'],\n providers: [\n { provide: CdkNestedTreeNode, useExisting: MatNestedTreeNode },\n { provide: CdkTreeNode, useExisting: MatNestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: MatNestedTreeNode }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.CdkTree }, { type: ɵngcc0.IterableDiffers }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }]; }, { tabIndex: [{\n type: Input\n }], disabled: [{\n type: Input\n }], node: [{\n type: Input,\n args: ['matNestedTreeNode']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Wrapper for the CdkTree padding with Material design styles.\n */\nclass MatTreeNodePadding extends CdkTreeNodePadding {\n /** The level of depth of the tree node. The padding will be `level * indent` pixels. */\n get level() { return this._level; }\n set level(value) { this._setLevelInput(value); }\n /** The indent for each level. Default number 40px from material design menu sub-menu spec. */\n get indent() { return this._indent; }\n set indent(indent) { this._setIndentInput(indent); }\n}\nMatTreeNodePadding.ɵfac = /*@__PURE__*/ function () { let ɵMatTreeNodePadding_BaseFactory; return function MatTreeNodePadding_Factory(t) { return (ɵMatTreeNodePadding_BaseFactory || (ɵMatTreeNodePadding_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTreeNodePadding)))(t || MatTreeNodePadding); }; }();\nMatTreeNodePadding.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNodePadding, selectors: [[\"\", \"matTreeNodePadding\", \"\"]], inputs: { level: [\"matTreeNodePadding\", \"level\"], indent: [\"matTreeNodePaddingIndent\", \"indent\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTreeNodePadding, useExisting: MatTreeNodePadding }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatTreeNodePadding.propDecorators = {\n level: [{ type: Input, args: ['matTreeNodePadding',] }],\n indent: [{ type: Input, args: ['matTreeNodePaddingIndent',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNodePadding, [{\n type: Directive,\n args: [{\n selector: '[matTreeNodePadding]',\n providers: [{ provide: CdkTreeNodePadding, useExisting: MatTreeNodePadding }]\n }]\n }], null, { level: [{\n type: Input,\n args: ['matTreeNodePadding']\n }], indent: [{\n type: Input,\n args: ['matTreeNodePaddingIndent']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Outlet for nested CdkNode. Put `[matTreeNodeOutlet]` on a tag to place children dataNodes\n * inside the outlet.\n */\nclass MatTreeNodeOutlet {\n constructor(viewContainer, _node) {\n this.viewContainer = viewContainer;\n this._node = _node;\n }\n}\nMatTreeNodeOutlet.ɵfac = function MatTreeNodeOutlet_Factory(t) { return new (t || MatTreeNodeOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(CDK_TREE_NODE_OUTLET_NODE, 8)); };\nMatTreeNodeOutlet.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNodeOutlet, selectors: [[\"\", \"matTreeNodeOutlet\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: CdkTreeNodeOutlet,\n useExisting: MatTreeNodeOutlet\n }])] });\nMatTreeNodeOutlet.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_TREE_NODE_OUTLET_NODE,] }, { type: Optional }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNodeOutlet, [{\n type: Directive,\n args: [{\n selector: '[matTreeNodeOutlet]',\n providers: [{\n provide: CdkTreeNodeOutlet,\n useExisting: MatTreeNodeOutlet\n }]\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TREE_NODE_OUTLET_NODE]\n }, {\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Wrapper for the CdkTable with Material design styles.\n */\nclass MatTree extends CdkTree {\n}\nMatTree.ɵfac = /*@__PURE__*/ function () { let ɵMatTree_BaseFactory; return function MatTree_Factory(t) { return (ɵMatTree_BaseFactory || (ɵMatTree_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTree)))(t || MatTree); }; }();\nMatTree.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatTree, selectors: [[\"mat-tree\"]], viewQuery: function MatTree_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatTreeNodeOutlet, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._nodeOutlet = _t.first);\n } }, hostAttrs: [\"role\", \"tree\", 1, \"mat-tree\", \"cdk-tree\"], exportAs: [\"matTree\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTree, useExisting: MatTree }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, consts: [[\"matTreeNodeOutlet\", \"\"]], template: function MatTree_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [MatTreeNodeOutlet], styles: [\".mat-tree{display:block}.mat-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word}.mat-nested-tree-node{border-bottom-width:0}\\n\"], encapsulation: 2 });\nMatTree.propDecorators = {\n _nodeOutlet: [{ type: ViewChild, args: [MatTreeNodeOutlet, { static: true },] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTree, [{\n type: Component,\n args: [{\n selector: 'mat-tree',\n exportAs: 'matTree',\n template: `<ng-container matTreeNodeOutlet></ng-container>`,\n host: {\n // The 'cdk-tree' class needs to be included here because classes set in the host in the\n // parent class are not inherited with View Engine. The 'cdk-tree' class in CdkTreeNode has\n // to be set in the host because:\n // if it is set as a @HostBinding it is not set by the time the tree nodes try to read the\n // class from it.\n // the ElementRef is not available in the constructor so the class can't be applied directly\n // without a breaking constructor change.\n 'class': 'mat-tree cdk-tree',\n 'role': 'tree'\n },\n encapsulation: ViewEncapsulation.None,\n // See note on CdkTree for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [{ provide: CdkTree, useExisting: MatTree }],\n styles: [\".mat-tree{display:block}.mat-tree-node{display:flex;align-items:center;flex:1;word-wrap:break-word}.mat-nested-tree-node{border-bottom-width:0}\\n\"]\n }]\n }], null, { _nodeOutlet: [{\n type: ViewChild,\n args: [MatTreeNodeOutlet, { static: true }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Wrapper for the CdkTree's toggle with Material design styles.\n */\n// tslint:disable-next-line: coercion-types\nclass MatTreeNodeToggle extends CdkTreeNodeToggle {\n get recursive() { return this._recursive; }\n set recursive(value) {\n // TODO: when we remove support for ViewEngine, change this setter to an input\n // alias in the decorator metadata.\n this._recursive = coerceBooleanProperty(value);\n }\n}\nMatTreeNodeToggle.ɵfac = /*@__PURE__*/ function () { let ɵMatTreeNodeToggle_BaseFactory; return function MatTreeNodeToggle_Factory(t) { return (ɵMatTreeNodeToggle_BaseFactory || (ɵMatTreeNodeToggle_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTreeNodeToggle)))(t || MatTreeNodeToggle); }; }();\nMatTreeNodeToggle.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MatTreeNodeToggle, selectors: [[\"\", \"matTreeNodeToggle\", \"\"]], inputs: { recursive: [\"matTreeNodeToggleRecursive\", \"recursive\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkTreeNodeToggle, useExisting: MatTreeNodeToggle }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatTreeNodeToggle.propDecorators = {\n recursive: [{ type: Input, args: ['matTreeNodeToggleRecursive',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeNodeToggle, [{\n type: Directive,\n args: [{\n selector: '[matTreeNodeToggle]',\n providers: [{ provide: CdkTreeNodeToggle, useExisting: MatTreeNodeToggle }]\n }]\n }], null, { recursive: [{\n type: Input,\n args: ['matTreeNodeToggleRecursive']\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst MAT_TREE_DIRECTIVES = [\n MatNestedTreeNode,\n MatTreeNodeDef,\n MatTreeNodePadding,\n MatTreeNodeToggle,\n MatTree,\n MatTreeNode,\n MatTreeNodeOutlet\n];\nclass MatTreeModule {\n}\nMatTreeModule.ɵfac = function MatTreeModule_Factory(t) { return new (t || MatTreeModule)(); };\nMatTreeModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatTreeModule });\nMatTreeModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CdkTreeModule, MatCommonModule], MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatTreeModule, [{\n type: NgModule,\n args: [{\n imports: [CdkTreeModule, MatCommonModule],\n exports: [MatCommonModule, MAT_TREE_DIRECTIVES],\n declarations: MAT_TREE_DIRECTIVES\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatTreeModule, { declarations: function () { return [MatNestedTreeNode, MatTreeNodeDef, MatTreeNodePadding, MatTreeNodeToggle, MatTree, MatTreeNode, MatTreeNodeOutlet]; }, imports: function () { return [CdkTreeModule, MatCommonModule]; }, exports: function () { return [MatCommonModule, MatNestedTreeNode, MatTreeNodeDef, MatTreeNodePadding, MatTreeNodeToggle, MatTree, MatTreeNode, MatTreeNodeOutlet]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Tree flattener to convert a normal type of node to node with children & level information.\n * Transform nested nodes of type `T` to flattened nodes of type `F`.\n *\n * For example, the input data of type `T` is nested, and contains its children data:\n * SomeNode: {\n * key: 'Fruits',\n * children: [\n * NodeOne: {\n * key: 'Apple',\n * },\n * NodeTwo: {\n * key: 'Pear',\n * }\n * ]\n * }\n * After flattener flatten the tree, the structure will become\n * SomeNode: {\n * key: 'Fruits',\n * expandable: true,\n * level: 1\n * },\n * NodeOne: {\n * key: 'Apple',\n * expandable: false,\n * level: 2\n * },\n * NodeTwo: {\n * key: 'Pear',\n * expandable: false,\n * level: 2\n * }\n * and the output flattened type is `F` with additional information.\n */\nclass MatTreeFlattener {\n constructor(transformFunction, getLevel, isExpandable, getChildren) {\n this.transformFunction = transformFunction;\n this.getLevel = getLevel;\n this.isExpandable = isExpandable;\n this.getChildren = getChildren;\n }\n _flattenNode(node, level, resultNodes, parentMap) {\n const flatNode = this.transformFunction(node, level);\n resultNodes.push(flatNode);\n if (this.isExpandable(flatNode)) {\n const childrenNodes = this.getChildren(node);\n if (childrenNodes) {\n if (Array.isArray(childrenNodes)) {\n this._flattenChildren(childrenNodes, level, resultNodes, parentMap);\n }\n else {\n childrenNodes.pipe(take(1)).subscribe(children => {\n this._flattenChildren(children, level, resultNodes, parentMap);\n });\n }\n }\n }\n return resultNodes;\n }\n _flattenChildren(children, level, resultNodes, parentMap) {\n children.forEach((child, index) => {\n let childParentMap = parentMap.slice();\n childParentMap.push(index != children.length - 1);\n this._flattenNode(child, level + 1, resultNodes, childParentMap);\n });\n }\n /**\n * Flatten a list of node type T to flattened version of node F.\n * Please note that type T may be nested, and the length of `structuredData` may be different\n * from that of returned list `F[]`.\n */\n flattenNodes(structuredData) {\n let resultNodes = [];\n structuredData.forEach(node => this._flattenNode(node, 0, resultNodes, []));\n return resultNodes;\n }\n /**\n * Expand flattened node with current expansion status.\n * The returned list may have different length.\n */\n expandFlattenedNodes(nodes, treeControl) {\n let results = [];\n let currentExpand = [];\n currentExpand[0] = true;\n nodes.forEach(node => {\n let expand = true;\n for (let i = 0; i <= this.getLevel(node); i++) {\n expand = expand && currentExpand[i];\n }\n if (expand) {\n results.push(node);\n }\n if (this.isExpandable(node)) {\n currentExpand[this.getLevel(node) + 1] = treeControl.isExpanded(node);\n }\n });\n return results;\n }\n}\n/**\n * Data source for flat tree.\n * The data source need to handle expansion/collapsion of the tree node and change the data feed\n * to `MatTree`.\n * The nested tree nodes of type `T` are flattened through `MatTreeFlattener`, and converted\n * to type `F` for `MatTree` to consume.\n */\nclass MatTreeFlatDataSource extends DataSource {\n constructor(_treeControl, _treeFlattener, initialData = []) {\n super();\n this._treeControl = _treeControl;\n this._treeFlattener = _treeFlattener;\n this._flattenedData = new BehaviorSubject([]);\n this._expandedData = new BehaviorSubject([]);\n this._data = new BehaviorSubject(initialData);\n }\n get data() { return this._data.value; }\n set data(value) {\n this._data.next(value);\n this._flattenedData.next(this._treeFlattener.flattenNodes(this.data));\n this._treeControl.dataNodes = this._flattenedData.value;\n }\n connect(collectionViewer) {\n const changes = [\n collectionViewer.viewChange,\n this._treeControl.expansionModel.changed,\n this._flattenedData\n ];\n return merge(...changes).pipe(map(() => {\n this._expandedData.next(this._treeFlattener.expandFlattenedNodes(this._flattenedData.value, this._treeControl));\n return this._expandedData.value;\n }));\n }\n disconnect() {\n // no op\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Data source for nested tree.\n *\n * The data source for nested tree doesn't have to consider node flattener, or the way to expand\n * or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.\n */\nclass MatTreeNestedDataSource extends DataSource {\n constructor() {\n super(...arguments);\n this._data = new BehaviorSubject([]);\n }\n /**\n * Data for the nested tree\n */\n get data() { return this._data.value; }\n set data(value) { this._data.next(value); }\n connect(collectionViewer) {\n return merge(...[collectionViewer.viewChange, this._data])\n .pipe(map(() => {\n return this.data;\n }));\n }\n disconnect() {\n // no op\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatNestedTreeNode, MatTree, MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule, MatTreeNestedDataSource, MatTreeNode, MatTreeNodeDef, MatTreeNodeOutlet, MatTreeNodePadding, MatTreeNodeToggle };\n\n//# sourceMappingURL=tree.js.map","import { Injectable } from '@angular/core';\nimport { DriveFolder } from '../../folders/models/driveFolder';\nimport { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { Observable, of as observableOf } from 'rxjs';\n\n/** Flat node with expandable and level information */\nexport interface FolderFlatNode extends DriveFolder {\n level: number;\n expandable: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FoldersTreeService {\n public control: FlatTreeControl<FolderFlatNode>;\n public flattener: MatTreeFlattener<DriveFolder, FolderFlatNode>;\n public dataSource: MatTreeFlatDataSource<DriveFolder, FolderFlatNode>;\n public set data(items: DriveFolder[]) {\n this.dataSource.data = items;\n }\n\n constructor() {\n this.createTreeFlattener();\n this.createTreeControl();\n this.createTreeDataSource();\n }\n\n private createTreeFlattener() {\n this.flattener = new MatTreeFlattener(\n this.transformer,\n this.getLevel,\n this.isExpandable, this.getChildren\n );\n }\n\n private createTreeControl() {\n this.control = new FlatTreeControl<FolderFlatNode>(\n this.getLevel,\n this.isExpandable\n );\n }\n\n private createTreeDataSource() {\n this.dataSource = new MatTreeFlatDataSource(\n this.control,\n this.flattener\n );\n }\n\n public transformer(node: DriveFolder, level: number) {\n const flatNode = Object.assign({}, node) as FolderFlatNode;\n flatNode.level = level;\n flatNode.expandable = !!node.children;\n return flatNode;\n }\n\n private getLevel(node: FolderFlatNode): number {\n return node.level;\n }\n\n private isExpandable(node: FolderFlatNode): boolean {\n return node.expandable;\n }\n\n private getChildren(node: DriveFolder): Observable<DriveFolder[]> {\n return observableOf(node.children);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const AVAILABLE_CONTEXT_MENUS = new InjectionToken<any>('AVAILABLE_CONTEXT_MENUS');\n","import {OverlayRef} from '@angular/cdk/overlay';\n\nexport class ContextMenuRef<T> {\n constructor(private overlayRef: OverlayRef) {}\n\n public close() {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n\n public backdropClick() {\n return this.overlayRef.backdropClick();\n }\n\n public attachments() {\n return this.overlayRef.attachments();\n }\n\n public detachments() {\n return this.overlayRef.detachments();\n }\n\n public backdropElement() {\n return this.overlayRef.backdropElement;\n }\n\n public contextMenuElement() {\n return this.overlayRef.overlayElement;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CONTEXT_MENU_DATA = new InjectionToken<{ [key: string]: any }>('CONTEXT_MENU_DATA');\n","import {ComponentFactoryResolver, ElementRef, Injectable, Injector, NgZone} from '@angular/core';\nimport {NavigationStart, Router} from '@angular/router';\nimport {ComponentPortal, ComponentType, PortalInjector} from '@angular/cdk/portal';\nimport {Overlay, PositionStrategy} from '@angular/cdk/overlay';\nimport {filter} from 'rxjs/operators';\nimport {ContextMenuRef} from './context-menu-ref';\nimport {CONTEXT_MENU_DATA} from './context-menu-data';\n\nexport interface ContextMenuParams {\n data?: { [key: string]: any };\n offsetX?: number;\n offsetY?: number;\n originX?: 'start' | 'center' | 'end';\n originY?: 'top' | 'center' | 'bottom';\n overlayX?: 'start' | 'center' | 'end';\n overlayY?: 'top' | 'center' | 'bottom';\n}\n\ntype MenuOrigin = MouseEvent | EventTarget | HTMLElement;\n\nconst ORIGIN_ID = 'dynamic-context-menu-origin';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ContextMenu {\n private lastOrigin: HTMLElement;\n private openContextMenu: ContextMenuRef<any>|null;\n\n constructor(\n private router: Router,\n private zone: NgZone,\n private injector: Injector,\n private resolver: ComponentFactoryResolver,\n private overlay: Overlay,\n ) {\n this.router.events\n .pipe(filter(e => e instanceof NavigationStart))\n .subscribe(() => this.close());\n }\n\n public open<T>(component: ComponentType<T>, e: MenuOrigin, params: ContextMenuParams = {}): ContextMenuRef<T> {\n this.close();\n\n if ( ! component) {\n return;\n }\n\n const overlayRef = this.createOverlay(e, params);\n this.openContextMenu = new ContextMenuRef(overlayRef);\n\n const injector = new PortalInjector(this.injector, new WeakMap<any, any>([\n [CONTEXT_MENU_DATA, params.data],\n [ContextMenuRef, this.openContextMenu],\n ]));\n\n const portal = new ComponentPortal(component, null, injector);\n\n overlayRef.attach(portal);\n this.bindEventsToOverlay();\n\n return this.openContextMenu;\n }\n\n /**\n * Close currently open context menu.\n */\n public close() {\n this.removeLastOrigin();\n\n if (this.openContextMenu) {\n this.openContextMenu.close();\n this.openContextMenu = null;\n }\n }\n\n private createOverlay(e: MenuOrigin, params: ContextMenuParams) {\n return this.overlay.create({\n positionStrategy: this.getMenuPositionStrategy(e, params),\n scrollStrategy: this.overlay.scrollStrategies.close(),\n hasBackdrop: true,\n backdropClass: 'context-menu-backdrop',\n panelClass: 'context-menu-overlay'\n });\n }\n\n private bindEventsToOverlay() {\n this.openContextMenu.contextMenuElement().addEventListener('click', () => {\n this.close();\n });\n\n this.openContextMenu.backdropClick().subscribe(() => {\n this.close();\n });\n\n this.openContextMenu.backdropElement().addEventListener('contextmenu', e => {\n e.preventDefault();\n this.close();\n });\n\n this.openContextMenu.detachments().subscribe(() => {\n this.close();\n });\n }\n\n private getMenuPositionStrategy(e: MenuOrigin, params: ContextMenuParams): PositionStrategy {\n this.createOriginFromEvent(e, params);\n\n const primary = {\n originX: params.originX || 'center',\n originY: params.originY || 'bottom',\n overlayX: params.overlayX || 'center',\n overlayY: params.overlayY || 'top',\n };\n\n return this.overlay.position().flexibleConnectedTo(new ElementRef(this.lastOrigin))\n .withPositions([\n primary,\n {originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom'},\n {originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top'},\n {originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'bottom'}\n ]);\n }\n\n private createOriginFromEvent(e: MenuOrigin, params: ContextMenuParams) {\n this.removeLastOrigin();\n\n if (e instanceof HTMLElement || e instanceof EventTarget) {\n this.lastOrigin = e as HTMLElement;\n } else {\n this.lastOrigin = document.createElement('div');\n this.lastOrigin.style.position = 'fixed';\n this.lastOrigin.style.top = e.clientY + (params.offsetY || 0) + 'px';\n this.lastOrigin.style.left = e.clientX + (params.offsetX || 0) + 'px';\n this.lastOrigin.id = ORIGIN_ID;\n document.body.appendChild(this.lastOrigin);\n }\n }\n\n private removeLastOrigin() {\n if (this.lastOrigin && this.lastOrigin.id === ORIGIN_ID) {\n this.lastOrigin.remove();\n }\n }\n}\n","import {Directive, ElementRef, Inject, Input, OnInit} from '@angular/core';\nimport {ContextMenu} from './context-menu.service';\nimport { AVAILABLE_CONTEXT_MENUS } from './available-context-menus';\n\n@Directive({\n selector: '[contextMenu]'\n})\nexport class ContextMenuDirective implements OnInit {\n @Input('contextMenu') params: string|{type: string, [key: string]: any};\n @Input('disableContextMenu') disableContextMenu = false;\n\n public availableMenus: object = {};\n\n constructor(\n private el: ElementRef,\n private contextMenu: ContextMenu,\n @Inject(AVAILABLE_CONTEXT_MENUS) _availableMenus: object[]\n ) {\n _availableMenus.forEach(config => {\n Object.assign(this.availableMenus, config);\n });\n }\n\n ngOnInit() {\n this.el.nativeElement.addEventListener('contextmenu', e => {\n e.preventDefault();\n e.stopPropagation();\n\n if (this.disableContextMenu) return;\n\n this.contextMenu.open(\n this.getMenuComponent(),\n e,\n {\n overlayX: 'start',\n overlayY: 'top',\n data: this.getMenuData()\n }\n );\n });\n }\n\n private getMenuComponent() {\n if (typeof this.params === 'string') {\n return this.availableMenus[this.params];\n } else {\n return this.availableMenus[this.params.type];\n }\n }\n\n private getMenuData() {\n return (typeof this.params === 'string') ? {type: this.params} : this.params;\n }\n}\n","import { Directive, ElementRef, OnDestroy, OnInit } from '@angular/core';\nimport { Select } from '@ngxs/store';\nimport { DriveState } from '../../state/drive-state';\nimport { Observable, fromEvent, Subscription } from 'rxjs';\n\n@Directive()\nexport abstract class BaseDropTarget implements OnInit, OnDestroy {\n @Select(DriveState.dragging) dragging: Observable<boolean>;\n protected subs: Subscription[] = [];\n protected active: boolean;\n protected abstract el: ElementRef<HTMLElement>;\n\n ngOnInit() {\n this.dragging.subscribe(dragging => {\n if (dragging) {\n this.onDragStart();\n } else {\n this.onDragEnd();\n }\n });\n }\n\n ngOnDestroy() {\n this.unsubscribe();\n }\n\n protected abstract canDrop();\n protected abstract executeAction();\n\n protected onDragStart() {\n const enter = fromEvent(this.el.nativeElement, 'mouseenter')\n .subscribe(() => this.onDragEnter());\n\n const leave = fromEvent(this.el.nativeElement, 'mouseleave')\n .subscribe(() => this.onDragLeave());\n\n this.subs.push(enter, leave);\n }\n\n protected onDragEnter() {\n const canDrop = this.canDrop(),\n classes = ['drag-over'];\n if (canDrop) {\n this.active = true;\n classes.push('can-drop');\n }\n this.el.nativeElement.classList.add(...classes);\n }\n\n protected onDragLeave() {\n this.active = false;\n this.removeDragOverClass();\n }\n\n protected onDragEnd() {\n this.unsubscribe();\n this.removeDragOverClass();\n\n // pointer never left element before drag stop,\n // we can assume that user dropped on this el\n if (this.active && this.canDrop()) {\n this.executeAction();\n this.active = false;\n }\n }\n\n protected unsubscribe() {\n this.subs.forEach(sub => sub && sub.unsubscribe());\n }\n\n protected removeDragOverClass() {\n this.el.nativeElement.classList.remove(...['drag-over', 'can-drop']);\n }\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\nimport { BaseDropTarget } from './base-drop-target';\nimport { DriveState} from '../../state/drive-state';\nimport { Store } from '@ngxs/store';\nimport { DriveFolder } from '../../folders/models/driveFolder';\nimport { MoveEntries } from '../../state/actions/commands';\n\n@Directive({\n selector: '[folderDropTarget]'\n})\nexport class FolderDropTargetDirective extends BaseDropTarget {\n @Input('folderDropTarget') folder: DriveFolder;\n\n constructor(\n protected el: ElementRef,\n protected store: Store,\n ) {\n super();\n }\n\n protected canDrop(): boolean {\n const entries = this.store.selectSnapshot(DriveState.selectedEntries),\n folder = this.folder as DriveFolder;\n\n return DriveState.canMoveEntriesTo(entries, folder);\n }\n\n protected executeAction() {\n return this.store.dispatch(new MoveEntries(this.folder));\n }\n}\n","<div class=\"mat-tree-node root-tree-node\" *ngIf=\"showRootNode\" (click)=\"selectFolder()\" [class.active]=\"!(selectedFolderId$ | async)\">\n <mat-icon svgIcon=\"network-drive-custom\" class=\"folder-icon\"></mat-icon>\n <span class=\"text\" trans>My Drive</span>\n</div>\n<mat-tree [dataSource]=\"tree.dataSource\" [treeControl]=\"tree.control\">\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [matTreeNodePaddingIndent]=\"showRootNode ? 40 : 24\"\n [contextMenu]=\"{type: 'entry', entry: node}\"\n [disableContextMenu]=\"disableContextMenu\"\n [folderDropTarget]=\"node\"\n [class.active]=\"(selectedFolderId$ | async) === node.hash\"\n class=\"tree-node\"\n >\n <mat-icon class=\"toggle-expansion-icon\"\n matTreeNodeToggle\n [class.expanded]=\"tree.control.isExpanded(node)\"\n svgIcon=\"arrow-drop-down\"\n ></mat-icon>\n <button type=\"button\" class=\"no-style folder-button\" (click)=\"selectFolder(node)\">\n <mat-icon svgIcon=\"folder\" class=\"folder-icon\"></mat-icon>\n <span class=\"folder-name text\">{{node.name}}</span>\n </button>\n </mat-tree-node>\n</mat-tree>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { FoldersTreeService } from './folders-tree.service';\nimport { DriveFolder } from '../../folders/models/driveFolder';\nimport { Store } from '@ngxs/store';\nimport { DriveState } from '../../state/drive-state';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n@Component({\n selector: 'folders-tree',\n templateUrl: './folders-tree.component.html',\n styleUrls: ['./folders-tree.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [FoldersTreeService],\n})\nexport class FoldersTreeComponent implements OnInit, OnDestroy {\n @HostBinding('class.expanded') @Input() expanded = false;\n @HostBinding('class.has-root-node') @Input() showRootNode = false;\n @Input() disableContextMenu = false;\n @Output() folderSelected: EventEmitter<DriveFolder> = new EventEmitter();\n\n // TODO: start trackBy function when it's fixed on angular material side\n private subscriptions: Subscription[] = [];\n public selectedFolderId$ = new BehaviorSubject<string>(null);\n constructor(public tree: FoldersTreeService, private store: Store) {}\n\n public selectFolder(folder?: DriveFolder) {\n this.selectedFolderId$.next(folder?.hash);\n this.folderSelected.emit(folder);\n }\n\n public toggle() {\n this.expanded = !this.expanded;\n }\n\n ngOnInit() {\n const sub1 = this.store.select(DriveState.userFolders)\n .pipe(filter(fs => !!fs))\n .subscribe(folders => {\n this.tree.data = folders;\n });\n\n const sub2 = this.store.select(DriveState.activePage).subscribe(page => {\n this.selectedFolderId$.next(page.folderHash);\n });\n\n this.subscriptions.push(sub1, sub2);\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n}\n","import {\n ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewEncapsulation\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Actions, ofAction, Select, Store } from '@ngxs/store';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { DriveState } from '../../state/drive-state';\nimport { map, take } from 'rxjs/operators';\nimport { MoveEntries } from '../../state/actions/commands';\nimport { MoveEntriesFailed, MoveEntriesSuccess } from '../../state/actions/events';\nimport { DriveEntry } from '../../files/models/drive-entry';\nimport { DriveFolder } from '../../folders/models/driveFolder';\n\n@Component({\n selector: 'move-entries-dialog',\n templateUrl: './move-entries-dialog.component.html',\n styleUrls: ['./move-entries-dialog.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MoveEntriesDialogComponent implements OnInit, OnDestroy {\n @Select(DriveState.selectedEntries) selectedEntries$: Observable<DriveEntry[]>;\n public destination$ = new BehaviorSubject<DriveFolder>(this.store.selectSnapshot(DriveState.activePage).folder);\n public loading$ = new BehaviorSubject<boolean>(false);\n private subscriptions: Subscription[] = [];\n public canMove$ = this.destination$.pipe(map(destination => {\n const movingEntries = this.store.selectSnapshot(DriveState.selectedEntries);\n return DriveState.canMoveEntriesTo(movingEntries, destination);\n }));\n\n constructor(\n protected dialogRef: MatDialogRef<MoveEntriesDialogComponent>,\n protected store: Store,\n protected actions: Actions,\n ) {}\n\n ngOnInit() {\n const failure = this.actions.pipe(ofAction(MoveEntriesFailed)).subscribe(() => {\n this.loading$.next(false);\n });\n const success = this.actions.pipe(ofAction(MoveEntriesSuccess), take(1))\n .subscribe(() => {\n this.close();\n });\n this.subscriptions.push(...[success, failure]);\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n\n public confirm() {\n this.loading$.next(true);\n this.store.dispatch(new MoveEntries(this.destination$.value))\n .subscribe(() => {\n this.loading$.next(false);\n });\n }\n\n public close() {\n this.dialogRef.close();\n }\n}\n","<div class=\"modal-header\">\n <h2 mat-dialog-title trans>Rename</h2>\n <button type=\"button\" mat-icon-button (click)=\"close()\" class=\"close-button\" tabindex=\"-1\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<form ngNativeValidate (ngSubmit)=\"confirm()\">\n <mat-dialog-content class=\"many-inputs\">\n <div class=\"input-container\">\n <input type=\"text\" [formControl]=\"entryName\" placeholder=\"Enter a name...\" trans-placeholder required min=\"3\">\n <div class=\"error\" *ngIf=\"errors.name\">{{errors.name}}</div>\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions>\n <button (click)=\"close()\" type=\"button\" mat-button class=\"cancel-button\" trans>Cancel</button>\n <button type=\"submit\" mat-raised-button color=\"accent\" class=\"submit-button\" [disabled]=\"loading | async\" trans>Rename</button>\n </mat-dialog-actions>\n</form>","<div class=\"modal-header\">\n <h2 mat-dialog-title trans>Move items</h2>\n <button type=\"button\" mat-icon-button (click)=\"close()\" class=\"close-button\" tabindex=\"-1\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<form ngNativeValidate (ngSubmit)=\"confirm()\">\n <mat-dialog-content>\n <folders-tree\n [expanded]=\"true\"\n [disableContextMenu]=\"true\"\n [showRootNode]=\"true\"\n (folderSelected)=\"destination$.next($event)\"\n ></folders-tree>\n </mat-dialog-content>\n\n <mat-dialog-actions>\n <button (click)=\"close()\" type=\"button\" mat-button class=\"cancel-button\" trans>Cancel</button>\n <button type=\"submit\" mat-raised-button color=\"accent\" class=\"submit-button\" [disabled]=\"!(canMove$ | async) || (loading$ | async)\" trans>Move</button>\n </mat-dialog-actions>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { FormControl } from '@angular/forms';\nimport { BackendErrorResponse } from '@common/core/types/backend-error-response';\nimport { DriveState } from '../../state/drive-state';\nimport { Store } from '@ngxs/store';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { finalize } from 'rxjs/operators';\nimport { Toast } from '@common/core/ui/toast.service';\nimport { DriveEntry } from '../../files/models/drive-entry';\nimport { DriveEntryApiService } from '../../drive-entry-api.service';\nimport { EntryRenamed } from '../../state/actions/events';\n\nexport interface RenameEntryDialogErrors {\n name?: string;\n}\n\n@Component({\n selector: 'rename-entry-dialog',\n templateUrl: './rename-entry-dialog.component.html',\n styleUrls: ['./rename-entry-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RenameEntryDialogComponent implements OnInit {\n public entryName = new FormControl();\n public loading = new BehaviorSubject(false);\n public errors: RenameEntryDialogErrors = {};\n public entry: DriveEntry;\n\n constructor(\n private dialogRef: MatDialogRef<RenameEntryDialogComponent>,\n private store: Store,\n private toast: Toast,\n private entriesApi: DriveEntryApiService,\n private changeDetection: ChangeDetectorRef,\n ) {}\n\n ngOnInit() {\n this.entry = this.store.selectSnapshot(DriveState.selectedEntries)[0];\n this.entryName.setValue(this.entry.name);\n }\n\n public confirm() {\n const newName = this.entryName.value;\n\n // entry name was not changed\n if (newName === this.entry.name) {\n return this.close();\n }\n\n this.loading.next(true);\n\n return this.entriesApi.update(this.entry.id, {name: newName})\n .pipe(finalize(() => this.loading.next(false)))\n .subscribe(() => {\n this.setErrors();\n this.store.dispatch(new EntryRenamed(this.entry, newName));\n this.close();\n }, response => this.setErrors(response));\n }\n\n public setErrors(response?: BackendErrorResponse<RenameEntryDialogErrors>) {\n this.loading.next(false);\n this.errors = response ? response.errors : {};\n this.changeDetection.detectChanges();\n }\n\n public close() {\n this.dialogRef.close();\n }\n}\n","import { Store } from '@ngxs/store';\nimport { DriveState } from '../state/drive-state';\nimport { DriveContextAction } from './types/drive-context-action';\nimport { Injectable } from '@angular/core';\nimport { WorkspacesService } from '../../../common/workspaces/workspaces.service';\nimport { OpenUploadWindow } from '../state/actions/commands';\nimport { CurrentUser } from '../../../common/auth/current-user';\nimport { DriveFolder } from '../folders/models/driveFolder';\n\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class DriveContextActions {\n protected multipleEntriesSelected: boolean;\n protected allStarred: boolean;\n protected onlyFoldersSelected: boolean;\n\n protected abstract actions: DriveContextAction[];\n\n constructor(\n protected store: Store,\n protected workspaces: WorkspacesService,\n protected currentUser: CurrentUser,\n ) {}\n\n public getActions() {\n this.updateStatus();\n return this.actions;\n }\n\n protected getSelectedEntries() {\n return this.store.selectSnapshot(DriveState.selectedEntries);\n }\n\n protected updateStatus() {\n this.multipleEntriesSelected = this.store.selectSnapshot(DriveState.multipleEntriesSelected);\n this.allStarred = this.store.selectSnapshot(DriveState.allSelectedEntriesStarred);\n this.onlyFoldersSelected = this.store.selectSnapshot(DriveState.onlyFoldersSelected);\n }\n\n protected hasPermission(permission: string): boolean {\n if (permission === 'files.create') {\n const activeFolder = this.store.selectSnapshot(DriveState.activePage).folder;\n\n // upload either to the folder user right clicked on or the folder that is currently open\n const target = (!this.multipleEntriesSelected && this.getSelectedFolder()) || activeFolder;\n return (target?.permissions || [])['files.update'];\n } else {\n return this.getSelectedEntries().every(entry => {\n return entry.permissions[permission];\n });\n }\n }\n\n protected getSelectedFolder(): DriveFolder {\n return this.getSelectedEntries().find(f => f.type === 'folder') as DriveFolder;\n }\n\n protected openUploadWindow(type: 'file'|'directory') {\n this.store.dispatch(new OpenUploadWindow(type));\n }\n}\n","import {\n AddStar,\n CopySelectedEntries,\n DeleteSelectedEntries,\n DownloadEntries,\n OpenDialog,\n OpenFilePreview,\n RemoveStar\n} from '../../state/actions/commands';\nimport { ShareDialogComponent } from '../../sharing/share-dialog/share-dialog.component';\nimport { ShareLinkDialogComponent } from '../../sharing/share-link-dialog/share-link-dialog.component';\nimport { CrupdateFolderDialogComponent } from '../../folders/components/crupdate-folder-dialog/crupdate-folder-dialog.component';\nimport { Injectable } from '@angular/core';\nimport { MoveEntriesDialogComponent } from '../../entries/move-entries-dialog/move-entries-dialog.component';\nimport { RenameEntryDialogComponent } from '../../entries/rename-entry-dialog/rename-entry-dialog.component';\nimport { DriveContextActions } from '../drive-context-actions';\nimport { DriveState } from '../../state/drive-state';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EntryActions extends DriveContextActions {\n protected actions = [\n {\n viewName: 'Preview',\n icon: 'visibility',\n showInCompact: true,\n execute: () => {\n this.store.dispatch(new OpenFilePreview());\n },\n visible: () => {\n return !this.onlyFoldersSelected;\n },\n },\n {\n viewName: 'Manage People',\n icon: 'person-add',\n showInCompact: true,\n execute: () => {\n this.store.dispatch(new OpenDialog(ShareDialogComponent));\n },\n visible: () => this.hasPermission('files.update'),\n },\n {\n viewName: 'Get shareable link',\n icon: 'link',\n execute: () => {\n this.store.dispatch(new OpenDialog(ShareLinkDialogComponent, null, {\n panelClass: 'share-link-dialog-container',\n autoFocus: false,\n }));\n },\n visible: () => !this.multipleEntriesSelected && this.hasPermission('files.update'),\n },\n {\n viewName: 'Add a star',\n icon: 'star',\n execute: () => {\n this.store.dispatch(new AddStar(this.getSelectedEntries()));\n },\n visible: () => !this.allStarred\n },\n {\n viewName: 'Remove star',\n icon: 'star-border',\n execute: () => {\n this.store.dispatch(new RemoveStar(this.getSelectedEntries()));\n },\n visible: () => this.allStarred\n },\n {\n viewName: 'New Folder',\n icon: 'create-new-folder',\n separatorBefore: this.store.selectSnapshot(DriveState.isMobile),\n execute: () => {\n this.store.dispatch(new OpenDialog(CrupdateFolderDialogComponent, {folder: this.getSelectedFolder()}));\n },\n visible: () => this.hasPermission('files.create')\n },\n {\n viewName: 'Upload Files',\n icon: 'cloud-upload',\n execute: () => {\n this.openUploadWindow('file');\n },\n visible: () => this.hasPermission('files.create') && this.store.selectSnapshot(DriveState.isMobile),\n },\n {\n viewName: 'Upload Folder',\n icon: 'upload-folder-custom',\n execute: () => {\n this.openUploadWindow('directory');\n },\n visible: () => this.hasPermission('files.create') && this.store.selectSnapshot(DriveState.isMobile),\n },\n {\n viewName: 'Move to',\n icon: 'subdirectory-arrow-right',\n separatorBefore: this.store.selectSnapshot(DriveState.isMobile),\n execute: () => {\n this.store.dispatch(new OpenDialog(MoveEntriesDialogComponent, null, {panelClass: 'move-entries-dialog-container'}));\n },\n visible: () => this.hasPermission('files.update'),\n },\n {\n viewName: 'Rename',\n icon: 'edit',\n execute: () => {\n this.store.dispatch(new OpenDialog(RenameEntryDialogComponent));\n },\n visible: () => {\n return !this.multipleEntriesSelected && this.hasPermission('files.update');\n }\n },\n {\n viewName: 'Make a copy',\n icon: 'file-copy',\n execute: () => {\n this.store.dispatch(new CopySelectedEntries());\n },\n visible: () => this.hasPermission('files.create'),\n },\n {\n viewName: 'Download',\n icon: 'file-download',\n execute: () => {\n this.store.dispatch(new DownloadEntries());\n },\n visible: () => this.hasPermission('files.download'),\n },\n {\n viewName: 'Delete',\n icon: 'delete',\n showInCompact: true,\n separatorBefore: true,\n execute: () => {\n this.store.dispatch(new DeleteSelectedEntries());\n },\n visible: () => this.hasPermission('files.delete'),\n },\n ];\n}\n","import { OpenDialog, } from '../../state/actions/commands';\nimport { Injectable } from '@angular/core';\nimport { DriveContextActions } from '../drive-context-actions';\nimport { CrupdateFolderDialogComponent } from '../../folders/components/crupdate-folder-dialog/crupdate-folder-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FolderActions extends DriveContextActions {\n protected actions = [\n {\n viewName: 'New Folder',\n icon: 'create-new-folder',\n execute: () => {\n this.store.dispatch(new OpenDialog(CrupdateFolderDialogComponent));\n },\n visible: () => this.hasPermission('files.create'),\n },\n {\n viewName: 'Upload Files',\n icon: 'cloud-upload',\n separatorBefore: true,\n execute: () => {\n this.openUploadWindow('file');\n },\n visible: () => this.hasPermission('files.create'),\n },\n {\n viewName: 'Upload Folder',\n icon: 'upload-folder-custom',\n execute: () => {\n this.openUploadWindow('directory');\n },\n visible: () => this.hasPermission('files.create'),\n },\n ];\n}\n","import {\n CopySelectedEntries, DownloadEntries, OpenDialog, OpenFilePreview, RemoveEntries,\n} from '../../state/actions/commands';\nimport { Injectable } from '@angular/core';\nimport { DriveContextActions } from '../drive-context-actions';\nimport { ShareLinkDialogComponent } from '../../sharing/share-link-dialog/share-link-dialog.component';\nimport { Store } from '@ngxs/store';\nimport { CurrentUser } from '@common/auth/current-user';\nimport { SharesApiService } from '../../sharing/shares-api.service';\nimport { ShareDialogComponent } from '../../sharing/share-dialog/share-dialog.component';\nimport { RenameEntryDialogComponent } from '../../entries/rename-entry-dialog/rename-entry-dialog.component';\nimport { WorkspacesService } from '../../../../common/workspaces/workspaces.service';\n\nconst noopTrue = () => true;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SharesActions extends DriveContextActions {\n protected actions = [\n {\n viewName: 'Preview',\n icon: 'visibility',\n execute: () => {\n this.store.dispatch(new OpenFilePreview());\n },\n visible: () => {\n return !this.onlyFoldersSelected;\n },\n },\n {\n viewName: 'Manage People',\n icon: 'person-add',\n showInCompact: true,\n execute: () => {\n this.store.dispatch(new OpenDialog(ShareDialogComponent));\n },\n visible: () => {\n return this.hasPermission('files.update');\n },\n },\n {\n viewName: 'Get shareable link',\n icon: 'link',\n execute: () => {\n this.store.dispatch(new OpenDialog(ShareLinkDialogComponent, null, {\n panelClass: 'share-link-dialog-container',\n autoFocus: false,\n }));\n },\n visible: () => {\n return !this.multipleEntriesSelected && this.hasPermission('files.update');\n }\n },\n {\n viewName: 'Rename',\n icon: 'edit',\n execute: () => {\n this.store.dispatch(new OpenDialog(RenameEntryDialogComponent));\n },\n visible: () => {\n return !this.multipleEntriesSelected && this.hasPermission('files.update');\n }\n },\n {\n viewName: 'Make a copy',\n icon: 'file-copy',\n execute: () => {\n this.store.dispatch(new CopySelectedEntries());\n },\n visible: () => {\n return this.hasPermission('files.download') && this.hasPermission('files.create');\n },\n },\n {\n viewName: 'Download',\n icon: 'file-download',\n execute: () => {\n this.store.dispatch(new DownloadEntries());\n },\n visible: () => {\n return this.hasPermission('files.download');\n },\n },\n {\n viewName: 'Remove',\n icon: 'delete',\n showInCompact: true,\n execute: () => {\n const entries = this.getSelectedEntries();\n this.shares.detachUser(\n this.currentUser.get('id'),\n entries.map(e => e.id),\n ).subscribe(() => {\n this.store.dispatch(new RemoveEntries(entries));\n });\n },\n visible: noopTrue,\n },\n ];\n\n constructor(\n protected store: Store,\n protected currentUser: CurrentUser,\n protected shares: SharesApiService,\n protected workspaces: WorkspacesService\n ) {\n super(store, workspaces, currentUser);\n }\n}\n","import { DeleteTrashedEntriesForever, OpenConfirmDialog, RestoreTrashedEntries, } from '../../state/actions/commands';\nimport { Injectable } from '@angular/core';\nimport { DriveContextActions } from '../drive-context-actions';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TrashActions extends DriveContextActions {\n protected actions = [\n {\n viewName: 'Restore',\n icon: 'restore',\n showInCompact: true,\n execute: () => {\n this.store.dispatch(new RestoreTrashedEntries());\n },\n visible: () => this.hasPermission('files.update'),\n },\n {\n viewName: 'Delete Forever',\n icon: 'delete-forever',\n showInCompact: true,\n execute: () => {\n this.deleteForever();\n },\n visible: () => this.hasPermission('files.delete'),\n },\n ];\n\n public deleteForever() {\n this.store.dispatch(new OpenConfirmDialog({\n title: 'Delete Forever',\n body: 'This will permanently delete selected items.',\n bodyBold: 'This action can not be undone.',\n ok: 'Delete Forever',\n }, new DeleteTrashedEntriesForever()));\n }\n}\n","import { EmptyTrash, OpenConfirmDialog, } from '../../state/actions/commands';\nimport { Injectable } from '@angular/core';\nimport { DriveContextActions } from '../drive-context-actions';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TrashPageActions extends DriveContextActions {\n protected actions = [\n {\n viewName: 'Empty Trash',\n icon: 'delete-forever',\n execute: () => {\n this.emptyTrash();\n },\n visible: () => this.hasPermission('files.delete'),\n },\n ];\n\n public emptyTrash() {\n this.store.dispatch(new OpenConfirmDialog({\n title: 'Empty Trash',\n body: 'All files and folders in your trash will be permanently deleted.',\n bodyBold: 'This action can not be undone.',\n ok: 'Empty Trash'\n }, new EmptyTrash()));\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DriveDomCacheService {\n public scrollCont: HTMLElement;\n public filesCont: HTMLElement;\n public filesContRect: ClientRect;\n public scrollContRect: ClientRect;\n public dragPreview: HTMLElement;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {FormControl} from '@angular/forms';\nimport {Store} from '@ngxs/store';\nimport {OpenSearchPage} from '../state/actions/commands';\nimport {debounceTime, distinctUntilChanged, skip, startWith} from 'rxjs/operators';\nimport {DriveEntryApiService} from '../drive-entry-api.service';\nimport {BehaviorSubject, combineLatest, Subscription} from 'rxjs';\nimport {Router} from '@angular/router';\nimport {RouterState} from '@ngxs/router-plugin';\nimport isEqual from 'lodash/isEqual';\nimport {DriveState} from '../state/drive-state';\nimport {SearchInputWithFiltersComponent} from '../../../common/datatable/datatable-filters/search-input-with-filters/search-input-with-filters.component';\nimport {driveSearchFilters} from './drive-search-filters';\nimport {CurrentUser} from '../../../common/auth/current-user';\n\n@Component({\n selector: 'main-searchbar',\n templateUrl: './main-searchbar.component.html',\n styleUrls: ['./main-searchbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MainSearchbarComponent implements OnInit, OnDestroy {\n @ViewChild(SearchInputWithFiltersComponent, {read: ElementRef, static: true})\n searchEl: ElementRef<HTMLElement>;\n filters = driveSearchFilters(this.currentUser);\n searchControl = new FormControl();\n filterChange$ = new BehaviorSubject<string>(null);\n private metaSub: Subscription;\n\n constructor(\n private store: Store,\n private driveApi: DriveEntryApiService,\n private router: Router,\n private currentUser: CurrentUser\n ) {}\n\n ngOnInit() {\n // TODO: navigate from search page to drive homepage on blur\n // TODO: refactor permissions into advanced and remove mail template stuff\n this.metaSub = this.store.select(DriveState.meta).subscribe(meta => {\n // make sure nav searchbar color is always white if there are any filters set\n if (meta.query || meta.filters) {\n this.searchEl.nativeElement.classList.add('always-white');\n } else {\n this.searchEl.nativeElement.classList.remove('always-white');\n }\n });\n\n combineLatest([\n this.searchControl.valueChanges.pipe(distinctUntilChanged(), startWith(null)),\n this.filterChange$,\n ])\n // skip initial \"null\" values\n .pipe(skip(1), debounceTime(0))\n .subscribe(([query, filters]) => {\n const params = {query, filters};\n const oldParams = this.store.selectSnapshot(RouterState.state).root\n .queryParams;\n\n // if both filter and query are null it means form was reset and \"resetForm\" fn will be called\n const filtersOrQueryChanged =\n (query || filters) && !isEqual(oldParams, params);\n\n if (filtersOrQueryChanged) {\n this.store.dispatch(new OpenSearchPage(params));\n } else if (!filters && !query && this.inSearchPage()) {\n this.router.navigate(['/drive']);\n }\n });\n }\n\n ngOnDestroy() {\n this.metaSub?.unsubscribe();\n }\n\n openSearchPage() {\n // open search page on input focus if not already in search page\n if (!this.inSearchPage()) {\n this.store.dispatch(new OpenSearchPage());\n }\n }\n\n private inSearchPage(): boolean {\n return this.router.routerState.snapshot.url.includes('/drive/search');\n }\n}\n","import {\n DatatableFilter,\n FilterControlType,\n FilterOperator,\n} from '@common/datatable/datatable-filters/search-input-with-filters/filter-config/datatable-filter';\nimport {\n CreatedAtFilter,\n UpdatedAtFilter,\n} from '@common/datatable/datatable-filters/search-input-with-filters/filter-config/timestamp-filter';\nimport {FILE_ENTRY_TYPE_FILTER} from '../../../common/admin/file-entry-index/file-entry-index-filters';\nimport {CurrentUser} from '../../../common/auth/current-user';\n\nexport function driveSearchFilters(currentUSer: CurrentUser): DatatableFilter[] {\n return [\n FILE_ENTRY_TYPE_FILTER,\n new DatatableFilter({\n type: FilterControlType.Select,\n key: 'owner_id',\n label: 'Owner',\n description: 'User that this file was uploaded by',\n defaultValue: currentUSer.get('id'),\n options: [\n {key: 'Anyone', value: {value: null, operator: '!='}},\n {key: 'Owned by me', value: currentUSer.get('id')},\n {\n key: 'Not owned by me',\n value: {value: currentUSer.get('id'), operator: '!='},\n },\n ],\n }),\n new CreatedAtFilter({\n description: 'Date file was uploaded',\n }),\n new UpdatedAtFilter({\n description: 'Date file was last changed',\n }),\n new DatatableFilter({\n type: FilterControlType.StaticValue,\n key: 'deleted_at',\n label: 'Trashed',\n defaultOperator: FilterOperator.ne,\n defaultValue: null,\n description: 'Only show files that are in the trash',\n }),\n new DatatableFilter({\n type: FilterControlType.StaticValue,\n key: 'shareableLink',\n label: 'Has Shareable Link',\n description: 'Only show files that have a shareable link',\n defaultValue: '*',\n defaultOperator: FilterOperator.has,\n }),\n new DatatableFilter({\n type: FilterControlType.StaticValue,\n key: 'sharedByMe',\n label: 'Shared By Me',\n defaultValue: true,\n description:\n 'Only show files that are shared with someone',\n }),\n ];\n}\n","<search-input-with-filters\n class=\"nav-searchbar\"\n [compact]=\"true\"\n [searchControl]=\"searchControl\"\n [filters]=\"filters\"\n (inputFocus)=\"openSearchPage()\"\n (filterChange)=\"filterChange$.next($event)\"\n pluralName=\"files\"\n></search-input-with-filters>\n","import { Subscriber } from '../Subscriber';\nexport function mapTo(value) {\n return (source) => source.lift(new MapToOperator(value));\n}\nclass MapToOperator {\n constructor(value) {\n this.value = value;\n }\n call(subscriber, source) {\n return source.subscribe(new MapToSubscriber(subscriber, this.value));\n }\n}\nclass MapToSubscriber extends Subscriber {\n constructor(destination, value) {\n super(destination);\n this.value = value;\n }\n _next(x) {\n this.destination.next(this.value);\n }\n}\n//# sourceMappingURL=mapTo.js.map","import { Platform, PlatformModule } from '@angular/cdk/platform';\nimport { CdkScrollable, ScrollDispatcher, ViewportRuler, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { InjectionToken, Component, ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, Inject, forwardRef, ElementRef, NgZone, EventEmitter, Optional, Input, HostBinding, Output, HostListener, QueryList, ContentChildren, ContentChild, ViewChild, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { FocusTrapFactory, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, mapTo, takeUntil, distinctUntilChanged, take, startWith, debounceTime } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/scrolling';\nimport * as ɵngcc2 from '@angular/cdk/a11y';\nimport * as ɵngcc3 from '@angular/cdk/platform';\nimport * as ɵngcc4 from '@angular/cdk/bidi';\nimport * as ɵngcc5 from '@angular/common';\n\nconst _c0 = [\"*\"];\nfunction MatDrawerContainer_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatDrawerContainer_div_0_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2._onBackdropClicked(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r0._isShowingBackdrop());\n} }\nfunction MatDrawerContainer_mat_drawer_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"mat-drawer-content\");\n ɵngcc0.ɵɵprojection(1, 2);\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c1 = [[[\"mat-drawer\"]], [[\"mat-drawer-content\"]], \"*\"];\nconst _c2 = [\"mat-drawer\", \"mat-drawer-content\", \"*\"];\nfunction MatSidenavContainer_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatSidenavContainer_div_0_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2._onBackdropClicked(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r0._isShowingBackdrop());\n} }\nfunction MatSidenavContainer_mat_sidenav_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"mat-sidenav-content\", 3);\n ɵngcc0.ɵɵprojection(1, 2);\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c3 = [[[\"mat-sidenav\"]], [[\"mat-sidenav-content\"]], \"*\"];\nconst _c4 = [\"mat-sidenav\", \"mat-sidenav-content\", \"*\"];\nconst _c5 = \".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\";\nconst matDrawerAnimations = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n ])\n};\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nfunction throwMatDuplicatedDrawerError(position) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n/** Configures whether drawers should use auto sizing by default. */\nconst MAT_DRAWER_DEFAULT_AUTOSIZE = new InjectionToken('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n});\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nconst MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');\n/** @docs-private */\nfunction MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY() {\n return false;\n}\nclass MatDrawerContent extends CdkScrollable {\n constructor(_changeDetectorRef, _container, elementRef, scrollDispatcher, ngZone) {\n super(elementRef, scrollDispatcher, ngZone);\n this._changeDetectorRef = _changeDetectorRef;\n this._container = _container;\n }\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\nMatDrawerContent.ɵfac = function MatDrawerContent_Factory(t) { return new (t || MatDrawerContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(forwardRef(() => MatDrawerContainer)), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nMatDrawerContent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatDrawerContent, selectors: [[\"mat-drawer-content\"]], hostAttrs: [1, \"mat-drawer-content\"], hostVars: 4, hostBindings: function MatDrawerContent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatDrawerContent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2, changeDetection: 0 });\nMatDrawerContent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: MatDrawerContainer, decorators: [{ type: Inject, args: [forwardRef(() => MatDrawerContainer),] }] },\n { type: ElementRef },\n { type: ScrollDispatcher },\n { type: NgZone }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatDrawerContent, [{\n type: Component,\n args: [{\n selector: 'mat-drawer-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: MatDrawerContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatDrawerContainer)]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc0.NgZone }]; }, null); })();\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\nclass MatDrawer {\n constructor(_elementRef, _focusTrapFactory, _focusMonitor, _platform, _ngZone, _doc, _container) {\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._focusMonitor = _focusMonitor;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._doc = _doc;\n this._container = _container;\n this._elementFocusedBeforeDrawerWasOpened = null;\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n this._enableAnimations = false;\n this._position = 'start';\n this._mode = 'over';\n this._disableClose = false;\n this._opened = false;\n /** Emits whenever the drawer has started animating. */\n this._animationStarted = new Subject();\n /** Emits whenever the drawer is done animating. */\n this._animationEnd = new Subject();\n /** Current state of the sidenav animation. */\n // @HostBinding is used in the class as it is expected to be extended. Since @Component decorator\n // metadata is not inherited by child classes, instead the host binding data is defined in a way\n // that can be inherited.\n // tslint:disable:no-host-decorator-in-concrete\n this._animationState = 'void';\n /** Event emitted when the drawer open state is changed. */\n this.openedChange = \n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter(/* isAsync */ true);\n /** Event emitted when the drawer has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n /** Event emitted when the drawer has started opening. */\n this.openedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));\n /** Event emitted when the drawer has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n /** Event emitted when the drawer has started closing. */\n this.closedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n this.onPositionChanged = new EventEmitter();\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n this._modeChanged = new Subject();\n this.openedChange.subscribe((opened) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement;\n }\n this._takeFocus();\n }\n else if (this._isFocusWithinDrawer()) {\n this._restoreFocus();\n }\n });\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'keydown').pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }), takeUntil(this._destroyed)).subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe((event) => {\n const { fromState, toState } = event;\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n /** The side that the drawer is attached to. */\n get position() { return this._position; }\n set position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value != this._position) {\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n get mode() { return this._mode; }\n set mode(value) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n get disableClose() { return this._disableClose; }\n set disableClose(value) { this._disableClose = coerceBooleanProperty(value); }\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n */\n get autoFocus() {\n const value = this._autoFocus;\n // Note that usually we disable auto focusing in `side` mode, because we don't know how the\n // sidenav is being used, but in some cases it still makes sense to do it. If the consumer\n // explicitly enabled `autoFocus`, we take it as them always wanting to enable it.\n return value == null ? this.mode !== 'side' : value;\n }\n set autoFocus(value) { this._autoFocus = coerceBooleanProperty(value); }\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n get opened() { return this._opened; }\n set opened(value) { this.toggle(coerceBooleanProperty(value)); }\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n _takeFocus() {\n if (!this.autoFocus || !this._focusTrap) {\n return;\n }\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n // If there were no focusable elements, focus the sidenav itself so the keyboard navigation\n // still works. We need to check that `focus` is a function due to Universal.\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n _restoreFocus() {\n if (!this.autoFocus) {\n return;\n }\n // Note that we don't check via `instanceof HTMLElement` so that we can cover SVGs as well.\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, this._openedVia);\n }\n else {\n this._elementRef.nativeElement.blur();\n }\n this._elementFocusedBeforeDrawerWasOpened = null;\n this._openedVia = null;\n }\n /** Whether focus is currently within the drawer. */\n _isFocusWithinDrawer() {\n var _a;\n const activeEl = (_a = this._doc) === null || _a === void 0 ? void 0 : _a.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n }\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n ngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia) {\n return this.toggle(true, openedVia);\n }\n /** Close the drawer. */\n close() {\n return this.toggle(false);\n }\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick() {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurring of the active element.\n return this._setOpen(/* isOpen */ false, /* restoreFocus */ true);\n }\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen = !this.opened, openedVia) {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n return this._setOpen(isOpen, /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), openedVia);\n }\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param openedVia Focus origin that can be optionally set when opening a drawer. The\n * origin will be used later when focus is restored on drawer close.\n */\n _setOpen(isOpen, restoreFocus, openedVia = 'program') {\n this._opened = isOpen;\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n this._openedVia = openedVia;\n }\n else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus();\n }\n }\n this._updateFocusTrapState();\n return new Promise(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n _getWidth() {\n return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;\n }\n /** Updates the enabled state of the focus trap. */\n _updateFocusTrapState() {\n if (this._focusTrap) {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n this._focusTrap.enabled = this.opened && this.mode !== 'side';\n }\n }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationStartListener(event) {\n this._animationStarted.next(event);\n }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationDoneListener(event) {\n this._animationEnd.next(event);\n }\n}\nMatDrawer.ɵfac = function MatDrawer_Factory(t) { return new (t || MatDrawer)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.FocusTrapFactory), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Platform), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DRAWER_CONTAINER, 8)); };\nMatDrawer.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatDrawer, selectors: [[\"mat-drawer\"]], hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\"], hostVars: 12, hostBindings: function MatDrawer_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵsyntheticHostListener(\"@transform.start\", function MatDrawer_animation_transform_start_HostBindingHandler($event) { return ctx._animationStartListener($event); })(\"@transform.done\", function MatDrawer_animation_transform_done_HostBindingHandler($event) { return ctx._animationDoneListener($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"align\", null);\n ɵngcc0.ɵɵsyntheticHostProperty(\"@transform\", ctx._animationState);\n ɵngcc0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened);\n } }, inputs: { position: \"position\", mode: \"mode\", disableClose: \"disableClose\", autoFocus: \"autoFocus\", opened: \"opened\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", openedStart: \"openedStart\", _closedStream: \"closed\", closedStart: \"closedStart\", onPositionChanged: \"positionChanged\" }, exportAs: [\"matDrawer\"], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[\"cdkScrollable\", \"\", 1, \"mat-drawer-inner-container\"]], template: function MatDrawer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, directives: [ɵngcc1.CdkScrollable], encapsulation: 2, data: { animation: [matDrawerAnimations.transformDrawer] }, changeDetection: 0 });\nMatDrawer.ctorParameters = () => [\n { type: ElementRef },\n { type: FocusTrapFactory },\n { type: FocusMonitor },\n { type: Platform },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: MatDrawerContainer, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DRAWER_CONTAINER,] }] }\n];\nMatDrawer.propDecorators = {\n position: [{ type: Input }],\n mode: [{ type: Input }],\n disableClose: [{ type: Input }],\n autoFocus: [{ type: Input }],\n opened: [{ type: Input }],\n _animationState: [{ type: HostBinding, args: ['@transform',] }],\n openedChange: [{ type: Output }],\n _openedStream: [{ type: Output, args: ['opened',] }],\n openedStart: [{ type: Output }],\n _closedStream: [{ type: Output, args: ['closed',] }],\n closedStart: [{ type: Output }],\n onPositionChanged: [{ type: Output, args: ['positionChanged',] }],\n _animationStartListener: [{ type: HostListener, args: ['@transform.start', ['$event'],] }],\n _animationDoneListener: [{ type: HostListener, args: ['@transform.done', ['$event'],] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatDrawer, [{\n type: Component,\n args: [{\n selector: 'mat-drawer',\n exportAs: 'matDrawer',\n template: \"<div class=\\\"mat-drawer-inner-container\\\" cdkScrollable>\\r\\n <ng-content></ng-content>\\r\\n</div>\\r\\n\",\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n 'tabIndex': '-1'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc2.FocusTrapFactory }, { type: ɵngcc2.FocusMonitor }, { type: ɵngcc3.Platform }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: MatDrawerContainer, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DRAWER_CONTAINER]\n }] }]; }, { _animationState: [{\n type: HostBinding,\n args: ['@transform']\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], openedStart: [{\n type: Output\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], closedStart: [{\n type: Output\n }], onPositionChanged: [{\n type: Output,\n args: ['positionChanged']\n }], position: [{\n type: Input\n }], mode: [{\n type: Input\n }], disableClose: [{\n type: Input\n }], autoFocus: [{\n type: Input\n }], opened: [{\n type: Input\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationStartListener: [{\n type: HostListener,\n args: ['@transform.start', ['$event']]\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationDoneListener: [{\n type: HostListener,\n args: ['@transform.done', ['$event']]\n }] }); })();\n/**\n * `<mat-drawer-container>` component.\n *\n * This is the parent component to one or two `<mat-drawer>`s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\nclass MatDrawerContainer {\n constructor(_dir, _element, _ngZone, _changeDetectorRef, viewportRuler, defaultAutosize = false, _animationMode) {\n this._dir = _dir;\n this._element = _element;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Drawers that belong to this container. */\n this._drawers = new QueryList();\n /** Event emitted when the drawer backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n this._doCheckSubject = new Subject();\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n this._contentMargins = { left: null, right: null };\n this._contentMarginChanges = new Subject();\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler.change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n this._autosize = defaultAutosize;\n }\n /** The drawer child with the `start` position. */\n get start() { return this._start; }\n /** The drawer child with the `end` position. */\n get end() { return this._end; }\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n get autosize() { return this._autosize; }\n set autosize(value) { this._autosize = coerceBooleanProperty(value); }\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n return this._backdropOverride;\n }\n set hasBackdrop(value) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable() {\n return this._userContent || this._content;\n }\n ngAfterContentInit() {\n this._allDrawers.changes\n .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))\n .subscribe((drawer) => {\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n this._drawers.forEach((drawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n this._changeDetectorRef.markForCheck();\n });\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject.pipe(debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)).subscribe(() => this.updateContentMargins());\n });\n }\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Calls `open` of both start and end drawers */\n open() {\n this._drawers.forEach(drawer => drawer.open());\n }\n /** Calls `close` of both start and end drawers */\n close() {\n this._drawers.forEach(drawer => drawer.close());\n }\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n }\n else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n }\n else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null;\n right = right || null;\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = { left, right };\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n _watchDrawerToggle(drawer) {\n drawer._animationStarted.pipe(filter((event) => event.fromState !== event.toState), takeUntil(this._drawers.changes))\n .subscribe((event) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n if (drawer.mode !== 'side') {\n drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() => this._setContainerClass(drawer.opened));\n }\n }\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n _watchDrawerPosition(drawer) {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n /** Subscribes to changes in drawer mode so we can run change detection. */\n _watchDrawerMode(drawer) {\n if (drawer) {\n drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n _setContainerClass(isAdd) {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n if (isAdd) {\n classList.add(className);\n }\n else {\n classList.remove(className);\n }\n }\n /** Validate the state of the drawer children components. */\n _validateDrawers() {\n this._start = this._end = null;\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n }\n else {\n if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n this._right = this._left = null;\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n }\n else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n /** Whether the container is being pushed to the side by one of the drawers. */\n _isPushed() {\n return (this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over');\n }\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer._closeViaBackdropClick());\n }\n _isShowingBackdrop() {\n return (this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end));\n }\n _canHaveBackdrop(drawer) {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n _isDrawerOpen(drawer) {\n return drawer != null && drawer.opened;\n }\n}\nMatDrawerContainer.ɵfac = function MatDrawerContainer_Factory(t) { return new (t || MatDrawerContainer)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵdirectiveInject(MAT_DRAWER_DEFAULT_AUTOSIZE), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatDrawerContainer.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatDrawerContainer, selectors: [[\"mat-drawer-container\"]], contentQueries: function MatDrawerContainer_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatDrawerContent, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatDrawer, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._content = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n } }, viewQuery: function MatDrawerContainer_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatDrawerContent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._userContent = _t.first);\n } }, hostAttrs: [1, \"mat-drawer-container\"], hostVars: 2, hostBindings: function MatDrawerContainer_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n } }, inputs: { autosize: \"autosize\", hasBackdrop: \"hasBackdrop\" }, outputs: { backdropClick: \"backdropClick\" }, exportAs: [\"matDrawerContainer\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }])], ngContentSelectors: _c2, decls: 4, vars: 2, consts: [[\"class\", \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\", \"click\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"mat-drawer-backdrop\", 3, \"click\"]], template: function MatDrawerContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c1);\n ɵngcc0.ɵɵtemplate(0, MatDrawerContainer_div_0_Template, 1, 2, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, MatDrawerContainer_mat_drawer_content_3_Template, 2, 0, \"mat-drawer-content\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasBackdrop);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx._content);\n } }, directives: [ɵngcc5.NgIf, MatDrawerContent], styles: [_c5], encapsulation: 2, changeDetection: 0 });\nMatDrawerContainer.ctorParameters = () => [\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: ElementRef },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: ViewportRuler },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DRAWER_DEFAULT_AUTOSIZE,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatDrawerContainer.propDecorators = {\n _allDrawers: [{ type: ContentChildren, args: [MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }],\n _content: [{ type: ContentChild, args: [MatDrawerContent,] }],\n _userContent: [{ type: ViewChild, args: [MatDrawerContent,] }],\n autosize: [{ type: Input }],\n hasBackdrop: [{ type: Input }],\n backdropClick: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatDrawerContainer, [{\n type: Component,\n args: [{\n selector: 'mat-drawer-container',\n exportAs: 'matDrawerContainer',\n template: \"<div class=\\\"mat-drawer-backdrop\\\" (click)=\\\"_onBackdropClicked()\\\" *ngIf=\\\"hasBackdrop\\\"\\n [class.mat-drawer-shown]=\\\"_isShowingBackdrop()\\\"></div>\\n\\n<ng-content select=\\\"mat-drawer\\\"></ng-content>\\n\\n<ng-content select=\\\"mat-drawer-content\\\">\\n</ng-content>\\n<mat-drawer-content *ngIf=\\\"!_content\\\">\\n <ng-content></ng-content>\\n</mat-drawer-content>\\n\",\n host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }],\n styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc4.Directionality, decorators: [{\n type: Optional\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DRAWER_DEFAULT_AUTOSIZE]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { backdropClick: [{\n type: Output\n }], autosize: [{\n type: Input\n }], hasBackdrop: [{\n type: Input\n }], _allDrawers: [{\n type: ContentChildren,\n args: [MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatDrawerContent]\n }], _userContent: [{\n type: ViewChild,\n args: [MatDrawerContent]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavContent extends MatDrawerContent {\n constructor(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\nMatSidenavContent.ɵfac = function MatSidenavContent_Factory(t) { return new (t || MatSidenavContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(forwardRef(() => MatSidenavContainer)), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nMatSidenavContent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatSidenavContent, selectors: [[\"mat-sidenav-content\"]], hostAttrs: [1, \"mat-drawer-content\", \"mat-sidenav-content\"], hostVars: 4, hostBindings: function MatSidenavContent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatSidenavContent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2, changeDetection: 0 });\nMatSidenavContent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: MatSidenavContainer, decorators: [{ type: Inject, args: [forwardRef(() => MatSidenavContainer),] }] },\n { type: ElementRef },\n { type: ScrollDispatcher },\n { type: NgZone }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSidenavContent, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-content',\n template: '<ng-content></ng-content>',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: MatSidenavContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatSidenavContainer)]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc0.NgZone }]; }, null); })();\nclass MatSidenav extends MatDrawer {\n constructor() {\n super(...arguments);\n this._fixedInViewport = false;\n this._fixedTopGap = 0;\n this._fixedBottomGap = 0;\n }\n /** Whether the sidenav is fixed in the viewport. */\n get fixedInViewport() { return this._fixedInViewport; }\n set fixedInViewport(value) { this._fixedInViewport = coerceBooleanProperty(value); }\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n get fixedTopGap() { return this._fixedTopGap; }\n set fixedTopGap(value) { this._fixedTopGap = coerceNumberProperty(value); }\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n get fixedBottomGap() { return this._fixedBottomGap; }\n set fixedBottomGap(value) { this._fixedBottomGap = coerceNumberProperty(value); }\n}\nMatSidenav.ɵfac = /*@__PURE__*/ function () { let ɵMatSidenav_BaseFactory; return function MatSidenav_Factory(t) { return (ɵMatSidenav_BaseFactory || (ɵMatSidenav_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatSidenav)))(t || MatSidenav); }; }();\nMatSidenav.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatSidenav, selectors: [[\"mat-sidenav\"]], hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\", \"mat-sidenav\"], hostVars: 17, hostBindings: function MatSidenav_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"align\", null);\n ɵngcc0.ɵɵstyleProp(\"top\", ctx.fixedInViewport ? ctx.fixedTopGap : null, \"px\")(\"bottom\", ctx.fixedInViewport ? ctx.fixedBottomGap : null, \"px\");\n ɵngcc0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened)(\"mat-sidenav-fixed\", ctx.fixedInViewport);\n } }, inputs: { fixedInViewport: \"fixedInViewport\", fixedTopGap: \"fixedTopGap\", fixedBottomGap: \"fixedBottomGap\" }, exportAs: [\"matSidenav\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[\"cdkScrollable\", \"\", 1, \"mat-drawer-inner-container\"]], template: function MatSidenav_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, directives: [ɵngcc1.CdkScrollable], encapsulation: 2, data: { animation: [matDrawerAnimations.transformDrawer] }, changeDetection: 0 });\nMatSidenav.propDecorators = {\n fixedInViewport: [{ type: Input }],\n fixedTopGap: [{ type: Input }],\n fixedBottomGap: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSidenav, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav',\n exportAs: 'matSidenav',\n template: \"<div class=\\\"mat-drawer-inner-container\\\" cdkScrollable>\\r\\n <ng-content></ng-content>\\r\\n</div>\\r\\n\",\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], null, { fixedInViewport: [{\n type: Input\n }], fixedTopGap: [{\n type: Input\n }], fixedBottomGap: [{\n type: Input\n }] }); })();\nclass MatSidenavContainer extends MatDrawerContainer {\n}\nMatSidenavContainer.ɵfac = /*@__PURE__*/ function () { let ɵMatSidenavContainer_BaseFactory; return function MatSidenavContainer_Factory(t) { return (ɵMatSidenavContainer_BaseFactory || (ɵMatSidenavContainer_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatSidenavContainer)))(t || MatSidenavContainer); }; }();\nMatSidenavContainer.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatSidenavContainer, selectors: [[\"mat-sidenav-container\"]], contentQueries: function MatSidenavContainer_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatSidenavContent, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatSidenav, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._content = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n } }, hostAttrs: [1, \"mat-drawer-container\", \"mat-sidenav-container\"], hostVars: 2, hostBindings: function MatSidenavContainer_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n } }, exportAs: [\"matSidenavContainer\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c4, decls: 4, vars: 2, consts: [[\"class\", \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\", \"click\", 4, \"ngIf\"], [\"cdkScrollable\", \"\", 4, \"ngIf\"], [1, \"mat-drawer-backdrop\", 3, \"click\"], [\"cdkScrollable\", \"\"]], template: function MatSidenavContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c3);\n ɵngcc0.ɵɵtemplate(0, MatSidenavContainer_div_0_Template, 1, 2, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, MatSidenavContainer_mat_sidenav_content_3_Template, 2, 0, \"mat-sidenav-content\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasBackdrop);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx._content);\n } }, directives: [ɵngcc5.NgIf, MatSidenavContent, ɵngcc1.CdkScrollable], styles: [_c5], encapsulation: 2, changeDetection: 0 });\nMatSidenavContainer.propDecorators = {\n _allDrawers: [{ type: ContentChildren, args: [MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }],\n _content: [{ type: ContentChild, args: [MatSidenavContent,] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSidenavContainer, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-container',\n exportAs: 'matSidenavContainer',\n template: \"<div class=\\\"mat-drawer-backdrop\\\" (click)=\\\"_onBackdropClicked()\\\" *ngIf=\\\"hasBackdrop\\\"\\n [class.mat-drawer-shown]=\\\"_isShowingBackdrop()\\\"></div>\\n\\n<ng-content select=\\\"mat-sidenav\\\"></ng-content>\\n\\n<ng-content select=\\\"mat-sidenav-content\\\">\\n</ng-content>\\n<mat-sidenav-content *ngIf=\\\"!_content\\\" cdkScrollable>\\n <ng-content></ng-content>\\n</mat-sidenav-content>\\n\",\n host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }],\n styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"]\n }]\n }], null, { _allDrawers: [{\n type: ContentChildren,\n args: [MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatSidenavContent]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavModule {\n}\nMatSidenavModule.ɵfac = function MatSidenavModule_Factory(t) { return new (t || MatSidenavModule)(); };\nMatSidenavModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatSidenavModule });\nMatSidenavModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ], CdkScrollableModule,\n MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSidenavModule, [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ],\n exports: [\n CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatSidenavModule, { declarations: function () { return [MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent]; }, imports: function () { return [CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule]; }, exports: function () { return [CdkScrollableModule,\n MatCommonModule, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DRAWER_DEFAULT_AUTOSIZE, MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent, MatSidenavModule, matDrawerAnimations, throwMatDuplicatedDrawerError, MAT_DRAWER_CONTAINER as ɵangular_material_src_material_sidenav_sidenav_a };\n\n//# sourceMappingURL=sidenav.js.map","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Inject } from '@angular/core';\nimport { Modal } from '@common/core/ui/dialogs/modal.service';\nimport { CrupdateFolderDialogComponent } from '../../folders/components/crupdate-folder-dialog/crupdate-folder-dialog.component';\nimport { Select, Store } from '@ngxs/store';\nimport { UploadFiles } from '../../state/actions/commands';\nimport { UploadedFile } from '@common/uploads/uploaded-file';\nimport { UploadInputConfig } from '@common/uploads/upload-input-config';\nimport { DriveState } from '../../state/drive-state';\nimport { Observable } from 'rxjs';\nimport { DRIVE_UPLOAD_INPUT_CONFIG } from '../../upload-input-config';\n\n@Component({\n selector: 'sidebar-action-buttons',\n templateUrl: './sidebar-action-buttons.component.html',\n styleUrls: ['./sidebar-action-buttons.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SidebarActionButtonsComponent {\n @Select(DriveState.canUpload) canUpload$: Observable<boolean>;\n\n constructor(\n private dialog: Modal,\n private store: Store,\n @Inject(DRIVE_UPLOAD_INPUT_CONFIG) public uploadInputConfig: UploadInputConfig,\n ) {}\n\n public openNewFolderDialog() {\n this.dialog.open(CrupdateFolderDialogComponent);\n }\n\n public openUploadsPanel(files: UploadedFile[]) {\n this.store.dispatch(new UploadFiles(files));\n }\n}\n","<button\n mat-raised-button\n color=\"accent\"\n class=\"upload-button\"\n [disabled]=\"!(canUpload$ | async)\"\n [uploadButton]=\"uploadInputConfig\"\n (filesSelected)=\"openUploadsPanel($event)\"\n>\n <mat-icon svgIcon=\"cloud-upload\"></mat-icon>\n <span trans>Upload</span>\n</button>\n\n<button\n mat-raised-button\n color=\"accent\"\n class=\"new-folder-button\"\n [disabled]=\"!(canUpload$ | async)\"\n (click)=\"openNewFolderDialog()\"\n>\n <mat-icon svgIcon=\"create-new-folder\"></mat-icon>\n</button>\n","<mat-progress-bar mode=\"determinate\" color=\"accent\" [value]=\"spaceUsedPercent$ | async\"></mat-progress-bar>\n\n<div class=\"usage-info\" *ngIf=\"(spaceUsed$ | async) !== null; else skeleton\" @fadeIn>\n {{spaceUsed$ | async | formattedFileSize}} {{'of' | trans}} {{spaceAvailable$ | async | formattedFileSize }} {{'used' | trans}}\n</div>\n<ng-template #skeleton>\n <skeleton class=\"usage-info\" @fadeOut></skeleton>\n</ng-template>\n\n\n<div *ngIf=\"settings.get('billing.enable') && (!(workspaces.activeId$ | async) || (workspaces.activeWorkspace$ | async)?.currentUser?.is_owner)\">\n <a class=\"upgrade-link\" mat-button routerLink=\"/billing/upgrade\" target=\"_blank\" trans>Upgrade Storage</a>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { Select } from '@ngxs/store';\nimport { DriveState } from '../../state/drive-state';\nimport { Observable } from 'rxjs';\nimport { Settings } from '@common/core/config/settings.service';\nimport { SKELETON_ANIMATIONS } from '../../../../common/core/ui/skeleton/skeleton-animations';\nimport { WorkspacesService } from '../../../../common/workspaces/workspaces.service';\n\n@Component({\n selector: 'available-space-indicator',\n templateUrl: './available-space-indicator.component.html',\n styleUrls: ['./available-space-indicator.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [SKELETON_ANIMATIONS],\n})\nexport class AvailableSpaceIndicatorComponent {\n @Select(DriveState.userSpaceUsed) spaceUsed$: Observable<number>;\n @Select(DriveState.userSpaceAvailable) spaceAvailable$: Observable<number>;\n @Select(DriveState.spaceUsedPercent) spaceUsedPercent$: Observable<number>;\n\n constructor(public settings: Settings, public workspaces: WorkspacesService) {}\n}\n","<div [matMenuTriggerFor]=\"workspaceMenu\" *ngIf=\"workspaces.activeWorkspace$ | async as selected\">\n <div class=\"left\">\n <div class=\"role-name\" trans>{{selected.name}}</div>\n <div class=\"member-count\">\n <span *ngIf=\"selected.default\" trans>Personal workspace</span>\n <span *ngIf=\"!selected.default\" trans>{{ ':count members' | trans:{count: selected?.members_count || 0} }}</span>\n </div>\n </div>\n <div class=\"right\">\n <mat-icon svgIcon=\"unfold-more\"></mat-icon>\n </div>\n</div>\n\n<mat-menu #workspaceMenu=\"matMenu\" class=\"workspace-menu\">\n <div mat-menu-item class=\"workspace-menu-item\" [class.active]=\"(workspaces.activeId$ | async) === workspace.id\" *ngFor=\"let workspace of workspaces.available$ | async\" (click)=\"selectWorkspace(workspace)\">\n <mat-icon svgIcon=\"check\" [class.visually-hidden]=\"(workspaces.activeId$ | async) !== workspace.id\"></mat-icon>\n <div>\n <div class=\"name\" trans>{{workspace.name}}</div>\n <div class=\"member-count\">\n <span *ngIf=\"workspace.default\" trans>Personal workspace</span>\n <span *ngIf=\"!workspace.default\" trans>{{ ':count members' | trans:{count: workspace?.members_count || 0} }}</span>\n </div>\n </div>\n <button type=\"button\" class=\"settings-button\" mat-icon-button *ngIf=\"!workspace.default\" (click)=\"openWorkspaceMembersModal(workspace); $event.stopPropagation()\">\n <mat-icon svgIcon=\"settings\"></mat-icon>\n </button>\n </div>\n <div mat-menu-item class=\"new-workspace-menu-item\" (click)=\"openCrupdateWorkspaceModal()\" *ngIf=\"currentUser.hasPermission('workspaces.create')\">\n <mat-icon svgIcon=\"add\"></mat-icon>\n <span trans>Create new workspace</span>\n </div>\n</mat-menu>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {Workspace} from '../types/workspace';\nimport {MatMenuTrigger} from '@angular/material/menu';\nimport {WorkspacesService} from '../workspaces.service';\nimport {Modal} from '../../core/ui/dialogs/modal.service';\nimport {CurrentUser} from '../../auth/current-user';\nimport {BackendErrorResponse} from '../../core/types/backend-error-response';\nimport {HttpErrors} from '../../core/http/errors/http-errors.enum';\nimport {ConfirmModalComponent} from '../../core/ui/confirm-modal/confirm-modal.component';\nimport {filter} from 'rxjs/operators';\nimport {DELETE_RESOURCE_MESSAGE} from '../../datatable/delete-resource-message';\nimport {Toast} from '../../core/ui/toast.service';\n\n@Component({\n selector: 'workspace-selector',\n templateUrl: './workspace-selector.component.html',\n styleUrls: ['./workspace-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WorkspaceSelectorComponent implements OnInit {\n @ViewChild(MatMenuTrigger) menuTrigger: MatMenuTrigger;\n\n constructor(\n private modal: Modal,\n public workspaces: WorkspacesService,\n public currentUser: CurrentUser,\n private toast: Toast,\n private vcr: ViewContainerRef,\n private cd: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.workspaces.indexUserWorkspaces().subscribe();\n }\n\n public openCrupdateWorkspaceModal(workspace?: Workspace) {\n import('src/common/workspaces/workspace.module').then(m => {\n // will have wrong WorkspacesService instance without passing viewContainerRef\n this.modal.open(\n m.WorkspaceModule.components.crupdateModal,\n {workspace},\n {viewContainerRef: this.vcr}\n );\n this.cd.markForCheck();\n });\n }\n\n public openWorkspaceMembersModal(workspace: Workspace) {\n import('src/common/workspaces/workspace.module').then(m => {\n this.modal.open(\n m.WorkspaceModule.components.manageMembers,\n {workspace},\n {viewContainerRef: this.vcr}\n );\n this.cd.markForCheck();\n this.menuTrigger.closeMenu();\n });\n }\n\n public maybeDeleteWorkspace(workspace: Workspace) {\n const data = {\n ...DELETE_RESOURCE_MESSAGE,\n replacements: {resource: 'workspace'},\n };\n this.modal\n .open(ConfirmModalComponent, data)\n .afterClosed()\n .pipe(filter(confirmed => confirmed))\n .subscribe(() => {\n this.workspaces.delete([workspace.id]).subscribe(\n () => {\n this.toast.open('Workspace deleted.');\n },\n (errResponse: BackendErrorResponse) => {\n this.toast.open(\n errResponse.message || HttpErrors.Default\n );\n }\n );\n });\n }\n\n public selectWorkspace(workspace: Workspace) {\n this.workspaces.select(workspace.id);\n this.menuTrigger.closeMenu();\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { DriveUrlsService } from '../drive-urls.service';\nimport { DriveState } from '../state/drive-state';\nimport { Select, Store } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { OpenFolder } from '../state/actions/commands';\nimport { DrivePage } from '../state/models/drive-page';\nimport { DriveFolder } from '../folders/models/driveFolder';\n\n@Component({\n selector: 'sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SidebarComponent {\n @Select(DriveState.activePage) activePage$: Observable<DrivePage>;\n @Select(DriveState.rootFolder) rootFolder$: Observable<DriveFolder>;\n\n constructor(\n public urls: DriveUrlsService,\n private store: Store\n ) {}\n\n public openFolder(folder: DriveFolder) {\n this.store.dispatch(new OpenFolder(folder));\n }\n}\n","<div class=\"sidebar-body\">\n <sidebar-action-buttons></sidebar-action-buttons>\n\n <div class=\"drive-folders\">\n <div class=\"sidebar-menu-item\" [routerLink]=\"urls.driveRoot()\" routerLinkActive=\"active\" [routerLinkActiveOptions]=\"{exact: true}\" [folderDropTarget]=\"rootFolder$ | async\">\n <mat-icon svgIcon=\"arrow-drop-down\" class=\"toggle-expansion-icon\" [class.expanded]=\"driveTree.expanded\" (click)=\"driveTree.toggle(); $event.stopPropagation()\"></mat-icon>\n <mat-icon svgIcon=\"network-drive-custom\"></mat-icon>\n <span class=\"text\" trans>All Files</span>\n </div>\n <folders-tree (folderSelected)=\"openFolder($event)\" #driveTree></folders-tree>\n </div>\n\n <custom-menu class=\"sidebar-menu\" position=\"drive-sidebar\" itemClass=\"sidebar-menu-item\"></custom-menu>\n\n <div class=\"usage-container\">\n <mat-icon svgIcon=\"storage\"></mat-icon>\n <available-space-indicator></available-space-indicator>\n </div>\n</div>\n\n<div class=\"sidebar-footer\">\n <workspace-selector></workspace-selector>\n</div>\n\n\n","<ng-container *ngIf=\"entry$ | async as entry\">\n <ng-container *ngIf=\"savingDescription$ | async; else descriptionSaved\">\n <span trans>Saving...</span>\n </ng-container>\n <ng-template #descriptionSaved>\n <div class=\"input-container\" *ngIf=\"editingDescription$ | async; else descriptionEl\">\n <label for=\"description\" class=\"hidden\" trans>Description</label>\n <textarea\n rows=\"4\"\n id=\"description\"\n #textArea\n [value]=\"entry.description\"\n (enterKeybind)=\"textArea.blur()\"\n (blur)=\"updateDescription(entry, textArea.value)\"\n ></textarea>\n </div>\n <ng-template #descriptionEl>\n <div class=\"description-text\" (click)=\"editDescription()\">{{entry.description || ('Add a description' | trans)}}</div>\n <button mat-icon-button (click)=\"editDescription()\" [matTooltip]=\"'Edit description' | trans\">\n <mat-icon svgIcon=\"edit\"></mat-icon>\n </button>\n </ng-template>\n </ng-template>\n</ng-container>","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { FileEntry } from '@common/uploads/types/file-entry';\nimport { UpdateEntryDescription } from '../../../state/actions/commands';\nimport { Select, Store } from '@ngxs/store';\nimport { DriveState } from '../../../state/drive-state';\nimport { DriveEntry } from '../../../files/models/drive-entry';\nimport { finalize } from 'rxjs/operators';\n\n@Component({\n selector: 'entry-description-panel',\n templateUrl: './entry-description-panel.component.html',\n styleUrls: ['./entry-description-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntryDescriptionPanelComponent implements AfterViewInit {\n @Select(DriveState.selectedEntryOrActiveFolder) entry$: Observable<DriveEntry>;\n @ViewChildren('textArea') textArea: QueryList<ElementRef<HTMLTextAreaElement>>;\n public editingDescription$ = new BehaviorSubject(false);\n public savingDescription$ = new BehaviorSubject(false);\n\n constructor(private store: Store) {}\n\n public ngAfterViewInit() {\n this.textArea.changes.subscribe(queryList => {\n queryList.length && queryList.first.nativeElement.focus();\n });\n }\n\n public editDescription() {\n this.editingDescription$.next(true);\n }\n\n public updateDescription(entry: FileEntry, value: string) {\n this.editingDescription$.next(false);\n if (entry.description === value) return;\n this.savingDescription$.next(true);\n this.store.dispatch(new UpdateEntryDescription(entry, value))\n .pipe(finalize(() => this.savingDescription$.next(false)))\n .subscribe();\n }\n}\n","<img [src]=\"getPreviewUrl()\"\n *ngIf=\"file.type === 'image'\"\n [ngClass]=\"file.type+'-file'\"\n class=\"file-color\"\n draggable=\"false\">\n\n<file-icon *ngIf=\"file.type !== 'image'\" [type]=\"file.type === 'folder' ? getFolderIcon() : file.type\"></file-icon>","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { DriveEntry } from '../../models/drive-entry';\n\n@Component({\n selector: 'file-thumbnail',\n templateUrl: './file-thumbnail.component.html',\n styleUrls: ['./file-thumbnail.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FileThumbnailComponent {\n @Input() file: DriveEntry;\n\n public getPreviewUrl(): string {\n let url = this.file.url;\n if (this.file.thumbnail) {\n const separator = url.includes('?') ? '&' : '?';\n url += separator + 'thumbnail=true';\n }\n return url;\n }\n\n public getFolderIcon() {\n if (this.file.users && this.file.users.length > 1) {\n return 'shared-folder';\n } else {\n return 'folder';\n }\n }\n}\n","<ng-container *ngIf=\"entry$ | async as entry; else nothingSelected\">\n <ng-container *ngIf=\"entry.updated_at; else nothingSelected\">\n <file-thumbnail *ngIf=\"entry.type === 'image'\" class=\"preview\" [file]=\"entry\"></file-thumbnail>\n <div class=\"users-list\">\n <mat-icon class=\"users-list-img workspace-img\" svgIcon=\"groups\" *ngIf=\"entry.workspace_id\" [matTooltip]=\"'Everyone at :workspace workspace' | trans:{workspace: (workspaces.activeWorkspace$ | async)?.name}\"></mat-icon>\n <img class=\"users-list-img\" *ngFor=\"let user of entry.users\" [src]=\"user.avatar\" [matTooltip]=\"user.display_name\">\n </div>\n <div class=\"details-list\">\n <div class=\"item\">\n <div class=\"name\" trans>Type</div>\n <div class=\"value type-value\">{{entry.type | trans}}</div>\n </div>\n <div class=\"item\">\n <div class=\"name\" trans>Size</div>\n <div class=\"value\">{{entry.file_size | formattedFileSize}}</div>\n </div>\n <div class=\"item\">\n <div class=\"name\" trans>Storage Used</div>\n <div class=\"value\">{{entry.file_size | formattedFileSize}}</div>\n </div>\n <div class=\"item location-item\">\n <div class=\"name\" trans>Location</div>\n <div class=\"value\" (click)=\"openLocation()\">\n <mat-icon svgIcon=\"folder\"></mat-icon>\n <span class=\"text\">{{(parent$ | async)?.name || ('All Files') | trans}}</span>\n </div>\n </div>\n <div class=\"item\" *ngIf=\"owner$ | async as owner\">\n <div class=\"name\" trans>Owner</div>\n <div class=\"value\">{{owner.display_name}}</div>\n </div>\n <div class=\"item\">\n <div class=\"name\" trans>Last Updated</div>\n <div class=\"value\">{{entry.updated_at | formattedDate}}</div>\n </div>\n <div class=\"item\">\n <div class=\"name\" trans>Created</div>\n <div class=\"value\">{{entry.created_at | formattedDate}}</div>\n </div>\n <entry-description-panel></entry-description-panel>\n </div>\n </ng-container>\n</ng-container>\n\n<ng-template #nothingSelected>\n <div class=\"nothing-selected\">\n <mat-icon svgIcon=\"selection-tool-custom\" class=\"icon\"></mat-icon>\n <div class=\"text\" trans>Select file or folder to view its details.</div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { DriveState } from '../../state/drive-state';\nimport { Observable } from 'rxjs';\nimport { DriveEntry } from '../../files/models/drive-entry';\nimport { OpenFolder } from '../../state/actions/commands';\nimport { DriveFolder } from '../../folders/models/driveFolder';\nimport { WorkspacesService } from '../../../../common/workspaces/workspaces.service';\nimport { map } from 'rxjs/operators';\n\n@Component({\n selector: 'details-panel',\n templateUrl: './details-panel.component.html',\n styleUrls: ['./details-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DetailsPanelComponent {\n @Select(DriveState.selectedEntryOrActiveFolder) entry$: Observable<DriveEntry>;\n @Select(DriveState.selectedEntryParent) parent$: Observable<DriveFolder>;\n public owner$ = this.store.select(DriveState.selectedEntryOrActiveFolder)\n .pipe(map(e => (e?.users || []).find(u => u.owns_entry)));\n\n constructor(\n private store: Store,\n public workspaces: WorkspacesService,\n ) {}\n\n public openLocation() {\n const parent = this.store.selectSnapshot(DriveState.selectedEntryParent);\n this.store.dispatch(new OpenFolder(parent));\n }\n}\n","<div class=\"header\">\n <div class=\"title\">\n <ng-container *ngIf=\"entry$ | async as entry; else defaultTitle\">\n <ng-container *ngIf=\"entry.type; else defaultTitle\">\n <file-icon [type]=\"entry.type\"></file-icon>\n <div class=\"name\">{{entry.name}}</div>\n </ng-container>\n </ng-container>\n <ng-template #defaultTitle>\n <file-icon type=\"folder\"></file-icon>\n <div class=\"name\">{{ ((activePage$ | async)?.viewName) | trans }}</div>\n </ng-template>\n <button mat-icon-button class=\"close-button\" (click)=\"close()\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </div>\n</div>\n<details-panel></details-panel>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { DriveState} from '../state/drive-state';\nimport { Observable } from 'rxjs';\nimport { DriveEntry } from '../files/models/drive-entry';\nimport { ToggleDetailsSidebar } from '../state/actions/commands';\nimport { DrivePage } from '../state/models/drive-page';\n\n@Component({\n selector: 'details-sidebar',\n templateUrl: './details-sidebar.component.html',\n styleUrls: ['./details-sidebar.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DetailsSidebarComponent {\n @Select(DriveState.selectedEntryOrActiveFolder) entry$: Observable<DriveEntry>;\n @Select(DriveState.activePage) activePage$: Observable<DrivePage>;\n\n constructor(private store: Store) {}\n\n public close() {\n this.store.dispatch(new ToggleDetailsSidebar());\n }\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, HostBinding } from '@angular/core';\nimport { DriveEntry } from '../../../models/drive-entry';\n\n@Component({\n selector: 'files-grid-item',\n templateUrl: './files-grid-item.component.html',\n styleUrls: ['./files-grid-item.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilesGridItemComponent {\n @HostBinding('class.drive-entry') driveEntry = true;\n @Input() entry: DriveEntry;\n\n @HostBinding('attr.data-id') get fileId() {\n return this.entry.id;\n }\n}\n","<div class=\"preview-container\">\n <file-thumbnail class=\"preview\" [file]=\"entry\"></file-thumbnail>\n</div>\n<figcaption class=\"files-grid-item-footer\">\n <file-icon [type]=\"entry.type\"></file-icon>\n <div class=\"text\">{{entry.name}}</div>\n</figcaption>\n","import { Injectable } from '@angular/core';\nimport { EntriesSelectedViaDrag } from '../state/actions/events';\nimport { Store } from '@ngxs/store';\nimport { DriveDomCacheService } from './drive-dom-cache.service';\nimport { DriveState } from '../state/drive-state';\n\nconst GRID_ITEM_SELECTOR = '.drive-entry';\n\ntype AreaEdge = 'top'|'left'|'right'|'bottom'|false;\n\ninterface SelectorRect extends ClientRect {\n height: number;\n width: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilesDragSelectService {\n private selectBox: HTMLDivElement;\n private initial = {x: 0, y: 0, scrollTop: 0};\n private lastPanEvent: HammerInput|null;\n private scrollListener: EventListener;\n private gridElements: HTMLElement[];\n\n constructor(\n private store: Store,\n private cache: DriveDomCacheService,\n ) {}\n\n public start(e: HammerInput) {\n this.cacheClientRects();\n this.createSelectBox();\n this.bindScroll();\n this.gridElements = this.getGridElements();\n\n this.initial = {\n ...this.hammerToRelative(e),\n scrollTop: this.cache.scrollCont.scrollTop,\n };\n\n this.selectBox.style.top = this.initial.y + 'px';\n this.selectBox.style.left = this.initial.x + 'px';\n\n\n }\n\n public move(e: HammerInput) {\n this.lastPanEvent = e;\n this.resizeBox(e);\n }\n\n public end() {\n this.removeSelectBox();\n this.dispatchSelectedAction();\n this.unbindScroll();\n this.gridElements = [];\n }\n\n public resizeBox(e?: HammerInput|null) {\n if ( ! e) e = this.lastPanEvent;\n if ( ! e || ! this.selectBox) return;\n const newPos = this.getNewSelectorPosition(e);\n this.scrollAndRepositionSelector(newPos);\n this.selectIntersectingElements();\n }\n\n /**\n * Calculate new position of selector box.\n */\n private getNewSelectorPosition(e: HammerInput): SelectorRect {\n const current = this.hammerToRelative(e);\n\n let tmp,\n x1 = this.initial.x,\n y1 = this.initial.y,\n x2 = current.x,\n y2 = current.y;\n\n if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }\n if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }\n\n return {\n width: x2 - x1,\n height: y2 - y1,\n top: y1,\n right: x1 + (x2 - x1), // left + width\n bottom: y1 + (y2 - y1), // top + height\n left: x1,\n };\n }\n\n /**\n * Check if specified position intersects any container edge.\n */\n private reachedAreaEdge(newPos: ClientRect): AreaEdge {\n const area = this.rectToRelative(this.cache.filesContRect);\n\n if (newPos.left <= area.left) {\n return 'left';\n } else if (newPos.top <= area.top) {\n return 'top';\n } else if (newPos.right >= area.right) {\n return 'right';\n } else if (newPos.bottom >= area.bottom) {\n return 'bottom';\n }\n\n return false;\n }\n\n /**\n * Auto scroll container (if needed) and reposition selector box.\n */\n private scrollAndRepositionSelector(newPos: SelectorRect) {\n const area = this.cache.scrollCont,\n edge = this.reachedAreaEdge(newPos);\n\n // make sure top always starts at the same coordinates\n // regardless of any scrolling done during dragging\n newPos.top += this.initial.scrollTop;\n\n // auto scroll when cursor reaches container edge\n if (edge === 'bottom') {\n area.scrollBy({top: 4});\n } else if (edge === 'top') {\n area.scrollBy({top: -4});\n }\n\n // scroll diff between drag start and now (auto scroll or mouse wheel)\n const scrollDiff = this.cache.scrollCont.scrollTop - this.initial.scrollTop,\n scrollValue = Math.abs(scrollDiff);\n\n // top needs to be changed only if scroll direction is top\n if (scrollDiff < 0) {\n newPos.top -= scrollValue;\n }\n\n // height needs to be changed regardless of direction and method\n newPos.height += scrollValue;\n\n // check if we have reached bottom edge again, after scroll values are applied\n const reachedBottom = (newPos.top + newPos.height) >= this.cache.scrollCont.scrollHeight;\n\n // if any select area edge is reached, bail\n if (edge === 'left' || edge === 'right' || reachedBottom) return;\n\n // finally, reposition select box with scroll values applied\n this.applyPosition(newPos);\n }\n\n /**\n * Apply specified position to selector box.\n */\n private applyPosition(newPos: ClientRect) {\n this.selectBox.style.width = newPos.width + 'px';\n this.selectBox.style.height = newPos.height + 'px';\n this.selectBox.style.left = newPos.left + 'px';\n this.selectBox.style.top = newPos.top + 'px';\n }\n\n private selectIntersectingElements() {\n const selectedBoxRect = this.selectBox.getBoundingClientRect();\n this.gridElements.forEach((gridItem: HTMLElement) => {\n const rect = gridItem.getBoundingClientRect();\n\n // item intersects the select box\n if (rect.top + rect.height > selectedBoxRect.top\n && rect.left + rect.width > selectedBoxRect.left\n && rect.bottom - rect.height < selectedBoxRect.bottom\n && rect.right - rect.width < selectedBoxRect.right) {\n gridItem.classList.add('selected');\n } else {\n gridItem.classList.remove('selected');\n }\n });\n }\n\n /**\n * Transform absolute container client rect into relative.\n */\n private rectToRelative(rect: ClientRect): ClientRect {\n return {\n width: rect.width,\n height: rect.height,\n left: rect.left - this.cache.filesContRect.left,\n top: rect.top - this.cache.filesContRect.top,\n right: rect.right - this.cache.filesContRect.left,\n bottom: rect.bottom - this.cache.filesContRect.top\n };\n }\n\n /**\n * Transform hammer absolute event to relative coordinates.\n */\n private hammerToRelative(e: HammerInput) {\n return {\n x: e.center.x - this.cache.filesContRect.left,\n y: e.center.y - this.cache.filesContRect.top\n };\n }\n\n private dispatchSelectedAction() {\n const ids = this.gridElements\n .filter(el => el.classList.contains('selected'))\n .map(el => +el.dataset.id);\n\n const entries = this.store.selectSnapshot(DriveState.entries)\n .filter(entry => ids.indexOf(entry.id) > -1);\n\n this.store.dispatch(new EntriesSelectedViaDrag(entries));\n }\n\n private createSelectBox() {\n this.selectBox = document.createElement('div');\n this.selectBox.classList.add('files-select-box');\n this.cache.filesCont.appendChild(this.selectBox);\n }\n\n public removeSelectBox() {\n if ( ! this.selectBox) return;\n this.selectBox.remove();\n this.selectBox = null;\n }\n\n public dragging() {\n return !!this.selectBox;\n }\n\n private cacheClientRects() {\n this.cache.filesContRect = this.cache.filesCont.getBoundingClientRect();\n this.cache.scrollContRect = this.cache.scrollCont.getBoundingClientRect();\n }\n\n private getGridElements(): HTMLElement[] {\n return Array.from(this.cache.filesCont.querySelectorAll(GRID_ITEM_SELECTOR));\n }\n\n private bindScroll() {\n this.scrollListener = () => this.resizeBox();\n this.cache.scrollCont.addEventListener('scroll', this.scrollListener);\n }\n\n private unbindScroll() {\n this.cache.scrollCont.removeEventListener('scroll', this.scrollListener);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DriveDomCacheService } from './drive-dom-cache.service';\nimport { Store } from '@ngxs/store';\nimport { StoppedDragging } from '../state/actions/events';\nimport { StartedDragging } from '../state/actions/events';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DragEntryService {\n constructor(\n private domCache: DriveDomCacheService,\n private store: Store\n ) {}\n\n public start(e: HammerInput) {\n this.store.dispatch(new StartedDragging());\n }\n\n public move(e: HammerInput) {\n this.domCache.dragPreview.style.top = e.center.y + 'px';\n this.domCache.dragPreview.style.left = e.center.x + 'px';\n }\n\n public end() {\n this.store.dispatch(new StoppedDragging());\n }\n}\n","import {\n ContentChildren, Directive, ElementRef, NgZone, OnDestroy, OnInit, QueryList\n} from '@angular/core';\nimport { FilesGridItemComponent } from '../files/components/files-grid/files-grid-item/files-grid-item.component';\nimport { Store } from '@ngxs/store';\nimport { EntryDoubleTapped, EntryTapped } from '../state/actions/events';\nimport { DragEntryService } from './drag-entry.service';\nimport { DeselectAllEntries, SelectEntries } from '../state/actions/commands';\nimport { DriveState } from '../state/drive-state';\nimport { DriveEntry } from '../files/models/drive-entry';\nimport { FilesDragSelectService } from './files-drag-select.service';\nimport { DriveDomCacheService } from './drive-dom-cache.service';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n selector: '[driveHammerInteractions]'\n})\nexport class DriveHammerInteractionsDirective implements OnInit, OnDestroy {\n @ContentChildren(FilesGridItemComponent, {descendants: true}) gridItems: QueryList<FilesGridItemComponent>;\n\n private hammerManager: HammerManager;\n private panService: FilesDragSelectService|DragEntryService|null;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private zone: NgZone,\n private el: ElementRef,\n private store: Store,\n private dragSelect: FilesDragSelectService,\n private dragEntry: DragEntryService,\n private domCache: DriveDomCacheService,\n ) {}\n\n ngOnInit() {\n this.bindToHammer();\n\n // disable \"pan\" on mobile as it will prevent scrolling\n const sub = this.store.select(DriveState.isMobile).subscribe(isMobile => {\n this.hammerManager.get('pan').set({\n enable: !isMobile\n });\n this.hammerManager.get('doubletap').set({\n enable: !isMobile\n });\n });\n\n this.subscriptions.push(sub);\n }\n\n ngOnDestroy() {\n this.dragSelect.removeSelectBox();\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n private bindToHammer() {\n this.createHammerManager();\n this.onPanStart();\n this.onPan();\n this.onPanEnd();\n this.onTap();\n this.onDoubleTap();\n }\n\n private createHammerManager() {\n this.zone.runOutsideAngular(() => {\n this.hammerManager = new Hammer.Manager(this.domCache.filesCont);\n\n const tap = new Hammer.Tap(),\n pan = new Hammer.Pan(),\n doubleTap = new Hammer.Tap({ event: 'doubletap', taps: 2 });\n\n this.hammerManager.add([tap, doubleTap, pan]);\n this.hammerManager.get('doubletap').recognizeWith('tap');\n });\n }\n\n private onPanStart() {\n this.hammerManager.on('panstart', e => {\n const gridElement = this.getEntryEl(e);\n\n if (gridElement) {\n this.panService = this.dragEntry;\n const entry = this.getEntryByEl(gridElement),\n selectedEntries = this.store.selectSnapshot(DriveState.selectedEntries);\n\n // select entry, if not already selected\n if ( ! selectedEntries.find(en => en.id === entry.id)) {\n this.store.dispatch(new SelectEntries([this.getEntryByEl(gridElement)]));\n }\n } else {\n this.panService = this.dragSelect;\n }\n\n this.panService.start(e);\n });\n }\n\n private onPan() {\n this.hammerManager.on('pan', e => {\n if (this.panService) this.panService.move(e);\n });\n }\n\n private onPanEnd() {\n this.hammerManager.on('panend', () => {\n if (this.panService) this.panService.end();\n });\n }\n\n private onTap() {\n this.hammerManager.on('tap', e => {\n const entryEl = this.getEntryEl(e);\n this.dragSelect.removeSelectBox();\n\n if (entryEl) {\n this.store.dispatch(new EntryTapped(this.getEntryByEl(entryEl), e.srcEvent.ctrlKey || e.srcEvent.metaKey));\n } else if (e.target.closest('.files-container')) {\n this.store.dispatch(new DeselectAllEntries());\n }\n });\n }\n\n private onDoubleTap() {\n this.hammerManager.on('doubletap', e => {\n const gridElement = this.getEntryEl(e);\n if ( ! gridElement) return;\n\n this.store.dispatch(new EntryDoubleTapped(\n this.getEntryByEl(gridElement)\n ));\n });\n }\n\n private getEntryEl(e: HammerInput) {\n return e.target.closest('.drive-entry') as HTMLElement;\n }\n\n private getEntryByEl(el: HTMLElement): DriveEntry {\n const id = +el.dataset.id;\n return this.store.selectSnapshot(DriveState.entries)\n .find(curr => curr.id === +id);\n }\n}\n","import { AfterViewInit, Directive, ElementRef } from '@angular/core';\nimport { Select } from '@ngxs/store';\nimport { DriveState } from '../state/drive-state';\nimport { Observable } from 'rxjs';\n\n@Directive({\n selector: '[toggleSelectedClass]'\n})\nexport class ToggleSelectedClassDirective implements AfterViewInit {\n @Select(DriveState.selectedEntryIds) selectedEntryIds: Observable<number[]>;\n\n constructor(private el: ElementRef) {}\n\n ngAfterViewInit() {\n this.selectedEntryIds.subscribe(ids => {\n const els = this.el.nativeElement.querySelectorAll('.drive-entry');\n if ( ! els.length) return;\n\n Array.from(els).forEach((el: HTMLElement) => {\n const selected = ids.indexOf(parseInt(el.dataset.id, 10)) > -1;\n\n if (selected) {\n el.classList.add('selected');\n } else {\n el.classList.remove('selected');\n }\n });\n });\n }\n}\n","import { UploadedFile } from '../uploaded-file';\n\nexport async function readUploadedFolders(entries: WebKitEntry[]): Promise<UploadedFile[]> {\n let files = [];\n\n for (const key in entries) {\n const entry = entries[key];\n\n if ( ! entry.isDirectory) {\n files.push(await transformFileEntry(entry as WebKitFileEntry));\n } else {\n files = files.concat(await readDirRecursive(entry as WebKitDirectoryEntry));\n }\n }\n\n return files;\n}\n\nasync function readDirRecursive(entry: WebKitDirectoryEntry, files = []) {\n const entries = await readEntries(entry);\n\n for (const key in entries) {\n const childEntry = entries[key];\n\n if (childEntry.isDirectory) {\n await readDirRecursive(childEntry as WebKitDirectoryEntry, files);\n } else {\n files.push(await transformFileEntry(childEntry as WebKitFileEntry));\n }\n }\n\n return files;\n}\n\nfunction readEntries(dir: WebKitDirectoryEntry): Promise<WebKitEntry[]> {\n return new Promise(resolve => {\n readEntriesRecursive(dir.createReader(), resolve);\n });\n}\n\nfunction readEntriesRecursive(reader: WebKitDirectoryReader, resolve, allEntries: WebKitEntry[] = []) {\n reader.readEntries(entries => {\n if (entries.length) {\n allEntries = allEntries.concat(entries);\n readEntriesRecursive(reader, resolve, allEntries);\n } else {\n resolve(allEntries);\n }\n });\n}\n\nfunction transformFileEntry(entry: WebKitFileEntry) {\n return new Promise(resolve => {\n entry.file((file: any) => {\n resolve(new UploadedFile(file as File, entry.fullPath));\n });\n });\n}\n","import { Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { openUploadWindow } from '../utils/open-upload-window';\nimport { UploadedFile } from '../uploaded-file';\nimport { readUploadedFolders } from '../utils/read-uploaded-folders';\nimport { UploadInputConfig } from '@common/uploads/upload-input-config';\n\n@Directive({\n selector: '[fileDropzone]',\n})\nexport class UploadDropzoneDirective implements OnInit, OnDestroy {\n @Input() disableDropzoneClick = false;\n @Input() disableDropzone = false;\n @Input() clickButton: ElementRef;\n @Input('fileDropzone') uploadConfig: UploadInputConfig = {};\n @Output() filesDropped: EventEmitter<UploadedFile[]> = new EventEmitter();\n\n constructor(protected el: ElementRef) {}\n\n ngOnInit() {\n const el = this.el.nativeElement;\n el.addEventListener('dragenter', (e) => this.handleDragEnter(e));\n el.addEventListener('dragover', (e) => this.handleDragOver(e));\n el.addEventListener('dragleave', (e) => this.handleDragLeave(e));\n el.addEventListener('drop', (e) => this.handleDrop(e));\n\n if ( ! this.disableDropzoneClick) {\n const trigger = this.clickButton ? this.clickButton.nativeElement : el;\n trigger.addEventListener('click', () => this.handleClick());\n }\n }\n\n ngOnDestroy() {\n this.removeClassesFromDropzone();\n }\n\n protected handleClick() {\n if (this.disableDropzone) return;\n openUploadWindow(this.uploadConfig).then(files => {\n this.emitUploadEvent(files);\n });\n }\n\n public handleDragEnter(e) {\n if (this.dropzoneDisabled(e)) return;\n this.el.nativeElement.classList.add('file-over-dropzone');\n }\n\n public handleDragOver(e) {\n if (e.preventDefault) e.preventDefault();\n e.dataTransfer.dropEffect = this.dropzoneDisabled(e) ? 'none' : 'move';\n return false;\n }\n\n public handleDragLeave(e: MouseEvent) {\n const newEl = document.elementFromPoint(e.clientX, e.clientY);\n if (this.el.nativeElement.contains(newEl)) return;\n this.removeClassesFromDropzone();\n }\n\n public async handleDrop(e) {\n e.stopPropagation();\n e.preventDefault();\n this.removeClassesFromDropzone();\n if (this.dropzoneDisabled(e) || !e.dataTransfer.items) return;\n\n const items = Array.from(e.dataTransfer.items)\n .filter((item: DataTransferItem) => item.kind === 'file')\n .map((item: DataTransferItem) => {\n return item.webkitGetAsEntry();\n });\n\n if (items.length) {\n this.emitUploadEvent(await readUploadedFolders(items));\n }\n }\n\n protected emitUploadEvent(files: UploadedFile[]) {\n this.filesDropped.emit(files);\n }\n\n protected removeClassesFromDropzone() {\n this.el.nativeElement.classList.remove('file-over-dropzone');\n }\n\n protected dropzoneDisabled(e: DragEvent) {\n const hasFiles = e.dataTransfer.types.find(type => type.toLowerCase() === 'files');\n return this.disableDropzone || ! hasFiles;\n }\n}\n","import {Directive, ElementRef, NgZone, OnDestroy, OnInit} from '@angular/core';\nimport {fromEvent, Subscription} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\n\n@Directive()\nexport abstract class InfiniteScroll implements OnInit, OnDestroy {\n protected scrollSub: Subscription;\n protected el: ElementRef<HTMLElement|Document>;\n protected abstract zone: NgZone;\n\n public threshold: number | string = 50;\n\n ngOnInit() {\n if ( ! this.el) {\n this.el = new ElementRef(document);\n }\n this.zone.runOutsideAngular(() => {\n this.scrollSub = fromEvent(this.getScrollContainer(), 'scroll', {capture: true, passive: true})\n .pipe(debounceTime(20))\n .subscribe((e: Event) => this.onScroll(e.target as HTMLElement));\n });\n }\n\n ngOnDestroy() {\n this.scrollSub && this.scrollSub.unsubscribe();\n }\n\n protected getScrollContainer() {\n return this.el ? this.el.nativeElement : document;\n }\n\n protected onScroll(target: HTMLElement) {\n if (!target || (target !== this.el.nativeElement) || !this.canLoadMore() || this.isLoading()) return;\n\n const offset = parseInt(this.threshold as string),\n targetCanScroll = this.el && (typeof target.scrollTop !== 'undefined');\n\n const currentScroll = targetCanScroll ?\n target.scrollTop + target.offsetHeight :\n window.scrollY + window.innerHeight;\n\n const heightWithoutOffset = targetCanScroll ?\n target.scrollHeight - offset :\n document.documentElement.scrollHeight - offset;\n\n if (currentScroll >= heightWithoutOffset) {\n this.zone.run(() => {\n this.loadMoreItems();\n });\n }\n }\n\n protected abstract loadMoreItems();\n\n protected abstract canLoadMore(): boolean;\n\n protected abstract isLoading(): boolean;\n}\n","import { Directive, ElementRef, NgZone } from '@angular/core';\nimport { LoadMoreEntries } from '../state/actions/commands';\nimport { Store } from '@ngxs/store';\nimport { DriveState } from '../state/drive-state';\nimport { InfiniteScroll } from '@common/core/ui/infinite-scroll/infinite.scroll';\n\n@Directive({\n selector: '[driveInfiniteScroll]'\n})\nexport class DriveInfiniteScrollDirective extends InfiniteScroll {\n constructor(\n protected el: ElementRef,\n protected store: Store,\n protected zone: NgZone,\n ) {\n super();\n }\n\n protected loadMoreItems() {\n const page = this.store.selectSnapshot(DriveState.currentPage) + 1;\n this.store.dispatch(new LoadMoreEntries({page}));\n }\n\n protected isLoading(): boolean {\n return this.store.selectSnapshot(DriveState.loading);\n }\n\n protected canLoadMore(): boolean {\n return this.store.selectSnapshot(DriveState.canLoadMoreEntries);\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Inject, Optional, ViewEncapsulation } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { DriveEntry } from '../../../files/models/drive-entry';\nimport { CONTEXT_MENU_DATA } from '@common/core/ui/context-menu/context-menu-data';\nimport { EntryContextMenuOpened } from '../../../state/actions/events';\nimport { CurrentUser } from '@common/auth/current-user';\nimport { DeselectAllEntries } from '../../../state/actions/commands';\n\nexport interface FileContextMenuData {\n entry: DriveEntry;\n}\n\n@Component({\n selector: 'drive-context-menu',\n templateUrl: './drive-context-menu.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class DriveContextMenuComponent {\n @HostBinding('class.context-menu') contextMenu = true;\n\n constructor(\n @Optional() @Inject(CONTEXT_MENU_DATA) public data: FileContextMenuData,\n protected store: Store,\n protected currentUser: CurrentUser\n ) {\n if (this.data && this.data.entry) {\n this.store.dispatch(new EntryContextMenuOpened(this.data.entry));\n } else {\n this.store.dispatch(new DeselectAllEntries());\n }\n }\n}\n","<context-actions-container></context-actions-container>","<skeleton *ngIf=\"loading$ | async; else breadcrumbs\" @fadeOut></skeleton>\n<ng-template #breadcrumbs>\n <div class=\"breadcrumb-container\" @fadeIn>\n <ng-container *ngFor=\"let item of breadcrumb | async; last as last; first as first;\">\n <div class=\"breadcrumb-item\" (click)=\"last ? openContextMenu(item, button) : openPage(item)\" [class.no-action]=\"!item.hasActions\" #button>\n <span class=\"name\">{{first ? (item.viewName | trans) : item.viewName}}</span>\n <mat-icon svgIcon=\"arrow-drop-down\" *ngIf=\"last && item.hasActions\"></mat-icon>\n </div>\n <mat-icon class=\"separator\" svgIcon=\"keyboard-arrow-right\" *ngIf=\"!last\"></mat-icon>\n </ng-container>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\nimport { DriveEntryApiService } from '../../drive-entry-api.service';\nimport { Store } from '@ngxs/store';\nimport { DriveState } from '../../state/drive-state';\nimport { BehaviorSubject, combineLatest, Subscription } from 'rxjs';\nimport { Translations } from '@common/core/translations/translations.service';\nimport {\n ContextMenu, ContextMenuParams\n} from '@common/core/ui/context-menu/context-menu.service';\nimport { DriveContextMenuComponent } from '../../context-actions/components/drive-context-menu/drive-context-menu.component';\nimport { distinctUntilChanged, filter, take } from 'rxjs/operators';\nimport { OpenFolder } from '../../state/actions/commands';\nimport {\n DRIVE_PAGE_NAMES, DrivePage, FolderPage, SHARES_PAGE,\n} from '../../state/models/drive-page';\nimport { Navigate } from '@ngxs/router-plugin';\nimport { DriveFolder } from '../../folders/models/driveFolder';\nimport { SKELETON_ANIMATIONS } from '../../../../common/core/ui/skeleton/skeleton-animations';\nimport { WorkspacesService } from '../../../../common/workspaces/workspaces.service';\n\n@Component({\n selector: 'entry-breadcrumbs',\n templateUrl: './entry-breadcrumbs.component.html',\n styleUrls: ['./entry-breadcrumbs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [SKELETON_ANIMATIONS],\n})\nexport class EntryBreadcrumbsComponent implements OnInit, OnDestroy {\n public breadcrumb: BehaviorSubject<DrivePage[]> = new BehaviorSubject([]);\n public loading$ = new BehaviorSubject<boolean>(true);\n private activePageSub: Subscription;\n\n constructor(\n private entriesApi: DriveEntryApiService,\n private i18n: Translations,\n private contextMenu: ContextMenu,\n private store: Store,\n private workspaces: WorkspacesService,\n ) {}\n\n ngOnInit() {\n // wait until entries and user folders are loaded\n combineLatest([\n this.store.select(DriveState.meta),\n this.store.select(DriveState.userFoldersLoaded),\n this.workspaces.activeWorkspace$,\n ]).pipe(\n filter(([meta, foldersLoaded, workspace]) => meta.currentPage && foldersLoaded && !!workspace),\n take(1)\n ).subscribe(() => {\n this.loading$.next(false);\n this.bindToActivePage();\n });\n }\n\n ngOnDestroy() {\n this.activePageSub && this.activePageSub.unsubscribe();\n }\n\n public openPage(page: DrivePage) {\n if (page.folder) {\n this.store.dispatch(new OpenFolder(page.folder));\n } else {\n this.store.dispatch(new Navigate(['/drive/shares']));\n }\n }\n\n public openContextMenu(item: DrivePage, origin: HTMLElement) {\n let params = {originX: 'start', overlayX: 'start'} as ContextMenuParams;\n switch (item.name) {\n case DRIVE_PAGE_NAMES.TRASH:\n return this.contextMenu.open(DriveContextMenuComponent, origin, params);\n case DRIVE_PAGE_NAMES.FOLDER:\n params = {data: {entry: this.store.selectSnapshot(DriveState.activeFolder)}, ...params};\n return this.contextMenu.open(DriveContextMenuComponent, origin, params);\n }\n }\n\n private generateBreadCrumb(page: DrivePage) {\n const breadcrumbs = [this.getRootBreadcrumb(page)];\n\n if (page.folder?.id) {\n const folderPath = this.getBreadcrumbForFolder(page.folder);\n breadcrumbs.push(...folderPath);\n }\n this.breadcrumb.next(breadcrumbs);\n }\n\n private getBreadcrumbForFolder(folder: DriveFolder) {\n const allFolders = this.store.selectSnapshot(DriveState.flatFolders) || [];\n const ids = (folder.path ? folder.path.split('/') : [folder.id]) as number[];\n return ids.map(id => {\n const pathFolder = folder.id === +id ? folder : allFolders.find(f => f.id === +id);\n if (pathFolder) {\n return new FolderPage(pathFolder);\n }\n }).filter(f => !!f);\n }\n\n private getRootBreadcrumb(page: DrivePage) {\n if (page.name === DRIVE_PAGE_NAMES.FOLDER) {\n const workspaceId = this.workspaces.activeId$.value;\n const ROOT_FOLDER_PAGE = new FolderPage(this.store.selectSnapshot(DriveState.rootFolder));\n if (workspaceId && page.folder.workspace_id === workspaceId) {\n return {...ROOT_FOLDER_PAGE, viewName: this.workspaces.activeWorkspace$.value.name};\n } else {\n return !this.store.selectSnapshot(DriveState.userOwnsActiveFolder) ? SHARES_PAGE : ROOT_FOLDER_PAGE;\n }\n } else {\n return page;\n }\n }\n\n private bindToActivePage() {\n this.activePageSub = combineLatest([\n this.store.select(DriveState.activePage),\n this.store.select(DriveState.flatFolders),\n ]).pipe(\n distinctUntilChanged(),\n filter(([activePage]) => {\n // wait until folder data is fully loaded\n return activePage.name === DRIVE_PAGE_NAMES.FOLDER ? activePage.folder?.name : true;\n })\n ).subscribe(([activePage]) => {\n this.generateBreadCrumb(activePage);\n });\n }\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'drive-toolbar',\n templateUrl: './drive-toolbar.component.html',\n styleUrls: ['./drive-toolbar.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DriveToolbarComponent {\n}\n","<entry-breadcrumbs></entry-breadcrumbs>\n","export const AVAILABLE_SORTS: DriveSortOption[] = [\n {name: 'file_size', viewName: 'Size'},\n {name: 'name', viewName: 'Name'},\n {name: 'updated_at', viewName: 'Last Modified'},\n {name: 'created_at', viewName: 'Upload Date'},\n {name: 'type', viewName: 'Type'},\n {name: 'extension', viewName: 'Extension'},\n];\n\nexport interface DriveSortOption {\n name: SortColumn;\n viewName: string;\n}\n\nexport type SortColumn = 'file_size' | 'name' | 'updated_at' | 'created_at' | 'type' | 'extension';\nexport type SortDirection = 'desc'|'asc';\n\nexport interface SortValue {\n column: SortColumn;\n direction: SortDirection;\n}\n","<ng-container *ngIf=\"sort$ | async as sortValue\">\n <span class=\"label\" trans>Sort by</span>\n <button class=\"no-style\" [matMenuTriggerFor]=\"menu\" [disabled]=\"btnDisabled\">\n <span class=\"sort-button-content\">\n <span>{{getSortViewName(sortValue.column) | trans}}</span>\n <mat-icon svgIcon=\"keyboard-arrow-down\" class=\"arrow-icon\"></mat-icon>\n </span>\n <mat-icon svgIcon=\"sort\" class=\"mobile-sort-button-content\"></mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\" class=\"drive-sort-menu\">\n <div class=\"title\" trans>Direction</div>\n <button mat-menu-item (click)=\"changeDirection('asc')\" [class.active]=\"sortValue.direction === 'asc'\">\n <mat-icon svgIcon=\"check\"></mat-icon>\n <span trans>Ascending</span>\n </button>\n <button mat-menu-item (click)=\"changeDirection('desc')\" [class.active]=\"sortValue.direction === 'desc'\">\n <mat-icon svgIcon=\"check\"></mat-icon>\n <span trans>Descending</span>\n </button>\n <div class=\"separator\"></div>\n <div class=\"title\" trans>Sort By</div>\n <button mat-menu-item *ngFor=\"let sort of availableSorts\" (click)=\"changeSort(sort)\" [class.active]=\"sortValue.column === sort.name\">\n <mat-icon svgIcon=\"check\"></mat-icon>\n <span trans>{{sort.viewName}}</span>\n </button>\n </mat-menu>\n</ng-container>","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { AVAILABLE_SORTS, DriveSortOption, SortColumn, SortDirection, SortValue } from '../../entries/available-sorts';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\n\nconst DEFAULT_VALUE: SortValue = {column: 'updated_at', direction: 'desc'};\n\n@Component({\n selector: 'entries-sort-button',\n templateUrl: './entries-sort-button.component.html',\n styleUrls: ['./entries-sort-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: EntriesSortButtonComponent,\n multi: true,\n }]\n})\nexport class EntriesSortButtonComponent implements ControlValueAccessor {\n @Input() btnDisabled = false;\n public availableSorts = AVAILABLE_SORTS;\n public propagateChange: Function;\n\n public sort$: BehaviorSubject<SortValue> = new BehaviorSubject(DEFAULT_VALUE);\n\n public changeSort(column: DriveSortOption) {\n this.sort$.next({...this.sort$.value, column: column.name});\n this.propagateChange(this.sort$.value);\n }\n\n public changeDirection(direction: SortDirection) {\n this.sort$.next({...this.sort$.value, direction});\n this.propagateChange(this.sort$.value);\n }\n\n public getSortViewName(column: SortColumn): string {\n return this.availableSorts.find(sort => sort.name === column).viewName;\n }\n\n public writeValue(value: SortValue) {\n this.sort$.next(value || DEFAULT_VALUE);\n }\n\n public registerOnChange(fn: Function) {\n this.propagateChange = fn;\n }\n\n public registerOnTouched() {}\n}\n","<ng-container *ngFor=\"let action of actions$ | async\">\n <ng-container *ngIf=\"action.visible()\">\n <div class=\"separator\" *ngIf=\"!compact && action.separatorBefore\"></div>\n\n <button class=\"context-menu-item\" *ngIf=\"!compact\" (click)=\"action.execute()\">\n <mat-icon [svgIcon]=\"action.icon\"></mat-icon>\n <span trans>{{action.viewName}}</span>\n </button>\n\n <button mat-icon-button (click)=\"action.execute()\" [matTooltip]=\"action.viewName | trans\" *ngIf=\"compact && action.showInCompact\">\n <mat-icon [svgIcon]=\"action.icon\"></mat-icon>\n </button>\n </ng-container>\n</ng-container>\n\n<button mat-icon-button (click)=\"openMoreActionsMenu()\" [matTooltip]=\"'More actions' | trans\" #moreActionsButton *ngIf=\"compact && hasMoreActions$ | async\">\n <mat-icon svgIcon=\"more-vert\"></mat-icon>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Injector,\n Input,\n OnDestroy,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { DriveState } from '../../../state/drive-state';\nimport { Store } from '@ngxs/store';\nimport { DriveContextAction } from '../../types/drive-context-action';\nimport { TrashActions } from '../../actions/trash-actions';\nimport { SharesActions } from '../../actions/shares-actions';\nimport { FolderActions } from '../../actions/folder-actions';\nimport { EntryActions } from '../../actions/entry-actions';\nimport { BehaviorSubject, combineLatest, Subscription } from 'rxjs';\nimport { DRIVE_PAGE_NAMES, DrivePage } from '../../../state/models/drive-page';\nimport { DriveContextMenuComponent } from '../drive-context-menu/drive-context-menu.component';\nimport { ContextMenu } from '@common/core/ui/context-menu/context-menu.service';\nimport { TrashPageActions } from '../../actions/trash-page-actions';\nimport { DriveEntry } from '../../../files/models/drive-entry';\n\n@Component({\n selector: 'context-actions-container',\n templateUrl: './context-actions-container.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContextActionsContainerComponent implements OnDestroy {\n @ViewChild('moreActionsButton', { read: ElementRef }) moreActionsButton: ElementRef;\n @Input() @HostBinding('class.compact') compact = false;\n\n // whether there are more actions to display in \"compact\" mode\n public hasMoreActions$ = new BehaviorSubject(false);\n public actions$: BehaviorSubject<DriveContextAction[]> = new BehaviorSubject([]);\n private subscription: Subscription;\n\n constructor(\n private store: Store,\n private injector: Injector,\n private contextMenu: ContextMenu,\n ) {\n this.subscription = combineLatest([\n this.store.select(DriveState.activePage),\n this.store.select(DriveState.selectedEntry),\n ]).subscribe(combined => {\n this.setActions(combined[0], combined[1]);\n this.hasMoreActions$.next(this.actions$.value.some(action => !action.showInCompact));\n });\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n public openMoreActionsMenu() {\n const entry = this.store.selectSnapshot(DriveState.selectedEntryOrActiveFolder);\n this.contextMenu.open(\n DriveContextMenuComponent,\n this.moreActionsButton.nativeElement,\n {data: {entry}}\n );\n }\n\n private setActions(activePage: DrivePage, selectedEntry: DriveEntry) {\n // user clicked on \"trash\" page name in breadcrumb\n if (activePage?.name === DRIVE_PAGE_NAMES.TRASH && !selectedEntry) {\n this.actions$.next(this.injector.get(TrashPageActions).getActions());\n\n // context menu opened for selected entries while in \"trash\" or \"shares\" page\n } else if (activePage?.name === 'trash' && selectedEntry) {\n this.actions$.next(this.injector.get(TrashActions).getActions());\n } else if (activePage?.name === 'shares' && selectedEntry) {\n this.setActionsForEntry();\n // context menu opened by clicking on empty space in folder view or clicking on root folder breadcrumb\n } else if (activePage?.folder && !selectedEntry?.id) {\n this.actions$.next(this.injector.get(FolderActions).getActions());\n\n // show entries context menu for \"starred\" page\n } else if (activePage?.name === 'starred' || activePage?.name === 'recent') {\n this.actions$.next(this.injector.get(EntryActions).getActions());\n\n // default to entry actions if can't match to anything else\n } else if (selectedEntry) {\n this.setActionsForEntry();\n } else {\n this.actions$.next([]);\n }\n }\n\n private setActionsForEntry() {\n const entries = this.store.selectSnapshot(DriveState.selectedEntries).length\n ? this.store.selectSnapshot(DriveState.selectedEntries)\n : [this.store.selectSnapshot(DriveState.activeFolder)];\n let isOwner = this.store.selectSnapshot(DriveState.selectedEntries).length\n ? this.store.selectSnapshot(DriveState.userOwnsSelectedEntries)\n : this.store.selectSnapshot(DriveState.userOwnsActiveFolder);\n if (this.store.selectSnapshot(DriveState.activeWorkspace)?.id) {\n isOwner = entries.every(e => e.workspace_id === this.store.selectSnapshot(DriveState.activeWorkspace)?.id);\n }\n if (isOwner) {\n this.actions$.next(this.injector.get(EntryActions).getActions());\n } else {\n this.actions$.next(this.injector.get(SharesActions).getActions());\n }\n }\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, ElementRef } from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { DriveState } from '../../state/drive-state';\nimport { Observable } from 'rxjs';\nimport { ContextMenu } from '@common/core/ui/context-menu/context-menu.service';\nimport { DriveContextMenuComponent } from '../../context-actions/components/drive-context-menu/drive-context-menu.component';\nimport { ToggleDetailsSidebar, SetViewMode } from '../../state/actions/commands';\n\n@Component({\n selector: 'toolbar-actions',\n templateUrl: './toolbar-actions.component.html',\n styleUrls: ['./toolbar-actions.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ToolbarActionsComponent {\n @ViewChild('moreActionsButton', { read: ElementRef }) moreActionsButton: ElementRef;\n @Select(DriveState.anythingSelected) anythingSelected: Observable<boolean>;\n @Select(DriveState.viewMode) viewMode: Observable<'list'|'grid'>;\n @Select(DriveState.detailsOpen) activityOpen: Observable<boolean>;\n @Select(DriveState.multipleEntriesSelected) multipleEntriesSelected$: Observable<boolean>;\n\n constructor(\n protected store: Store,\n protected contextMenu: ContextMenu,\n ) {}\n\n public toggleViewMode() {\n const current = this.store.selectSnapshot(DriveState.viewMode);\n this.store.dispatch(new SetViewMode(current === 'list' ? 'grid' : 'list'));\n }\n\n public ToggleDetails() {\n this.store.dispatch(new ToggleDetailsSidebar());\n }\n\n public openMoreActionsMenu() {\n const entry = this.store.selectSnapshot(DriveState.selectedEntry);\n this.contextMenu.open(\n DriveContextMenuComponent,\n this.moreActionsButton.nativeElement,\n {data: {entry}}\n );\n }\n}\n","<context-actions-container [compact]=\"true\"></context-actions-container>\n\n<div class=\"always-visible-actions\">\n <button mat-icon-button (click)=\"toggleViewMode()\">\n <mat-icon [svgIcon]=\"(viewMode | async) === 'list' ? 'view-list' : 'view-module'\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"ToggleDetails()\" [class.active]=\"activityOpen | async\">\n <mat-icon svgIcon=\"info\"></mat-icon>\n </button>\n</div>\n\n","import {\n ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation\n} from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { ReloadPageEntries } from '../../state/actions/commands';\nimport { SortColumn, SortValue } from '../../entries/available-sorts';\nimport { DriveState } from '../../state/drive-state';\nimport { combineLatest, Observable } from 'rxjs';\nimport { DrivePage } from '../../state/models/drive-page';\nimport { FormControl } from '@angular/forms';\n\n@Component({\n selector: 'file-list-header',\n templateUrl: './file-list-header.component.html',\n styleUrls: ['./file-list-header.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FileListHeaderComponent implements OnInit {\n @Select(DriveState.sortColumn) sortColumn$: Observable<SortColumn>;\n @Select(DriveState.activePage) activePage$: Observable<DrivePage>;\n\n public sortFormControl = new FormControl({\n column: this.store.selectSnapshot(DriveState.sortColumn),\n direction: this.store.selectSnapshot(DriveState.sortDirection),\n });\n\n constructor(private store: Store) {}\n\n ngOnInit() {\n combineLatest([\n this.store.select(DriveState.sortColumn),\n this.store.select(DriveState.sortDirection),\n ]).subscribe(([column, direction]) => {\n this.sortFormControl.setValue({column, direction}, {emitEvent: false});\n });\n this.sortFormControl.valueChanges.subscribe((sort: SortValue) => {\n this.store.dispatch(new ReloadPageEntries(\n {orderBy: sort.column, orderDir: sort.direction}\n ));\n });\n }\n}\n","<div class=\"sort-header\">\n <entries-sort-button [btnDisabled]=\"(activePage$ | async)?.disableSort\" [formControl]=\"sortFormControl\"></entries-sort-button>\n</div>\n<toolbar-actions></toolbar-actions>","<material-navbar\n [showToggleButton]=\"isMobile$ | async\"\n (toggleButtonClick)=\"toggleSidebar()\"\n menuPosition=\"drive-navbar\"\n>\n <main-searchbar></main-searchbar>\n</material-navbar>\n\n<mat-sidenav-container>\n <mat-sidenav\n [mode]=\"(isMobile$ | async) ? 'over' : 'side'\"\n [opened]=\"sidebarOpen$ | async\"\n class=\"left-sidebar\"\n >\n <sidebar></sidebar>\n </mat-sidenav>\n <mat-sidenav\n [opened]=\"activityOpen$ | async\"\n [mode]=\"(isMobile$ | async) ? 'over' : 'side'\"\n position=\"end\"\n class=\"right-sidebar\"\n >\n <details-sidebar></details-sidebar>\n </mat-sidenav>\n <mat-sidenav-content\n driveHammerInteractions\n [class.has-rek]=\"settings.has('ads.drive') && !currentUser.isSubscribed()\"\n >\n <ad-host slot=\"ads.drive\"></ad-host>\n <ng-container *ngIf=\"(activePage$ | async)?.name !== 'workspaces'\">\n <drive-toolbar></drive-toolbar>\n <file-list-header></file-list-header>\n </ng-container>\n <div class=\"loading-overlay-container\">\n <div\n class=\"files-container\"\n #filesContainer\n #scrollContainer\n toggleSelectedClass\n [class.dragging]=\"dragging | async\"\n contextMenu=\"entry\"\n [disableContextMenu]=\"!(canUpload$ | async)\"\n fileDropzone\n [disableDropzoneClick]=\"true\"\n [disableDropzone]=\"!(canUpload$ | async)\"\n driveInfiniteScroll\n (filesDropped)=\"uploadFiles($event)\"\n >\n <router-outlet></router-outlet>\n </div>\n <loading-indicator [isVisible]=\"loading$ | async\" class=\"overlay\"></loading-indicator>\n </div>\n </mat-sidenav-content>\n</mat-sidenav-container>\n\n<entry-drag-preview></entry-drag-preview>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Select, Store } from '@ngxs/store';\nimport { DriveState } from './state/drive-state';\nimport { DriveDomCacheService } from './interactions/drive-dom-cache.service';\nimport { EntryDragPreviewComponent } from './interactions/entry-drag-preview/entry-drag-preview.component';\nimport { Observable, Subscription } from 'rxjs';\nimport {\n LoadUserFolders,\n LoadUserSpaceUsage,\n ReloadPageEntries,\n ResetState,\n SetCurrentUser,\n SetViewMode,\n SetWorkspace,\n ToggleSidebar,\n UploadFiles\n} from './state/actions/commands';\nimport { UploadedFile } from '@common/uploads/uploaded-file';\nimport { Settings } from '@common/core/config/settings.service';\nimport { CurrentUser } from '@common/auth/current-user';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { BreakpointChanged, UserSpaceUsageChanged } from './state/actions/events';\nimport { VIEW_MODE_KEY } from './state/models/drive-state-model';\nimport { LocalStorage } from '@common/core/services/local-storage.service';\nimport { User } from '@common/core/types/models/User';\nimport { WorkspacesService } from '../../common/workspaces/workspaces.service';\nimport { filter, skip } from 'rxjs/operators';\nimport { DrivePage, FolderPage } from './state/models/drive-page';\nimport { EntryActions } from './context-actions/actions/entry-actions';\nimport { FolderActions } from './context-actions/actions/folder-actions';\nimport { SharesActions } from './context-actions/actions/shares-actions';\nimport { TrashActions } from './context-actions/actions/trash-actions';\nimport { TrashPageActions } from './context-actions/actions/trash-page-actions';\nimport { ContextMenu } from '../../common/core/ui/context-menu/context-menu.service';\n\nconst actions = [EntryActions, FolderActions, SharesActions, TrashActions, TrashPageActions];\n\n@Component({\n selector: 'drive',\n templateUrl: './drive.component.html',\n styleUrls: ['./drive.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n // scope workspaces to drive component and make sure context menus get correct instance\n providers: [...actions, ContextMenu, WorkspacesService],\n})\nexport class DriveComponent implements OnInit, OnDestroy {\n @ViewChild('scrollContainer', { read: ElementRef, static: true }) scrollContainer: ElementRef;\n @ViewChild('filesContainer', { static: true }) filesContainer: ElementRef;\n @ViewChild(EntryDragPreviewComponent, { read: ElementRef, static: true }) dragPreview: ElementRef;\n @Select(DriveState.dragging) dragging: Observable<boolean>;\n @Select(DriveState.detailsOpen) activityOpen$: Observable<boolean>;\n @Select(DriveState.sidebarOpen) sidebarOpen$: Observable<boolean>;\n @Select(DriveState.loading) loading$: Observable<boolean>;\n @Select(DriveState.isMobile) isMobile$: Observable<boolean>;\n @Select(DriveState.canUpload) canUpload$: Observable<boolean>;\n @Select(DriveState.activePage) activePage$: Observable<DrivePage>;\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private store: Store,\n private route: ActivatedRoute,\n public currentUser: CurrentUser,\n private localStorage: LocalStorage,\n private domCache: DriveDomCacheService,\n private breakpoints: BreakpointObserver,\n private workspaces: WorkspacesService,\n public settings: Settings,\n ) {}\n\n ngOnInit() {\n this.setViewMode();\n this.cacheDemoElements();\n this.observeBreakpointChanges();\n this.bindToWorkspace();\n this.store.dispatch(new LoadUserFolders());\n this.store.dispatch(new LoadUserSpaceUsage());\n\n // TODO: refactor this once auth is moved to it's own store\n this.store.dispatch(new SetCurrentUser(this.currentUser.getModel() as User));\n this.currentUser.model$.subscribe(user => {\n this.store.dispatch(new SetCurrentUser(user as User));\n });\n }\n\n ngOnDestroy() {\n this.store.dispatch(ResetState);\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.subscriptions = [];\n }\n\n public uploadFiles(files: UploadedFile[]) {\n this.store.dispatch(new UploadFiles(files));\n }\n\n public toggleSidebar() {\n this.store.dispatch(new ToggleSidebar());\n }\n\n private cacheDemoElements() {\n this.domCache.filesCont = this.filesContainer.nativeElement;\n this.domCache.scrollCont = this.scrollContainer.nativeElement;\n this.domCache.dragPreview = this.dragPreview.nativeElement;\n }\n\n private setViewMode() {\n this.store.dispatch(new SetViewMode(\n this.localStorage.get(VIEW_MODE_KEY, this.settings.get('drive.default_view', 'grid')))\n );\n }\n\n private observeBreakpointChanges() {\n const sub = this.breakpoints.observe('(max-width: 1100px)').subscribe(result => {\n this.store.dispatch(new BreakpointChanged({isMobile: result.matches}));\n });\n this.subscriptions.push(sub);\n }\n\n private bindToWorkspace() {\n // skip initially selected workspace\n const sub1 = this.workspaces.activeId$.pipe(skip(1)).subscribe(() => {\n this.store.dispatch([\n new ReloadPageEntries({}, new FolderPage(this.store.selectSnapshot(DriveState.rootFolder))),\n new UserSpaceUsageChanged(),\n new LoadUserFolders()\n ]);\n });\n const sub3 = this.workspaces.activeWorkspace$.pipe(filter(w => !!w))\n .subscribe(workspace => {\n this.store.dispatch(new SetWorkspace(workspace));\n });\n const sub2 = this.workspaces.bindToNotificationClick();\n this.subscriptions.push(sub1, sub2, sub3);\n }\n}\n","<files-grid-item\n *ngFor=\"let entry of entries; trackBy: trackById\"\n [entry]=\"entry\"\n [contextMenu]=\"{type: 'entry', entry: entry}\"\n [disableContextMenu]=\"disableInteractions\"\n [folderDropTarget]=\"entry\"\n></files-grid-item>","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { DriveEntry } from '../../models/drive-entry';\n\n@Component({\n selector: 'files-grid',\n templateUrl: './files-grid.component.html',\n styleUrls: ['./files-grid.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilesGridComponent {\n @Input() entries: DriveEntry[];\n @Input() disableInteractions = false;\n public trackById(index: number, entry: DriveEntry): number {\n return entry.id;\n }\n}\n","<table class=\"material-table\">\n <thead>\n <tr>\n <th table-sort-header class=\"name-column\" trans>Name</th>\n <th table-sort-header=\"updated_at\" class=\"last-updated-column\" trans>Last Updated</th>\n <th table-sort-header=\"file_size\" class=\"size-column\" trans>Size</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let file of entries; trackBy: trackById\" class=\"drive-entry\" [contextMenu]=\"{type: 'entry', entry: file}\" [disableContextMenu]=\"disableInteractions\" [attr.data-id]=\"file.id\" [folderDropTarget]=\"file\">\n <td data-label=\"Name\" class=\"name-column\">\n <div class=\"file-name-container\">\n <file-thumbnail [file]=\"file\"></file-thumbnail>\n <div class=\"file-name\">\n <span class=\"entry-name\">{{file.name}}</span>\n <mat-icon class=\"star-icon\" svgIcon=\"star\" *ngIf=\"isStarred(file)\" [matTooltip]=\"'Starred' | trans\"></mat-icon>\n </div>\n </div>\n </td>\n <td data-label=\"Last Updated\" class=\"last-updated-column\">{{file.updated_at | formattedDate}}</td>\n <td data-label=\"Size\" class=\"size-column\">{{file.file_size | formattedFileSize}}</td>\n </tr>\n </tbody>\n</table>\n","import {\n ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit\n} from '@angular/core';\nimport { DriveEntry } from '../../models/drive-entry';\nimport { Store } from '@ngxs/store';\nimport { ReloadPageEntries } from '../../../state/actions/commands';\nimport { DatatableService } from '@common/datatable/datatable.service';\nimport { filter } from 'rxjs/operators';\n\n@Component({\n selector: 'files-list',\n templateUrl: './files-list.component.html',\n styleUrls: ['./files-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DatatableService],\n})\nexport class FilesListComponent implements OnInit, OnDestroy {\n @Input() entries: DriveEntry[];\n @Input() disableInteractions = false;\n\n constructor(private store: Store, private datatable: DatatableService<DriveEntry>) {}\n\n ngOnInit() {\n this.datatable.init({\n disableSort: this.disableInteractions,\n });\n\n this.datatable.sort$\n .pipe(filter(v => !!Object.keys(v).length))\n .subscribe(value => {\n this.store.dispatch(new ReloadPageEntries(value as any));\n });\n }\n\n ngOnDestroy() {\n this.datatable.destroy();\n }\n\n public isStarred(entry: DriveEntry): boolean {\n if ( ! entry.tags) return false;\n return !!entry.tags.find(tag => tag.name === 'starred');\n }\n\n public trackById(index: number, entry: DriveEntry): number {\n return entry.id;\n }\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'no-recent-entries',\n templateUrl: './no-recent-entries.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NoRecentEntriesComponent {\n}\n","<div class=\"no-results-message\">\n <svg-image name=\"time-management\" class=\"icon\"></svg-image>\n <div class=\"main\" trans>No recent entries.</div>\n <div class=\"secondary\" trans>You have not uploaded any files or folders yet.</div>\n</div>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'no-trashed-entries',\n templateUrl: './no-trashed-entries.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NoTrashedEntriesComponent {\n}\n","<div class=\"no-results-message\">\n <svg-image name=\"throw-away\" class=\"icon\"></svg-image>\n <div class=\"main\" trans>Trash is empty.</div>\n <div class=\"secondary\" trans>There are no files or folders in your trash currently.</div>\n</div>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'no-starred-entries',\n templateUrl: './no-starred-entries.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NoStarredEntriesComponent {\n}\n","<div class=\"no-results-message\">\n <svg-image name=\"loving-it\" class=\"icon\"></svg-image>\n <div class=\"main\" trans>Nothing is starred.</div>\n <div class=\"secondary\" trans>Add stars to files and folders that you want to easily find later.</div>\n</div>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'no-shared-entries',\n templateUrl: './no-shared-entries.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NoSharedEntriesComponent {\n}\n","<div class=\"no-results-message\">\n <svg-image name=\"share\" class=\"icon\"></svg-image>\n <div class=\"main\" trans>Shared with me.</div>\n <div class=\"secondary\" trans>Files and folders other people have shared with you.</div>\n</div>\n","<div class=\"no-results-message\" *ngIf=\"noQueryOrFilters$ | async\">\n <svg-image name=\"file-searching\" class=\"icon\"></svg-image>\n <div class=\"main\" trans>Begin typing or select a filter to search</div>\n <div class=\"secondary\" trans>Search for files, folders and other content.</div>\n</div>\n\n<div class=\"no-results-message\" *ngIf=\"!(noQueryOrFilters$ | async)\">\n <svg-image name=\"file-searching\" class=\"icon\"></svg-image>\n <div class=\"main\" trans>No matches found.</div>\n <div class=\"secondary\" trans>Try another search with different query or filters.</div>\n</div>\n","import {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\nimport {Store} from '@ngxs/store';\nimport {DriveState} from '../../state/drive-state';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\n@Component({\n selector: 'no-search-entries',\n templateUrl: './no-search-entries.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NoSearchEntriesComponent {\n noQueryOrFilters$: Observable<boolean>;\n\n constructor(private store: Store) {\n this.noQueryOrFilters$ = this.store\n .select(DriveState.meta)\n .pipe(map(m => !m.query && !m.filters));\n }\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, ElementRef, AfterViewInit, Inject } from '@angular/core';\nimport { DRIVE_UPLOAD_INPUT_CONFIG } from '../../upload-input-config';\nimport { UploadInputConfig } from '@common/uploads/upload-input-config';\nimport { Store } from '@ngxs/store';\nimport { UploadFiles } from '../../state/actions/commands';\nimport { openUploadWindow } from '@common/uploads/utils/open-upload-window';\n\n@Component({\n selector: 'upload-dropzone',\n templateUrl: './upload-dropzone.component.html',\n styleUrls: ['./upload-dropzone.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadDropzoneComponent implements AfterViewInit {\n @ViewChild('clickTarget', { static: true }) clickTarget: ElementRef;\n\n constructor (\n private store: Store,\n @Inject(DRIVE_UPLOAD_INPUT_CONFIG) private uploadConfig: UploadInputConfig,\n ) {}\n\n ngAfterViewInit() {\n this.clickTarget.nativeElement.addEventListener('click', () => {\n openUploadWindow(this.uploadConfig).then(files => {\n this.store.dispatch(new UploadFiles(files));\n });\n });\n }\n}\n","<div class=\"animation-circle\"></div>\n<div class=\"content-circle\" #clickTarget>\n <mat-icon class=\"main-icon\" svgIcon=\"upload-custom\"></mat-icon>\n <div class=\"text initial-text\">\n <div class=\"primary\" trans>Drop files or folders here</div>\n <div class=\"secondary\" trans>or click to upload.</div>\n </div>\n</div>","import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'no-folder-entries',\n templateUrl: './no-folder-entries.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NoFolderEntriesComponent {\n}\n","<upload-dropzone></upload-dropzone>","<files-grid [entries]=\"entries$ | async\" *ngIf=\"(viewMode$ | async) === 'grid'; else filesList\"></files-grid>\n<ng-template #filesList>\n <files-list [entries]=\"entries$ | async\"></files-list>\n</ng-template>\n\n<ng-container [ngSwitch]=\"activePageName$ | async\" *ngIf=\"noEntries | async\">\n <no-recent-entries *ngSwitchCase=\"'recent'\"></no-recent-entries>\n <no-trashed-entries *ngSwitchCase=\"'trash'\"></no-trashed-entries>\n <no-starred-entries *ngSwitchCase=\"'starred'\"></no-starred-entries>\n <no-shared-entries *ngSwitchCase=\"'shares'\"></no-shared-entries>\n <no-search-entries *ngSwitchCase=\"'search'\"></no-search-entries>\n <no-folder-entries *ngSwitchDefault></no-folder-entries>\n</ng-container>","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n OnDestroy,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { DriveState } from '../../state/drive-state';\nimport { DriveEntry } from '../../files/models/drive-entry';\nimport { Observable, Subscription } from 'rxjs';\nimport { DrivePageType } from '../../state/models/available-pages';\nimport { Keybinds } from '@common/core/keybinds/keybinds.service';\nimport {\n DeleteSelectedEntries,\n DeleteTrashedEntriesForever,\n OpenConfirmDialog,\n SelectAllEntries\n} from '../../state/actions/commands';\nimport { EntryDoubleTapped } from '../../state/actions/events';\nimport { DRIVE_PAGE_NAMES } from '../../state/models/drive-page';\n\n@Component({\n selector: 'entries-container',\n templateUrl: './entries-container.component.html',\n styleUrls: ['./entries-container.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [Keybinds],\n})\nexport class EntriesContainerComponent implements OnInit, OnDestroy {\n @HostBinding('attr.tabindex') tabindex = 0;\n @Select(DriveState.entries) entries$: Observable<DriveEntry[]>;\n @Select(DriveState.entriesEmpty) noEntries: Observable<boolean>;\n @Select(DriveState.viewMode) viewMode$: Observable<'list'|'grid'>;\n @Select(DriveState.activePageName) activePageName$: Observable<DrivePageType>;\n private keybindSub: Subscription;\n\n constructor(\n private store: Store,\n private el: ElementRef,\n private keybinds: Keybinds,\n ) {}\n\n ngOnInit() {\n this.keybindSub = this.keybinds.listenOn(this.el.nativeElement);\n this.keybinds.addWithPreventDefault('ctrl+a', () => {\n this.store.dispatch(new SelectAllEntries());\n });\n this.keybinds.addWithPreventDefault('delete', () => {\n if (this.store.selectSnapshot(DriveState.activePageName) === DRIVE_PAGE_NAMES.TRASH) {\n this.store.dispatch(new OpenConfirmDialog({\n title: 'Delete Forever',\n body: 'This will permanently delete selected items.',\n bodyBold: 'This action can not be undone.',\n ok: 'Delete Forever',\n }, new DeleteTrashedEntriesForever()));\n } else {\n this.store.dispatch(new DeleteSelectedEntries());\n }\n });\n this.keybinds.addWithPreventDefault('enter', () => {\n this.store.dispatch(new EntryDoubleTapped(this.store.selectSnapshot(DriveState.selectedEntry)));\n });\n }\n\n ngOnDestroy() {\n this.keybindSub.unsubscribe();\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CURRENT_PREVIEW_FILE = new InjectionToken<any>('CURRENT_PREVIEW_FILE');\n","import { InjectionToken } from '@angular/core';\nimport { FileEntry } from '@common/uploads/types/file-entry';\n\nexport type PreviewUrlTransformer = (entry: FileEntry) => string;\n\nexport const PREVIEW_URL_TRANSFORMER = new InjectionToken<PreviewUrlTransformer>('PREVIEW_URL_TRANSFORMER', {\n factory: () => {\n return entry => entry.url;\n },\n providedIn: 'root',\n});\n","import { EventEmitter, HostBinding, Inject, Directive } from '@angular/core';\nimport { CURRENT_PREVIEW_FILE } from './current-preview-file';\nimport { FileEntry } from '../uploads/types/file-entry';\nimport { PREVIEW_URL_TRANSFORMER, PreviewUrlTransformer } from './preview-url-transformer';\nimport { Settings } from '../core/config/settings.service';\nimport { Observable } from 'rxjs';\nimport { AppHttpClient } from '../core/http/app-http-client.service';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { CurrentUser } from '../auth/current-user';\n\n@Directive()\nexport abstract class BaseFilePreview {\n @HostBinding('class.file-preview-wrapper') filePreviewWrapper = true;\n public download = new EventEmitter();\n\n constructor(\n @Inject(CURRENT_PREVIEW_FILE) protected file: FileEntry,\n @Inject(PREVIEW_URL_TRANSFORMER) protected transformer: PreviewUrlTransformer,\n protected settings: Settings,\n protected http: AppHttpClient,\n protected sanitizer: DomSanitizer,\n protected currentUser: CurrentUser,\n ) {}\n\n public getSrc(): string {\n return this.transformer(this.file);\n }\n\n public getSafeSrc(): SafeResourceUrl {\n return this.sanitizer.bypassSecurityTrustResourceUrl(this.getSrc());\n }\n\n public getContents(): Observable<string> {\n return this.http.get(this.getSrc(), null, {responseType: 'text'});\n }\n}\n","<div class=\"panel preview-object\">\n <div class=\"message\">{{getMessage() | trans}}</div>\n <button mat-raised-button color=\"accent\" (click)=\"download.emit()\" *ngIf=\"download.observers.length\" trans>Download</button>\n</div>\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {BaseFilePreview} from '../base-file-preview';\n\n@Component({\n selector: 'default-preview',\n templateUrl: './default-preview.component.html',\n styleUrls: ['./default-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefaultPreviewComponent extends BaseFilePreview {\n @Input() message: string;\n\n public getMessage() {\n return this.message || 'No file preview available.';\n }\n}\n","<default-preview *ngIf=\"fileTooLarge$ | async; else textPreview\" message=\"This file is too large to preview.\"></default-preview>\n<ng-template #textPreview>\n <div class=\"text-wrapper preview-object\">\n <pre>{{ content$ | async }}</pre>\n </div>\n</ng-template>","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {BaseFilePreview} from '../base-file-preview';\n\nconst FIVE_MB = 5242880;\n\n@Component({\n selector: 'text-preview',\n templateUrl: './text-preview.component.html',\n styleUrls: ['./text-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextPreviewComponent extends BaseFilePreview implements OnInit {\n public content$ = new BehaviorSubject('');\n public fileTooLarge$ = new BehaviorSubject(false);\n\n ngOnInit() {\n if (this.file.file_size > FIVE_MB) {\n this.fileTooLarge$.next(true);\n } else {\n this.loadFileContents();\n }\n }\n\n private loadFileContents() {\n this.getContents()\n .subscribe(content => {\n this.content$.next(content);\n });\n }\n}\n","<audio #playerEl controls=\"controls\" class=\"preview-object\" [class.hidden]=\"invalidMedia\" controlsList=\"nodownload noremoteplayback\"></audio>\n\n<default-preview *ngIf=\"invalidMedia\"></default-preview>","import {ChangeDetectionStrategy, Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {BaseFilePreview} from '../base-file-preview';\n\n@Component({\n selector: 'audio-preview',\n templateUrl: './audio-preview.component.html',\n styleUrls: ['./audio-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AudioPreviewComponent extends BaseFilePreview implements OnInit {\n @ViewChild('playerEl', { static: true }) playerEl: ElementRef;\n public invalidMedia = false;\n\n ngOnInit() {\n this.invalidMedia = !this.canPlayVideo();\n\n if ( ! this.invalidMedia) {\n const source = document.createElement('source');\n source.src = this.getSrc();\n source.type = this.file.mime;\n this.player().appendChild(source);\n this.player().play();\n }\n }\n\n protected canPlayVideo(): boolean {\n return !!this.player().canPlayType(this.file.mime);\n }\n\n protected player() {\n return this.playerEl.nativeElement as HTMLVideoElement|HTMLAudioElement;\n }\n}\n","<video\n #playerEl\n controls=\"controls\"\n class=\"preview-object\"\n [class.hidden]=\"invalidMedia\"\n type=\"video/mp4\"\n controlsList=\"nodownload noremoteplayback\"\n playsinline\n></video>\n\n<default-preview *ngIf=\"invalidMedia\"></default-preview>\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {AudioPreviewComponent} from '../audio-preview/audio-preview.component';\n\n@Component({\n selector: 'video-preview',\n templateUrl: './video-preview.component.html',\n styleUrls: ['./video-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VideoPreviewComponent extends AudioPreviewComponent {\n}\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {BaseFilePreview} from '../base-file-preview';\n\n@Component({\n selector: 'image-preview',\n templateUrl: './image-preview.component.html',\n styleUrls: ['./image-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImagePreviewComponent extends BaseFilePreview {}\n","<img [src]=\"getSafeSrc()\" class=\"preview-object\">","import {ChangeDetectionStrategy, Component, HostBinding,} from '@angular/core';\nimport {BaseFilePreview} from '../base-file-preview';\n\n@Component({\n selector: 'pdf-preview',\n templateUrl: './pdf-preview.component.html',\n styleUrls: ['./pdf-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdfPreviewComponent extends BaseFilePreview {\n @HostBinding('class') className = 'preview-object';\n\n public getSrc() {\n return super.getSrc() + '#toolbar=0';\n }\n}\n","<iframe [src]=\"getSafeSrc()\"></iframe>","<ng-container *ngIf=\"!(showDefaultPreview$ | async); else defaultPreview\">\n <iframe class=\"preview-object\" #iframe></iframe>\n <div class=\"pop-out-block office-block\" (click)=\"openInNewWindow()\"></div>\n</ng-container>\n<ng-template #defaultPreview>\n <default-preview></default-preview>\n</ng-template>\n<loading-indicator [isVisible]=\"loading$ | async\" class=\"overlay\"></loading-indicator>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, ViewChild } from '@angular/core';\nimport { BaseFilePreview } from '../base-file-preview';\nimport { BehaviorSubject } from 'rxjs';\nimport { GenericBackendResponse } from '@common/core/types/backend-response';\nimport { isAbsoluteUrl } from '@common/core/utils/is-absolute-url';\n\n@Component({\n selector: 'google-docs-viewer',\n templateUrl: './google-docs-viewer.component.html',\n styleUrls: ['./google-docs-viewer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GoogleDocsViewerComponent extends BaseFilePreview implements AfterViewInit {\n @ViewChild('iframe') iframe: ElementRef<HTMLIFrameElement>;\n public loading$ = new BehaviorSubject(true);\n public showDefaultPreview$ = new BehaviorSubject(false);\n private timeoutRef: any;\n\n ngAfterViewInit() {\n // google docs viewer only supports files up to 25MB\n if (this.file.file_size > 25000000) {\n return this.showDefaultPreview();\n }\n\n this.iframe.nativeElement.onload = () => {\n clearTimeout(this.timeoutRef);\n this.stopLoading();\n };\n\n this.getIframeSrc().then(url => {\n this.iframe.nativeElement.src = url;\n }).catch(() => {\n this.showDefaultPreview();\n });\n\n // if preview iframe is not loaded\n // after 5 seconds, bail and show default preview\n this.timeoutRef = setTimeout(() => {\n this.showDefaultPreview();\n }, 5000);\n }\n\n public stopLoading() {\n this.loading$.next(false);\n }\n\n public showDefaultPreview() {\n this.stopLoading();\n this.showDefaultPreview$.next(true);\n }\n\n public openInNewWindow() {\n window.open(window.location.href, '_blank');\n }\n\n private getIframeSrc(): Promise<string> {\n return new Promise((resolve, reject) => {\n let previewUrl = this.getSrc();\n\n // if we're not trying to preview shareable link we will need to generate\n // preview token, otherwise google won't be able to access this file\n if (previewUrl.indexOf('shareable_link') === -1) {\n this.http.post<GenericBackendResponse<{preview_token: string}>>(`uploads/${this.file.id}/add-preview-token`).subscribe(response => {\n previewUrl += `?preview_token=${response.preview_token}`;\n resolve(this.getFullPreviewUrl(previewUrl));\n }, () => reject);\n } else {\n resolve(this.getFullPreviewUrl(previewUrl));\n }\n });\n }\n\n private getFullPreviewUrl(previewUrl: string) {\n // https://docs.google.com/gview?embedded=true&url=\n previewUrl = isAbsoluteUrl(previewUrl) ? previewUrl : this.settings.getBaseUrl() + '/' + previewUrl;\n return 'https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(previewUrl);\n }\n}\n","import { InjectionToken, Injectable } from '@angular/core';\nimport { TextPreviewComponent } from './text-preview/text-preview.component';\nimport { VideoPreviewComponent } from './video-preview/video-preview.component';\nimport { ImagePreviewComponent } from './image-preview/image-preview.component';\nimport { PdfPreviewComponent } from './pdf-preview/pdf-preview.component';\nimport { AudioPreviewComponent } from './audio-preview/audio-preview.component';\nimport { GoogleDocsViewerComponent } from './google-docs-viewer/google-docs-viewer.component';\nimport {DefaultPreviewComponent} from './default-preview/default-preview.component';\n\nexport const AVAILABLE_PREVIEWS = new InjectionToken<any>('AVAILABLE_PREVIEWS');\n\n@Injectable()\nexport class DefaultPreviews {\n text = TextPreviewComponent;\n video = VideoPreviewComponent;\n audio = AudioPreviewComponent;\n image = ImagePreviewComponent;\n pdf = PdfPreviewComponent;\n spreadsheet = GoogleDocsViewerComponent;\n powerPoint = GoogleDocsViewerComponent;\n word = GoogleDocsViewerComponent;\n 'text/rtf' = DefaultPreviewComponent;\n}\n\n","import {Inject, Injectable, Injector} from '@angular/core';\nimport {FileEntry} from '../uploads/types/file-entry';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {AVAILABLE_PREVIEWS, DefaultPreviews} from './available-previews';\nimport {ComponentPortal, PortalInjector} from '@angular/cdk/portal';\nimport {CURRENT_PREVIEW_FILE} from './current-preview-file';\nimport {DefaultPreviewComponent} from './default-preview/default-preview.component';\nimport {filter} from 'rxjs/operators';\nimport {PREVIEW_URL_TRANSFORMER, PreviewUrlTransformer} from './preview-url-transformer';\n\ninterface PreviewFilesMeta {\n entry?: FileEntry;\n pointer?: number;\n total?: number;\n haveNext?: boolean;\n havePrevious?: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PreviewFilesService {\n private files: FileEntry[] = [];\n private portal = new BehaviorSubject(null);\n private meta: BehaviorSubject<PreviewFilesMeta> = new BehaviorSubject({});\n private previewUriTransformer: PreviewUrlTransformer | null = null;\n public download = new Subject();\n\n constructor(\n @Inject(AVAILABLE_PREVIEWS) private availablePreviews: DefaultPreviews,\n private injector: Injector\n ) {}\n\n public pagination(): Observable<PreviewFilesMeta> {\n return this.meta.pipe(filter(data => data && !!data.entry));\n }\n\n public getCurrent(): FileEntry {\n return this.meta.value.entry;\n }\n\n public getAllEntries() {\n return this.files;\n }\n\n public getPortal(): Observable<ComponentPortal<any>> {\n return this.portal.asObservable();\n }\n\n public showNext() {\n if (!this.meta.value.haveNext) return;\n this.updateMeta('next');\n this.updatePortal();\n }\n\n public showPrevious() {\n if (!this.meta.value.havePrevious) return;\n this.updateMeta('previous');\n this.updatePortal();\n }\n\n private updateMeta(dir?: 'next' | 'previous' | number) {\n let newPointer = 0;\n\n if (typeof dir === 'string') {\n const oldPointer = this.meta.value.pointer;\n newPointer = dir === 'next' ? oldPointer + 1 : oldPointer - 1;\n } else if (typeof dir === 'number') {\n newPointer = dir;\n }\n\n this.meta.next({\n pointer: newPointer,\n entry: this.files[newPointer],\n total: this.files.length,\n haveNext: newPointer + 1 < this.files.length,\n havePrevious: newPointer - 1 > -1,\n });\n }\n\n private updatePortal() {\n const file = this.getCurrent();\n const comp =\n this.availablePreviews[file?.mime] ||\n this.availablePreviews[file?.type] ||\n DefaultPreviewComponent;\n this.portal.next(new ComponentPortal(comp, null, this.createInjector()));\n }\n\n public set(files: FileEntry[], activeFile?: number) {\n if (!files || files.length === 0) return;\n this.files = files.filter(entry => entry.type !== 'folder');\n this.updateMeta(activeFile);\n this.updatePortal();\n }\n\n private createInjector(): PortalInjector {\n const injectionTokens = new WeakMap();\n\n // set currently active preview file\n injectionTokens.set(CURRENT_PREVIEW_FILE, this.getCurrent());\n\n // override preview backend uri, if specified\n if (this.previewUriTransformer) {\n injectionTokens.set(PREVIEW_URL_TRANSFORMER, this.previewUriTransformer);\n }\n\n return new PortalInjector(this.injector, injectionTokens);\n }\n\n public destroy() {\n this.meta.next({});\n this.files = null;\n this.portal.next(null);\n }\n\n /**\n * Provide transformer function for preview file backend url.\n * (for changing base uri, adding url params etc)\n */\n public setPreviewUriTransformer(transformer: PreviewUrlTransformer) {\n this.previewUriTransformer = transformer;\n }\n}\n","<mat-icon svgIcon=\"password-custom\"></mat-icon>\n<form class=\"content\" (ngSubmit)=\"submitPassword()\" ngNativeValidate>\n <div class=\"message\" trans>The link you are trying to access is password protected.</div>\n <div class=\"input-container\">\n <label for=\"password\" class=\"hidden\" trans>Password</label>\n <input type=\"password\" id=\"password\" placeholder=\"Password\" [formControl]=\"passwordControl\" trans-placeholder required>\n </div>\n <div class=\"button-container\">\n <div class=\"error\" *ngIf=\"passwordError$ | async\" trans>Password does not match.</div>\n <button type=\"submit\" mat-raised-button color=\"accent\" trans>Enter</button>\n </div>\n</form>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\nimport { ShareableLinksApiService } from '../../../sharing/links/shareable-links-api.service';\nimport { ShareableLink } from '../../../sharing/links/models/shareable-link';\n\n@Component({\n selector: 'link-preview-password-panel',\n templateUrl: './link-preview-password-panel.component.html',\n styleUrls: ['./link-preview-password-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LinkPreviewPasswordPanelComponent {\n public passwordControl = new FormControl();\n public passwordError$ = new BehaviorSubject(false);\n\n @Input() link: ShareableLink;\n @Output() passwordValid = new EventEmitter(null);\n\n constructor(private links: ShareableLinksApiService) {}\n\n public submitPassword() {\n this.links.checkPassword(this.link.id, this.passwordControl.value)\n .subscribe(response => {\n this.handlePasswordCheck(response.matches);\n }, () => {});\n }\n\n private handlePasswordCheck(matches: boolean) {\n this.passwordError$.next(!matches);\n\n if (matches) {\n this.passwordValid.emit(this.passwordControl.value);\n }\n }\n}\n","<button mat-icon-button class=\"back-button\" (click)=\"closed.emit(true)\" *ngIf=\"showCloseButton\">\n <mat-icon svgIcon=\"arrow-back\"></mat-icon>\n</button>\n<ng-container *ngIf=\"previewFiles.pagination() | async as pagination\">\n <div class=\"entry-name\">\n <file-icon [type]=\"pagination.entry.type\"></file-icon>\n {{pagination.entry.name}}\n </div>\n\n <ng-container *ngIf=\"previewFiles.pagination() | async as pagination\">\n <div class=\"navigation\">\n <button mat-icon-button class=\"previous\" [disabled]=\"!pagination.havePrevious\" (click)=\"previewFiles.showPrevious()\">\n <mat-icon svgIcon=\"keyboard-arrow-left\"></mat-icon>\n </button>\n\n <span class=\"meta\">{{pagination.pointer + 1}} {{'of' | trans}} {{pagination.total}}</span>\n\n <button mat-icon-button class=\"next\" [disabled]=\"!pagination.haveNext\" (click)=\"previewFiles.showNext()\">\n <mat-icon svgIcon=\"keyboard-arrow-right\"></mat-icon>\n </button>\n </div>\n </ng-container>\n\n <div class=\"actions\">\n <button mat-icon-button (click)=\"downloadFiles()\" [disabled]=\"disableDownload\">\n <mat-icon svgIcon=\"file-download\"></mat-icon>\n </button>\n <ng-content></ng-content>\n </div>\n</ng-container>\n<a routerLink=\"/drive\" class=\"logo\" *ngIf=\"showLogo && settings.has('branding.logo_light')\">\n <img *ngIf=\"showLogo && settings.get('branding.logo_light')\" [src]=\"settings.get('branding.logo_light')\">\n</a>\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core';\nimport { PreviewFilesService } from '@common/file-preview/preview-files.service';\nimport { Settings } from '@common/core/config/settings.service';\n\n@Component({\n selector: 'file-preview-toolbar',\n templateUrl: './file-preview-toolbar.component.html',\n styleUrls: ['./file-preview-toolbar.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilePreviewToolbarComponent {\n @Input() showLogo = false;\n @Input() disableDownload = false;\n @Input() showCloseButton = false;\n\n @Output() closed = new EventEmitter();\n\n constructor(\n public previewFiles: PreviewFilesService,\n public settings: Settings,\n ) {}\n\n public downloadFiles() {\n this.previewFiles.download.next();\n }\n}\n","<ng-container *ngIf=\"previewFiles.getPortal() | async as portal\">\n <ng-template [cdkPortalOutlet]=\"portal\" (attached)=\"listenForDownloadClick($event)\"></ng-template>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n Input,\n OnChanges,\n OnDestroy,\n} from '@angular/core';\nimport {FileEntry} from '../../uploads/types/file-entry';\nimport {PreviewFilesService} from '../preview-files.service';\nimport {BaseFilePreview} from '../base-file-preview';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'preview-container',\n templateUrl: './preview-container.component.html',\n styleUrls: ['./preview-container.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PreviewContainerComponent implements OnChanges, OnDestroy {\n @Input() files: FileEntry[];\n @Input() activeFile: number;\n @Input() disableDownload = false;\n private downloadSub: Subscription;\n\n constructor(public previewFiles: PreviewFilesService) {}\n\n ngOnChanges(changes) {\n this.previewFiles.set(this.files, this.activeFile);\n }\n\n ngOnDestroy() {\n this.previewFiles.destroy();\n if (this.downloadSub) this.downloadSub.unsubscribe();\n }\n\n public listenForDownloadClick(comp: ComponentRef<BaseFilePreview>) {\n if (this.downloadSub) this.downloadSub.unsubscribe();\n if (!this.disableDownload) {\n this.downloadSub = comp.instance.download.subscribe(() => {\n this.previewFiles.download.next();\n });\n }\n }\n}\n","<file-preview-toolbar [showCloseButton]=\"true\" (closed)=\"closeOverlay()\" [disableDownload]=\"!canDownload()\">\n <button mat-icon-button (click)=\"openContextMenu()\" #moreOptionsButton *ngIf=\"!data.hideMoreOptionsBtn\">\n <mat-icon svgIcon=\"more-vert\"></mat-icon>\n </button>\n</file-preview-toolbar>\n<preview-container [files]=\"data.entries\" [activeFile]=\"data.activeEntry\" [disableDownload]=\"!canDownload()\" #previewContainer></preview-container>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Inject, OnDestroy, ViewChild, } from '@angular/core';\nimport { DriveEntry } from '../../files/models/drive-entry';\nimport { OverlayPanelRef } from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport { OVERLAY_PANEL_DATA } from '@common/core/ui/overlay-panel/overlay-panel-data';\nimport { DriveContextMenuComponent } from '../../context-actions/components/drive-context-menu/drive-context-menu.component';\nimport { ContextMenu } from '@common/core/ui/context-menu/context-menu.service';\nimport { PreviewFilesService } from '@common/file-preview/preview-files.service';\nimport { DownloadEntries } from '../../state/actions/commands';\nimport { Store } from '@ngxs/store';\nimport { Subscription } from 'rxjs';\nimport { CurrentUser } from '@common/auth/current-user';\nimport { ShareableLink } from '../../sharing/links/models/shareable-link';\n\nexport interface FilePreviewOverlayData {\n entries: DriveEntry[];\n activeEntry?: number;\n shareableLink?: ShareableLink;\n password?: string;\n hideMoreOptionsBtn?: boolean;\n}\n\n@Component({\n selector: 'file-preview-overlay',\n templateUrl: './file-preview-overlay.component.html',\n styleUrls: ['./file-preview-overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilePreviewOverlayComponent implements AfterViewInit, OnDestroy {\n @ViewChild('previewContainer', { read: ElementRef, static: true }) previewContainer: ElementRef;\n @ViewChild('moreOptionsButton', { read: ElementRef }) optionsButton: ElementRef;\n private downloadSub: Subscription;\n\n constructor(\n private store: Store,\n private el: ElementRef,\n private contextMenu: ContextMenu,\n private overlayRef: OverlayPanelRef,\n private previewFiles: PreviewFilesService,\n private currentUser: CurrentUser,\n @Inject(OVERLAY_PANEL_DATA) public data: FilePreviewOverlayData\n ) {}\n\n ngAfterViewInit() {\n this.bindToDownload();\n // prevent ghost click from closing preview overlay\n // when on mobile and single tap opens preview\n setTimeout(() => {\n this.previewContainer.nativeElement.addEventListener('click', e => {\n if ( ! e.target.closest('.preview-object')) {\n this.overlayRef.close();\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.downloadSub.unsubscribe();\n }\n\n public openContextMenu() {\n const origin = this.optionsButton.nativeElement;\n this.contextMenu.open(DriveContextMenuComponent, origin, {data: {entry: this.previewFiles.getCurrent()}});\n }\n\n public closeOverlay() {\n this.overlayRef.close();\n }\n\n public canDownload() {\n return this.data.entries.every(entry => {\n if ( ! entry.users) entry.users = [];\n const user = entry.users && entry.users.find(u => u.id === this.currentUser.get('id'));\n const userHasDownloadPermission = user && (user.owns_entry || user.entry_permissions.download);\n return this.data.shareableLink?.allow_download || userHasDownloadPermission;\n });\n }\n\n private bindToDownload() {\n this.downloadSub = this.previewFiles.download.subscribe(() => {\n const entries = this.previewFiles.getCurrent();\n this.store.dispatch(new DownloadEntries([entries], this.data.shareableLink, this.data.password));\n });\n }\n}\n","<material-navbar></material-navbar>\n\n<div class=\"toolbar\">\n <div class=\"breadcrumb\">\n <button mat-icon-button *ngIf=\"isSubFolder()\" (click)=\"openFolder()\" class=\"home-button\">\n <mat-icon svgIcon=\"home\" class=\"action-icon\"></mat-icon>\n </button>\n <ng-container *ngFor=\"let folder of breadcrumb$ | async; last as last;\">\n <div class=\"breadcrumb-item\" (click)=\"openFolder(folder)\">{{folder.name}}</div>\n <mat-icon class=\"separator\" svgIcon=\"keyboard-arrow-right\" *ngIf=\"!last\"></mat-icon>\n </ng-container>\n </div>\n\n <div class=\"actions\">\n <entries-sort-button [formControl]=\"sortFormControl\"></entries-sort-button>\n\n <span class=\"action-separator\"></span>\n\n <ng-container *ngIf=\"viewMode$ | async as viewMode\">\n <button mat-icon-button (click)=\"toggleViewMode()\" class=\"view-toggle-button\" [matTooltip]=\"(viewMode === 'list' ? 'Grid view' : 'List view') | trans\">\n <mat-icon [svgIcon]=\"viewMode === 'list' ? 'view-list' : 'view-module'\" class=\"action-icon\"></mat-icon>\n </button>\n </ng-container>\n\n <button mat-icon-button (click)=\"download()\" *ngIf=\"data.link.allow_download\" [matTooltip]=\"'Download all' | trans\">\n <mat-icon svgIcon=\"file-download\" class=\"action-icon\"></mat-icon>\n </button>\n\n <ng-content></ng-content>\n </div>\n</div>\n\n<ad-host slot=\"ads.file-preview\" class=\"folder-preview-vert-host\"></ad-host>\n\n<div class=\"files-container\" #filesContainer (click)=\"onClick($event)\">\n <ng-container *ngIf=\"pagination$ | async as pagination\">\n <files-grid [entries]=\"pagination.data\" [disableInteractions]=\"true\" *ngIf=\"(viewMode$ | async) === 'grid'; else filesList\"></files-grid>\n <ng-template #filesList>\n <files-list [entries]=\"pagination.data\" [disableInteractions]=\"true\"></files-list>\n </ng-template>\n <no-results-message *ngIf=\"!pagination.data.length\">\n <span primary-text trans>Folder Is Empty</span>\n <span secondary-text trans>No files have been uploaded to this folder yet.</span>\n </no-results-message>\n </ng-container>\n</div>\n\n<loading-indicator [isVisible]=\"loading$ | async\" class=\"overlay\"></loading-indicator>\n","import {\n Component, ViewEncapsulation, ChangeDetectionStrategy, Input, ViewChild, ElementRef, OnInit, OnChanges, NgZone,\n} from '@angular/core';\nimport { Select, Store } from '@ngxs/store';\nimport { DownloadEntries, SetViewMode } from '../../state/actions/commands';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { FilePreviewOverlayComponent } from '../file-preview-overlay/file-preview-overlay.component';\nimport { Router } from '@angular/router';\nimport { FormControl } from '@angular/forms';\nimport { GetLinkData, ShareableLinksApiService } from '../../sharing/links/shareable-links-api.service';\nimport { finalize } from 'rxjs/operators';\nimport { SortValue } from '../../entries/available-sorts';\nimport { InfiniteScroll } from '@common/core/ui/infinite-scroll/infinite.scroll';\nimport { PaginationResponse } from '@common/core/types/pagination/pagination-response';\nimport { FileEntry } from '@common/uploads/types/file-entry';\nimport { OverlayPanel } from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport { DriveState } from '../../state/drive-state';\n\n@Component({\n selector: 'folder-preview',\n templateUrl: './folder-preview.component.html',\n styleUrls: ['./folder-preview.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FolderPreviewComponent extends InfiniteScroll implements OnChanges, OnInit {\n @Input() data: GetLinkData;\n @Input() password: string;\n @ViewChild('filesContainer', { static: true }) filesContainer: ElementRef<HTMLDivElement>;\n @Select(DriveState.viewMode) viewMode$: Observable<'list'|'grid'>;\n\n get folder() {\n return this.data.link.entry;\n }\n\n get children() {\n return this.pagination$.value.data;\n }\n\n public loading$ = new BehaviorSubject(false);\n public breadcrumb$: BehaviorSubject<FileEntry[]> = new BehaviorSubject([]);\n public pagination$: BehaviorSubject<PaginationResponse<FileEntry>> = new BehaviorSubject(null);\n private allFolders = {};\n public sortFormControl = new FormControl({\n column: 'updated_at',\n direction: 'desc',\n });\n\n constructor(\n private store: Store,\n private overlay: OverlayPanel,\n private router: Router,\n private linkApi: ShareableLinksApiService,\n protected zone: NgZone,\n protected el: ElementRef,\n ) {\n super();\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.sortFormControl.valueChanges.subscribe((value: SortValue) => {\n if (value) {\n this.loadChildren({}, true);\n }\n });\n }\n\n ngOnChanges() {\n this.allFolders[this.folder.id] = this.folder;\n this.generateBreadcrumb(this.folder);\n this.setPagination(this.data.folderChildren);\n this.loading$.next(false);\n }\n\n public download() {\n this.store.dispatch(new DownloadEntries([this.folder], this.data.link, this.password));\n }\n\n public toggleViewMode() {\n const current = this.store.selectSnapshot(DriveState.viewMode);\n this.store.dispatch(new SetViewMode(current === 'list' ? 'grid' : 'list'));\n }\n\n private openPreviewOverlay(entry: FileEntry) {\n const entries = this.children.filter(ent => ent.type !== 'folder'),\n activeEntry = entries.findIndex(e => e.id === entry.id);\n\n this.overlay.open(FilePreviewOverlayComponent, {\n position: 'center',\n origin: 'global',\n panelClass: 'file-preview-overlay-container',\n data: {\n entries: entries.slice(),\n activeEntry,\n shareableLink: this.data.link,\n password: this.password,\n hideMoreOptionsBtn: true,\n }\n });\n }\n\n private getEntry(e: MouseEvent): FileEntry {\n const node = (e.target as HTMLElement).closest('.drive-entry') as HTMLElement;\n if (node) {\n return this.children.find(entry => entry.id === +node.dataset.id);\n }\n }\n\n public onClick(e: MouseEvent) {\n const entry = this.getEntry(e);\n if ( ! entry) return;\n\n if (entry.type === 'folder') {\n this.openFolder(entry);\n } else {\n this.openPreviewOverlay(entry);\n }\n }\n\n public isSubFolder() {\n return this.router.url.indexOf(':') > -1;\n }\n\n public openFolder(folder?: FileEntry) {\n if (folder && this.folder.id === folder.id) return;\n this.loading$.next(true);\n this.router.navigate(['/drive/s', this.makeLinkHash(folder)]).then(() => {\n // reset sort to default, as there's no good way to\n // pass current sort to parent link preview component\n this.sortFormControl.reset();\n });\n }\n\n private generateBreadcrumb(folder: FileEntry) {\n this.breadcrumb$.next(folder.path.split('/').map(folderId => {\n return this.allFolders[+folderId];\n }).filter(subFolder => !!subFolder));\n }\n\n private loadChildren(params: {page?: number}, replaceChildren = false) {\n this.loading$.next(true);\n const sortCol = this.sortFormControl.value?.column || 'updated_at';\n const sortDir = this.sortFormControl.value?.direction || 'desc';\n const order = `${sortCol}:${sortDir}`;\n const page = params.page || this.pagination$.value.current_page;\n this.linkApi.findByHash(this.makeLinkHash(this.folder), {page, order, withEntries: true})\n .pipe(finalize(() => this.loading$.next(false)))\n .subscribe(response => {\n const oldChildren = this.children;\n const pagination = response.folderChildren;\n if ( ! replaceChildren) {\n pagination.data = [...oldChildren, ...pagination.data];\n }\n this.setPagination(pagination);\n });\n }\n\n private makeLinkHash(folder?: FileEntry) {\n let hash = this.data.link.hash;\n if (folder) hash += ':' + folder.hash;\n return hash;\n }\n\n private setPagination(pagination: PaginationResponse<FileEntry>) {\n // add shareable link hash to all entries url to avoid permission errors\n pagination.data = pagination.data.map(entry => {\n entry.url += `?shareable_link=${this.data.link.id}`;\n if (this.password) {\n entry.url += `&password=${this.password}`;\n }\n return entry;\n });\n this.pagination$.next(pagination);\n }\n\n protected loadMoreItems() {\n const page = this.pagination$.value.current_page + 1;\n this.loadChildren({page}, false);\n }\n\n protected canLoadMore() {\n return this.pagination$.value.current_page < this.pagination$.value.last_page;\n }\n\n protected isLoading() {\n return this.loading$.value;\n }\n}\n","<ng-container *ngIf=\"data$ | async as data\">\n <link-preview-password-panel\n *ngIf=\"passwordPanelVisible$ | async; else filePreview\"\n [link]=\"data.link\"\n (passwordValid)=\"setValidPassword($event)\"\n ></link-preview-password-panel>\n\n <ng-template #filePreview>\n <ng-container *ngIf=\"data.link.entry.type === 'folder'\">\n <folder-preview [data]=\"data\" [password]=\"this.password\">\n <ng-container *ngIf=\"!(entryAlreadyImported$ | async) && currentUser.isLoggedIn()\">\n <span class=\"action-separator\"></span>\n <button mat-flat-button color=\"accent\" (click)=\"import()\" trans>Import</button>\n </ng-container>\n </folder-preview>\n </ng-container>\n\n <ng-container *ngIf=\"data.link.entry.type !== 'folder'\">\n <file-preview-toolbar [showLogo]=\"true\" [disableDownload]=\"!data.link.allow_download\">\n <a\n mat-flat-button\n color=\"accent\"\n routerLink=\"/login\"\n *ngIf=\"!currentUser.isLoggedIn()\"\n trans\n >Sign In</a\n >\n <button\n mat-flat-button\n color=\"accent\"\n (click)=\"import()\"\n *ngIf=\"!(entryAlreadyImported$ | async) && currentUser.isLoggedIn()\"\n trans\n >\n Import\n </button>\n </file-preview-toolbar>\n <ad-host slot=\"ads.file-preview\" class=\"file-preview-vert-host\"></ad-host>\n <preview-container\n [files]=\"[data.link.entry]\"\n [class.has-rek]=\"settings.has('ads.file-preview') && !currentUser.isSubscribed()\"\n ></preview-container>\n </ng-container>\n </ng-template>\n</ng-container>\n","import { Component, OnInit, ViewEncapsulation, ChangeDetectionStrategy, OnDestroy, ElementRef } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { GetLinkData, ShareableLinksApiService } from '../../sharing/links/shareable-links-api.service';\nimport { BehaviorSubject, fromEvent, Observable, Subscription } from 'rxjs';\nimport { PreviewFilesService } from '@common/file-preview/preview-files.service';\nimport { Settings } from '@common/core/config/settings.service';\nimport { CurrentUser } from '@common/auth/current-user';\nimport { filter, map } from 'rxjs/operators';\nimport { Toast } from '@common/core/ui/toast.service';\nimport { Store } from '@ngxs/store';\nimport { DownloadEntries, SetViewMode } from '../../state/actions/commands';\nimport { ShareableLink } from '../../sharing/links/models/shareable-link';\nimport { VIEW_MODE_KEY } from '../../state/models/drive-state-model';\nimport { LocalStorage } from '@common/core/services/local-storage.service';\n\n@Component({\n selector: 'link-preview-container',\n templateUrl: './link-preview-container.component.html',\n styleUrls: ['./link-preview-container.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n PreviewFilesService,\n ]\n})\nexport class LinkPreviewContainerComponent implements OnInit, OnDestroy {\n public data$: BehaviorSubject<GetLinkData> = new BehaviorSubject(null);\n public passwordPanelVisible$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n public password: string;\n private downloadSub: Subscription;\n\n /**\n * Check if current user owns this entry or\n * already has it imported into their drive.\n */\n public get entryAlreadyImported$(): Observable<boolean> {\n const userId = this.currentUser.get('id');\n return this.data$.pipe(\n map(data => data.link),\n filter(link => !!link && !!link.entry && !!link.entry.users),\n map(link => link.entry),\n map(entry => !!entry.users.find(user => user.id === userId))\n );\n }\n\n constructor(\n private store: Store,\n private route: ActivatedRoute,\n private links: ShareableLinksApiService,\n public previewFiles: PreviewFilesService,\n public settings: Settings,\n public currentUser: CurrentUser,\n private router: Router,\n private toast: Toast,\n private el: ElementRef<HTMLElement>,\n private localStorage: LocalStorage,\n ) {}\n\n ngOnInit() {\n this.bindToDownload();\n this.disableContextMenu();\n this.setViewMode();\n this.route.params.subscribe(params => {\n this.links.findByHash(params.hash, {withEntries: true}).subscribe(response => {\n const linkChanged = response.link.id !== (this.data$.value && this.data$.value.link.id);\n this.data$.next(response);\n this.setBackgroundClass(response.link);\n\n // prevent asking password for nested folders, if user already entered password\n if (response.link.password && (linkChanged || !this.password)) {\n this.togglePasswordPanel(true);\n } else {\n this.togglePasswordPanel(false);\n this.showPreview();\n }\n }, () => {\n this.router.navigate(['/404']);\n });\n });\n }\n\n ngOnDestroy() {\n this.downloadSub.unsubscribe();\n }\n\n public import() {\n this.links.importEntry(this.data$.value.link.id, this.password)\n .subscribe(response => {\n const link = this.data$.value.link;\n link.entry.users = response.users;\n this.data$.next({...this.data$.value, link});\n this.toast.open({\n message: `\":name\" imported into your drive.`,\n replacements: {name: link.entry.name},\n });\n });\n }\n\n public togglePasswordPanel(value: boolean) {\n this.passwordPanelVisible$.next(value);\n }\n\n private bindToDownload() {\n this.downloadSub = this.previewFiles.download.subscribe(() => {\n const link = this.data$.value.link;\n this.store.dispatch(new DownloadEntries([link.entry], link, this.password));\n });\n }\n\n /**\n * Show preview for shareable link files.\n */\n private showPreview() {\n const data = this.data$.value;\n data.link.entry.url += `?shareable_link=${data.link.id}`;\n if (this.password) {\n data.link.entry.url += `&password=${this.password}`;\n }\n this.data$.next({...data});\n }\n\n public setValidPassword(password: string) {\n this.password = password;\n this.showPreview();\n this.togglePasswordPanel(false);\n }\n\n private setBackgroundClass(link: ShareableLink) {\n const className = link.entry.type === 'folder' ? 'folder-link' : 'file-link';\n this.el.nativeElement.classList.add(className);\n }\n\n private disableContextMenu() {\n fromEvent(this.el.nativeElement, 'contextmenu')\n .subscribe(e => {\n e.preventDefault();\n });\n }\n\n private setViewMode() {\n this.store.dispatch(new SetViewMode(\n this.localStorage.get(VIEW_MODE_KEY, this.settings.get('drive.default_view', 'grid')))\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule, Routes } from '@angular/router';\nimport { DriveComponent } from './drive.component';\nimport { EntriesContainerComponent } from './entries/entries-container/entries-container.component';\nimport { LinkPreviewContainerComponent } from './preview/link-preview-container/link-preview-container.component';\nimport { AuthGuard } from '@common/guards/auth-guard.service';\nimport { CheckPermissionsGuard } from '../../common/guards/check-permissions-guard.service';\n\nconst dashboardRoutes: Routes = [\n // shareable links can be accessed by guests\n {\n path: 's/:hash',\n component: LinkPreviewContainerComponent,\n },\n\n // main drive routes can only be accessed by logged in users\n {\n path: '',\n component: DriveComponent,\n canActivate: [AuthGuard, CheckPermissionsGuard],\n children: [\n { path: '', component: EntriesContainerComponent},\n { path: 'shares', component: EntriesContainerComponent},\n { path: 'search', component: EntriesContainerComponent},\n { path: 'recent', component: EntriesContainerComponent},\n { path: 'starred', component: EntriesContainerComponent},\n { path: 'trash', component: EntriesContainerComponent},\n { path: 'folders/:hash', component: EntriesContainerComponent},\n {\n path: 'workspaces',\n loadChildren: () => import('src/app/drive/workspace-wrapper.module').then(m => m.WorkspaceWrapperModule)\n },\n ]\n },\n];\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule.forChild(dashboardRoutes)\n ],\n exports: [\n RouterModule\n ],\n})\nexport class DriveRoutingModule {}\n","import { InjectionToken, Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, Optional, Inject, Input, NgModule } from '@angular/core';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { _getShadowRoot, Platform } from '@angular/cdk/platform';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Base reference size of the spinner.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/platform';\nimport * as ɵngcc2 from '@angular/common';\n\nfunction MatProgressSpinner__svg_circle_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelement(0, \"circle\", 3);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"animation-name\", \"mat-progress-spinner-stroke-rotate-\" + ctx_r0._spinnerAnimationLabel)(\"stroke-dashoffset\", ctx_r0._getStrokeDashOffset(), \"px\")(\"stroke-dasharray\", ctx_r0._getStrokeCircumference(), \"px\")(\"stroke-width\", ctx_r0._getCircleStrokeWidth(), \"%\");\n ɵngcc0.ɵɵattribute(\"r\", ctx_r0._getCircleRadius());\n} }\nfunction MatProgressSpinner__svg_circle_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelement(0, \"circle\", 3);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"stroke-dashoffset\", ctx_r1._getStrokeDashOffset(), \"px\")(\"stroke-dasharray\", ctx_r1._getStrokeCircumference(), \"px\")(\"stroke-width\", ctx_r1._getCircleStrokeWidth(), \"%\");\n ɵngcc0.ɵɵattribute(\"r\", ctx_r1._getCircleRadius());\n} }\nfunction MatSpinner__svg_circle_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelement(0, \"circle\", 3);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"animation-name\", \"mat-progress-spinner-stroke-rotate-\" + ctx_r0._spinnerAnimationLabel)(\"stroke-dashoffset\", ctx_r0._getStrokeDashOffset(), \"px\")(\"stroke-dasharray\", ctx_r0._getStrokeCircumference(), \"px\")(\"stroke-width\", ctx_r0._getCircleStrokeWidth(), \"%\");\n ɵngcc0.ɵɵattribute(\"r\", ctx_r0._getCircleRadius());\n} }\nfunction MatSpinner__svg_circle_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelement(0, \"circle\", 3);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"stroke-dashoffset\", ctx_r1._getStrokeDashOffset(), \"px\")(\"stroke-dasharray\", ctx_r1._getStrokeCircumference(), \"px\")(\"stroke-width\", ctx_r1._getCircleStrokeWidth(), \"%\");\n ɵngcc0.ɵɵattribute(\"r\", ctx_r1._getCircleRadius());\n} }\nconst _c0 = \".mat-progress-spinner{display:block;position:relative;overflow:hidden}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.cdk-high-contrast-active .mat-progress-spinner circle{stroke:currentColor;stroke:CanvasText}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{animation:mat-progress-spinner-stroke-rotate-fallback 10000ms cubic-bezier(0.87, 0.03, 0.33, 1) infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0deg)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}\\n\";\nconst BASE_SIZE = 100;\n/**\n * Base reference stroke width of the spinner.\n * @docs-private\n */\nconst BASE_STROKE_WIDTH = 10;\n// Boilerplate for applying mixins to MatProgressSpinner.\n/** @docs-private */\nclass MatProgressSpinnerBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatProgressSpinnerMixinBase = mixinColor(MatProgressSpinnerBase, 'primary');\n/** Injection token to be used to override the default options for `mat-progress-spinner`. */\nconst MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS = new InjectionToken('mat-progress-spinner-default-options', {\n providedIn: 'root',\n factory: MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY,\n});\n/** @docs-private */\nfunction MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY() {\n return { diameter: BASE_SIZE };\n}\n// .0001 percentage difference is necessary in order to avoid unwanted animation frames\n// for example because the animation duration is 4 seconds, .1% accounts to 4ms\n// which are enough to see the flicker described in\n// https://github.com/angular/components/issues/8984\nconst INDETERMINATE_ANIMATION_TEMPLATE = `\n @keyframes mat-progress-spinner-stroke-rotate-DIAMETER {\n 0% { stroke-dashoffset: START_VALUE; transform: rotate(0); }\n 12.5% { stroke-dashoffset: END_VALUE; transform: rotate(0); }\n 12.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(72.5deg); }\n 25% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(72.5deg); }\n\n 25.0001% { stroke-dashoffset: START_VALUE; transform: rotate(270deg); }\n 37.5% { stroke-dashoffset: END_VALUE; transform: rotate(270deg); }\n 37.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(161.5deg); }\n 50% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(161.5deg); }\n\n 50.0001% { stroke-dashoffset: START_VALUE; transform: rotate(180deg); }\n 62.5% { stroke-dashoffset: END_VALUE; transform: rotate(180deg); }\n 62.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(251.5deg); }\n 75% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(251.5deg); }\n\n 75.0001% { stroke-dashoffset: START_VALUE; transform: rotate(90deg); }\n 87.5% { stroke-dashoffset: END_VALUE; transform: rotate(90deg); }\n 87.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(341.5deg); }\n 100% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(341.5deg); }\n }\n`;\n/**\n * `<mat-progress-spinner>` component.\n */\nclass MatProgressSpinner extends _MatProgressSpinnerMixinBase {\n constructor(_elementRef, platform, _document, animationMode, defaults) {\n super(_elementRef);\n this._elementRef = _elementRef;\n this._document = _document;\n this._diameter = BASE_SIZE;\n this._value = 0;\n this._fallbackAnimation = false;\n /** Mode of the progress circle */\n this.mode = 'determinate';\n const trackedDiameters = MatProgressSpinner._diameters;\n this._spinnerAnimationLabel = this._getSpinnerAnimationLabel();\n // The base size is already inserted via the component's structural styles. We still\n // need to track it so we don't end up adding the same styles again.\n if (!trackedDiameters.has(_document.head)) {\n trackedDiameters.set(_document.head, new Set([BASE_SIZE]));\n }\n this._fallbackAnimation = platform.EDGE || platform.TRIDENT;\n this._noopAnimations = animationMode === 'NoopAnimations' &&\n (!!defaults && !defaults._forceAnimations);\n if (defaults) {\n if (defaults.diameter) {\n this.diameter = defaults.diameter;\n }\n if (defaults.strokeWidth) {\n this.strokeWidth = defaults.strokeWidth;\n }\n }\n }\n /** The diameter of the progress spinner (will set width and height of svg). */\n get diameter() { return this._diameter; }\n set diameter(size) {\n this._diameter = coerceNumberProperty(size);\n this._spinnerAnimationLabel = this._getSpinnerAnimationLabel();\n // If this is set before `ngOnInit`, the style root may not have been resolved yet.\n if (!this._fallbackAnimation && this._styleRoot) {\n this._attachStyleNode();\n }\n }\n /** Stroke width of the progress spinner. */\n get strokeWidth() {\n return this._strokeWidth || this.diameter / 10;\n }\n set strokeWidth(value) {\n this._strokeWidth = coerceNumberProperty(value);\n }\n /** Value of the progress circle. */\n get value() {\n return this.mode === 'determinate' ? this._value : 0;\n }\n set value(newValue) {\n this._value = Math.max(0, Math.min(100, coerceNumberProperty(newValue)));\n }\n ngOnInit() {\n const element = this._elementRef.nativeElement;\n // Note that we need to look up the root node in ngOnInit, rather than the constructor, because\n // Angular seems to create the element outside the shadow root and then moves it inside, if the\n // node is inside an `ngIf` and a ShadowDom-encapsulated component.\n this._styleRoot = _getShadowRoot(element) || this._document.head;\n this._attachStyleNode();\n // On IE and Edge, we can't animate the `stroke-dashoffset`\n // reliably so we fall back to a non-spec animation.\n const animationClass = `mat-progress-spinner-indeterminate${this._fallbackAnimation ? '-fallback' : ''}-animation`;\n element.classList.add(animationClass);\n }\n /** The radius of the spinner, adjusted for stroke width. */\n _getCircleRadius() {\n return (this.diameter - BASE_STROKE_WIDTH) / 2;\n }\n /** The view box of the spinner's svg element. */\n _getViewBox() {\n const viewBox = this._getCircleRadius() * 2 + this.strokeWidth;\n return `0 0 ${viewBox} ${viewBox}`;\n }\n /** The stroke circumference of the svg circle. */\n _getStrokeCircumference() {\n return 2 * Math.PI * this._getCircleRadius();\n }\n /** The dash offset of the svg circle. */\n _getStrokeDashOffset() {\n if (this.mode === 'determinate') {\n return this._getStrokeCircumference() * (100 - this._value) / 100;\n }\n // In fallback mode set the circle to 80% and rotate it with CSS.\n if (this._fallbackAnimation && this.mode === 'indeterminate') {\n return this._getStrokeCircumference() * 0.2;\n }\n return null;\n }\n /** Stroke width of the circle in percent. */\n _getCircleStrokeWidth() {\n return this.strokeWidth / this.diameter * 100;\n }\n /** Dynamically generates a style tag containing the correct animation for this diameter. */\n _attachStyleNode() {\n const styleRoot = this._styleRoot;\n const currentDiameter = this._diameter;\n const diameters = MatProgressSpinner._diameters;\n let diametersForElement = diameters.get(styleRoot);\n if (!diametersForElement || !diametersForElement.has(currentDiameter)) {\n const styleTag = this._document.createElement('style');\n styleTag.setAttribute('mat-spinner-animation', this._spinnerAnimationLabel);\n styleTag.textContent = this._getAnimationText();\n styleRoot.appendChild(styleTag);\n if (!diametersForElement) {\n diametersForElement = new Set();\n diameters.set(styleRoot, diametersForElement);\n }\n diametersForElement.add(currentDiameter);\n }\n }\n /** Generates animation styles adjusted for the spinner's diameter. */\n _getAnimationText() {\n const strokeCircumference = this._getStrokeCircumference();\n return INDETERMINATE_ANIMATION_TEMPLATE\n // Animation should begin at 5% and end at 80%\n .replace(/START_VALUE/g, `${0.95 * strokeCircumference}`)\n .replace(/END_VALUE/g, `${0.2 * strokeCircumference}`)\n .replace(/DIAMETER/g, `${this._spinnerAnimationLabel}`);\n }\n /** Returns the circle diameter formatted for use with the animation-name CSS property. */\n _getSpinnerAnimationLabel() {\n // The string of a float point number will include a period ‘.’ character,\n // which is not valid for a CSS animation-name.\n return this.diameter.toString().replace('.', '_');\n }\n}\nMatProgressSpinner.ɵfac = function MatProgressSpinner_Factory(t) { return new (t || MatProgressSpinner)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Platform), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS)); };\nMatProgressSpinner.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatProgressSpinner, selectors: [[\"mat-progress-spinner\"]], hostAttrs: [\"role\", \"progressbar\", \"tabindex\", \"-1\", 1, \"mat-progress-spinner\"], hostVars: 10, hostBindings: function MatProgressSpinner_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-valuemin\", ctx.mode === \"determinate\" ? 0 : null)(\"aria-valuemax\", ctx.mode === \"determinate\" ? 100 : null)(\"aria-valuenow\", ctx.mode === \"determinate\" ? ctx.value : null)(\"mode\", ctx.mode);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.diameter, \"px\")(\"height\", ctx.diameter, \"px\");\n ɵngcc0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._noopAnimations);\n } }, inputs: { color: \"color\", mode: \"mode\", diameter: \"diameter\", strokeWidth: \"strokeWidth\", value: \"value\" }, exportAs: [\"matProgressSpinner\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 8, consts: [[\"preserveAspectRatio\", \"xMidYMid meet\", \"focusable\", \"false\", \"aria-hidden\", \"true\", 3, \"ngSwitch\"], [\"cx\", \"50%\", \"cy\", \"50%\", 3, \"animation-name\", \"stroke-dashoffset\", \"stroke-dasharray\", \"stroke-width\", 4, \"ngSwitchCase\"], [\"cx\", \"50%\", \"cy\", \"50%\", 3, \"stroke-dashoffset\", \"stroke-dasharray\", \"stroke-width\", 4, \"ngSwitchCase\"], [\"cx\", \"50%\", \"cy\", \"50%\"]], template: function MatProgressSpinner_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(0, \"svg\", 0);\n ɵngcc0.ɵɵtemplate(1, MatProgressSpinner__svg_circle_1_Template, 1, 9, \"circle\", 1);\n ɵngcc0.ɵɵtemplate(2, MatProgressSpinner__svg_circle_2_Template, 1, 7, \"circle\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.diameter, \"px\")(\"height\", ctx.diameter, \"px\");\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.mode === \"indeterminate\");\n ɵngcc0.ɵɵattribute(\"viewBox\", ctx._getViewBox());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n } }, directives: [ɵngcc2.NgSwitch, ɵngcc2.NgSwitchCase], styles: [_c0], encapsulation: 2, changeDetection: 0 });\n/**\n * Tracks diameters of existing instances to de-dupe generated styles (default d = 100).\n * We need to keep track of which elements the diameters were attached to, because for\n * elements in the Shadow DOM the style tags are attached to the shadow root, rather\n * than the document head.\n */\nMatProgressSpinner._diameters = new WeakMap();\nMatProgressSpinner.ctorParameters = () => [\n { type: ElementRef },\n { type: Platform },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS,] }] }\n];\nMatProgressSpinner.propDecorators = {\n diameter: [{ type: Input }],\n strokeWidth: [{ type: Input }],\n mode: [{ type: Input }],\n value: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatProgressSpinner, [{\n type: Component,\n args: [{\n selector: 'mat-progress-spinner',\n exportAs: 'matProgressSpinner',\n host: {\n 'role': 'progressbar',\n 'class': 'mat-progress-spinner',\n // set tab index to -1 so screen readers will read the aria-label\n // Note: there is a known issue with JAWS that does not read progressbar aria labels on FireFox\n 'tabindex': '-1',\n '[class._mat-animation-noopable]': `_noopAnimations`,\n '[style.width.px]': 'diameter',\n '[style.height.px]': 'diameter',\n '[attr.aria-valuemin]': 'mode === \"determinate\" ? 0 : null',\n '[attr.aria-valuemax]': 'mode === \"determinate\" ? 100 : null',\n '[attr.aria-valuenow]': 'mode === \"determinate\" ? value : null',\n '[attr.mode]': 'mode'\n },\n inputs: ['color'],\n template: \"<!--\\n preserveAspectRatio of xMidYMid meet as the center of the viewport is the circle's\\n center. The center of the circle will remain at the center of the mat-progress-spinner\\n element containing the SVG. `focusable=\\\"false\\\"` prevents IE from allowing the user to\\n tab into the SVG element.\\n-->\\n<!--\\n All children need to be hidden for screen readers in order to support ChromeVox.\\n More context in the issue: https://github.com/angular/components/issues/22165.\\n-->\\n<svg\\n [style.width.px]=\\\"diameter\\\"\\n [style.height.px]=\\\"diameter\\\"\\n [attr.viewBox]=\\\"_getViewBox()\\\"\\n preserveAspectRatio=\\\"xMidYMid meet\\\"\\n focusable=\\\"false\\\"\\n [ngSwitch]=\\\"mode === 'indeterminate'\\\"\\n aria-hidden=\\\"true\\\">\\n\\n <!--\\n Technically we can reuse the same `circle` element, however Safari has an issue that breaks\\n the SVG rendering in determinate mode, after switching between indeterminate and determinate.\\n Using a different element avoids the issue. An alternative to this is adding `display: none`\\n for a split second and then removing it when switching between modes, but it's hard to know\\n for how long to hide the element and it can cause the UI to blink.\\n -->\\n <circle\\n *ngSwitchCase=\\\"true\\\"\\n cx=\\\"50%\\\"\\n cy=\\\"50%\\\"\\n [attr.r]=\\\"_getCircleRadius()\\\"\\n [style.animation-name]=\\\"'mat-progress-spinner-stroke-rotate-' + _spinnerAnimationLabel\\\"\\n [style.stroke-dashoffset.px]=\\\"_getStrokeDashOffset()\\\"\\n [style.stroke-dasharray.px]=\\\"_getStrokeCircumference()\\\"\\n [style.stroke-width.%]=\\\"_getCircleStrokeWidth()\\\"></circle>\\n\\n <circle\\n *ngSwitchCase=\\\"false\\\"\\n cx=\\\"50%\\\"\\n cy=\\\"50%\\\"\\n [attr.r]=\\\"_getCircleRadius()\\\"\\n [style.stroke-dashoffset.px]=\\\"_getStrokeDashOffset()\\\"\\n [style.stroke-dasharray.px]=\\\"_getStrokeCircumference()\\\"\\n [style.stroke-width.%]=\\\"_getCircleStrokeWidth()\\\"></circle>\\n</svg>\\n\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: [\".mat-progress-spinner{display:block;position:relative;overflow:hidden}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.cdk-high-contrast-active .mat-progress-spinner circle{stroke:currentColor;stroke:CanvasText}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{animation:mat-progress-spinner-stroke-rotate-fallback 10000ms cubic-bezier(0.87, 0.03, 0.33, 1) infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0deg)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS]\n }] }]; }, { mode: [{\n type: Input\n }], diameter: [{\n type: Input\n }], strokeWidth: [{\n type: Input\n }], value: [{\n type: Input\n }] }); })();\n/**\n * `<mat-spinner>` component.\n *\n * This is a component definition to be used as a convenience reference to create an\n * indeterminate `<mat-progress-spinner>` instance.\n */\nclass MatSpinner extends MatProgressSpinner {\n constructor(elementRef, platform, document, animationMode, defaults) {\n super(elementRef, platform, document, animationMode, defaults);\n this.mode = 'indeterminate';\n }\n}\nMatSpinner.ɵfac = function MatSpinner_Factory(t) { return new (t || MatSpinner)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Platform), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS)); };\nMatSpinner.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MatSpinner, selectors: [[\"mat-spinner\"]], hostAttrs: [\"role\", \"progressbar\", \"mode\", \"indeterminate\", 1, \"mat-spinner\", \"mat-progress-spinner\"], hostVars: 6, hostBindings: function MatSpinner_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.diameter, \"px\")(\"height\", ctx.diameter, \"px\");\n ɵngcc0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._noopAnimations);\n } }, inputs: { color: \"color\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 8, consts: [[\"preserveAspectRatio\", \"xMidYMid meet\", \"focusable\", \"false\", \"aria-hidden\", \"true\", 3, \"ngSwitch\"], [\"cx\", \"50%\", \"cy\", \"50%\", 3, \"animation-name\", \"stroke-dashoffset\", \"stroke-dasharray\", \"stroke-width\", 4, \"ngSwitchCase\"], [\"cx\", \"50%\", \"cy\", \"50%\", 3, \"stroke-dashoffset\", \"stroke-dasharray\", \"stroke-width\", 4, \"ngSwitchCase\"], [\"cx\", \"50%\", \"cy\", \"50%\"]], template: function MatSpinner_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(0, \"svg\", 0);\n ɵngcc0.ɵɵtemplate(1, MatSpinner__svg_circle_1_Template, 1, 9, \"circle\", 1);\n ɵngcc0.ɵɵtemplate(2, MatSpinner__svg_circle_2_Template, 1, 7, \"circle\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.diameter, \"px\")(\"height\", ctx.diameter, \"px\");\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.mode === \"indeterminate\");\n ɵngcc0.ɵɵattribute(\"viewBox\", ctx._getViewBox());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n } }, directives: [ɵngcc2.NgSwitch, ɵngcc2.NgSwitchCase], styles: [_c0], encapsulation: 2, changeDetection: 0 });\nMatSpinner.ctorParameters = () => [\n { type: ElementRef },\n { type: Platform },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS,] }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatSpinner, [{\n type: Component,\n args: [{\n selector: 'mat-spinner',\n host: {\n 'role': 'progressbar',\n 'mode': 'indeterminate',\n 'class': 'mat-spinner mat-progress-spinner',\n '[class._mat-animation-noopable]': `_noopAnimations`,\n '[style.width.px]': 'diameter',\n '[style.height.px]': 'diameter'\n },\n inputs: ['color'],\n template: \"<!--\\n preserveAspectRatio of xMidYMid meet as the center of the viewport is the circle's\\n center. The center of the circle will remain at the center of the mat-progress-spinner\\n element containing the SVG. `focusable=\\\"false\\\"` prevents IE from allowing the user to\\n tab into the SVG element.\\n-->\\n<!--\\n All children need to be hidden for screen readers in order to support ChromeVox.\\n More context in the issue: https://github.com/angular/components/issues/22165.\\n-->\\n<svg\\n [style.width.px]=\\\"diameter\\\"\\n [style.height.px]=\\\"diameter\\\"\\n [attr.viewBox]=\\\"_getViewBox()\\\"\\n preserveAspectRatio=\\\"xMidYMid meet\\\"\\n focusable=\\\"false\\\"\\n [ngSwitch]=\\\"mode === 'indeterminate'\\\"\\n aria-hidden=\\\"true\\\">\\n\\n <!--\\n Technically we can reuse the same `circle` element, however Safari has an issue that breaks\\n the SVG rendering in determinate mode, after switching between indeterminate and determinate.\\n Using a different element avoids the issue. An alternative to this is adding `display: none`\\n for a split second and then removing it when switching between modes, but it's hard to know\\n for how long to hide the element and it can cause the UI to blink.\\n -->\\n <circle\\n *ngSwitchCase=\\\"true\\\"\\n cx=\\\"50%\\\"\\n cy=\\\"50%\\\"\\n [attr.r]=\\\"_getCircleRadius()\\\"\\n [style.animation-name]=\\\"'mat-progress-spinner-stroke-rotate-' + _spinnerAnimationLabel\\\"\\n [style.stroke-dashoffset.px]=\\\"_getStrokeDashOffset()\\\"\\n [style.stroke-dasharray.px]=\\\"_getStrokeCircumference()\\\"\\n [style.stroke-width.%]=\\\"_getCircleStrokeWidth()\\\"></circle>\\n\\n <circle\\n *ngSwitchCase=\\\"false\\\"\\n cx=\\\"50%\\\"\\n cy=\\\"50%\\\"\\n [attr.r]=\\\"_getCircleRadius()\\\"\\n [style.stroke-dashoffset.px]=\\\"_getStrokeDashOffset()\\\"\\n [style.stroke-dasharray.px]=\\\"_getStrokeCircumference()\\\"\\n [style.stroke-width.%]=\\\"_getCircleStrokeWidth()\\\"></circle>\\n</svg>\\n\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: [\".mat-progress-spinner{display:block;position:relative;overflow:hidden}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.cdk-high-contrast-active .mat-progress-spinner circle{stroke:currentColor;stroke:CanvasText}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{animation:mat-progress-spinner-stroke-rotate-fallback 10000ms cubic-bezier(0.87, 0.03, 0.33, 1) infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0deg)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatProgressSpinnerModule {\n}\nMatProgressSpinnerModule.ɵfac = function MatProgressSpinnerModule_Factory(t) { return new (t || MatProgressSpinnerModule)(); };\nMatProgressSpinnerModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MatProgressSpinnerModule });\nMatProgressSpinnerModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[MatCommonModule, CommonModule], MatCommonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MatProgressSpinnerModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, CommonModule],\n exports: [\n MatProgressSpinner,\n MatSpinner,\n MatCommonModule\n ],\n declarations: [\n MatProgressSpinner,\n MatSpinner\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatProgressSpinnerModule, { declarations: function () { return [MatProgressSpinner, MatSpinner]; }, imports: function () { return [MatCommonModule, CommonModule]; }, exports: function () { return [MatProgressSpinner, MatSpinner, MatCommonModule]; } }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS, MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY, MatProgressSpinner, MatProgressSpinnerModule, MatSpinner };\n\n//# sourceMappingURL=progress-spinner.js.map","import { DriveContextMenuComponent } from './components/drive-context-menu/drive-context-menu.component';\n\nexport const DRIVE_CONTEXT_MENUS = {\n entry: DriveContextMenuComponent,\n};\n","import {Actions, ofActionSuccessful, Store} from '@ngxs/store';\nimport {OpenFilePreview} from '../actions/commands';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {FilePreviewOverlayComponent} from '../../preview/file-preview-overlay/file-preview-overlay.component';\nimport {DriveState} from '../drive-state';\nimport {Injectable} from '@angular/core';\nimport {OverlayPanelRef} from '../../../../common/core/ui/overlay-panel/overlay-panel-ref';\n\n@Injectable()\nexport class OverlayHandler {\n private overlayRef: OverlayPanelRef<FilePreviewOverlayComponent>;\n constructor(\n private store: Store,\n private actions$: Actions,\n private overlay: OverlayPanel\n ) {\n this.actions$\n .pipe(ofActionSuccessful(OpenFilePreview))\n .subscribe((action: OpenFilePreview) => {\n if (this.overlayRef) {\n this.overlayRef.close();\n this.overlayRef = null;\n }\n const entries = this.store\n .selectSnapshot(DriveState.entries)\n .filter(e => e.type !== 'folder');\n const selectedEntry = this.store.selectSnapshot(DriveState.selectedEntry);\n const activeEntry = entries.findIndex(e => e.id === selectedEntry?.id);\n this.overlayRef = this.overlay.open(FilePreviewOverlayComponent, {\n position: 'center',\n origin: 'global',\n panelClass: 'file-preview-overlay-container',\n data: {\n entries: entries.slice(),\n activeEntry: activeEntry === -1 ? 0 : activeEntry,\n },\n });\n });\n }\n}\n","import { Actions, ofActionSuccessful, Store } from '@ngxs/store';\nimport { DownloadEntries } from '../actions/commands';\nimport { DriveState } from '../drive-state';\nimport { downloadFileFromUrl } from '@common/uploads/utils/download-file-from-url';\nimport { Settings } from '@common/core/config/settings.service';\nimport { FileEntry } from '@common/uploads/types/file-entry';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DownloadHandler {\n constructor(\n private actions$: Actions,\n private store: Store,\n private settings: Settings,\n ) {\n this.actions$.pipe(ofActionSuccessful(DownloadEntries))\n .subscribe((action: DownloadEntries) => {\n downloadFileFromUrl(this.getDownloadUrl(action));\n });\n }\n\n private getDownloadUrl(action: DownloadEntries): string {\n const hashes = this.getEntryHashes(action.entries);\n let base = `${this.settings.getBaseUrl()}/secure/uploads/download?hashes=${hashes}`;\n if (action.link) base += `&shareable_link=${action.link.id}`;\n if (action.password) base += `&password=${action.password}`;\n return base;\n }\n\n /**\n * Get hashes string for specified entries or for currently selected entries.\n */\n private getEntryHashes(entries?: FileEntry[]): string {\n if ( ! entries) {\n entries = this.store.selectSnapshot(DriveState.selectedEntries);\n }\n\n return entries.map(entry => entry.hash).join(',');\n }\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'loading-toast',\n templateUrl: './loading-toast.component.html',\n styleUrls: ['./loading-toast.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LoadingToastComponent {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: {message: string}) {}\n}\n","<mat-spinner [diameter]=\"30\"></mat-spinner>\n<span trans>{{ data.message }}</span>","import { Actions, ofAction, ofActionSuccessful, Store } from '@ngxs/store';\nimport { AddStar, HideLoadingToast, RemoveStar, RestoreTrashedEntries, ShowLoadingToast } from '../actions/commands';\nimport {\n EntryRenamed,\n FileDeleteSuccess,\n MoveEntriesFailed,\n MoveEntriesSuccess,\n NewFolderCreated, NotEnoughSpaceError,\n TrashedEntriesDeleteSuccess,\n TrashedEntriesRestoreSuccess\n} from '../actions/events';\nimport { Toast } from '@common/core/ui/toast.service';\nimport { LinkCopySuccess } from '../../sharing/links/share-link.state';\nimport { Router } from '@angular/router';\nimport { LoadingToastComponent } from '../../messages/loading-toast/loading-toast.component';\nimport { MatSnackBarRef } from '@angular/material/snack-bar';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ToastHandler {\n constructor(\n private actions$: Actions,\n private toast: Toast,\n private store: Store,\n private router: Router,\n ) {\n this.entriesDeleted();\n this.entriesStarred();\n this.entriesUnstarred();\n this.entriesMoveFailed();\n this.folderCreated();\n this.entriesMoved();\n this.entriesDeletedForever();\n this.entriesRestoredFromTrash();\n this.entryRenamed();\n this.linkCopiedToClipboard();\n this.notEnoughSpace();\n this.loadingToast();\n }\n\n private entriesDeleted() {\n this.actions$\n .pipe(ofAction(FileDeleteSuccess))\n .subscribe((action: FileDeleteSuccess) => {\n const msg = {message: `Deleted :count items.`, replacements: {count: action.deletedFiles.length}};\n this.toast.open(msg, {action: 'UNDO'})\n .onAction().subscribe(() => {\n this.store.dispatch(new RestoreTrashedEntries(action.deletedFiles));\n });\n });\n }\n\n private entriesStarred() {\n this.actions$\n .pipe(ofActionSuccessful(AddStar))\n .subscribe((action: AddStar) => {\n this.toast.open(`Star added.`, {action: 'UNDO'}).onAction()\n .subscribe(() => {\n this.store.dispatch(new RemoveStar(action.entries));\n });\n });\n }\n\n private entriesUnstarred() {\n this.actions$\n .pipe(ofActionSuccessful(RemoveStar))\n .subscribe((action: RemoveStar) => {\n this.toast.open(`Star Removed.`, {action: 'UNDO'}).onAction()\n .subscribe(() => {\n this.store.dispatch(new AddStar(action.entries));\n });\n });\n }\n\n private entriesMoved() {\n this.actions$.pipe(ofAction(MoveEntriesSuccess))\n .subscribe((action: MoveEntriesSuccess) => {\n this.toast.open(\n {message: 'Moved :count items.', replacements: {count: action.entries.length}}\n );\n });\n }\n\n private entriesMoveFailed() {\n this.actions$.pipe(ofAction(MoveEntriesFailed))\n .subscribe(() => {\n this.toast.open('There was an issue with moving selected items.');\n });\n }\n\n private folderCreated() {\n this.actions$.pipe(ofAction(NewFolderCreated))\n .subscribe(() => {\n this.toast.open('Folder created.');\n });\n }\n\n private entriesDeletedForever() {\n this.actions$.pipe(ofActionSuccessful(TrashedEntriesDeleteSuccess))\n .subscribe((action: TrashedEntriesDeleteSuccess) => {\n this.toast.open({\n message: `Permanently deleted :count items.`,\n replacements: {count: action.entries.length}\n });\n });\n }\n\n private entriesRestoredFromTrash() {\n this.actions$.pipe(ofActionSuccessful(TrashedEntriesRestoreSuccess))\n .subscribe((action: TrashedEntriesRestoreSuccess) => {\n this.toast.open({\n message: `Restored :count items.`,\n replacements: {count: action.entries.length}\n });\n });\n }\n\n private entryRenamed() {\n this.actions$.pipe(ofActionSuccessful(EntryRenamed))\n .subscribe((action: EntryRenamed) => {\n this.toast.open({\n message: `:oldName renamed to :newName`,\n replacements: {oldName: action.entry.name, newName: action.newName}\n });\n });\n\n }\n\n private linkCopiedToClipboard() {\n this.actions$.pipe(ofActionSuccessful(LinkCopySuccess))\n .subscribe(() => {\n this.toast.open(`Link copied to clipboard.`);\n });\n }\n\n private notEnoughSpace() {\n this.actions$.pipe(ofActionSuccessful(NotEnoughSpaceError))\n .subscribe(() => {\n this.toast.open(`You are out of space. Try to delete some files.`, {action: 'Upgrade'})\n .onAction().subscribe(() => {\n this.router.navigate(['/billing/upgrade']);\n });\n });\n }\n\n private loadingToast() {\n let toastRef: MatSnackBarRef<any>;\n\n this.actions$.pipe(ofActionSuccessful(ShowLoadingToast))\n .subscribe((action: ShowLoadingToast) => {\n toastRef = this.toast.openComponent(LoadingToastComponent, {duration: 0, data: {message: action.message}});\n });\n\n this.actions$.pipe(ofActionSuccessful(HideLoadingToast))\n .subscribe(() => {\n if (toastRef) {\n toastRef.dismiss();\n toastRef = null;\n }\n });\n }\n}\n","<file-icon [mime]=\"upload.uploadedFile.mime\"></file-icon>\n<div class=\"content\">\n <div class=\"meta\">\n <div class=\"name\" [matTooltip]=\"upload.uploadedFile.name\">{{upload.uploadedFile.name}}</div>\n <div class=\"time-left\" *ngIf=\"progress.percentage && progress.percentage < 100 && !upload.error$.value\">\n {{progress.eta}}\n <span trans>left</span>\n </div>\n <div class=\"actions\">\n <mat-icon\n svgIcon=\"error\"\n *ngIf=\"upload.error$ | async as error; else noError\"\n class=\"error-icon\"\n [matTooltip]=\"error | trans\"\n matTooltipPosition=\"left\"\n ></mat-icon>\n <ng-template #noError>\n <mat-icon svgIcon=\"check-circle\" *ngIf=\"upload.completed\" class=\"completed-icon\"></mat-icon>\n <span class=\"cancel-button\" *ngIf=\"!upload.completed\" (click)=\"cancelUpload(upload)\" trans>Cancel</span>\n </ng-template>\n </div>\n </div>\n <mat-progress-bar mode=\"determinate\" [value]=\"progress.percentage\" color=\"accent\"></mat-progress-bar>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\nimport { UploadQueueItem, UploadQueueItemProgress } from '@common/uploads/upload-queue/upload-queue-item';\nimport { UploadQueueService } from '@common/uploads/upload-queue/upload-queue.service';\nimport { Store } from '@ngxs/store';\nimport { CloseUploadsPanel } from '../../../state/actions/commands';\nimport { throttleTime } from 'rxjs/operators';\nimport { animationFrameScheduler, Subscription } from 'rxjs';\n\n@Component({\n selector: 'uploads-panel-item',\n templateUrl: './uploads-panel-item.component.html',\n styleUrls: ['./uploads-panel-item.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadsPanelItemComponent implements OnInit, OnDestroy {\n @Input() upload: UploadQueueItem;\n public progress: UploadQueueItemProgress = {};\n private subscription: Subscription;\n\n constructor(\n private uploadQueue: UploadQueueService,\n private store: Store,\n private cd: ChangeDetectorRef,\n ) {}\n\n ngOnInit() {\n this.subscription = this.upload.progress$.pipe(\n // material progress bar animation lasts 250ms\n throttleTime(260, animationFrameScheduler, {leading: true, trailing: true}),\n ).subscribe(progress => {\n this.progress = progress;\n this.cd.detectChanges();\n });\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n public cancelUpload(upload: UploadQueueItem) {\n this.uploadQueue.remove(upload.id);\n if (this.uploadQueue.isEmpty()) {\n this.store.dispatch(new CloseUploadsPanel());\n }\n }\n}\n","<div class=\"header\">\n <div class=\"info\">\n <ng-container *ngIf=\"activeUploads.count$ | async as count\">\n <ng-container *ngIf=\"count.pending > 0\">\n {{ 'Uploading' | trans }} {{count.pending}} {{(count.pending > 1 ? 'Items' : 'Item') | trans}}\n </ng-container>\n <ng-container *ngIf=\"count.pending === 0\">\n {{count.completed}} {{'items uploaded' | trans}}\n </ng-container>\n </ng-container>\n </div>\n <div class=\"actions\">\n <button mat-icon-button (click)=\"toggleMinimized()\">\n <mat-icon svgIcon=\"keyboard-arrow-up\" *ngIf=\"minimized$ | async; else notMinimized\" class=\"minimize-icon\"></mat-icon>\n <ng-template #notMinimized>\n <mat-icon svgIcon=\"keyboard-arrow-down\" class=\"minimize-icon\"></mat-icon>\n </ng-template>\n </button>\n <button mat-icon-button (click)=\"close()\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"uploads-list\" [class.hidden]=\"minimized$ | async\">\n <uploads-panel-item *ngFor=\"let upload of activeUploads.uploads$ | async; trackBy: trackById\" [upload]=\"upload\"></uploads-panel-item>\n</div>\n","import { ChangeDetectionStrategy, Component, OnDestroy, ViewEncapsulation } from '@angular/core';\nimport { UploadQueueService } from '@common/uploads/upload-queue/upload-queue.service';\nimport { UploadQueueItem } from '@common/uploads/upload-queue/upload-queue-item';\nimport { Store } from '@ngxs/store';\nimport { CloseUploadsPanel } from '../../state/actions/commands';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'uploads-panel',\n templateUrl: './uploads-panel.component.html',\n styleUrls: ['./uploads-panel.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadsPanelComponent implements OnDestroy {\n public minimized$ = new BehaviorSubject(false);\n\n constructor(\n private store: Store,\n public activeUploads: UploadQueueService,\n ) {\n }\n\n ngOnDestroy() {\n this.activeUploads.reset();\n }\n\n public toggleMinimized() {\n this.minimized$.next(!this.minimized$.value);\n }\n\n public close() {\n this.store.dispatch(new CloseUploadsPanel());\n }\n\n public trackById(index: number, upload: UploadQueueItem) {\n return upload.id;\n }\n}\n","import {Injector, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DriveRoutingModule} from './drive-routing.module';\nimport {DriveComponent} from './drive.component';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {MatSidenavModule} from '@angular/material/sidenav';\nimport {MatTabsModule} from '@angular/material/tabs';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatTreeModule} from '@angular/material/tree';\nimport {SidebarComponent} from './sidebar/sidebar.component';\nimport {FoldersTreeComponent} from './sidebar/folders-tree/folders-tree.component';\nimport {FilesGridComponent} from './files/components/files-grid/files-grid.component';\nimport {FileThumbnailComponent} from './files/components/file-thumbnail/file-thumbnail.component';\nimport {FilesGridItemComponent} from './files/components/files-grid/files-grid-item/files-grid-item.component';\nimport {DriveHammerInteractionsDirective} from './interactions/drive-hammer-interactions.directive';\nimport {FileIconComponent} from './files/components/file-icon/file-icon.component';\nimport {DRIVE_CONTEXT_MENUS} from './context-actions/drive-context-menus';\nimport {DriveContextMenuComponent} from './context-actions/components/drive-context-menu/drive-context-menu.component';\nimport {SidebarActionButtonsComponent} from './sidebar/sidebar-action-buttons/sidebar-action-buttons.component';\nimport {CrupdateFolderDialogComponent} from './folders/components/crupdate-folder-dialog/crupdate-folder-dialog.component';\nimport {RenameEntryDialogComponent} from './entries/rename-entry-dialog/rename-entry-dialog.component';\nimport {EntryDragPreviewComponent} from './interactions/entry-drag-preview/entry-drag-preview.component';\nimport {EntryBreadcrumbsComponent} from './drive-toolbar/entry-breadcrumbs/entry-breadcrumbs.component';\nimport {UploadsPanelComponent} from './uploads/uploads-panel/uploads-panel.component';\nimport {MoveEntriesDialogComponent} from './entries/move-entries-dialog/move-entries-dialog.component';\nimport {FolderDropTargetDirective} from './interactions/drop-targets/folder-drop-target.directive';\nimport {DriveToolbarComponent} from './drive-toolbar/drive-toolbar.component';\nimport {ToolbarActionsComponent} from './drive-toolbar/toolbar-actions/toolbar-actions.component';\nimport {MainSearchbarComponent} from './search/main-searchbar.component';\nimport {UploadDropzoneComponent} from './uploads/upload-dropzone/upload-dropzone.component';\nimport {EntriesContainerComponent} from './entries/entries-container/entries-container.component';\nimport {DetailsPanelComponent} from './details-sidebar/details-panel/details-panel.component';\nimport {FilePreviewOverlayComponent} from './preview/file-preview-overlay/file-preview-overlay.component';\nimport {FilePreviewToolbarComponent} from './preview/file-preview-overlay/file-preview-toolbar/file-preview-toolbar.component';\nimport {OverlayHandler} from './state/handlers/overlay-handler';\nimport {DownloadHandler} from './state/handlers/donwlod-handler';\nimport {ToastHandler} from './state/handlers/toast-handler';\nimport {UploadPanelHandler} from './state/handlers/upload-panel-handler';\nimport {DialogHandler} from './state/handlers/dialog-handler';\nimport {SharingModule} from './sharing/sharing.module';\nimport {DetailsSidebarComponent} from './details-sidebar/details-sidebar.component';\nimport {FileListHeaderComponent} from './header/file-list-header/file-list-header.component';\nimport {DriveInfiniteScrollDirective} from './interactions/drive-infinite-scroll.directive';\nimport {ResetScrollHandler} from './state/handlers/reset-scroll-handler';\nimport {FilesListComponent} from './files/components/files-list/files-list.component';\nimport {ToggleSelectedClassDirective} from './interactions/toggle-selected-class.directive';\nimport {PageChangeHandler} from './state/handlers/page-change-handler';\nimport {PageLoadHandler} from './state/handlers/page-load-handler';\nimport {RemoveStarHandler} from './state/handlers/remove-star-handler';\nimport {NoFolderEntriesComponent} from './messages/no-folder-entries/no-folder-entries.component';\nimport {NoTrashedEntriesComponent} from './messages/no-trashed-entries/no-trashed-entries.component';\nimport {NoStarredEntriesComponent} from './messages/no-starred-entries/no-starred-entries.component';\nimport {NoRecentEntriesComponent} from './messages/no-recent-entries/no-recent-entries.component';\nimport {UploadsPanelItemComponent} from './uploads/uploads-panel/uploads-panel-item/uploads-panel-item.component';\nimport {NgxsModule} from '@ngxs/store';\nimport {ShareDialogState} from './sharing/state/share-dialog.state';\nimport {ShareLinkState} from './sharing/links/share-link.state';\nimport {DriveState} from './state/drive-state';\nimport {AvailableSpaceIndicatorComponent} from './sidebar/available-space-indicator/available-space-indicator.component';\nimport {LoadingToastComponent} from './messages/loading-toast/loading-toast.component';\nimport {LinkPreviewContainerComponent} from './preview/link-preview-container/link-preview-container.component';\nimport {LinkPreviewPasswordPanelComponent} from './preview/link-preview-container/link-preview-password-panel/link-preview-password-panel.component';\nimport {ContextActionsContainerComponent} from './context-actions/components/context-actions-container/context-actions-container.component';\nimport {DRIVE_UPLOAD_INPUT_CONFIG} from './upload-input-config';\nimport {NoSearchEntriesComponent} from './messages/no-search-entries/no-search-entries.component';\nimport {EntryDescriptionPanelComponent} from './details-sidebar/details-panel/entry-description-panel/entry-description-panel.component';\nimport {FolderPreviewComponent} from './preview/folder-preview/folder-preview.component';\nimport {EntriesSortButtonComponent} from './header/entries-sort-button/entries-sort-button.component';\nimport {MaterialNavbarModule} from '@common/core/ui/material-navbar/material-navbar.module';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {FormatPipesModule} from '@common/core/ui/format-pipes/format-pipes.module';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {NoResultsMessageModule} from '@common/core/ui/no-results-message/no-results-message.module';\nimport {LoadingIndicatorModule} from '@common/core/ui/loading-indicator/loading-indicator.module';\nimport {ContextMenuModule} from '@common/core/ui/context-menu/context-menu.module';\nimport {AdHostModule} from '@common/core/ui/ad-host/ad-host.module';\nimport {FilePreviewModule} from '@common/file-preview/file-preview.module';\nimport {AVAILABLE_CONTEXT_MENUS} from '@common/core/ui/context-menu/available-context-menus';\nimport {UploadsModule} from '@common/uploads/uploads.module';\nimport {Toast} from '@common/core/ui/toast.service';\nimport {PreviewFilesService} from '@common/file-preview/preview-files.service';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {UploadInputConfig} from '@common/uploads/upload-input-config';\nimport {Settings} from '../../common/core/config/settings.service';\nimport {WorkspaceSelectorModule} from '../../common/workspaces/workspace-selector/workspace-selector.module';\nimport {SkeletonModule} from '../../common/core/ui/skeleton/skeleton.module';\nimport {\n WORKSPACE_CONFIG,\n WorkspaceConfig,\n} from '../../common/workspaces/workspace-config';\nimport {DatatableModule} from '../../common/datatable/datatable.module';\nimport {SearchInputWithFiltersModule} from '../../common/datatable/datatable-filters/search-input-with-filters/search-input-with-filters.module';\nimport {SvgImageModule} from '../../common/core/ui/svg-image/svg-image.module';\n\nexport const STATE_HANDLERS = [\n OverlayHandler,\n DownloadHandler,\n ToastHandler,\n UploadPanelHandler,\n DialogHandler,\n ResetScrollHandler,\n PageChangeHandler,\n PageLoadHandler,\n RemoveStarHandler,\n];\n\n@NgModule({\n imports: [\n CommonModule,\n UploadsModule,\n DriveRoutingModule,\n FilePreviewModule,\n FormsModule,\n SharingModule,\n MaterialNavbarModule,\n TranslationsModule,\n FormatPipesModule,\n ReactiveFormsModule,\n NoResultsMessageModule,\n LoadingIndicatorModule,\n ContextMenuModule,\n AdHostModule,\n WorkspaceSelectorModule,\n SkeletonModule,\n DatatableModule,\n SearchInputWithFiltersModule,\n SvgImageModule,\n\n // material\n MatSidenavModule,\n MatTreeModule,\n MatButtonModule,\n MatDialogModule,\n MatProgressBarModule,\n MatIconModule,\n MatTooltipModule,\n MatTabsModule,\n MatProgressSpinnerModule,\n MatMenuModule,\n\n // state\n NgxsModule.forFeature([\n DriveState,\n ShareDialogState,\n ShareLinkState,\n ]),\n ],\n declarations: [\n DriveComponent,\n SidebarComponent,\n FoldersTreeComponent,\n FilesGridComponent,\n FileThumbnailComponent,\n DriveHammerInteractionsDirective,\n FilesGridItemComponent,\n FileIconComponent,\n DriveContextMenuComponent,\n SidebarActionButtonsComponent,\n CrupdateFolderDialogComponent,\n RenameEntryDialogComponent,\n EntryDragPreviewComponent,\n DriveToolbarComponent,\n EntryBreadcrumbsComponent,\n UploadsPanelComponent,\n MoveEntriesDialogComponent,\n FolderDropTargetDirective,\n ToolbarActionsComponent,\n MainSearchbarComponent,\n UploadDropzoneComponent,\n NoFolderEntriesComponent,\n NoTrashedEntriesComponent,\n NoStarredEntriesComponent,\n NoRecentEntriesComponent,\n NoSearchEntriesComponent,\n EntriesContainerComponent,\n DetailsSidebarComponent,\n DetailsPanelComponent,\n FilePreviewOverlayComponent,\n FilePreviewToolbarComponent,\n FileListHeaderComponent,\n DriveInfiniteScrollDirective,\n FilesListComponent,\n ToggleSelectedClassDirective,\n UploadsPanelItemComponent,\n AvailableSpaceIndicatorComponent,\n LoadingToastComponent,\n LinkPreviewContainerComponent,\n LinkPreviewPasswordPanelComponent,\n ContextActionsContainerComponent,\n EntryDescriptionPanelComponent,\n FolderPreviewComponent,\n EntriesSortButtonComponent,\n ],\n providers: [\n // fix angular lazy loaded entry components issue\n OverlayPanel,\n PreviewFilesService,\n Toast,\n\n // handlers\n ...STATE_HANDLERS,\n {\n provide: AVAILABLE_CONTEXT_MENUS,\n useValue: DRIVE_CONTEXT_MENUS,\n multi: true,\n },\n {\n provide: DRIVE_UPLOAD_INPUT_CONFIG,\n deps: [Settings],\n useFactory: (settings) => {\n const uploadInputConfig: UploadInputConfig = {multiple: true};\n\n const extensions = settings.getJson('drive.validation.allowed_extensions');\n if (extensions) {\n uploadInputConfig.extensions = extensions.map(ext => '.' + ext);\n }\n\n return uploadInputConfig;\n },\n },\n {\n provide: WORKSPACE_CONFIG,\n useValue: {\n description: 'Workspaces are shared spaces where teams can store, share and collaborate on files and folders.',\n } as WorkspaceConfig\n }\n ]\n})\nexport class DriveModule {\n constructor(private injector: Injector) {\n STATE_HANDLERS.forEach(handler => this.injector.get(handler));\n }\n}\n","import { Actions, ofActionSuccessful } from '@ngxs/store';\nimport { CloseUploadsPanel, OpenUploadsPanel } from '../actions/commands';\nimport { OverlayPanel } from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport { UploadsPanelComponent } from '../../uploads/uploads-panel/uploads-panel.component';\nimport { OverlayPanelRef } from '@common/core/ui/overlay-panel/overlay-panel-ref';\nimport { CurrentUser } from '@common/auth/current-user';\nimport { OverlayPanelConfig } from '@common/core/ui/overlay-panel/overlay-panel-config';\nimport { Injectable } from '@angular/core';\n\nconst overlayConfig: OverlayPanelConfig = {\n origin: 'global',\n hasBackdrop: false,\n position: {right: '10px', bottom: '10px'},\n mobilePosition: {left: 0, bottom: 0}\n};\n\n@Injectable()\nexport class UploadPanelHandler {\n private uploadPanelRef: OverlayPanelRef<UploadsPanelComponent>;\n\n constructor(\n private actions$: Actions,\n private currentUser: CurrentUser,\n private overlayPanel: OverlayPanel,\n ) {\n this.actions$\n .pipe(ofActionSuccessful(OpenUploadsPanel))\n .subscribe(() => {\n this.openUploadsPanel();\n });\n\n this.actions$\n .pipe(ofActionSuccessful(CloseUploadsPanel))\n .subscribe(() => {\n this.closeUploadsPanel();\n });\n\n this.currentUser.model$.subscribe(() => {\n this.closeUploadsPanel();\n });\n }\n\n public openUploadsPanel() {\n if (this.uploadPanelRef) return;\n this.uploadPanelRef = this.overlayPanel\n .open(UploadsPanelComponent, overlayConfig);\n }\n\n private closeUploadsPanel() {\n if ( ! this.uploadPanelRef) return;\n this.uploadPanelRef.close();\n this.uploadPanelRef = null;\n }\n}\n","import { Actions, ofActionDispatched, Store } from '@ngxs/store';\nimport { OpenConfirmDialog, OpenDialog } from '../actions/commands';\nimport { Injectable } from '@angular/core';\nimport { Modal } from '@common/core/ui/dialogs/modal.service';\nimport { ConfirmModalComponent } from '@common/core/ui/confirm-modal/confirm-modal.component';\n\n@Injectable()\nexport class DialogHandler {\n constructor(\n private actions$: Actions,\n private dialog: Modal,\n private store: Store,\n ) {\n this.actions$.pipe(ofActionDispatched(OpenDialog))\n .subscribe((action: OpenDialog) => {\n this.dialog.open(action.dialog, action.data, action.config);\n });\n\n this.actions$.pipe(ofActionDispatched(OpenConfirmDialog))\n .subscribe((action: OpenConfirmDialog) => {\n this.openConfirmDialog(action);\n });\n }\n\n private openConfirmDialog(action: OpenConfirmDialog) {\n this.dialog.open(ConfirmModalComponent, action.data)\n .beforeClosed()\n .subscribe(confirmed => {\n if ( ! confirmed) return;\n return this.store.dispatch(action.confirmAction);\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharingPermissionsButtonComponent } from './sharing-permissions-button/sharing-permissions-button.component';\nimport { ShareDialogComponent } from './share-dialog/share-dialog.component';\nimport { EntriesAccessTableComponent } from './entries-access-table/entries-access-table.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { LinkOptionsComponent } from './links/link-options/link-options.component';\nimport { ShareLinkDialogComponent } from './share-link-dialog/share-link-dialog.component';\nimport { NoSharedEntriesComponent } from './no-shared-entries/no-shared-entries.component';\nimport { TranslationsModule } from '@common/core/translations/translations.module';\nimport { LoadingIndicatorModule } from '@common/core/ui/loading-indicator/loading-indicator.module';\nimport { Modal } from '@common/core/ui/dialogs/modal.service';\nimport { ChipsModule } from '@common/core/ui/chips/chips.module';\nimport {SvgImageModule} from '../../../common/core/ui/svg-image/svg-image.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslationsModule,\n LoadingIndicatorModule,\n\n // material\n MatSlideToggleModule,\n MatTabsModule,\n MatDialogModule,\n ChipsModule,\n MatIconModule,\n MatMenuModule,\n MatButtonModule,\n MatTooltipModule,\n MatCheckboxModule,\n SvgImageModule,\n ],\n declarations: [\n ShareDialogComponent,\n EntriesAccessTableComponent,\n SharingPermissionsButtonComponent,\n LinkOptionsComponent,\n ShareLinkDialogComponent,\n NoSharedEntriesComponent,\n ],\n exports: [NoSharedEntriesComponent],\n providers: [Modal],\n})\nexport class SharingModule {}\n","import { Actions, ofActionSuccessful } from '@ngxs/store';\nimport { ReloadPageEntries } from '../actions/commands';\nimport { DriveDomCacheService } from '../../interactions/drive-dom-cache.service';\nimport { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class ResetScrollHandler {\n constructor(\n private actions$: Actions,\n private domCache: DriveDomCacheService\n ) {\n this.actions$.pipe(ofActionSuccessful(ReloadPageEntries))\n .subscribe(() => {\n this.domCache.scrollCont.scrollTo({top: 0});\n });\n }\n}\n","import { Store } from '@ngxs/store';\nimport { DeselectAllEntries } from '../actions/commands';\nimport { DriveState } from '../drive-state';\nimport { filter } from 'rxjs/operators';\nimport { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class PageChangeHandler {\n constructor(\n private store: Store\n ) {\n this.store.select(DriveState.activePage)\n .pipe(filter(page => !!page))\n .subscribe(() => {\n this.store.dispatch(new DeselectAllEntries());\n });\n }\n}\n","import { Actions, ofActionSuccessful, Store } from '@ngxs/store';\nimport { RouterNavigation, RouterState } from '@ngxs/router-plugin';\nimport {\n FolderPageOpened,\n RecentEntriesPageOpened,\n SearchPageOpened,\n SharesFolderOpened,\n StarredPageOpened,\n TrashPageOpened, WorkspacesIndexPageOpened,\n} from '../actions/events';\nimport { DRIVE_PAGE_NAMES } from '../models/drive-page';\nimport { filter } from 'rxjs/operators';\nimport { CurrentUser } from '@common/auth/current-user';\nimport { Injectable } from '@angular/core';\n\nconst LINK_PREVIEW_PAGE = 's';\n\n@Injectable()\nexport class PageLoadHandler {\n constructor(\n private store: Store,\n private actions$: Actions,\n private currentUser: CurrentUser,\n ) {\n this.actions$\n .pipe(\n ofActionSuccessful(RouterNavigation),\n filter((action: RouterNavigation) => action.event.urlAfterRedirects.indexOf('drive') > -1),\n filter(() => this.currentUser.isLoggedIn()),\n )\n .subscribe(() => {\n const action = this.getPageLoadAction();\n if (action) this.store.dispatch(action);\n });\n }\n\n private getPageLoadAction() {\n const params = this.getPageUriParams();\n switch (params.pageName) {\n case DRIVE_PAGE_NAMES.RECENT:\n return new RecentEntriesPageOpened();\n case DRIVE_PAGE_NAMES.TRASH:\n return new TrashPageOpened();\n case DRIVE_PAGE_NAMES.SHARES:\n return new SharesFolderOpened();\n case DRIVE_PAGE_NAMES.STARRED:\n return new StarredPageOpened();\n case DRIVE_PAGE_NAMES.SEARCH:\n const state = this.store.selectSnapshot(RouterState.state);\n const search = state.root.firstChild.queryParams;\n return new SearchPageOpened({filters: search.filters, query: search.query});\n case DRIVE_PAGE_NAMES.WORKSPACES:\n return new WorkspacesIndexPageOpened();\n case LINK_PREVIEW_PAGE:\n return null;\n default:\n return new FolderPageOpened(params.folderHash);\n }\n }\n\n private getPageUriParams() {\n // remove query params\n const uri = this.store.selectSnapshot(RouterState.url).split('?')[0];\n const [, pageName, folderHash] = uri.split('/').filter(x => !!x);\n return {pageName, folderHash};\n }\n}\n","import { Actions, ofActionSuccessful, Store } from '@ngxs/store';\nimport { RemoveEntries, RemoveStar } from '../actions/commands';\nimport { filter } from 'rxjs/operators';\nimport { DriveState } from '../drive-state';\nimport { DRIVE_PAGE_NAMES } from '../models/drive-page';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class RemoveStarHandler {\n constructor(\n private actions$: Actions,\n private store: Store\n ) {\n this.actions$.pipe(ofActionSuccessful(RemoveStar))\n .pipe(filter(() => {\n const name = this.store.selectSnapshot(DriveState.activePage).name;\n return name === DRIVE_PAGE_NAMES.STARRED;\n }))\n .subscribe((action: RemoveStar) => {\n this.store.dispatch(new RemoveEntries(action.entries));\n });\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ContextMenuDirective} from '@common/core/ui/context-menu/context-menu.directive';\n\n\n@NgModule({\n declarations: [\n ContextMenuDirective,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n ContextMenuDirective,\n ]\n})\nexport class ContextMenuModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TextPreviewComponent} from './text-preview/text-preview.component';\nimport {AVAILABLE_PREVIEWS, DefaultPreviews} from './available-previews';\nimport {PreviewContainerComponent} from './preview-container/preview-container.component';\nimport {PortalModule} from '@angular/cdk/portal';\nimport {VideoPreviewComponent} from './video-preview/video-preview.component';\nimport {ImagePreviewComponent} from './image-preview/image-preview.component';\nimport {PdfPreviewComponent} from './pdf-preview/pdf-preview.component';\nimport {DefaultPreviewComponent} from './default-preview/default-preview.component';\nimport {MatButtonModule} from '@angular/material/button';\nimport {AudioPreviewComponent} from './audio-preview/audio-preview.component';\nimport {GoogleDocsViewerComponent} from './google-docs-viewer/google-docs-viewer.component';\nimport {LoadingIndicatorModule} from '@common/core/ui/loading-indicator/loading-indicator.module';\nimport {OverlayPanel} from '@common/core/ui/overlay-panel/overlay-panel.service';\nimport {PreviewFilesService} from '@common/file-preview/preview-files.service';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\n\n@NgModule({\n imports: [\n CommonModule,\n TranslationsModule,\n\n // material\n PortalModule,\n MatButtonModule,\n LoadingIndicatorModule,\n ],\n exports: [\n PreviewContainerComponent,\n ],\n declarations: [\n PreviewContainerComponent,\n TextPreviewComponent,\n VideoPreviewComponent,\n ImagePreviewComponent,\n PdfPreviewComponent,\n DefaultPreviewComponent,\n AudioPreviewComponent,\n GoogleDocsViewerComponent\n ],\n providers: [\n OverlayPanel,\n PreviewFilesService,\n {provide: AVAILABLE_PREVIEWS, useClass: DefaultPreviews},\n ]\n})\nexport class FilePreviewModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { WorkspaceSelectorComponent } from './workspace-selector.component';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslationsModule } from '../../core/translations/translations.module';\nimport { MatButtonModule } from '@angular/material/button';\n\n\n\n@NgModule({\n declarations: [\n WorkspaceSelectorComponent,\n ],\n imports: [\n CommonModule,\n TranslationsModule,\n\n // material\n MatMenuModule,\n MatButtonModule,\n MatIconModule,\n ],\n exports: [\n WorkspaceSelectorComponent,\n ]\n})\nexport class WorkspaceSelectorModule { }\n","import {\n DatatableFilter,\n FilterControlType,\n} from '@common/datatable/datatable-filters/search-input-with-filters/filter-config/datatable-filter';\nimport { CreatedAtFilter, UpdatedAtFilter } from '@common/datatable/datatable-filters/search-input-with-filters/filter-config/timestamp-filter';\nimport { FindUserModalComponent } from '@common/auth/find-user-modal/find-user-modal.component';\n\nexport const FILE_ENTRY_TYPE_FILTER = new DatatableFilter({\n type: FilterControlType.Select,\n key: 'type',\n description: 'Type of the file',\n defaultValue: 'text',\n options: [\n {key: 'Text', value: 'text'},\n {key: 'Audio', value: 'audio'},\n {key: 'Video', value: 'video'},\n {key: 'Image', value: 'image'},\n {key: 'PDF', value: 'pdf'},\n {key: 'Spreadsheet', value: 'spreadsheet'},\n {key: 'Word Document', value: 'word'},\n {key: 'Photoshop', value: 'photoshop'},\n {key: 'Archive', value: 'archive'},\n {key: 'Folder', value: 'folder'},\n ],\n});\n\nexport const FILE_ENTRY_INDEX_FILTERS: DatatableFilter[] = [\n FILE_ENTRY_TYPE_FILTER,\n new DatatableFilter({\n type: FilterControlType.Select,\n key: 'public',\n label: 'status',\n defaultValue: false,\n description: 'Whether file is publicly accessible',\n options: [\n {key: 'Private', value: false},\n {key: 'Public', value: true},\n ],\n }),\n new CreatedAtFilter({\n description: 'Date file was uploaded',\n }),\n new UpdatedAtFilter({\n description: 'Date file was last changed',\n }),\n new DatatableFilter({\n type: FilterControlType.SelectModel,\n key: 'owner_id',\n label: 'Uploader',\n description: 'User that this file was uploaded by',\n component: FindUserModalComponent,\n }),\n];\n","<div class=\"modal-header\">\n <h2 mat-dialog-title trans>Find User</h2>\n <button type=\"button\" (click)=\"close()\" class=\"no-style close-button\" tabindex=\"-1\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <div class=\"input-container search-input-container\">\n <input\n type=\"text\"\n placeholder=\"Search for user by name or email...\"\n [formControl]=\"searchFormControl\"\n />\n <loading-indicator [isVisible]=\"loading$ | async\" class=\"small\"></loading-indicator>\n </div>\n\n <div class=\"users\">\n <div class=\"user\" *ngFor=\"let user of users$ | async\" (click)=\"close(user)\">\n <img [src]=\"user.avatar\" />\n <div class=\"meta overflow-hidden\">\n <div class=\"name overflow-hidden\">{{ user.display_name }}</div>\n <div class=\"email overflow-hidden\">{{ user.email }}</div>\n </div>\n </div>\n </div>\n</mat-dialog-content>\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {FormControl} from '@angular/forms';\nimport {catchError, debounceTime, distinctUntilChanged, switchMap} from 'rxjs/operators';\nimport {BehaviorSubject, Observable, of} from 'rxjs';\nimport {Users} from '../users.service';\nimport {User} from '../../core/types/models/User';\nimport {NormalizedModel} from '@common/core/types/models/normalized-model';\n\n@Component({\n selector: 'find-user-modal',\n templateUrl: './find-user-modal.component.html',\n styleUrls: ['./find-user-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FindUserModalComponent implements OnInit {\n searchFormControl = new FormControl();\n loading$ = new BehaviorSubject(false);\n users$ = new BehaviorSubject<User[]>([]);\n\n constructor(\n private dialogRef: MatDialogRef<FindUserModalComponent>,\n private users: Users\n ) {}\n\n ngOnInit() {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(250),\n distinctUntilChanged(),\n switchMap(query => this.searchUsers(query)),\n catchError(() => of([]))\n )\n .subscribe(users => {\n this.users$.next(users);\n this.loading$.next(false);\n });\n }\n\n close(user?: User) {\n this.dialogRef.close(this.normalizeUser(user));\n }\n\n private searchUsers(query: string): Observable<User[]> {\n this.loading$.next(true);\n if (!query) {\n return of([]);\n }\n return this.users.getAll({query});\n }\n\n private normalizeUser(user?: User): NormalizedModel {\n if (user) {\n return {\n id: user.id,\n name: user.display_name,\n image: user.avatar,\n model_type: user.model_type,\n };\n }\n return null;\n }\n}\n","export enum Keycodes {\n ENTER = 13,\n SPACE = 32,\n ESCAPE = 27,\n DELETE = 46,\n ARROW_UP = 38,\n ARROW_RIGHT = 39,\n ARROW_DOWN = 40,\n ARROW_LEFT = 37,\n BACKSPACE = 8,\n TAB = 9,\n S = 83,\n N = 78,\n A = 65,\n T = 84,\n B = 66,\n C = 67,\n O = 79,\n P = 80,\n R = 82,\n F = 70,\n Y = 89,\n Z = 90,\n}\n","import {Injectable} from '@angular/core';\nimport {Keycodes} from './keycodes.enum';\nimport {fromEvent, Subscription} from 'rxjs';\n\ninterface ParsedKeybind {\n ctrl: boolean;\n shift: boolean;\n key: string;\n}\n\n// TODO: refactor so keybinds are stored for a specific \"listenOn\" element instead of globally\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Keybinds {\n private bindings = [];\n\n public add(keybinds: string|string[], callback: (e: KeyboardEvent) => void) {\n if ( ! Array.isArray(keybinds)) {\n keybinds = [keybinds];\n }\n keybinds.forEach(keybind => {\n this.bindings.push({keybind: this.parseKeybindString(keybind), keybindString: keybind, callback});\n });\n }\n\n public addWithPreventDefault(keybind: string, callback: Function) {\n this.bindings.push({keybind: this.parseKeybindString(keybind), keybindString: keybind, callback, preventDefault: true});\n }\n\n public listenOn(el: HTMLElement|Document, options: {fireIfInputFocused?: boolean} = {}): Subscription {\n return fromEvent(el, 'keydown').subscribe((e: KeyboardEvent) => {\n if (options.fireIfInputFocused || !['input', 'select'].includes(document.activeElement.nodeName.toLowerCase())) {\n this.executeBindings(e);\n }\n });\n }\n\n private executeBindings(e: KeyboardEvent) {\n this.bindings.forEach(binding => {\n if ( ! this.bindingMatches(binding.keybind, e)) return;\n if (binding.preventDefault && e.preventDefault) e.preventDefault();\n binding.callback(e);\n });\n }\n\n private bindingMatches(keybind: ParsedKeybind, e: KeyboardEvent) {\n return Keycodes[keybind.key.toUpperCase()] === e.keyCode &&\n (e.ctrlKey === keybind.ctrl || e.metaKey === keybind.ctrl) &&\n e.shiftKey === keybind.shift;\n }\n\n /**\n * Parse keybind string into object.\n */\n private parseKeybindString(keybind: string): ParsedKeybind {\n const parts = keybind.trim().split('+');\n const parsed = {ctrl: false, shift: false, key: ''};\n\n parts.forEach(part => {\n part = part.trim().toLowerCase();\n\n if (part === 'ctrl') {\n parsed.ctrl = true;\n } else if (part === 'shift') {\n parsed.shift = true;\n } else {\n parsed.key = part;\n }\n });\n\n return parsed;\n }\n}\n","<mat-chip-list #chipList [selectable]=\"false\">\n <mat-chip\n *ngFor=\"let item of items$ | async; index as i\"\n [selectable]=\"false\"\n [removable]=\"!selectMode\"\n (removed)=\"remove(i)\"\n >\n {{displayChipValue(item)}}\n <mat-icon matChipRemove svgIcon=\"cancel\"></mat-icon>\n </mat-chip>\n <input [placeholder]=\"placeholder | trans\"\n *ngIf=\"!selectMode\"\n #inputEl\n [type]=\"type\"\n class=\"mat-chip-input mat-input-element\"\n [matChipInputFor]=\"chipList\"\n [matChipInputAddOnBlur]=\"true\"\n [matAutocomplete]=\"auto\"\n [matAutocompleteConnectedTo]=\"{elementRef: el}\"\n [formControl]=\"formControl\"\n (matChipInputTokenEnd)=\"addFromChipInput($event.value)\" />\n</mat-chip-list>\n\n<mat-autocomplete class=\"chip-input-autocomplete-panel\" #auto=\"matAutocomplete\" (optionSelected)=\"addFromAutocomplete($event.option.value)\" [autoActiveFirstOption]=\"true\">\n <mat-option *ngFor=\"let value of suggestedValues$ | async\" [value]=\"value\">{{displayChipValue(value)}}</mat-option>\n</mat-autocomplete>\n\n<ng-template #selectModeTemplate let-suggestions=\"suggestions\">\n <mat-option *ngFor=\"let value of suggestions\" [value]=\"value\">{{displayChipValue(value)}}</mat-option>\n</ng-template>\n","import {\n AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input, OnInit, TemplateRef, ViewChild, ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject, Observable, of} from 'rxjs';\nimport {MatAutocomplete} from '@angular/material/autocomplete';\nimport {catchError, debounceTime, distinctUntilChanged, switchMap} from 'rxjs/operators';\nimport {Model} from '../../../types/models/model';\n\ntype ChipValue = 'string' | Model;\n\n@Component({\n selector: 'chip-input',\n templateUrl: './chip-input.component.html',\n styleUrls: ['./chip-input.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: ChipInputComponent,\n multi: true,\n }]\n})\nexport class ChipInputComponent implements ControlValueAccessor, OnInit, AfterViewInit {\n @Input() placeholder: string;\n @Input() type = 'text';\n @Input() emailsInput = false;\n @Input() suggestFn: (query: string) => Observable<ChipValue[]>;\n @Input() @HostBinding('class.select-mode') selectMode = false;\n @ViewChild('auto') matAutocomplete: MatAutocomplete;\n @ViewChild('inputEl') inputEl: ElementRef<HTMLInputElement>;\n @ViewChild('selectModeTemplate') selectModeTemplate: TemplateRef<any>;\n\n public formControl = new FormControl();\n\n public propagateChange: (items: ChipValue[]) => void;\n public items$ = new BehaviorSubject<ChipValue[]>([]);\n public suggestedValues$ = new BehaviorSubject<ChipValue[]>([]);\n @Input() set suggestedValues(values: ChipValue[]) {\n this.suggestedValues$.next(values);\n }\n\n constructor(\n public el: ElementRef<HTMLElement>,\n ) {}\n\n ngOnInit() {\n if (this.suggestFn) {\n this.bindToSearchControl();\n }\n if (this.selectMode) {\n // TODO: implement\n }\n }\n\n ngAfterViewInit() {\n if (this.emailsInput) {\n this.parseEmailsOnPaste();\n }\n }\n\n public remove(index: number) {\n const items = [...this.items$.value];\n items.splice(index, 1);\n this.items$.next(items);\n this.propagateChange(this.items$.value);\n }\n\n public addFromChipInput(value: ChipValue, propagate = true) {\n if (value && !this.matAutocomplete.isOpen && !this.selectMode) {\n this.add(value, propagate);\n }\n }\n\n public addFromAutocomplete(value: ChipValue, propagate = true) {\n this.add(value, propagate);\n }\n\n private add(value: ChipValue, propagate = true) {\n value = (typeof value === 'string' ? value.trim() : value) as ChipValue;\n const duplicate = this.findValueIndex(value) > -1;\n if (value && !duplicate) {\n this.items$.next([...this.items$.value, value]);\n if (propagate) {\n this.propagateChange(this.items$.value);\n }\n }\n if (this.inputEl) {\n this.inputEl.nativeElement.value = '';\n }\n this.formControl.setValue(null);\n this.suggestedValues$.next([]);\n }\n\n private findValueIndex(value: ChipValue) {\n if (typeof value === 'string') {\n return this.items$.value.indexOf(value);\n } else {\n return this.items$.value.findIndex(v => (v as Model).id === value.id);\n }\n }\n\n public writeValue(value: ChipValue[] = []) {\n this.items$.next(value || []);\n // if (value && value.length) {\n // value.forEach(item => this.add(item, false));\n // } else if (this.items$.value.length) {\n // while (this.items$.value.length !== 0) {\n // this.remove(0);\n // }\n // }\n }\n\n public registerOnChange(fn: (items: ChipValue[]) => void) {\n this.propagateChange = fn;\n }\n\n public registerOnTouched() {}\n\n private bindToSearchControl() {\n this.formControl.valueChanges.pipe(\n debounceTime(150),\n distinctUntilChanged(),\n switchMap(query => query ? this.suggestFn(query) : of([])),\n catchError(() => of([])),\n ).subscribe(values => {\n const filtered = values.filter(v => this.findValueIndex(v) === -1);\n this.suggestedValues$.next(filtered);\n });\n }\n\n public displayChipValue(value: ChipValue): string {\n return typeof value === 'object' ? value.name : value;\n }\n\n private parseEmailsOnPaste() {\n this.inputEl.nativeElement.addEventListener('paste', e => {\n const paste = (e.clipboardData || window['clipboardData']).getData('text');\n const emails = paste.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi);\n if (emails) {\n e.preventDefault();\n const selection = window.getSelection();\n if (selection.rangeCount) {\n selection.deleteFromDocument();\n emails.forEach(email => this.add(email));\n }\n }\n });\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ChipInputComponent} from './chip-input/chip-input.component';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatIconModule} from '@angular/material/icon';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatRippleModule} from '@angular/material/core';\n\n@NgModule({\n imports: [\n CommonModule,\n MatChipsModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n TranslationsModule,\n\n MatButtonModule,\n MatIconModule,\n MatRippleModule,\n ],\n declarations: [\n ChipInputComponent,\n ],\n exports: [\n ChipInputComponent,\n ]\n})\nexport class ChipsModule {\n}\n","import {animate, style, transition, trigger} from '@angular/animations';\n\nexport const SKELETON_ANIMATIONS = [\n trigger('fadeIn', [\n transition(':enter', [\n style({opacity: 0}),\n animate('325ms ease-in', style({\n opacity: 1,\n }))\n ])\n ]),\n trigger('fadeOut', [\n transition(':leave', [\n style({opacity: 1, position: 'absolute', left: '0', right: '0'}),\n animate('325ms ease-out', style({\n opacity: 0\n }))\n ])\n ])\n];\n","import {ChangeDetectionStrategy, Component, HostBinding, Input} from '@angular/core';\nimport {ThemeService} from '../../theme.service';\n\n@Component({\n selector: 'skeleton',\n templateUrl: './skeleton.component.html',\n styleUrls: ['./skeleton.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'aria-busy': 'true',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n 'aria-valuetext': 'Loading...',\n 'role': 'progressbar',\n }\n})\nexport class SkeletonComponent {\n @Input() animation: 'pulsate' | 'wave' = 'wave';\n @Input() variant: 'avatar' | 'text' | 'rect' | 'icon' = 'text';\n @HostBinding('class.dark') dark = this.theme.isDarkMode();\n\n @HostBinding('class.pulsate') get pulsate() {\n return this.animation === 'pulsate';\n }\n\n @HostBinding('class.wave') get wave() {\n return this.animation === 'wave';\n }\n\n @HostBinding('class.avatar') get avatar() {\n return this.variant === 'avatar';\n }\n\n @HostBinding('class.text') get text() {\n return this.variant === 'text';\n }\n\n @HostBinding('class.rect') get rect() {\n return this.variant === 'rect';\n }\n\n @HostBinding('class.icon') get icon() {\n return this.variant === 'icon';\n }\n\n constructor(private theme: ThemeService) {}\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SkeletonComponent} from './skeleton.component';\n\n@NgModule({\n declarations: [\n SkeletonComponent,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n SkeletonComponent,\n ]\n})\nexport class SkeletonModule {\n}\n","export function hasKey<K extends string>(key: K, val: any): val is {[P in K]: any} {\n return key in val;\n}\n","export function removeNullFromObject<T>(obj: T): T {\n const copy = {...obj};\n Object.keys(copy).forEach(key => {\n if (copy[key] == null || copy[key] === '') {\n delete copy[key];\n }\n });\n return copy;\n}\n","import {ComponentType} from '@angular/cdk/portal';\nimport {NormalizedModel} from '@common/core/types/models/normalized-model';\n\nexport class DatatableFilter {\n defaultValue: FilterValue | '';\n defaultOperator: FilterOperator;\n key: string;\n label: string;\n description: string;\n required: boolean;\n order: number;\n type: FilterControlType;\n inputType: 'string' | 'number';\n options: {key?: string; value: string | boolean | object | number}[];\n operators: FilterOperator[] | undefined;\n component?: ComponentType<any>;\n componentData?: any;\n\n constructor(options: DatatableFilterOptions) {\n this.defaultValue =\n options.defaultValue !== undefined ? options.defaultValue : '';\n this.key = options.key || '';\n this.label = options.label || options.key || '';\n this.description = options.description || '';\n this.defaultOperator = options.defaultOperator || FilterOperator.eq;\n this.required = !!options.required;\n this.order = options.order === undefined ? 1 : options.order;\n this.type = options.type || FilterControlType.Select;\n this.inputType = options.inputType;\n this.options = options.options || [];\n this.operators = options.operators;\n this.component = options.component;\n this.componentData = options.componentData;\n }\n}\n\nexport interface DatatableFilterOptions {\n defaultValue?: FilterValue | '';\n key?: string;\n label?: string;\n description: string;\n component?: ComponentType<any>;\n componentData?: any;\n defaultOperator?: FilterOperator;\n required?: boolean;\n order?: number;\n type?: FilterControlType;\n inputType?: 'string' | 'number';\n options?: {key?: string; value: string | boolean | object | number}[];\n operators?: FilterOperator[];\n}\n\nexport enum FilterControlType {\n Select = 'select',\n DatePicker = 'datePicker',\n SelectModel = 'selectModel',\n Input = 'input',\n StaticValue = 'staticValue',\n}\n\nexport enum FilterOperator {\n eq = '=',\n ne = '!=',\n gt = '>',\n gte = '>=',\n lt = '<',\n lte = '<=',\n has = 'has',\n doesntHave = 'doesntHave',\n}\n\nexport type FilterValueWithOperator = {\n value: FilterValue;\n operator: FilterOperator;\n};\nexport const ALL_PRIMITIVE_OPERATORS = [\n FilterOperator.eq,\n FilterOperator.ne,\n FilterOperator.gt,\n FilterOperator.gte,\n FilterOperator.lt,\n FilterOperator.lte,\n];\n\nexport type FilterValue =\n | string\n | number\n | boolean\n | NormalizedModel\n | FilterValueWithOperator\n | null;\n","import {\n ALL_PRIMITIVE_OPERATORS,\n DatatableFilter,\n FilterControlType,\n FilterOperator,\n} from './datatable-filter';\n\nexport class TimestampFilter extends DatatableFilter {\n type = FilterControlType.DatePicker;\n operators = ALL_PRIMITIVE_OPERATORS;\n defaultOperator = FilterOperator.lte;\n defaultValue = new Date().toISOString().split('T')[0];\n}\n\nexport class CreatedAtFilter extends TimestampFilter {\n key = 'created_at';\n label = 'Created At';\n}\n\nexport class UpdatedAtFilter extends TimestampFilter {\n key = 'updated_at';\n label = 'Updated At';\n}\n\n\n","<div class=\"table\">\n <div class=\"filter-suggestion-header row\">\n <div class=\"column\" trans>Field</div>\n <div class=\"column\" trans>Description</div>\n </div>\n <div class=\"body\" role=\"list\">\n <div\n role=\"listitem\"\n class=\"row filter-suggestion-item\"\n *ngFor=\"let filter of filters | keyvalue: originalOrder; index as index\"\n tabindex=\"0\"\n #filterSuggestion\n [attr.data-filter-key]=\"filter.key\"\n [attr.data-index]=\"index\"\n (click)=\"filterSelected.emit(filter.value)\"\n >\n <div class=\"column label-column\" trans>{{ filter.value.label }}</div>\n <div class=\"column\" trans>{{ filter.value.description }}</div>\n </div>\n </div>\n</div>\n\n<div class=\"help-container\">\n <mat-icon svgIcon=\"info\"></mat-icon>\n <div trans>\n Use arrows, tab or mouse to navigate added filters. Backspace or delete key to remove them.\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport {DatatableFilter} from '../filter-config/datatable-filter';\n\nconst ITEM_CLASS = 'filter-suggestion-item';\n\n@Component({\n selector: 'filter-suggestions',\n templateUrl: './filter-suggestions.component.html',\n styleUrls: ['./filter-suggestions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterSuggestionsComponent {\n @Input() filters: {[key: string]: DatatableFilter};\n @Output() filterSelected = new EventEmitter<DatatableFilter>();\n @ViewChildren('filterSuggestion') items: QueryList<ElementRef<HTMLElement>>;\n\n anyFocused(): boolean {\n return document.activeElement.classList.contains(ITEM_CLASS);\n }\n\n focusItemAt(index: number) {\n this.items.get(index).nativeElement.focus();\n }\n\n getFocusedFilter(): DatatableFilter {\n if (this.anyFocused()) {\n const k = (document.activeElement as HTMLElement).dataset.filterKey;\n return this.filters[k];\n }\n }\n\n getFocusedIndex(): number {\n if (this.anyFocused()) {\n const el = document.activeElement as HTMLElement;\n return parseInt(el.dataset.index);\n }\n }\n\n originalOrder = (): number => {\n return 0;\n };\n}\n","<ng-container *ngIf=\"value$ | async as value; else defaultHint\">\n <img class=\"image\" [src]=\"value.image\" />\n <div class=\"name\">{{ value.name }}</div>\n</ng-container>\n<ng-template #defaultHint>\n <div trans>Click to select</div>\n</ng-template>\n","import {ChangeDetectionStrategy, Component, HostListener, Input} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject} from 'rxjs';\nimport {NormalizedModel} from '@common/core/types/models/normalized-model';\nimport {Modal} from '@common/core/ui/dialogs/modal.service';\nimport {DatatableFilter} from '@common/datatable/datatable-filters/search-input-with-filters/filter-config/datatable-filter';\n\ntype propagateFn = (value: NormalizedModel) => void;\n\n@Component({\n selector: 'select-model-control',\n templateUrl: './select-model-control.component.html',\n styleUrls: ['./select-model-control.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: SelectModelControlComponent,\n multi: true,\n },\n ],\n})\nexport class SelectModelControlComponent implements ControlValueAccessor {\n @Input() filter: DatatableFilter;\n private propagateChange: propagateFn;\n value$ = new BehaviorSubject<NormalizedModel>(null);\n\n constructor(private dialog: Modal) {}\n\n registerOnChange(fn: propagateFn): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {}\n\n writeValue(value: NormalizedModel) {\n this.value$.next(value);\n }\n\n @HostListener('click')\n onClick() {\n this.openSelectModelDialog();\n }\n\n openSelectModelDialog() {\n this.dialog\n .open(this.filter.component, this.filter.componentData)\n .afterClosed()\n .subscribe((model: NormalizedModel) => {\n if (model) {\n this.value$.next(model);\n this.propagateChange(model);\n }\n });\n }\n}\n","import { FilterOperator } from '@common/datatable/datatable-filters/search-input-with-filters/filter-config/datatable-filter';\n\nexport const FILTER_OPERATOR_NAMES: {[op in FilterOperator]: string} = {\n '=': 'is',\n '!=': 'is not',\n '>': 'is greater than',\n '>=': 'is greater than or equal to',\n '<': 'is less than',\n '<=': 'is less than or equal to',\n has: 'Include',\n doesntHave: 'Do not include',\n};\n\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {FilterOperator} from '../../filter-config/datatable-filter';\nimport {FILTER_OPERATOR_NAMES} from '../../../filter-operator-names';\nimport {BreakpointsService} from '../../../../../core/ui/breakpoints.service';\n\n@Pipe({\n name: 'operatorDisplayName',\n})\nexport class OperatorDisplayNamePipe implements PipeTransform {\n constructor(private breakpoints: BreakpointsService) {}\n transform(value: FilterOperator, compact: boolean): string {\n return compact || this.breakpoints.isMobile$.value\n ? value\n : FILTER_OPERATOR_NAMES[value];\n }\n}\n","<ng-container [formGroup]=\"formGroup\">\n <select\n class=\"operator-select\"\n formControlName=\"operator\"\n #select\n (ngModelChange)=\"resizeSelect()\"\n >\n <option [value]=\"operator\" *ngFor=\"let operator of operators\">\n {{ operator | operatorDisplayName:compact }}\n </option>\n </select>\n</ng-container>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {FilterOperator} from '../../filter-config/datatable-filter';\n\n@Component({\n selector: 'operator-select',\n templateUrl: './operator-select.component.html',\n styleUrls: ['./operator-select.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OperatorSelectComponent implements AfterViewInit {\n @Input() compact: boolean;\n @Input() formGroup: FormGroup;\n @Input() operators: FilterOperator[];\n @ViewChild('select') select: ElementRef<HTMLSelectElement>;\n\n ngAfterViewInit() {\n this.resizeSelect();\n }\n\n resizeSelect() {\n const select = this.select?.nativeElement;\n if (select && select.selectedIndex > -1) {\n const valueLength =\n select.options[select.selectedIndex].label.length;\n select.style.width = `${valueLength + 5}ch`;\n }\n }\n}\n","<ng-container [formGroup]=\"formGroup\" *ngIf=\"form.controls[key] as formGroup\">\n <div class=\"filter-label\" (click)=\"el.nativeElement.focus()\" trans>{{ filter.label }}</div>\n <operator-select\n *ngIf=\"filter.operators\"\n [compact]=\"compact\"\n [formGroup]=\"formGroup\"\n [operators]=\"filter.operators\"\n ></operator-select>\n <ng-container [ngSwitch]=\"filter.type\">\n <div class=\"filter-input-container\" *ngSwitchCase=\"'select'\">\n <select\n [id]=\"key\"\n #valueInput\n class=\"filter-input filter-value\"\n formControlName=\"value\"\n (ngModelChange)=\"resizeInput()\"\n [compareWith]=\"compareFilterValueFn\"\n >\n <option *ngFor=\"let option of filter.options\" [ngValue]=\"option.value\" trans>\n {{ option.key || option.value }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"caret-svg\">\n <path d=\"M7 10l5 5 5-5z\"></path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n </div>\n <div class=\"date-picker-container\" *ngSwitchCase=\"'datePicker'\">\n <input\n type=\"date\"\n class=\"date-input filter-value\"\n #valueInput\n [id]=\"key\"\n formControlName=\"value\"\n />\n </div>\n <select-model-control\n [filter]=\"filter\"\n *ngSwitchCase=\"'selectModel'\"\n #valueInput\n [id]=\"key\"\n formControlName=\"value\"\n class=\"filter-value select-model-input\"\n ></select-model-control>\n <div class=\"filter-input-container\" *ngSwitchCase=\"'input'\">\n <input\n #valueInput\n [id]=\"key\"\n formControlName=\"value\"\n (ngModelChange)=\"resizeInput()\"\n [type]=\"filter.inputType || 'text'\"\n class=\"filter-input filter-value\"\n min=\"1\"\n required\n />\n </div>\n </ng-container>\n</ng-container>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n ViewChild,\n} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {\n DatatableFilter,\n FilterValue,\n} from '../../filter-config/datatable-filter';\nimport * as deepequal from 'fast-deep-equal';\nimport {SelectModelControlComponent} from '../select-model-control/select-model-control.component';\n\n@Component({\n selector: 'active-filter',\n templateUrl: './active-filter.component.html',\n styleUrls: ['./active-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n tabIndex: '0',\n role: 'button',\n },\n})\nexport class ActiveFilterComponent implements AfterViewInit {\n @HostBinding('attr.data-control-key') @Input() key: string;\n @Input() compact: boolean;\n @Input() form: FormGroup;\n @Input() filter: DatatableFilter;\n @ViewChild('valueInput') valueInput:\n | SelectModelControlComponent\n | ElementRef<HTMLSelectElement | HTMLInputElement>;\n\n constructor(public el: ElementRef<HTMLElement>) {}\n\n ngAfterViewInit() {\n this.resizeInput();\n }\n\n focus() {\n this.el.nativeElement.focus();\n }\n\n focusValueInput() {\n if (this.valueInput instanceof SelectModelControlComponent) {\n this.valueInput.openSelectModelDialog();\n } else if (this.valueInput?.nativeElement) {\n this.valueInput.nativeElement.focus();\n }\n }\n\n resizeInput() {\n const el = (this.valueInput as ElementRef)?.nativeElement;\n if (el?.nodeName === 'SELECT') {\n const select = el as HTMLSelectElement;\n if (select.selectedIndex > -1) {\n const valueLength =\n select.options[select.selectedIndex].label.length;\n select.style.width = `${valueLength + 5}ch`;\n }\n } else if (el?.nodeName === 'INPUT' && el.type !== 'date') {\n const input = el as HTMLInputElement;\n input.style.width = `${input.value.length + 7}ch`;\n }\n }\n\n compareFilterValueFn = (val1: FilterValue, val2: FilterValue) => {\n return deepequal(val1, val2);\n };\n}\n","<ng-container *ngFor=\"let control of form.controls | keyvalue; index as index\">\n <active-filter\n [compact]=\"compact\"\n [key]=\"control.key\"\n [form]=\"form\"\n [filter]=\"filter\"\n *ngIf=\"config[control.value.value.key] as filter\"\n [attr.data-index]=\"index\"\n ></active-filter>\n</ng-container>\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {DatatableFilter} from '../filter-config/datatable-filter';\nimport {randomString} from '@common/core/utils/random-string';\nimport {ActiveFilterComponent} from './active-filter/active-filter.component';\n\ninterface AddFilterOptions {\n value?: any;\n operator?: string;\n focus?: boolean;\n}\n\n@Component({\n selector: 'active-filters',\n templateUrl: './active-filters.component.html',\n styleUrls: ['./active-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ActiveFiltersComponent {\n @Input() compact: boolean;\n @Input() form: FormGroup;\n @Input() config: DatatableFilter;\n @ViewChildren(ActiveFilterComponent)\n filters: QueryList<ActiveFilterComponent>;\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n public el: ElementRef<HTMLElement>\n ) {}\n\n add(config: DatatableFilter, opts: AddFilterOptions = {}) {\n const value =\n opts.value !== undefined ? opts.value : config.defaultValue;\n const control = this.fb.group({\n key: config.key,\n value,\n operator: opts.operator || config.defaultOperator,\n });\n const key = Object.keys(this.form.controls).length + randomString(8);\n // don't reload the table if filter does not have any default value (select model/user filter for example)\n this.form.addControl(key, control, {emitEvent: value !== ''});\n this.cd.detectChanges();\n if (opts.focus) {\n this.filters.last.focusValueInput();\n }\n }\n\n removeByKey(key: string) {\n this.form.removeControl(key);\n this.cd.markForCheck();\n }\n\n removeCurrentlyFocused() {\n const activeEl = document.activeElement as HTMLElement;\n this.removeByKey(activeEl.dataset.controlKey);\n }\n\n anyFocused(): boolean {\n return document.activeElement.nodeName === 'ACTIVE-FILTER';\n }\n\n focusLast() {\n if (this.filters.last) {\n this.filters.last.focus();\n }\n }\n\n focusPrevious() {\n const i = this.getFocusedIndex();\n const previous = this.filters.get(i - 1);\n if (previous) {\n previous.focus();\n }\n }\n\n getByIndex(index: number) {\n return this.filters.get(index);\n }\n\n lastIsFocused() {\n const i = this.getFocusedIndex();\n return i === this.filters.length - 1;\n }\n\n getFocusedIndex(): number {\n const i = (document.activeElement as HTMLElement).dataset.index;\n return i ? parseInt(i) : null;\n }\n}\n","<active-filters [form]=\"form\" [config]=\"keyedFilters\" [compact]=\"compact\">\n <div class=\"input-container search-input-container\">\n <mat-icon class=\"search-icon\" svgIcon=\"search\"></mat-icon>\n <input\n type=\"text\"\n class=\"search-input\"\n #searchInput\n [placeholder]=\"('Type to search for ' + pluralName) | trans\"\n [formControl]=\"searchControl\"\n (focus)=\"inputFocus.emit()\"\n />\n </div>\n</active-filters>\n\n<button type=\"button\" class=\"clear-button\" (click)=\"clearSearch()\" *ngIf=\"haveFiltersOrQuery$ | async\" mat-icon-button>\n <mat-icon svgIcon=\"close\"></mat-icon>\n</button>\n\n<button\n type=\"button\"\n mat-button\n class=\"filter-button\"\n (click)=\"toggleFilterDropdown()\"\n *ngIf=\"keyedFilters\"\n>\n <mat-icon class=\"filter-button-icon\" svgIcon=\"filter-list\"></mat-icon>\n <span class=\"filter-button-text\" *ngIf=\"!compact\" trans>Filter</span>\n</button>\n\n<filter-suggestions\n [filters]=\"keyedFilters\"\n (filterSelected)=\"addFilterFromDropdownClick($event)\"\n [style.top]=\"filterBarHeight + 5 + 'px'\"\n [class.visible]=\"filterDropdownVisible$ | async\"\n></filter-suggestions>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport {FormBuilder, FormControl} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {distinctUntilChanged, filter, map, startWith} from 'rxjs/operators';\nimport {\n BehaviorSubject,\n combineLatest,\n fromEvent,\n merge,\n Observable,\n Subscription,\n} from 'rxjs';\nimport {\n DatatableFilter,\n FilterValue,\n} from '@common/datatable/datatable-filters/search-input-with-filters/filter-config/datatable-filter';\nimport {Keybinds} from '@common/core/keybinds/keybinds.service';\nimport {FilterSuggestionsComponent} from './filter-suggestions/filter-suggestions.component';\nimport {ActiveFiltersComponent} from './active-filters/active-filters.component';\n\ninterface FormData {\n [key: string]: {\n key: string;\n value: {value: FilterValue; operator: string} | FilterValue;\n operator: string;\n };\n}\n\n@Component({\n selector: 'search-input-with-filters',\n templateUrl: './search-input-with-filters.component.html',\n styleUrls: ['./search-input-with-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SearchInputWithFiltersComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() compact: boolean;\n @Input() searchControl: FormControl;\n @Input() pluralName: string;\n @Input() set filters(filters: DatatableFilter[]) {\n if (filters) {\n this.keyedFilters = {};\n (filters || []).forEach(filter => {\n this.keyedFilters[filter.key] = filter;\n });\n } else {\n this.keyedFilters = null;\n }\n }\n\n @Output() filterChange = new EventEmitter<string>();\n @Output() inputFocus = new EventEmitter();\n\n @ViewChild('searchInput') searchInput: ElementRef<HTMLInputElement>;\n @ViewChild(FilterSuggestionsComponent) suggestions: FilterSuggestionsComponent;\n @ViewChild(ActiveFiltersComponent) activeFilters: ActiveFiltersComponent;\n @ViewChildren('filterSuggestion') filterContainers: QueryList<\n ElementRef<HTMLElement>\n >;\n\n keyedFilters: {[key: string]: DatatableFilter};\n\n form = this.fb.group({});\n\n filterBarHeight = 0;\n filterDropdownVisible$ = new BehaviorSubject<boolean>(false);\n private closeActionsStream$: Subscription;\n\n haveFiltersOrQuery$: Observable<boolean>;\n\n constructor(\n private fb: FormBuilder,\n private route: ActivatedRoute,\n private el: ElementRef<HTMLElement>,\n private keybinds: Keybinds,\n private cd: ChangeDetectorRef,\n private router: Router\n ) {}\n\n ngOnInit() {\n this.haveFiltersOrQuery$ = combineLatest([\n this.searchControl.valueChanges.pipe(startWith(null)),\n this.form.valueChanges.pipe(startWith(null)),\n ]).pipe(map(([s, f]) => s || (f && Object.keys(f).length !== 0)));\n }\n\n ngAfterViewInit() {\n this.watchForSizeChanges();\n this.setFiltersFromQuery();\n this.setupKeybinds();\n this.subscribeToCloseActions();\n this.bindToFormValueChange();\n }\n\n @HostListener('click', ['$event'])\n onClick(e: MouseEvent) {\n if (\n e.target === this.el.nativeElement ||\n e.target === this.activeFilters.el.nativeElement\n ) {\n this.searchInput.nativeElement.focus();\n }\n }\n\n ngOnDestroy() {\n this.closeActionsStream$?.unsubscribe();\n }\n\n clearSearch() {\n Object.keys(this.form.controls).forEach(key => {\n this.activeFilters.removeByKey(key);\n });\n // prevent double datatable reload\n this.searchControl.reset(null, {emitEvent: false});\n this.form.reset();\n }\n\n toggleFilterDropdown() {\n if (this.filterDropdownVisible$.value) {\n this.filterDropdownVisible$.next(false);\n } else {\n this.filterDropdownVisible$.next(true);\n }\n }\n\n addFilterFromDropdownClick(config: DatatableFilter) {\n this.activeFilters.add(config, {focus: true});\n this.filterDropdownVisible$.next(false);\n }\n\n private searchInputIsFocused(): boolean {\n return document.activeElement === this.searchInput.nativeElement;\n }\n\n private cursorAtStartOfSearchInput(): boolean {\n return (\n this.searchInputIsFocused() &&\n this.searchInput.nativeElement.selectionStart === 0\n );\n }\n\n private cursorAtEndOfSearchInput(): boolean {\n return (\n this.searchInputIsFocused() &&\n this.searchInput.nativeElement.selectionStart ===\n this.searchInput.nativeElement.value.length\n );\n }\n\n private bindToFormValueChange() {\n this.form.valueChanges\n .pipe(\n map(v => (Object.keys(v).length ? v : null)),\n distinctUntilChanged()\n )\n .subscribe((formData: FormData) => {\n this.filterChange.emit(formData ? encodeFilterFormData(formData) : null);\n });\n }\n\n private watchForSizeChanges() {\n const resizeObserver = new ResizeObserver(entries => {\n this.filterBarHeight = entries[0].contentRect.height;\n });\n resizeObserver.observe(this.el.nativeElement, {box: 'border-box'});\n }\n\n private setFiltersFromQuery() {\n const qp = this.router.routerState.root.snapshot.queryParams;\n if (qp.filters) {\n const filterValues = decodeFilterString(qp.filters);\n filterValues.forEach(filterValue => {\n this.activeFilters.add(this.keyedFilters[filterValue.key], filterValue);\n });\n }\n if (qp.query) {\n this.searchControl.setValue(qp.query);\n }\n }\n\n private setupKeybinds() {\n this.keybinds.add(['backspace', 'delete'], () => {\n if (this.cursorAtStartOfSearchInput()) {\n return this.activeFilters.focusLast();\n }\n if (this.activeFilters.anyFocused()) {\n this.activeFilters.removeCurrentlyFocused();\n return this.searchInput.nativeElement.focus();\n }\n });\n\n this.keybinds.add('arrow_left', e => {\n if (this.cursorAtStartOfSearchInput()) {\n this.activeFilters.focusLast();\n e.preventDefault();\n } else if (this.activeFilters.anyFocused()) {\n this.activeFilters.focusPrevious();\n e.preventDefault();\n }\n });\n\n this.keybinds.add('arrow_right', e => {\n if (this.activeFilters.anyFocused()) {\n e.preventDefault();\n const i = this.activeFilters.getFocusedIndex();\n const next = this.activeFilters.getByIndex(i + 1);\n if (next) {\n next.focus();\n } else if (this.activeFilters.lastIsFocused()) {\n this.searchInput.nativeElement.focus();\n }\n }\n });\n\n this.keybinds.add(['arrow_down', 'tab'], e => {\n if (this.cursorAtEndOfSearchInput() || this.suggestions.anyFocused()) {\n e.preventDefault();\n if (!this.filterDropdownVisible$.value) {\n this.toggleFilterDropdown();\n }\n const currentIndex = this.suggestions.getFocusedIndex();\n let newIndex = currentIndex > -1 ? currentIndex : 0;\n if (this.suggestions.anyFocused()) {\n newIndex += 1;\n }\n if (newIndex >= this.suggestions.items.length) {\n newIndex = 0;\n }\n this.suggestions.focusItemAt(newIndex);\n }\n });\n\n this.keybinds.add(['arrow_up', 'shift+tab'], e => {\n if (this.suggestions.anyFocused()) {\n e.preventDefault();\n const currentIndex = this.activeFilters.getFocusedIndex();\n let newIndex = currentIndex > -1 ? currentIndex : 0;\n newIndex -= 1;\n if (newIndex === -1) {\n this.searchInput.nativeElement.focus();\n } else {\n this.suggestions.focusItemAt(newIndex);\n }\n }\n });\n\n this.keybinds.add('enter', e => {\n const focused = this.suggestions.getFocusedFilter();\n if (focused) {\n e.preventDefault();\n this.activeFilters.add(focused, {focus: true});\n this.filterDropdownVisible$.next(false);\n }\n });\n\n this.keybinds.add('esc', e => {\n if (this.filterDropdownVisible$.value) {\n e.preventDefault();\n this.filterDropdownVisible$.next(false);\n }\n });\n\n this.keybinds.listenOn(document, {\n fireIfInputFocused: true,\n });\n }\n\n private subscribeToCloseActions() {\n this.closeActionsStream$ = merge(\n fromEvent(document, 'click') as Observable<MouseEvent>,\n fromEvent(document, 'auxclick') as Observable<MouseEvent>,\n fromEvent(document, 'touchend') as Observable<TouchEvent>\n )\n .pipe(\n filter(event => {\n const clickTarget = event.target as HTMLElement;\n return (\n clickTarget !== this.el.nativeElement &&\n !this.el.nativeElement.contains(clickTarget)\n );\n })\n )\n .subscribe(() => {\n this.filterDropdownVisible$.next(false);\n });\n }\n}\n\nconst encodeFilterFormData = (formData: FormData): string => {\n const filters = [];\n Object.values(formData).forEach(filter => {\n if (filter.value !== '') {\n filters.push(filter);\n }\n });\n if (!filters.length) {\n return '';\n }\n return encodeURIComponent(btoa(JSON.stringify(filters)));\n};\n\nconst decodeFilterString = (filterString: string): DecodedValue[] => {\n let filtersFromQuery = [];\n try {\n filtersFromQuery = JSON.parse(atob(decodeURIComponent(filterString)));\n } catch (e) {\n //\n }\n return filtersFromQuery;\n};\n\ninterface DecodedValue {\n key: string;\n value: {value: FilterValue; operator: string};\n operator: string;\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SearchInputWithFiltersComponent} from './search-input-with-filters.component';\nimport {ActiveFiltersComponent} from './active-filters/active-filters.component';\nimport {ActiveFilterComponent} from './active-filters/active-filter/active-filter.component';\nimport {OperatorSelectComponent} from './active-filters/operator-select/operator-select.component';\nimport {FilterSuggestionsComponent} from './filter-suggestions/filter-suggestions.component';\nimport {OperatorDisplayNamePipe} from './active-filters/operator-select/operator-display-name.pipe';\nimport {SelectModelControlComponent} from './active-filters/select-model-control/select-model-control.component';\nimport {TranslationsModule} from '@common/core/translations/translations.module';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {SelectModelDialogComponent} from '@common/datatable/datatable-filters/select-model-dialog/select-model-dialog.component';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {LoadingIndicatorModule} from '@common/core/ui/loading-indicator/loading-indicator.module';\n\n@NgModule({\n declarations: [\n SearchInputWithFiltersComponent,\n ActiveFiltersComponent,\n ActiveFilterComponent,\n OperatorSelectComponent,\n FilterSuggestionsComponent,\n OperatorDisplayNamePipe,\n SelectModelControlComponent,\n SelectModelDialogComponent,\n ],\n imports: [\n CommonModule,\n TranslationsModule,\n ReactiveFormsModule,\n MatIconModule,\n MatButtonModule,\n MatDialogModule,\n LoadingIndicatorModule,\n ],\n exports: [SearchInputWithFiltersComponent],\n})\nexport class SearchInputWithFiltersModule {}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TableSortHeaderComponent} from './table-sort-header/table-sort-header.component';\nimport {MatIconModule} from '@angular/material/icon';\nimport {TranslationsModule} from '../core/translations/translations.module';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {UserColumnComponent} from './columns/user-column/user-column.component';\nimport {TableBodyCheckboxComponent} from './selection/table-body-checkbox.component';\nimport {TableHeaderCheckboxComponent} from './selection/table-header-checkbox.component';\nimport {DatatableFooterComponent} from './datatable-footer/datatable-footer.component';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {DatatableHeaderComponent} from './datatable-header/datatable-header.component';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {DatatableFiltersPanelComponent} from './datatable-filters-panel/datatable-filters-panel.component';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {ChipsModule} from '../core/ui/chips/chips.module';\nimport {DatatableHeaderSearchInputComponent} from './datatable-header/datatable-header-search-input/datatable-header-search-input.component';\nimport {NoResultsMessageModule} from '../core/ui/no-results-message/no-results-message.module';\nimport {NoResultsMessageComponent} from '../core/ui/no-results-message/no-results-message.component';\nimport {FormatPipesModule} from '@common/core/ui/format-pipes/format-pipes.module';\nimport {DatatableFiltersComponent} from '@common/datatable/datatable-filters/datatable-filters.component';\nimport {DatatablePageHeaderComponent} from '@common/datatable/datatable-page-header/datatable-page-header.component';\nimport {SearchInputWithFiltersModule} from './datatable-filters/search-input-with-filters/search-input-with-filters.module';\nimport {RouterModule} from '@angular/router';\n\n@NgModule({\n declarations: [\n TableSortHeaderComponent,\n UserColumnComponent,\n TableBodyCheckboxComponent,\n TableHeaderCheckboxComponent,\n DatatableFooterComponent,\n DatatableHeaderComponent,\n DatatableHeaderSearchInputComponent,\n DatatableFiltersPanelComponent,\n DatatableHeaderSearchInputComponent,\n DatatableFiltersComponent,\n DatatablePageHeaderComponent,\n ],\n imports: [\n CommonModule,\n TranslationsModule,\n ReactiveFormsModule,\n FormsModule,\n ChipsModule,\n NoResultsMessageModule,\n FormatPipesModule,\n SearchInputWithFiltersModule,\n RouterModule,\n\n // material\n MatButtonModule,\n MatIconModule,\n MatCheckboxModule,\n MatChipsModule,\n MatProgressBarModule,\n ],\n exports: [\n TableSortHeaderComponent,\n MatCheckboxModule,\n UserColumnComponent,\n TableBodyCheckboxComponent,\n TableHeaderCheckboxComponent,\n DatatableFooterComponent,\n DatatableHeaderComponent,\n DatatableFiltersPanelComponent,\n DatatableHeaderSearchInputComponent,\n NoResultsMessageComponent,\n DatatableFiltersComponent,\n DatatablePageHeaderComponent,\n ],\n})\nexport class DatatableModule {}\n","import {Params, Router} from '@angular/router';\nimport {BehaviorSubject, of, Subscription} from 'rxjs';\nimport {map, switchMap, tap} from 'rxjs/operators';\nimport {PaginationResponse} from '@common/core/types/pagination/pagination-response';\nimport {AppHttpClient} from '@common/core/http/app-http-client.service';\nimport {PaginatedBackendResponse} from '@common/core/types/pagination/paginated-backend-response';\nimport {PaginationParams} from '@common/core/types/pagination/pagination-params';\nimport {Injectable} from '@angular/core';\nimport {LocalStorage} from '@common/core/services/local-storage.service';\n\n@Injectable()\nexport class Paginator<T> {\n private subscription: Subscription;\n private params$ = new BehaviorSubject<PaginationParams>({});\n public paginatedOnce$ = new BehaviorSubject<boolean>(false);\n public loading$ = new BehaviorSubject(false);\n public response$ = new BehaviorSubject<{pagination: PaginationResponse<T>, [key: string]: any}>(null);\n public dontUpdateQueryParams = false;\n public perPageCacheKey: string = null;\n /** only true if data was already loaded from backend and it was empty */\n public noResults$ = this.response$.pipe(map(r => this.paginatedOnce$.value && r.pagination.data.length === 0));\n\n get params(): PaginationParams {\n return this.params$.value;\n }\n\n get currentPage(): number {\n return this.response$.value?.pagination?.current_page;\n }\n\n constructor(\n private router: Router,\n private http: AppHttpClient,\n private localStorage?: LocalStorage,\n ) {}\n\n public paginate(userParams: object = {}, url?: string, initialData?: PaginationResponse<T>) {\n // only use query params on first pagination, so query params can be removed via user params\n const queryParams = !this.subscription ? this.currentQueryParams() : {};\n const paginationParams = this.response$.value ? {\n perPage: this.response$.value.pagination.per_page,\n page: this.response$.value.pagination.current_page\n } : {};\n this.params$.next({...paginationParams, ...queryParams, ...userParams});\n\n if ( ! this.subscription) {\n this.init(url, initialData);\n }\n }\n\n public nextPage() {\n const current = this.response$.value.pagination.current_page || 0;\n this.paginate({\n ...this.params$.value,\n page: current + 1,\n cursor: this.response$.value.pagination.next_cursor,\n });\n }\n\n public previousPage() {\n const current = this.response$.value.pagination.current_page;\n this.paginate({\n ...this.params$.value,\n page: (current - 1) || 1,\n cursor: this.response$.value.pagination.prev_cursor,\n });\n }\n\n public changePerPage(newPerPage: number) {\n if (newPerPage !== this.params$.value?.perPage) {\n if (this.perPageCacheKey) {\n this.localStorage.set(this.perPageCacheKey, newPerPage);\n }\n this.paginate({\n ...this.params$.value,\n perPage: newPerPage\n });\n }\n }\n\n public currentQueryParams(): Params {\n return this.router.routerState.root.snapshot.queryParams;\n }\n\n private init(uri: string, initialData?: PaginationResponse<T>) {\n this.subscription = this.params$.pipe(\n switchMap(params => {\n this.loading$.next(true);\n const firstPagination = !this.paginatedOnce$.value;\n if (firstPagination && this.perPageCacheKey && this.localStorage.get(this.perPageCacheKey)) {\n params = {perPage: this.localStorage.get(this.perPageCacheKey), ...params};\n }\n\n // if we got initial pagination response (of 1st page)\n // return that instead of making 1st page http request\n const request = firstPagination && initialData ?\n of({pagination: initialData}) :\n this.http.get(uri, params);\n\n return (request as PaginatedBackendResponse<T>).pipe(\n // can't use \"finalize\" here as it will complete after loading$.next(true)\n // call above, which will prevent loading bar from showing\n // if pagination request is cancelled and new one is queued\n tap(() => {\n this.updateQueryParams(params);\n this.loading$.next(false);\n this.paginatedOnce$.next(true);\n }, () => {\n this.loading$.next(false);\n this.paginatedOnce$.next(true);\n })\n ) as PaginatedBackendResponse<T>;\n })\n ).subscribe(response => {\n this.response$.next(response);\n });\n }\n\n private updateQueryParams(params = {}) {\n if (this.dontUpdateQueryParams) return;\n for (const key in params) {\n if (Array.isArray(params[key])) {\n params[key] = params[key].join(',');\n }\n }\n this.router.navigate([], {queryParams: params, replaceUrl: true});\n }\n\n public canLoadNextPage(): boolean {\n const data = this.response$.value?.pagination;\n if (data) {\n return !!data.next_cursor || (this.currentPage < data.last_page);\n }\n return false;\n }\n\n public canLoadPrevPage(): boolean {\n const data = this.response$.value?.pagination;\n if (data) {\n return !!data.prev_cursor || (this.currentPage > 1);\n }\n return false;\n }\n}\n","import * as Dot from \"dot-object\";\nimport {_isNumberValue} from '@angular/cdk/coercion';\nimport {Model} from '@common/core/types/models/model';\n\nconst MAX_SAFE_INTEGER = 9007199254740991;\n\nexport function sortDatatableData<T extends Model>(data: T[], orderBy: string, orderDir: string): T[] {\n return data.sort((a, b) => {\n let valueA = sortingDataAccessor(a, orderBy);\n let valueB = sortingDataAccessor(b, orderBy);\n\n // If there are data in the column that can be converted to a number,\n // it must be ensured that the rest of the data\n // is of the same type so as not to order incorrectly.\n const valueAType = typeof valueA;\n const valueBType = typeof valueB;\n\n if (valueAType !== valueBType) {\n if (valueAType === 'number') {\n valueA += '';\n }\n if (valueBType === 'number') {\n valueB += '';\n }\n }\n\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n if (valueA > valueB) {\n comparatorResult = 1;\n } else if (valueA < valueB) {\n comparatorResult = -1;\n }\n } else if (valueA != null) {\n comparatorResult = 1;\n } else if (valueB != null) {\n comparatorResult = -1;\n }\n\n return comparatorResult * (orderDir === 'asc' ? 1 : -1);\n });\n}\n\n/**\n * Data accessor function that is used for accessing data properties for sorting through\n * the default sortData function.\n * This default function assumes that the sort header IDs (which defaults to the column name)\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n * May be set to a custom function for different behavior.\n */\nfunction sortingDataAccessor(data: object, sortHeaderId: string): string {\n const value = Dot.pick(sortHeaderId, data);\n\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n\n // if (Array.isArray(value)) {\n // return value.reduce((prev, curr) => prev += objectToStr(curr));\n // }\n\n return value;\n}\n","export function filterDatatableData<T = object>(data: T[], filter: string): T[] {\n return data.filter(obj => filterPredicate(obj as any, filter));\n}\n/**\n * Checks if a data object matches the data source's filter string. By default, each data object\n * is converted to a string of its properties and returns true if the filter has\n * at least one occurrence in that string. By default, the filter string has its whitespace\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\n * filter matching.\n * @param data Data object used to check against the filter.\n * @param filter Filter string that has been set on the data source.\n * @returns Whether the filter matches against the data\n */\nfunction filterPredicate(data: object|string, filter: string): boolean {\n // Transform the data into a lowercase string of all property values.\n const dataStr = typeof data === 'string' ? data : objectToStr(data);\n\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n\n return dataStr.indexOf(transformedFilter) !== -1;\n}\n\nexport function objectToStr(obj: object) {\n return Object.keys(obj).reduce((currentTerm: string, key: string) => {\n // Use an obscure Unicode character to delimit the words in the concatenated string.\n // This avoids matches where the values of two columns combined will match the user's query\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\n // that has a very low chance of being typed in by somebody in a text field. This one in\n // particular is \"White up-pointing triangle with dot\" from\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\n const term = (obj[key] && typeof obj[key] === 'object') ?\n objectToStr(obj[key]) :\n obj[key];\n return currentTerm + term + '◬';\n }, '').toLowerCase();\n}\n","import {Injectable} from '@angular/core';\nimport {\n animationFrameScheduler,\n BehaviorSubject,\n combineLatest,\n Subscription,\n} from 'rxjs';\nimport {Paginator} from '../shared/paginator.service';\nimport {debounceTime, filter, map, pairwise, tap} from 'rxjs/operators';\nimport {DatatableFilters, DatatableFilterValue} from './types/datatable-filters';\nimport {DatatableSort} from './types/datatable-sort';\nimport {PaginationParams} from '../core/types/pagination/pagination-params';\nimport {removeNullFromObject} from '../core/utils/remove-null-from-object';\nimport {ComponentType} from '@angular/cdk/portal';\nimport {MatDialogConfig} from '@angular/material/dialog';\nimport {Modal} from '../core/ui/dialogs/modal.service';\nimport {ConfirmModalComponent} from '../core/ui/confirm-modal/confirm-modal.component';\nimport {DELETE_RESOURCE_MESSAGE} from './delete-resource-message';\nimport {PaginationResponse} from '../core/types/pagination/pagination-response';\nimport {sortDatatableData} from '@common/datatable/utils/sort-datatable-data';\nimport {Model} from '@common/core/types/models/model';\nimport {filterDatatableData} from '@common/datatable/utils/filter-datatable-data';\nimport {Router} from '@angular/router';\nimport {AppHttpClient} from '@common/core/http/app-http-client.service';\nimport {LocalStorage} from '../core/services/local-storage.service';\nimport {FormControl} from '@angular/forms';\n\nexport type DatatableStaticParams = Record<string, string | number | boolean | string[]>;\n\ninterface DatatableConfig<T> {\n uri?: string;\n staticParams?: DatatableStaticParams;\n initialData?: PaginationResponse<T> | T[];\n disableSort?: boolean;\n infiniteScroll?: boolean;\n}\n\n@Injectable()\nexport class DatatableService<T extends Model> {\n public sort$ = new BehaviorSubject<DatatableSort>({});\n public filters$ = new BehaviorSubject<DatatableFilters>({});\n public searchControl = new FormControl();\n public searchTerm$ = new BehaviorSubject<string>(null);\n public staticParams$ = new BehaviorSubject<DatatableStaticParams>({});\n public paginator = new Paginator<T>(this.router, this.http, this.localStorage);\n private paginatorSub: Subscription;\n private mainSub: Subscription;\n private searchControlSub: Subscription;\n private ignoreNextParamChange = false;\n private originalData$ = new BehaviorSubject<T[]>([]);\n public data$ = new BehaviorSubject<T[]>([]);\n public selectedRows$ = new BehaviorSubject<number[]>([]);\n public config: DatatableConfig<T>;\n\n constructor(\n protected modal: Modal,\n protected router: Router,\n protected http: AppHttpClient,\n protected localStorage: LocalStorage\n ) {}\n\n get data() {\n return this.data$.value;\n }\n\n set data(data: T[]) {\n const tableData = [...data];\n this.originalData$.next(tableData);\n this.data$.next(tableData);\n\n // Reset filters and sort without trigger data reload via pagination\n this.ignoreNextParamChange = true;\n this.reset();\n }\n\n public init(config: DatatableConfig<T> = {}) {\n // TODO: don't add static params to current url query params\n\n this.config = config;\n this.staticParams$.next({\n ...this.staticParams$.value,\n ...config.staticParams,\n });\n if (config.uri) {\n this.connectToPaginator();\n } else if (config.initialData) {\n this.data = config.initialData as T[];\n }\n\n // set search term from queryParams\n if (config.uri) {\n const qp = this.router.routerState.root.snapshot.queryParams;\n const initialSearchTerm = qp.query as string;\n this.searchControl.setValue(initialSearchTerm);\n this.searchTerm$.next(initialSearchTerm);\n this.sort$.next({\n orderBy: qp.orderBy,\n orderDir: qp.orderDir,\n });\n }\n this.searchControlSub = this.searchControl.valueChanges\n .pipe(debounceTime(300))\n .subscribe(value => {\n this.searchTerm$.next(value);\n });\n\n this.mainSub = combineLatest([\n this.sort$,\n this.filters$,\n this.searchTerm$.pipe(\n map(query => {\n return {query};\n })\n ),\n // static params needs to be last, so it can override all the other params\n this.staticParams$,\n ])\n .pipe(\n debounceTime(0, animationFrameScheduler),\n map(params => Object.assign({}, ...params))\n )\n .subscribe((params: PaginationParams) => {\n if (this.ignoreNextParamChange) {\n return (this.ignoreNextParamChange = false);\n }\n params = removeNullFromObject(params);\n Object.entries(params).forEach(([key, value]) => {\n if (typeof value === 'object' && value.id) {\n params[`${key}Id`] = value.id;\n delete params[key];\n }\n });\n if (this.config.uri) {\n this.paginator.paginate(\n params,\n this.config.uri,\n this.config.initialData as PaginationResponse<T>\n );\n } else if (Object.keys(params).length && this.data.length) {\n this.applyLocalTransforms(params);\n }\n });\n\n return this;\n }\n\n private connectToPaginator() {\n this.paginatorSub = this.paginator.response$\n .pipe(pairwise())\n .subscribe(([prev, current]) => {\n // append data instead of overriding with next page data (infinite scroll).\n // if page did not change, we can assume that it was filter or sort\n // change and we should use only new data, even on infinite scroll\n const data =\n this.config.infiniteScroll &&\n prev?.pagination?.current_page !== current.pagination.current_page\n ? [...this.data$.value, ...current.pagination.data]\n : current.pagination.data;\n this.data$.next(data);\n });\n }\n\n private applyLocalTransforms(params: PaginationParams) {\n let data = [...this.originalData$.value];\n if (params.query) {\n data = filterDatatableData<T>(data, params.query);\n }\n if (params.orderBy && params.orderDir) {\n data = sortDatatableData<T>(data, params.orderBy, params.orderDir);\n }\n this.data$.next(data);\n }\n\n public addFilter(key: keyof DatatableFilters, value: DatatableFilterValue) {\n this.filters$.next({\n ...this.filters$.value,\n [key]: value,\n });\n }\n\n public removeFilter(key: keyof DatatableFilters) {\n const filters = {...this.filters$.value};\n delete filters[key];\n this.filters$.next(filters);\n }\n\n public reset(staticParams: DatatableStaticParams = null) {\n this.filters$.next({});\n this.sort$.next({});\n this.selectedRows$.next([]);\n if (staticParams) {\n this.staticParams$.next(staticParams);\n }\n }\n\n public openCrupdateResourceModal(\n cmp: ComponentType<any>,\n data?: object,\n config?: MatDialogConfig\n ) {\n return this.modal\n .open(cmp, data, config)\n .beforeClosed()\n .pipe(\n filter(modifiedResource => !!modifiedResource),\n tap(() => this.reset())\n );\n }\n\n public confirmResourceDeletion(resource: string) {\n const data = {...DELETE_RESOURCE_MESSAGE, replacements: {resource}};\n return this.modal\n .open(ConfirmModalComponent, data)\n .afterClosed()\n .pipe(filter(confirmed => confirmed));\n }\n\n public getCurrentParams() {\n return {\n ...this.sort$.value,\n ...this.filters$.value,\n ...this.staticParams$.value,\n ...this.paginator.params,\n };\n }\n\n public destroy() {\n this.paginatorSub?.unsubscribe();\n this.mainSub?.unsubscribe();\n this.searchControlSub?.unsubscribe();\n }\n}\n","import {ConfirmModalData} from '../core/ui/confirm-modal/confirm-modal.component';\n\nexport const DELETE_RESOURCE_MESSAGE: ConfirmModalData = {\n title: `Delete :resource`,\n body: `Are you sure you want to delete selected :resource?`,\n ok: 'Delete'\n};\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport {DatatableService} from '../datatable.service';\nimport {Subscription} from 'rxjs';\nimport {Model} from '../../core/types/models/model';\nimport {FocusMonitor} from '@angular/cdk/a11y';\nimport {filter} from 'rxjs/operators';\nimport {ENTER, SPACE} from '@angular/cdk/keycodes';\nimport {slugifyString} from '../../core/utils/slugify-string';\n\n@Component({\n selector: '[table-sort-header]',\n templateUrl: './table-sort-header.component.html',\n styleUrls: ['./table-sort-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'tabindex': '0',\n '(click)': 'handleClick()',\n '(keydown)': 'handleKeydown($event)',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n }\n})\nexport class TableSortHeaderComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('columnName', {static: true}) columnName: ElementRef<HTMLElement>;\n @Input('table-sort-header') public orderBy: string;\n\n @HostBinding('class.active')\n public orderDir: 'desc'|'asc'|null = null;\n\n @HostBinding('class.sort-disabled') get sortDisabled() {\n return this.datable.config?.disableSort;\n }\n\n private sortSub: Subscription;\n public arrowVisible = false;\n public arrowDirection: 'down'|'up' = 'down';\n\n constructor(\n public datable: DatatableService<Model>,\n private cd: ChangeDetectorRef,\n private focusMonitor: FocusMonitor,\n private el: ElementRef<HTMLElement>,\n ) {}\n\n ngOnInit() {\n // get column name from <ng-content> if none is explicitly provided\n if ( ! this.orderBy) {\n this.orderBy = slugifyString(this.columnName.nativeElement.textContent, '_');\n }\n\n // hide arrow when sort column is changed to different column\n this.sortSub = this.datable.sort$\n .pipe(filter(sort => (sort.orderBy !== this.orderBy)))\n .subscribe(() => {\n this.orderDir = null;\n this.onMouseLeave();\n this.cd.markForCheck();\n });\n }\n\n ngAfterViewInit() {\n // add '.cdk-keyboard-focused' when tabbing to other sort headers\n this.focusMonitor.monitor(this.el).subscribe();\n }\n\n ngOnDestroy() {\n this.sortSub.unsubscribe();\n this.focusMonitor.stopMonitoring(this.el);\n }\n\n public changeSort() {\n this.datable.sort$.next({\n orderBy: this.orderBy,\n orderDir: this.getDirection(this.orderDir),\n });\n }\n\n private getDirection(current: string) {\n switch (current) {\n case 'asc':\n this.arrowVisible = false;\n return this.orderDir = null;\n case 'desc':\n this.arrowVisible = true;\n this.arrowDirection = 'up';\n return this.orderDir = 'asc';\n default:\n this.arrowVisible = true;\n this.arrowDirection = 'down';\n return this.orderDir = 'desc';\n }\n }\n\n public onMouseEnter() {\n if ( ! this.datable.config?.disableSort) {\n this.arrowVisible = true;\n }\n }\n\n public onMouseLeave() {\n this.arrowVisible = false;\n if ( ! this.orderDir) {\n this.arrowDirection = 'down';\n }\n }\n\n public handleClick() {\n if ( ! this.datable.config?.disableSort) {\n this.changeSort();\n }\n }\n\n public handleKeydown(e: KeyboardEvent) {\n if ( !this.datable.config?.disableSort && (e.keyCode === SPACE || e.keyCode === ENTER)) {\n e.preventDefault();\n this.changeSort();\n }\n }\n}\n","<span class=\"text\" #columnName>\n <ng-content></ng-content>\n</span>\n<span class=\"icon-wrapper\" [ngClass]=\"arrowDirection\">\n <mat-icon svgIcon=\"arrow-downward\" class=\"sort-icon\" [class.hint-visible]=\"arrowVisible\"></mat-icon>\n</span>\n","import { Directive, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { openUploadWindow } from '../utils/open-upload-window';\nimport { UploadInputConfig } from '../upload-input-config';\nimport {UploadedFile} from '@common/uploads/uploaded-file';\n\n@Directive({\n selector: '[uploadButton]'\n})\nexport class UploadButtonDirective implements OnInit {\n @Input('uploadButton') config: UploadInputConfig = {};\n @Output() filesSelected = new EventEmitter<UploadedFile[]>();\n\n constructor(private el: ElementRef) {}\n\n ngOnInit() {\n this.el.nativeElement.addEventListener('click', e => {\n e.preventDefault();\n e.stopPropagation();\n\n openUploadWindow(this.config).then(files => {\n if (files && files.length) {\n this.filesSelected.emit(files);\n }\n });\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { prettyBytes } from '../core/utils/pretty-bytes';\n\n@Pipe({\n name: 'formattedFileSize',\n pure: true,\n})\nexport class FormattedFileSizePipe implements PipeTransform {\n transform(bytes: number = 0, precision?: number|string): string {\n if (isNaN(parseFloat(String(bytes))) || ! isFinite(bytes)) return '-';\n return prettyBytes(bytes, precision);\n }\n}\n","import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';\nimport { randomString } from '../../core/utils/random-string';\nimport { UploadedFile } from '../uploaded-file';\nimport { FileEntry } from '../types/file-entry';\nimport { UploadFileResponse } from '@common/uploads/uploads-api.service';\n\nexport interface UploadQueueItemProgress {\n percentage?: number;\n speed?: string;\n eta?: string;\n totalBytes?: number;\n completedBytes?: number;\n}\n\nexport class UploadQueueItem {\n id: string;\n canceled$: Subject<boolean> = new Subject();\n processing$ = new BehaviorSubject<boolean>(false);\n\n // file info (static)\n uploadedFile: UploadedFile;\n\n // backend response once file is uploaded\n uploadedResponse$ = new ReplaySubject<UploadFileResponse>(1);\n\n // uploaded file entry (only available on completed uploads)\n fileEntry: FileEntry;\n\n // upload progress information (will change)\n progress$ = new BehaviorSubject<UploadQueueItemProgress>({percentage: 0});\n\n error$ = new BehaviorSubject<string>(null);\n\n // custom data that can be attached to queue item\n public customData: object = {};\n\n get completed(): boolean {\n return !this.processing$.value && this.progress$.value.percentage === 100;\n }\n\n get inProgress(): boolean {\n return !this.error$.value && !this.completed;\n }\n\n constructor(file: UploadedFile, queueId?: string) {\n this.uploadedFile = file;\n this.id = queueId || randomString();\n }\n\n public cancel() {\n // cancelling before finalizing might cause infinite loop\n this.canceled$.next(true);\n this.finalize();\n }\n\n public complete() {\n this.setProgress({percentage: 100, eta: null});\n this.finalize();\n }\n\n public finalize() {\n this.uploadedResponse$.complete();\n this.canceled$.complete();\n this.progress$.complete();\n }\n\n public finishProcessing() {\n this.processing$.next(false);\n this.processing$.complete();\n }\n\n public addError(message: string) {\n this.error$.next(message);\n }\n\n public setProgress(data: Partial<UploadQueueItemProgress>) {\n this.progress$.next({\n ...this.progress$.value,\n ...data,\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport {UploadValidator} from './upload-validator';\nimport {FileSizeValidation} from './validations/file-size-validation';\nimport {AllowedExtensionsValidation} from './validations/allowed-extensions-validation';\nimport {BlockedExtensionsValidation} from './validations/blocked-extensions-validation';\nimport {convertToBytes} from '../../core/utils/convertToBytes';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DefaultUploadValidator extends UploadValidator {\n protected readonly DEFAULT_MAX_FILE_SIZE_MB = 8;\n public showToast = true;\n\n protected initValidations() {\n this.validations.push(\n new FileSizeValidation(\n {maxSize: this.getMaxFileSize()},\n this.i18n\n )\n );\n\n const allowedExtensions = this.getAllowedExtensions(),\n blockedExtensions = this.getBlockedExtensions();\n\n if (allowedExtensions && allowedExtensions.length) {\n this.validations.push(new AllowedExtensionsValidation(\n {extensions: allowedExtensions}, this.i18n\n ));\n }\n\n if (blockedExtensions && blockedExtensions.length) {\n this.validations.push(new BlockedExtensionsValidation(\n {extensions: blockedExtensions}, this.i18n\n ));\n }\n }\n\n protected getMaxFileSize(): number {\n return this.settings.get(\n 'uploads.max_size',\n convertToBytes(this.DEFAULT_MAX_FILE_SIZE_MB, 'MB')\n );\n }\n\n protected getAllowedExtensions() {\n return this.settings.getJson('uploads.allowed_extensions');\n }\n\n protected getBlockedExtensions() {\n return this.settings.getJson('uploads.blocked_extensions');\n }\n}\n","import {Injectable} from '@angular/core';\nimport {UploadQueueItem} from './upload-queue-item';\nimport {BehaviorSubject, EMPTY, from, ReplaySubject, Subject, throwError} from 'rxjs';\nimport {catchError, filter, map, mergeMap, takeUntil} from 'rxjs/operators';\nimport {UploadedFile} from '../uploaded-file';\nimport {UploadCompletedEvent, UploadEvent, UploadEventTypes, UploadProgressEvent} from '../utils/upload-progress-event';\nimport {UploadFileResponse, UploadsApiService} from '../uploads-api.service';\nimport {FileEntry} from '../types/file-entry';\nimport {UploadValidator} from '../validation/upload-validator';\nimport {BackendErrorResponse} from '../../core/types/backend-error-response';\nimport {DefaultUploadValidator} from '../validation/default-upload-validator';\nimport {BackendResponse} from '@common/core/types/backend-response';\nimport {Toast} from '@common/core/ui/toast.service';\nimport {HttpErrors, UPLOAD_FAIL_LEARN_MORE_LINK} from '@common/core/http/errors/http-errors.enum';\nimport {UploadApiConfig} from '@common/uploads/types/upload-api-config';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {Settings} from '@common/core/config/settings.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UploadQueueService {\n public uploads$ = new BehaviorSubject<UploadQueueItem[]>([]);\n public totalProgress$ = new ReplaySubject<number>(1);\n public uploadsAdded$ = new Subject<UploadQueueItem[]>();\n public count$ = new BehaviorSubject<{pending: number, completed: number}>({pending: 0, completed: 0});\n\n constructor(\n private api: UploadsApiService,\n private defaultValidator: DefaultUploadValidator,\n private toast: Toast,\n private currentUser: CurrentUser,\n private settings: Settings,\n ) {}\n\n public isEmpty(): boolean {\n return !this.uploads$.value.length;\n }\n\n public getAllCompleted(): FileEntry[] {\n return this.uploads$.value\n .filter(queueItem => queueItem.completed)\n .map(queueItem => queueItem.fileEntry);\n }\n\n public updateTotalProgress() {\n const progress = this.uploads$.value.map(upload => upload.progress$.value.percentage || 0);\n this.totalProgress$.next(progress.reduce((p, c) => p + c, 0) / progress.length);\n }\n\n public totalProgress() {\n return this.totalProgress$.asObservable();\n }\n\n public start(files: UploadedFile[]|{[key: string]: UploadedFile}, config: UploadApiConfig = {}): BackendResponse<UploadFileResponse> {\n const validator = config.validator || this.defaultValidator;\n let uploadQueueItems = [] as UploadQueueItem[];\n\n // push new uploads onto existing queue\n if (Array.isArray(files)) {\n uploadQueueItems = this.transformUploads(files, validator);\n this.uploads$.next(this.uploads$.value.concat(uploadQueueItems));\n this.uploadsAdded$.next(uploadQueueItems);\n\n // replace existing uploads in the queue with new upload by specified upload ID\n } else {\n const replacements = this.uploads$.value.map(queueItem => {\n if (files[queueItem.id]) {\n const transformed = this.transformUploads([files[queueItem.id]], validator, queueItem.id)[0];\n uploadQueueItems.push(transformed);\n return transformed;\n } else {\n return queueItem;\n }\n });\n this.uploads$.next(replacements);\n }\n\n this.updateCount();\n\n return from(uploadQueueItems.filter(u => !u.error$.value))\n .pipe(\n mergeMap(uploadQueueItem => {\n return this.api.upload(uploadQueueItem.uploadedFile, config).pipe(\n catchError((errResponse: BackendErrorResponse) => {\n this.handleUploadFailure(errResponse, uploadQueueItem, validator);\n // if one item in the queue fails, either continue uploading other items\n // or immediately stop uploading and bubble up error to subscribers\n return config.bubbleError ? throwError(errResponse) : EMPTY;\n }),\n takeUntil(uploadQueueItem.canceled$),\n map(response => {\n this.handleUploadEvent(response, uploadQueueItem, config.willProcessFiles);\n // assign queue item ID to upload completed response so\n // file entry can be matched to specific upload queue item\n if (response.name === UploadEventTypes.COMPLETED) {\n response.body.queueItemId = uploadQueueItem.id;\n }\n return response;\n }),\n );\n }, 1),\n filter(e => e.name === UploadEventTypes.COMPLETED),\n map((e: UploadCompletedEvent) => e.body)\n );\n }\n\n public updateProgress(id: string, e: UploadProgressEvent) {\n const queueItem = this.find(id);\n if ( ! queueItem) return;\n\n queueItem.setProgress({\n eta: e.eta,\n speed: e.speed,\n percentage: e.progress,\n totalBytes: e.totalBytes,\n completedBytes: e.completedBytes,\n });\n\n this.updateTotalProgress();\n }\n\n public completeUpload(id: string, response: UploadFileResponse) {\n const queueItem = this.find(id);\n if ( ! queueItem) return;\n\n queueItem.uploadedResponse$.next(response);\n queueItem.fileEntry = response.fileEntry;\n queueItem.complete();\n this.updateTotalProgress();\n }\n\n public errorUpload(id: string, message?: string) {\n this.find(id).addError(message);\n }\n\n public reset() {\n this.uploads$.value.forEach(u => u.cancel());\n this.uploads$.next([]);\n }\n\n public remove(id: string) {\n const i = this.uploads$.value.findIndex(u => u.id === id),\n upload = this.uploads$.value[i];\n upload.completed ? upload.finalize() : upload.cancel();\n this.uploads$.value.splice(i, 1);\n this.uploads$.next(this.uploads$.value);\n }\n\n public find(id: string): UploadQueueItem {\n return this.uploads$.value.find(u => u.id === id);\n }\n\n /**\n * Transform specified files into upload queue items.\n */\n protected transformUploads(files: UploadedFile[], validator: UploadValidator, queueId?: string) {\n return files.map(file => {\n const activeUpload = new UploadQueueItem(file, queueId);\n\n // validate upload\n if (validator) {\n const result = validator.validate(file);\n if (result.failed) activeUpload.addError(result.errorMessage);\n }\n\n return activeUpload;\n });\n }\n\n protected handleUploadEvent(event: UploadEvent, upload: UploadQueueItem, willProcessFiles = false) {\n if (event.name === UploadEventTypes.PROGRESS) {\n // upload is considered complete when progress equals 100\n // but file processing for large files might take some time\n // after file is fully uploaded so we should only set\n // progress as 100 on final completed response\n if (event.progress === 100) {\n // TODO: implement processing functionality for chunked upploading\n event = {...event, progress: 99};\n if (willProcessFiles) {\n upload.processing$.next(true);\n }\n }\n this.updateProgress(upload.id, event);\n } else if (event.name === UploadEventTypes.COMPLETED) {\n this.completeUpload(upload.id, event.body);\n this.updateCount();\n }\n }\n\n protected handleUploadFailure(response: BackendErrorResponse, upload: UploadQueueItem, validator: UploadValidator) {\n let msg = response?.errors?.file,\n showLearnMoreButton = null;\n if ( ! msg) {\n msg = HttpErrors.DefaultUpload;\n showLearnMoreButton = this.currentUser.isAdmin() && !this.settings.get('site.hide_docs_buttons');\n }\n\n this.errorUpload(upload.id, msg);\n this.updateCount();\n this.updateTotalProgress();\n\n if (validator.showToast) {\n this.toast.open(msg, {action: showLearnMoreButton ? 'Learn More' : null})\n .onAction()\n .subscribe(() => {\n window.open(UPLOAD_FAIL_LEARN_MORE_LINK);\n });\n }\n }\n\n private updateCount() {\n const pending = this.uploads$.value.filter(u => u.inProgress).length;\n this.count$.next({pending, completed: this.uploads$.value.length - pending});\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {UploadButtonDirective} from './directives/upload-button.directive';\nimport {UploadDropzoneDirective} from './directives/upload-dropzone.directive';\nimport {UploadProgressBarComponent} from './upload-progress-bar/upload-progress-bar.component';\n\n@NgModule({\n imports: [\n CommonModule,\n\n // material\n MatButtonModule,\n MatProgressBarModule,\n MatIconModule,\n ],\n declarations: [\n UploadDropzoneDirective,\n UploadButtonDirective,\n UploadProgressBarComponent,\n ],\n exports: [\n UploadDropzoneDirective,\n UploadButtonDirective,\n UploadProgressBarComponent,\n ],\n})\nexport class UploadsModule {\n}\n","/**\n * Download file from specified url.\n */\nexport function downloadFileFromUrl(url: string, name?: string) {\n const link = document.createElement('a');\n link.href = url;\n if (name) link.download = name;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n","import { UploadedFile } from '../../uploaded-file';\nimport { UploadValidation } from './upload-validation';\nimport { Translations } from '../../../core/translations/translations.service';\n\nexport class AllowedExtensionsValidation extends UploadValidation {\n constructor(\n protected params: {extensions: string[]},\n protected i18n: Translations\n ) {\n super();\n\n this.errorMessage = this.i18n.t(\n 'Only these file types are allowed: :extensions',\n {extensions: this.params.extensions.join(', ')}\n );\n }\n\n public fails(file: UploadedFile) {\n return ! this.params.extensions.some(extension => {\n return extension.toLowerCase() === file.extension.toLowerCase();\n });\n }\n}\n","import { UploadedFile } from '../../uploaded-file';\nimport { UploadValidation } from './upload-validation';\nimport {Translations} from '@common/core/translations/translations.service';\n\nexport class BlockedExtensionsValidation extends UploadValidation {\n constructor(\n protected params: {extensions: string[]},\n protected i18n: Translations\n ) {\n super();\n\n this.errorMessage = this.i18n.t(\n 'These file types are not allowed: :extensions',\n {extensions: this.params.extensions.join(', ')}\n );\n }\n\n public fails(file: UploadedFile) {\n return this.params.extensions.some(extension => {\n return extension === file.extension;\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface WorkspaceConfig {\n description: string;\n}\n\nexport const WORKSPACE_CONFIG = new InjectionToken<WorkspaceConfig>('WORKSPACE_CONFIG');\n","import {Injectable} from '@angular/core';\nimport {Workspace} from './types/workspace';\nimport {PaginationParams} from '@common/core/types/pagination/pagination-params';\nimport {PaginatedBackendResponse} from '@common/core/types/pagination/paginated-backend-response';\nimport {BackendResponse} from '@common/core/types/backend-response';\nimport {AppHttpClient} from '@common/core/http/app-http-client.service';\nimport {WorkspaceMember} from './types/workspace-member';\nimport {WorkspaceInvite} from './types/workspace-invite';\nimport {filter, tap} from 'rxjs/operators';\nimport {CurrentUser} from '@common/auth/current-user';\nimport {BehaviorSubject, Subscription} from 'rxjs';\nimport {PaginationResponse} from '@common/core/types/pagination/pagination-response';\nimport {hasKey} from '@common/core/utils/has-key';\nimport {CookieService} from '../core/services/cookie.service';\nimport {NotificationService} from '../notifications/notification-list/notification.service';\nimport {\n WORKSPACE_INVITE_NOTIF_TYPE,\n WorkspaceInviteNotif,\n} from './types/workspace-invite-notif';\nimport {Toast} from '../core/ui/toast.service';\nimport {BackendErrorResponse} from '../core/types/backend-error-response';\nimport {DatabaseNotification} from '../notifications/database-notification';\nimport {HttpErrors} from '../core/http/errors/http-errors.enum';\n\nconst PERSONAL_WORKSPACE = {name: 'Default', default: true, id: null};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WorkspacesService {\n static BASE_URI = 'workspace';\n available$ = new BehaviorSubject<Workspace[]>([PERSONAL_WORKSPACE]);\n activeId$ = new BehaviorSubject<number>(this.getIdFromCookie());\n activeWorkspace$ = new BehaviorSubject<Workspace>(this.getIdFromCookie() ? null : PERSONAL_WORKSPACE);\n\n constructor(\n private http: AppHttpClient,\n private currentUser: CurrentUser,\n private cookie: CookieService,\n private notifications: NotificationService,\n private toast: Toast,\n ) {}\n\n currentUserCan(permission: string): boolean {\n const member = this.activeWorkspace$.value?.currentUser;\n return member && (member.is_owner || member.permissions.findIndex(p => p.name === permission) > -1);\n }\n\n select(workspaceId: number) {\n if (workspaceId !== this.activeId$.value) {\n this.cookie.set(this.cookieName(), workspaceId);\n this.activeId$.next(workspaceId);\n }\n const workspace = this.available$.value.find(w => w.id === this.activeId$.value);\n this.activeWorkspace$.next(workspace || this.available$.value[0]);\n }\n\n pushAndSelect(workspace: Workspace) {\n this.available$.next([...this.available$.value, workspace]);\n this.select(workspace.id);\n }\n\n replace(workspace: Workspace) {\n const workspaces = [...this.available$.value];\n const i = workspaces.findIndex(w => w.id === workspace.id);\n if (i) {\n workspaces[i] = workspace;\n }\n this.available$.next(workspaces);\n }\n\n remove(ids: number[]) {\n const workspaces = [...this.available$.value];\n ids.forEach(id => {\n const i = workspaces.findIndex(w => w.id === id);\n if (i) {\n workspaces.splice(i, 1);\n }\n });\n this.available$.next(workspaces);\n if (ids.includes(this.activeId$.value)) {\n this.select(null);\n }\n }\n\n indexUserWorkspaces(): BackendResponse<{workspaces: Workspace[]}> {\n return this.http.get<{workspaces: Workspace[]}>(`me/${WorkspacesService.BASE_URI}s`)\n .pipe(tap(response => {\n this.available$.next([...this.available$.value, ...response.workspaces]);\n this.select(this.activeId$.value);\n }));\n }\n\n get(workspaceId: number): BackendResponse<{workspace: Workspace}> {\n return this.http.get(`${WorkspacesService.BASE_URI}/${workspaceId}`);\n }\n\n delete(ids: number[]): BackendResponse<unknown> {\n return this.http.delete(`${WorkspacesService.BASE_URI}/${ids}`)\n .pipe(tap(() => {\n this.remove(ids);\n }));\n }\n\n create(payload: Partial<Workspace>): BackendResponse<{workspace: Workspace}> {\n return this.http.post<{workspace: Workspace}>(`${WorkspacesService.BASE_URI}`, payload)\n .pipe(tap(response => this.pushAndSelect(response.workspace)));\n }\n\n update(id: number, payload: Partial<Workspace>): BackendResponse<{workspace: Workspace}> {\n return this.http.put<{workspace: Workspace}>(`${WorkspacesService.BASE_URI}/${id}`, payload)\n .pipe(tap(response => this.replace(response.workspace)));\n }\n\n invitePeople(workspaceId: number, params: {emails: string[], roleId: number}): BackendResponse<{invites: WorkspaceInvite[]}> {\n return this.http.post(`${WorkspacesService.BASE_URI}/${workspaceId}/invite`, params);\n }\n\n resendInvite(workspaceId: number, inviteId: string): BackendResponse<{invite: WorkspaceInvite}> {\n return this.http.post(`${WorkspacesService.BASE_URI}/${workspaceId}/${inviteId}/resend`);\n }\n\n deleteMember(workspaceId: number, userId: number): BackendResponse<unknown> {\n return this.http.delete(`${WorkspacesService.BASE_URI}/${workspaceId}/member/${userId}`)\n .pipe(tap(() => {\n if (userId === this.currentUser.get('id')) {\n this.remove([workspaceId]);\n }\n }));\n }\n\n deleteInvite(inviteId: string): BackendResponse<void> {\n return this.http.delete(`${WorkspacesService.BASE_URI}/invite/${inviteId}`);\n }\n\n changeRole(workspaceId: number, member: WorkspaceMember|WorkspaceInvite, roleId: number): BackendResponse<void> {\n const memberId = hasKey('member_id', member) ? member.member_id : member.id;\n return this.http.post(`${WorkspacesService.BASE_URI}/${workspaceId}/${member.model_type}/${memberId}/change-role`, {roleId});\n }\n\n join(inviteId: string): BackendResponse<{workspace: Workspace}> {\n return this.http.get(`workspace/join/${inviteId}`);\n }\n\n bindToNotificationClick(): Subscription {\n return this.notifications.clickedOnNotification$\n .pipe(filter(data => data.notification.type === WORKSPACE_INVITE_NOTIF_TYPE))\n .subscribe(data => {\n const inviteId = (data.notification as WorkspaceInviteNotif).data.inviteId;\n if (data.action.action === 'join') {\n this.join(inviteId).subscribe(response => {\n this.notifications.delete([data.notification]).subscribe();\n this.pushAndSelect(response.workspace);\n this.toast.open('Joined workspace.');\n }, (err: BackendErrorResponse) => {\n this.handleWorkspaceInviteClickError(err, data.notification);\n });\n } else if (data.action.action === 'decline') {\n this.deleteInvite(inviteId).subscribe(() => {\n this.notifications.delete([data.notification]).subscribe();\n this.toast.open('Declined workspace invite.');\n }, (err: BackendErrorResponse) => {\n this.handleWorkspaceInviteClickError(err, data.notification);\n });\n }\n });\n }\n\n private handleWorkspaceInviteClickError(err: BackendErrorResponse, notif: DatabaseNotification) {\n if (err.status === 404) {\n this.notifications.delete([notif]).subscribe();\n this.toast.open('That invite is no longer valid.');\n } else {\n this.toast.open(HttpErrors.Default);\n }\n }\n\n getIdFromCookie() {\n let workspaceId = this.cookie.get(this.cookieName());\n workspaceId = typeof workspaceId === 'string' ? parseInt(workspaceId) : workspaceId;\n return isNaN(workspaceId) ? null : workspaceId;\n }\n\n private cookieName() {\n return `${this.currentUser.get('id')}_activeWorkspace`;\n }\n}\n","import { DatabaseNotification, DatabaseNotificationData } from '../../notifications/database-notification';\n\nexport const WORKSPACE_INVITE_NOTIF_TYPE = 'Common\\\\Workspaces\\\\Notifications\\\\WorkspaceInvitation';\n\nexport interface WorkspaceInviteNotif extends DatabaseNotification {\n data: DatabaseNotificationData & {inviteId: string};\n}\n"]}