{"version":3,"sources":["../../node_modules/webm-to-wav-converter/wavBlobUtil.js","../../node_modules/webm-to-wav-converter/downloadUtil.js","../../node_modules/webm-to-wav-converter/WavRecorder.js","../../node_modules/webm-to-wav-converter/index.js","../../node_modules/@angular/cdk/fesm2022/stepper.mjs","../../node_modules/@angular/material/fesm2022/stepper.mjs","../../node_modules/@angular/cdk/fesm2022/drag-drop.mjs","src/app/preferences/components/upload-music-dialog/upload-music-dialog.component.ts","src/app/preferences/components/upload-music-dialog/upload-music-dialog.component.html","src/app/preferences/components/music-on-hold/music-on-hold.component.ts","src/app/preferences/components/music-on-hold/music-on-hold.component.html","src/app/preferences/models/settings-page.ts","src/app/preferences/services/music-on-hold.service.ts","src/app/preferences/components/change-password/change-password.component.ts","src/app/preferences/components/change-password/change-password.component.html","src/app/preferences/components/profile/profile.component.ts","src/app/preferences/components/profile/profile.component.html","src/app/shared/components/banner/banner.component.ts","src/app/shared/components/banner/banner.component.html","src/app/core/services/protocol-handler.service.ts","src/app/shared/components/register-tel-handler-dialog/register-tel-handler-dialog.component.ts","src/app/core/services/pwa.service.ts","src/app/core/components/banners/register-tel-handler/register-tel-handler.component.ts","src/app/core/components/banners/register-tel-handler/register-tel-handler.component.html","../../node_modules/@angular/cdk/fesm2022/accordion.mjs","../../node_modules/@angular/material/fesm2022/expansion.mjs","src/app/shared/pipes/initials.pipe.ts","src/app/shared/components/integration-favicon/integration-favicon.component.ts","src/app/shared/components/integration-favicon/integration-favicon.component.html","src/app/preferences/components/integrations/integration-settings-item/integration-settings-item.component.ts","src/app/preferences/components/integrations/integration-settings-item/integration-settings-item.component.html","src/app/preferences/components/integrations/lambda-output-details/lambda-output-details.component.ts","src/app/preferences/components/integrations/lambda-output-details/lambda-output-details.component.html","src/app/preferences/models/call-events.model.ts","src/app/preferences/models/integrations.models.ts","src/app/preferences/services/lambda-storage.service.ts","src/app/preferences/services/lambda.service.ts","src/app/preferences/services/integrations.service.ts","src/app/preferences/components/integrations/integrations.component.ts","src/app/preferences/components/integrations/integrations.component.html","src/app/preferences/components/notification/notification.component.ts","src/app/preferences/components/notification/notification.component.html","src/app/preferences/components/audio/audio.component.ts","src/app/preferences/components/audio/audio.component.html","src/app/preferences/components/video/video.component.ts","src/app/preferences/components/video/video.component.html","src/app/preferences/models/answering-rules.models.ts","src/app/preferences/services/answering-rules.service.ts","src/app/preferences/components/answering-rules/answering-rule/answering-rule.component.ts","src/app/preferences/components/answering-rules/answering-rule/answering-rule.component.html","src/app/preferences/components/answering-rules/add-time-frame/add-time-frame.component.ts","src/app/preferences/components/answering-rules/add-time-frame/add-time-frame.component.html","src/app/preferences/components/answering-rules/add-answering-rule/add-answering-rule.component.ts","src/app/preferences/components/answering-rules/add-answering-rule/add-answering-rule.component.html","src/app/preferences/components/answering-rules/answering-rules.component.ts","src/app/preferences/components/answering-rules/answering-rules.component.html","src/app/preferences/components/blocked-numbers/blocked-numbers.component.ts","src/app/preferences/components/blocked-numbers/blocked-numbers.component.html","src/app/preferences/components/voicemail/pages/voicemail-change-pin/voicemail-change-pin.component.ts","src/app/preferences/components/voicemail/pages/voicemail-change-pin/voicemail-change-pin.component.html","src/app/preferences/components/voicemail/pages/voicemail-manage-greeting/voicemail-manage-greeting.component.ts","src/app/preferences/components/voicemail/pages/voicemail-manage-greeting/voicemail-manage-greeting.component.html","src/app/preferences/components/voicemail/pages/voicemail-main-page/voicemail-main-page.component.ts","src/app/preferences/components/voicemail/pages/voicemail-main-page/voicemail-main-page.component.html","src/app/preferences/components/voicemail/voicemail.component.ts","src/app/preferences/components/voicemail/voicemail.component.html","src/app/preferences/components/contacts/import-contacts/import-contacts.component.ts","src/app/preferences/components/contacts/import-contacts/import-contacts.component.html","src/app/preferences/components/contacts/contacts.component.ts","src/app/preferences/components/contacts/contacts.component.html","src/app/shared/utils/update.util.ts","../../node_modules/@angular/service-worker/fesm2022/service-worker.mjs","src/app/preferences/components/preference-layout/preference-layout.component.ts","src/app/preferences/components/preference-layout/preference-layout.component.html"],"sourcesContent":["function _writeStringToArray(aString, targetArray, offset) {\n for (let i = 0; i < aString.length; ++i) targetArray[offset + i] = aString.charCodeAt(i);\n}\nfunction _writeInt16ToArray(aNumber, targetArray, offset) {\n aNumber = Math.floor(aNumber);\n targetArray[offset + 0] = aNumber & 255; // byte 1\n targetArray[offset + 1] = aNumber >> 8 & 255; // byte 2\n}\nfunction _writeInt32ToArray(aNumber, targetArray, offset) {\n aNumber = Math.floor(aNumber);\n targetArray[offset + 0] = aNumber & 255; // byte 1\n targetArray[offset + 1] = aNumber >> 8 & 255; // byte 2\n targetArray[offset + 2] = aNumber >> 16 & 255; // byte 3\n targetArray[offset + 3] = aNumber >> 24 & 255; // byte 4\n}\n\n// Return the bits of the float as a 32-bit integer value. This\n// produces the raw bits; no intepretation of the value is done.\nfunction _floatBits(f) {\n const buf = new ArrayBuffer(4);\n new Float32Array(buf)[0] = f;\n const bits = new Uint32Array(buf)[0];\n // Return as a signed integer.\n return bits | 0;\n}\nfunction _writeAudioBufferToArray(audioBuffer, targetArray, offset, bitDepth) {\n let index = 0,\n channel = 0;\n const length = audioBuffer.length;\n const channels = audioBuffer.numberOfChannels;\n let channelData, sample;\n\n // Clamping samples onto the 16-bit resolution.\n for (index = 0; index < length; ++index) {\n for (channel = 0; channel < channels; ++channel) {\n channelData = audioBuffer.getChannelData(channel);\n\n // Branches upon the requested bit depth\n if (bitDepth === 16) {\n sample = channelData[index] * 32768.0;\n if (sample < -32768) sample = -32768;else if (sample > 32767) sample = 32767;\n _writeInt16ToArray(sample, targetArray, offset);\n offset += 2;\n } else if (bitDepth === 32) {\n // This assumes we're going to out 32-float, not 32-bit linear.\n sample = _floatBits(channelData[index]);\n _writeInt32ToArray(sample, targetArray, offset);\n offset += 4;\n } else {\n console.log('Invalid bit depth for PCM encoding.');\n return;\n }\n }\n }\n}\n\n// Converts the Blob data to AudioBuffer\nasync function _getAudioBuffer(blobData, contextOptions = undefined) {\n let blob = blobData;\n if (!(blob instanceof Blob)) blob = new Blob([blobData]);\n const url = URL.createObjectURL(blob);\n const response = await fetch(url);\n const arrayBuffer = await response.arrayBuffer();\n const audioContext = new AudioContext(contextOptions);\n const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);\n return audioBuffer;\n}\n\n/**\r\n * \r\n * @param {Blob | Blob[]} blobData - Blob or Blob[] to be converted to audio/wave Blob\r\n * @param {boolean} as32BitFloat - Convert to 16-bit or 32-bit file, default 16-bit\r\n * @param {AudioContextOptions} contextOptions - optiosn needs to be used for encoding\r\n * @returns \r\n */\nasync function getWaveBlob(blobData, as32BitFloat, contextOptions = undefined) {\n const audioBuffer = await _getAudioBuffer(blobData, contextOptions);\n\n // Encoding setup.\n const frameLength = audioBuffer.length;\n const numberOfChannels = audioBuffer.numberOfChannels;\n const sampleRate = audioBuffer.sampleRate;\n const bitsPerSample = as32BitFloat ? 32 : 16;\n const bytesPerSample = bitsPerSample / 8;\n const byteRate = sampleRate * numberOfChannels * bitsPerSample / 8;\n const blockAlign = numberOfChannels * bitsPerSample / 8;\n const wavDataByteLength = frameLength * numberOfChannels * bytesPerSample;\n const headerByteLength = 44;\n const totalLength = headerByteLength + wavDataByteLength;\n const waveFileData = new Uint8Array(totalLength);\n const subChunk1Size = 16;\n const subChunk2Size = wavDataByteLength;\n const chunkSize = 4 + (8 + subChunk1Size) + (8 + subChunk2Size);\n _writeStringToArray('RIFF', waveFileData, 0);\n _writeInt32ToArray(chunkSize, waveFileData, 4);\n _writeStringToArray('WAVE', waveFileData, 8);\n _writeStringToArray('fmt ', waveFileData, 12);\n\n // SubChunk1Size (4)\n _writeInt32ToArray(subChunk1Size, waveFileData, 16);\n // AudioFormat (2): 3 means 32-bit float, 1 means integer PCM.\n _writeInt16ToArray(as32BitFloat ? 3 : 1, waveFileData, 20);\n // NumChannels (2)\n _writeInt16ToArray(numberOfChannels, waveFileData, 22);\n // SampleRate (4)\n _writeInt32ToArray(sampleRate, waveFileData, 24);\n // ByteRate (4)\n _writeInt32ToArray(byteRate, waveFileData, 28);\n // BlockAlign (2)\n _writeInt16ToArray(blockAlign, waveFileData, 32);\n // BitsPerSample (4)\n _writeInt32ToArray(bitsPerSample, waveFileData, 34);\n _writeStringToArray('data', waveFileData, 36);\n // SubChunk2Size (4)\n _writeInt32ToArray(subChunk2Size, waveFileData, 40);\n\n // Write actual audio data starting at offset 44.\n _writeAudioBufferToArray(audioBuffer, waveFileData, 44, bitsPerSample);\n return new Blob([waveFileData], {\n type: 'audio/wave'\n });\n}\nmodule.exports = getWaveBlob;","const getWaveBlob = require(\"./wavBlobUtil\");\n\n/**\r\n * @param {Blob | Blob[]} blobData - Blob or Blob[] to be converted to audio/wave Blob\r\n * @param {boolean} as32BitFloat - Convert to 16-bit or 32-bit file\r\n * @param {string} filename - Name of the file\r\n * @param {AudioContextOptions} contextOptions - audio context options for encoding\r\n * @returns\r\n */\nasync function downloadWav(blobData, as32BitFloat, filename = null, contextOptions = undefined) {\n const blob = await getWaveBlob(blobData, as32BitFloat, contextOptions);\n const anchorElement = document.createElement('a');\n anchorElement.href = window.URL.createObjectURL(blob);\n anchorElement.download = filename || `recording('${as32BitFloat ? '32bit' : '16bit'}).wav`;\n anchorElement.style.display = 'none';\n document.body.appendChild(anchorElement);\n anchorElement.click();\n document.body.removeChild(anchorElement);\n}\nmodule.exports = downloadWav;","const getWaveBlob = require(\"./wavBlobUtil\");\nconst downloadWav = require(\"./downloadUtil\");\n\n/** Class Representing a WavRecorder */\nclass WavRecorder {\n /**\r\n * @property {MediaRecorder} mediaRecorder - MediaRecorder instance\r\n */\n mediaRecorder;\n\n /**\r\n * @property {MediaStream} - stream User's MediaStream\r\n */\n stream;\n\n /**\r\n * @property {Blob} __data - Recorded WEBM data\r\n */\n __data;\n\n /**\r\n * Access user media from the audio input, will be asking audio permission if not available already\r\n * @param {MediaTrackConstraints} constraints - MediaTrackConstraints to be applied, if any defaults = { audio: true, video: false }\r\n * @return - Got User MediaStream or not\r\n */\n async start(constraints = {\n audio: true,\n video: false\n }) {\n if (this.mediaRecorder?.state === \"recording\") return true;\n const mediaTrackConstraints = constraints || {\n audio: true,\n video: false\n };\n try {\n this.stream = await navigator.mediaDevices.getUserMedia(mediaTrackConstraints);\n this.mediaRecorder = new MediaRecorder(this.stream);\n this.mediaRecorder.ondataavailable = e => this.__data = e.data;\n } catch (err) {\n console.error(err);\n return false;\n }\n this.mediaRecorder?.start();\n return true;\n }\n\n /**\r\n * Stop recording the audio\r\n * @returns {void}\r\n */\n stop() {\n if (this.mediaRecorder?.state !== \"recording\") return true;\n this.mediaRecorder.stop();\n this.mediaRecorder.onstop = () => {\n this.stream.getTracks().forEach(track => track.stop());\n this.mediaRecorder = undefined;\n this.stream = undefined;\n };\n }\n\n /**\r\n * Download the wav audio file\r\n * @param {string} filename - Optional name of the file to be downloaded, without extension \r\n * @param {boolean} as32Bit - Audio required in 32-bit, default is 16-bit.\r\n * @param {AudioContextOptions} contextOptions - optiosn needs to be used for encoding\r\n * @returns {void}\r\n */\n async download(filename = null, as32Bit = false, contextOptions = undefined) {\n if (this.__data) return await downloadWav(this.__data, as32Bit, filename, contextOptions);\n }\n\n /**\r\n * Get the recorded wav audio Blob\r\n * @param {boolean} as32Bit - Get 32-bit audio, default is 16-bit\r\n * @param {AudioContextOptions} contextOptions - optiosn needs to be used for encoding\r\n * @returns {void}\r\n */\n async getBlob(as32Bit = false, contextOptions = undefined) {\n if (this.__data) return await getWaveBlob(this.__data, as32Bit, contextOptions);\n }\n}\nmodule.exports = WavRecorder;","module.exports.WavRecorder = require(\"./WavRecorder\");\nmodule.exports.getWaveBlob = require(\"./wavBlobUtil\");\nmodule.exports.downloadWav = require(\"./downloadUtil\");","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport * as i1 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { hasModifierKey, SPACE, ENTER } from '@angular/cdk/keycodes';\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, EventEmitter, forwardRef, booleanAttribute, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Optional, ContentChild, ContentChildren, ViewChild, Input, Output, QueryList, numberAttribute, NgModule } from '@angular/core';\nimport { ControlContainer } from '@angular/forms';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { Subject, of } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\nconst _c0 = [\"*\"];\nfunction CdkStep_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0);\n }\n}\nlet CdkStepHeader = /*#__PURE__*/(() => {\n class CdkStepHeader {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n /** Focuses the step header. */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n static {\n this.ɵfac = function CdkStepHeader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkStepHeader)(i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkStepHeader,\n selectors: [[\"\", \"cdkStepHeader\", \"\"]],\n hostAttrs: [\"role\", \"tab\"],\n standalone: true\n });\n }\n }\n return CdkStepHeader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CdkStepLabel = /*#__PURE__*/(() => {\n class CdkStepLabel {\n constructor(/** @docs-private */template) {\n this.template = template;\n }\n static {\n this.ɵfac = function CdkStepLabel_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkStepLabel)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkStepLabel,\n selectors: [[\"\", \"cdkStepLabel\", \"\"]],\n standalone: true\n });\n }\n }\n return CdkStepLabel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Used to generate unique ID for each stepper component. */\nlet nextId = 0;\n/** Change event emitted on selection changes. */\nclass StepperSelectionEvent {}\n/** Enum to represent the different states of the steps. */\nconst STEP_STATE = {\n NUMBER: 'number',\n EDIT: 'edit',\n DONE: 'done',\n ERROR: 'error'\n};\n/** InjectionToken that can be used to specify the global stepper options. */\nconst STEPPER_GLOBAL_OPTIONS = /*#__PURE__*/new InjectionToken('STEPPER_GLOBAL_OPTIONS');\nlet CdkStep = /*#__PURE__*/(() => {\n class CdkStep {\n /** Whether step is marked as completed. */\n get completed() {\n return this._completedOverride == null ? this._getDefaultCompleted() : this._completedOverride;\n }\n set completed(value) {\n this._completedOverride = value;\n }\n _getDefaultCompleted() {\n return this.stepControl ? this.stepControl.valid && this.interacted : this.interacted;\n }\n /** Whether step has an error. */\n get hasError() {\n return this._customError == null ? this._getDefaultError() : this._customError;\n }\n set hasError(value) {\n this._customError = value;\n }\n _getDefaultError() {\n return this.stepControl && this.stepControl.invalid && this.interacted;\n }\n constructor(_stepper, stepperOptions) {\n this._stepper = _stepper;\n /** Whether user has attempted to move away from the step. */\n this.interacted = false;\n /** Emits when the user has attempted to move away from the step. */\n this.interactedStream = new EventEmitter();\n /** Whether the user can return to this step once it has been marked as completed. */\n this.editable = true;\n /** Whether the completion of step is optional. */\n this.optional = false;\n this._completedOverride = null;\n this._customError = null;\n this._stepperOptions = stepperOptions ? stepperOptions : {};\n this._displayDefaultIndicatorType = this._stepperOptions.displayDefaultIndicatorType !== false;\n }\n /** Selects this step component. */\n select() {\n this._stepper.selected = this;\n }\n /** Resets the step to its initial state. Note that this includes resetting form data. */\n reset() {\n this.interacted = false;\n if (this._completedOverride != null) {\n this._completedOverride = false;\n }\n if (this._customError != null) {\n this._customError = false;\n }\n if (this.stepControl) {\n // Reset the forms since the default error state matchers will show errors on submit and we\n // want the form to be back to its initial state (see #29781). Submitted state is on the\n // individual directives, rather than the control, so we need to reset them ourselves.\n this._childForms?.forEach(form => form.resetForm?.());\n this.stepControl.reset();\n }\n }\n ngOnChanges() {\n // Since basically all inputs of the MatStep get proxied through the view down to the\n // underlying MatStepHeader, we have to make sure that change detection runs correctly.\n this._stepper._stateChanged();\n }\n _markAsInteracted() {\n if (!this.interacted) {\n this.interacted = true;\n this.interactedStream.emit(this);\n }\n }\n /** Determines whether the error state can be shown. */\n _showError() {\n // We want to show the error state either if the user opted into/out of it using the\n // global options, or if they've explicitly set it through the `hasError` input.\n return this._stepperOptions.showError ?? this._customError != null;\n }\n static {\n this.ɵfac = function CdkStep_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkStep)(i0.ɵɵdirectiveInject(forwardRef(() => CdkStepper)), i0.ɵɵdirectiveInject(STEPPER_GLOBAL_OPTIONS, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: CdkStep,\n selectors: [[\"cdk-step\"]],\n contentQueries: function CdkStep_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, CdkStepLabel, 5);\n i0.ɵɵcontentQuery(dirIndex,\n // Note: we look for `ControlContainer` here, because both `NgForm` and `FormGroupDirective`\n // provides themselves as such, but we don't want to have a concrete reference to both of\n // the directives. The type is marked as `Partial` in case we run into a class that provides\n // itself as `ControlContainer` but doesn't have the same interface as the directives.\n ControlContainer, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.stepLabel = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._childForms = _t);\n }\n },\n viewQuery: function CdkStep_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(TemplateRef, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.content = _t.first);\n }\n },\n inputs: {\n stepControl: \"stepControl\",\n label: \"label\",\n errorMessage: \"errorMessage\",\n ariaLabel: [0, \"aria-label\", \"ariaLabel\"],\n ariaLabelledby: [0, \"aria-labelledby\", \"ariaLabelledby\"],\n state: \"state\",\n editable: [2, \"editable\", \"editable\", booleanAttribute],\n optional: [2, \"optional\", \"optional\", booleanAttribute],\n completed: [2, \"completed\", \"completed\", booleanAttribute],\n hasError: [2, \"hasError\", \"hasError\", booleanAttribute]\n },\n outputs: {\n interactedStream: \"interacted\"\n },\n exportAs: [\"cdkStep\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function CdkStep_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵtemplate(0, CdkStep_ng_template_0_Template, 1, 0, \"ng-template\");\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return CdkStep;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CdkStepper = /*#__PURE__*/(() => {\n class CdkStepper {\n /** The index of the selected step. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(index) {\n if (this.steps && this._steps) {\n // Ensure that the index can't be out of bounds.\n if (!this._isValidIndex(index) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.');\n }\n this.selected?._markAsInteracted();\n if (this._selectedIndex !== index && !this._anyControlsInvalidOrPending(index) && (index >= this._selectedIndex || this.steps.toArray()[index].editable)) {\n this._updateSelectedItemIndex(index);\n }\n } else {\n this._selectedIndex = index;\n }\n }\n /** The step that is selected. */\n get selected() {\n return this.steps ? this.steps.toArray()[this.selectedIndex] : undefined;\n }\n set selected(step) {\n this.selectedIndex = step && this.steps ? this.steps.toArray().indexOf(step) : -1;\n }\n /** Orientation of the stepper. */\n get orientation() {\n return this._orientation;\n }\n set orientation(value) {\n // This is a protected method so that `MatStepper` can hook into it.\n this._orientation = value;\n if (this._keyManager) {\n this._keyManager.withVerticalOrientation(value === 'vertical');\n }\n }\n constructor(_dir, _changeDetectorRef, _elementRef) {\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n this.steps = new QueryList();\n /** List of step headers sorted based on their DOM order. */\n this._sortedHeaders = new QueryList();\n /** Whether the validity of previous steps should be checked or not. */\n this.linear = false;\n this._selectedIndex = 0;\n /** Event emitted when the selected step has changed. */\n this.selectionChange = new EventEmitter();\n /** Output to support two-way binding on `[(selectedIndex)]` */\n this.selectedIndexChange = new EventEmitter();\n this._orientation = 'horizontal';\n this._groupId = nextId++;\n }\n ngAfterContentInit() {\n this._steps.changes.pipe(startWith(this._steps), takeUntil(this._destroyed)).subscribe(steps => {\n this.steps.reset(steps.filter(step => step._stepper === this));\n this.steps.notifyOnChanges();\n });\n }\n ngAfterViewInit() {\n // If the step headers are defined outside of the `ngFor` that renders the steps, like in the\n // Material stepper, they won't appear in the `QueryList` in the same order as they're\n // rendered in the DOM which will lead to incorrect keyboard navigation. We need to sort\n // them manually to ensure that they're correct. Alternatively, we can change the Material\n // template to inline the headers in the `ngFor`, but that'll result in a lot of\n // code duplication. See #23539.\n this._stepHeader.changes.pipe(startWith(this._stepHeader), takeUntil(this._destroyed)).subscribe(headers => {\n this._sortedHeaders.reset(headers.toArray().sort((a, b) => {\n const documentPosition = a._elementRef.nativeElement.compareDocumentPosition(b._elementRef.nativeElement);\n // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // tslint:disable-next-line:no-bitwise\n return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n }));\n this._sortedHeaders.notifyOnChanges();\n });\n // Note that while the step headers are content children by default, any components that\n // extend this one might have them as view children. We initialize the keyboard handling in\n // AfterViewInit so we're guaranteed for both view and content children to be defined.\n this._keyManager = new FocusKeyManager(this._sortedHeaders).withWrap().withHomeAndEnd().withVerticalOrientation(this._orientation === 'vertical');\n (this._dir ? this._dir.change : of()).pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed)).subscribe(direction => this._keyManager.withHorizontalOrientation(direction));\n this._keyManager.updateActiveItem(this._selectedIndex);\n // No need to `takeUntil` here, because we're the ones destroying `steps`.\n this.steps.changes.subscribe(() => {\n if (!this.selected) {\n this._selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n });\n // The logic which asserts that the selected index is within bounds doesn't run before the\n // steps are initialized, because we don't how many steps there are yet so we may have an\n // invalid index on init. If that's the case, auto-correct to the default so we don't throw.\n if (!this._isValidIndex(this._selectedIndex)) {\n this._selectedIndex = 0;\n }\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this.steps.destroy();\n this._sortedHeaders.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Selects and focuses the next step in list. */\n next() {\n this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1);\n }\n /** Selects and focuses the previous step in list. */\n previous() {\n this.selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n /** Resets the stepper to its initial state. Note that this includes clearing form data. */\n reset() {\n this._updateSelectedItemIndex(0);\n this.steps.forEach(step => step.reset());\n this._stateChanged();\n }\n /** Returns a unique id for each step label element. */\n _getStepLabelId(i) {\n return `cdk-step-label-${this._groupId}-${i}`;\n }\n /** Returns unique id for each step content element. */\n _getStepContentId(i) {\n return `cdk-step-content-${this._groupId}-${i}`;\n }\n /** Marks the component to be change detected. */\n _stateChanged() {\n this._changeDetectorRef.markForCheck();\n }\n /** Returns position state of the step with the given index. */\n _getAnimationDirection(index) {\n const position = index - this._selectedIndex;\n if (position < 0) {\n return this._layoutDirection() === 'rtl' ? 'next' : 'previous';\n } else if (position > 0) {\n return this._layoutDirection() === 'rtl' ? 'previous' : 'next';\n }\n return 'current';\n }\n /** Returns the type of icon to be displayed. */\n _getIndicatorType(index, state = STEP_STATE.NUMBER) {\n const step = this.steps.toArray()[index];\n const isCurrentStep = this._isCurrentStep(index);\n return step._displayDefaultIndicatorType ? this._getDefaultIndicatorLogic(step, isCurrentStep) : this._getGuidelineLogic(step, isCurrentStep, state);\n }\n _getDefaultIndicatorLogic(step, isCurrentStep) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n } else if (!step.completed || isCurrentStep) {\n return STEP_STATE.NUMBER;\n } else {\n return step.editable ? STEP_STATE.EDIT : STEP_STATE.DONE;\n }\n }\n _getGuidelineLogic(step, isCurrentStep, state = STEP_STATE.NUMBER) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n } else if (step.completed && !isCurrentStep) {\n return STEP_STATE.DONE;\n } else if (step.completed && isCurrentStep) {\n return state;\n } else if (step.editable && isCurrentStep) {\n return STEP_STATE.EDIT;\n } else {\n return state;\n }\n }\n _isCurrentStep(index) {\n return this._selectedIndex === index;\n }\n /** Returns the index of the currently-focused step header. */\n _getFocusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : this._selectedIndex;\n }\n _updateSelectedItemIndex(newIndex) {\n const stepsArray = this.steps.toArray();\n this.selectionChange.emit({\n selectedIndex: newIndex,\n previouslySelectedIndex: this._selectedIndex,\n selectedStep: stepsArray[newIndex],\n previouslySelectedStep: stepsArray[this._selectedIndex]\n });\n // If focus is inside the stepper, move it to the next header, otherwise it may become\n // lost when the active step content is hidden. We can't be more granular with the check\n // (e.g. checking whether focus is inside the active step), because we don't have a\n // reference to the elements that are rendering out the content.\n this._containsFocus() ? this._keyManager.setActiveItem(newIndex) : this._keyManager.updateActiveItem(newIndex);\n this._selectedIndex = newIndex;\n this.selectedIndexChange.emit(this._selectedIndex);\n this._stateChanged();\n }\n _onKeydown(event) {\n const hasModifier = hasModifierKey(event);\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n if (manager.activeItemIndex != null && !hasModifier && (keyCode === SPACE || keyCode === ENTER)) {\n this.selectedIndex = manager.activeItemIndex;\n event.preventDefault();\n } else {\n manager.setFocusOrigin('keyboard').onKeydown(event);\n }\n }\n _anyControlsInvalidOrPending(index) {\n if (this.linear && index >= 0) {\n return this.steps.toArray().slice(0, index).some(step => {\n const control = step.stepControl;\n const isIncomplete = control ? control.invalid || control.pending || !step.interacted : !step.completed;\n return isIncomplete && !step.optional && !step._completedOverride;\n });\n }\n return false;\n }\n _layoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Checks whether the stepper contains the focused element. */\n _containsFocus() {\n const stepperElement = this._elementRef.nativeElement;\n const focusedElement = _getFocusedElementPierceShadowDom();\n return stepperElement === focusedElement || stepperElement.contains(focusedElement);\n }\n /** Checks whether the passed-in index is a valid step index. */\n _isValidIndex(index) {\n return index > -1 && (!this.steps || index < this.steps.length);\n }\n static {\n this.ɵfac = function CdkStepper_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkStepper)(i0.ɵɵdirectiveInject(i1.Directionality, 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkStepper,\n selectors: [[\"\", \"cdkStepper\", \"\"]],\n contentQueries: function CdkStepper_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, CdkStep, 5);\n i0.ɵɵcontentQuery(dirIndex, CdkStepHeader, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._steps = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._stepHeader = _t);\n }\n },\n inputs: {\n linear: [2, \"linear\", \"linear\", booleanAttribute],\n selectedIndex: [2, \"selectedIndex\", \"selectedIndex\", numberAttribute],\n selected: \"selected\",\n orientation: \"orientation\"\n },\n outputs: {\n selectionChange: \"selectionChange\",\n selectedIndexChange: \"selectedIndexChange\"\n },\n exportAs: [\"cdkStepper\"],\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return CdkStepper;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Button that moves to the next step in a stepper workflow. */\nlet CdkStepperNext = /*#__PURE__*/(() => {\n class CdkStepperNext {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the next button. Defaults to \"submit\" if not specified. */\n this.type = 'submit';\n }\n static {\n this.ɵfac = function CdkStepperNext_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkStepperNext)(i0.ɵɵdirectiveInject(CdkStepper));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkStepperNext,\n selectors: [[\"button\", \"cdkStepperNext\", \"\"]],\n hostVars: 1,\n hostBindings: function CdkStepperNext_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function CdkStepperNext_click_HostBindingHandler() {\n return ctx._stepper.next();\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"type\", ctx.type);\n }\n },\n inputs: {\n type: \"type\"\n },\n standalone: true\n });\n }\n }\n return CdkStepperNext;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Button that moves to the previous step in a stepper workflow. */\nlet CdkStepperPrevious = /*#__PURE__*/(() => {\n class CdkStepperPrevious {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the previous button. Defaults to \"button\" if not specified. */\n this.type = 'button';\n }\n static {\n this.ɵfac = function CdkStepperPrevious_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkStepperPrevious)(i0.ɵɵdirectiveInject(CdkStepper));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkStepperPrevious,\n selectors: [[\"button\", \"cdkStepperPrevious\", \"\"]],\n hostVars: 1,\n hostBindings: function CdkStepperPrevious_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function CdkStepperPrevious_click_HostBindingHandler() {\n return ctx._stepper.previous();\n });\n }\n if (rf & 2) {\n i0.ɵɵhostProperty(\"type\", ctx.type);\n }\n },\n inputs: {\n type: \"type\"\n },\n standalone: true\n });\n }\n }\n return CdkStepperPrevious;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CdkStepperModule = /*#__PURE__*/(() => {\n class CdkStepperModule {\n static {\n this.ɵfac = function CdkStepperModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkStepperModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: CdkStepperModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [BidiModule]\n });\n }\n }\n return CdkStepperModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkStep, CdkStepHeader, CdkStepLabel, CdkStepper, CdkStepperModule, CdkStepperNext, CdkStepperPrevious, STEPPER_GLOBAL_OPTIONS, STEP_STATE, StepperSelectionEvent };\n","import { TemplatePortal, CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport { CdkStepLabel, CdkStepHeader, CdkStep, STEPPER_GLOBAL_OPTIONS, CdkStepper, CdkStepperNext, CdkStepperPrevious, CdkStepperModule } from '@angular/cdk/stepper';\nimport { NgTemplateOutlet, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Directive, Injectable, Optional, SkipSelf, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, forwardRef, Inject, ContentChild, QueryList, EventEmitter, inject, ViewChildren, ContentChildren, Output, NgModule } from '@angular/core';\nimport * as i1 from '@angular/material/core';\nimport { MatRipple, ErrorStateMatcher, MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport { MatIcon, MatIconModule } from '@angular/material/icon';\nimport * as i2 from '@angular/cdk/a11y';\nimport { Subject, Subscription } from 'rxjs';\nimport * as i2$1 from '@angular/cdk/bidi';\nimport { switchMap, map, startWith, takeUntil } from 'rxjs/operators';\nimport { trigger, state, style, transition, group, animate, query, animateChild } from '@angular/animations';\nimport { Platform } from '@angular/cdk/platform';\nfunction MatStepHeader_Conditional_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 2);\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r0.iconOverrides[ctx_r0.state])(\"ngTemplateOutletContext\", ctx_r0._getIconContext());\n }\n}\nfunction MatStepHeader_Conditional_4_Case_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 7);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext(2);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r0._getDefaultTextForState(ctx_r0.state));\n }\n}\nfunction MatStepHeader_Conditional_4_Case_1_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 8);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext(3);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r0._intl.completedLabel);\n }\n}\nfunction MatStepHeader_Conditional_4_Case_1_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 8);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext(3);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r0._intl.editableLabel);\n }\n}\nfunction MatStepHeader_Conditional_4_Case_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatStepHeader_Conditional_4_Case_1_Conditional_0_Template, 2, 1, \"span\", 8)(1, MatStepHeader_Conditional_4_Case_1_Conditional_1_Template, 2, 1, \"span\", 8);\n i0.ɵɵelementStart(2, \"mat-icon\", 7);\n i0.ɵɵtext(3);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext(2);\n i0.ɵɵconditional(ctx_r0.state === \"done\" ? 0 : ctx_r0.state === \"edit\" ? 1 : -1);\n i0.ɵɵadvance(3);\n i0.ɵɵtextInterpolate(ctx_r0._getDefaultTextForState(ctx_r0.state));\n }\n}\nfunction MatStepHeader_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, MatStepHeader_Conditional_4_Case_0_Template, 2, 1, \"span\", 7)(1, MatStepHeader_Conditional_4_Case_1_Template, 4, 2, \"mat-icon\", 7);\n }\n if (rf & 2) {\n let tmp_1_0;\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵconditional((tmp_1_0 = ctx_r0.state) === \"number\" ? 0 : 1);\n }\n}\nfunction MatStepHeader_Conditional_6_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 4);\n i0.ɵɵelementContainer(1, 9);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", ctx.template);\n }\n}\nfunction MatStepHeader_Conditional_7_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 4);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r0.label);\n }\n}\nfunction MatStepHeader_Conditional_8_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 5);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r0._intl.optionalLabel);\n }\n}\nfunction MatStepHeader_Conditional_9_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 6);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(ctx_r0.errorMessage);\n }\n}\nconst _c0 = [\"*\"];\nfunction MatStep_ng_template_0_ng_template_1_Template(rf, ctx) {}\nfunction MatStep_ng_template_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0);\n i0.ɵɵtemplate(1, MatStep_ng_template_0_ng_template_1_Template, 0, 0, \"ng-template\", 0);\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"cdkPortalOutlet\", ctx_r0._portal);\n }\n}\nconst _c1 = (a0, a1) => ({\n step: a0,\n i: a1\n});\nconst _c2 = a0 => ({\n \"animationDuration\": a0\n});\nconst _c3 = (a0, a1) => ({\n \"value\": a0,\n \"params\": a1\n});\nfunction MatStepper_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojection(0);\n }\n}\nfunction MatStepper_Case_1_For_3_Conditional_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 6);\n }\n}\nfunction MatStepper_Case_1_For_3_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementContainer(0, 5);\n i0.ɵɵtemplate(1, MatStepper_Case_1_For_3_Conditional_1_Template, 1, 0, \"div\", 6);\n }\n if (rf & 2) {\n const step_r1 = ctx.$implicit;\n const ɵ$index_8_r2 = ctx.$index;\n const ɵ$count_8_r3 = ctx.$count;\n i0.ɵɵnextContext(2);\n const stepTemplate_r4 = i0.ɵɵreference(4);\n i0.ɵɵproperty(\"ngTemplateOutlet\", stepTemplate_r4)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(3, _c1, step_r1, ɵ$index_8_r2));\n i0.ɵɵadvance();\n i0.ɵɵconditional(!(ɵ$index_8_r2 === ɵ$count_8_r3 - 1) ? 1 : -1);\n }\n}\nfunction MatStepper_Case_1_For_6_Template(rf, ctx) {\n if (rf & 1) {\n const _r5 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 7);\n i0.ɵɵlistener(\"@horizontalStepTransition.done\", function MatStepper_Case_1_For_6_Template_div_animation_horizontalStepTransition_done_0_listener($event) {\n i0.ɵɵrestoreView(_r5);\n const ctx_r5 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r5._animationDone.next($event));\n });\n i0.ɵɵelementContainer(1, 8);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const step_r7 = ctx.$implicit;\n const ɵ$index_16_r8 = ctx.$index;\n const ctx_r5 = i0.ɵɵnextContext(2);\n i0.ɵɵclassProp(\"mat-horizontal-stepper-content-inactive\", ctx_r5.selectedIndex !== ɵ$index_16_r8);\n i0.ɵɵproperty(\"@horizontalStepTransition\", i0.ɵɵpureFunction2(8, _c3, ctx_r5._getAnimationDirection(ɵ$index_16_r8), i0.ɵɵpureFunction1(6, _c2, ctx_r5._getAnimationDuration())))(\"id\", ctx_r5._getStepContentId(ɵ$index_16_r8));\n i0.ɵɵattribute(\"aria-labelledby\", ctx_r5._getStepLabelId(ɵ$index_16_r8));\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", step_r7.content);\n }\n}\nfunction MatStepper_Case_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 1)(1, \"div\", 2);\n i0.ɵɵrepeaterCreate(2, MatStepper_Case_1_For_3_Template, 2, 6, null, null, i0.ɵɵrepeaterTrackByIdentity);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(4, \"div\", 3);\n i0.ɵɵrepeaterCreate(5, MatStepper_Case_1_For_6_Template, 2, 11, \"div\", 4, i0.ɵɵrepeaterTrackByIdentity);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r5 = i0.ɵɵnextContext();\n i0.ɵɵadvance(2);\n i0.ɵɵrepeater(ctx_r5.steps);\n i0.ɵɵadvance(3);\n i0.ɵɵrepeater(ctx_r5.steps);\n }\n}\nfunction MatStepper_Case_2_For_1_Template(rf, ctx) {\n if (rf & 1) {\n const _r9 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 9);\n i0.ɵɵelementContainer(1, 5);\n i0.ɵɵelementStart(2, \"div\", 10)(3, \"div\", 11);\n i0.ɵɵlistener(\"@verticalStepTransition.done\", function MatStepper_Case_2_For_1_Template_div_animation_verticalStepTransition_done_3_listener($event) {\n i0.ɵɵrestoreView(_r9);\n const ctx_r5 = i0.ɵɵnextContext(2);\n return i0.ɵɵresetView(ctx_r5._animationDone.next($event));\n });\n i0.ɵɵelementStart(4, \"div\", 12);\n i0.ɵɵelementContainer(5, 8);\n i0.ɵɵelementEnd()()()();\n }\n if (rf & 2) {\n const step_r10 = ctx.$implicit;\n const ɵ$index_22_r11 = ctx.$index;\n const ɵ$count_22_r12 = ctx.$count;\n const ctx_r5 = i0.ɵɵnextContext(2);\n const stepTemplate_r4 = i0.ɵɵreference(4);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngTemplateOutlet\", stepTemplate_r4)(\"ngTemplateOutletContext\", i0.ɵɵpureFunction2(10, _c1, step_r10, ɵ$index_22_r11));\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"mat-stepper-vertical-line\", !(ɵ$index_22_r11 === ɵ$count_22_r12 - 1));\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"mat-vertical-stepper-content-inactive\", ctx_r5.selectedIndex !== ɵ$index_22_r11);\n i0.ɵɵproperty(\"@verticalStepTransition\", i0.ɵɵpureFunction2(15, _c3, ctx_r5._getAnimationDirection(ɵ$index_22_r11), i0.ɵɵpureFunction1(13, _c2, ctx_r5._getAnimationDuration())))(\"id\", ctx_r5._getStepContentId(ɵ$index_22_r11));\n i0.ɵɵattribute(\"aria-labelledby\", ctx_r5._getStepLabelId(ɵ$index_22_r11));\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngTemplateOutlet\", step_r10.content);\n }\n}\nfunction MatStepper_Case_2_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵrepeaterCreate(0, MatStepper_Case_2_For_1_Template, 6, 18, \"div\", 9, i0.ɵɵrepeaterTrackByIdentity);\n }\n if (rf & 2) {\n const ctx_r5 = i0.ɵɵnextContext();\n i0.ɵɵrepeater(ctx_r5.steps);\n }\n}\nfunction MatStepper_ng_template_3_Template(rf, ctx) {\n if (rf & 1) {\n const _r13 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"mat-step-header\", 13);\n i0.ɵɵlistener(\"click\", function MatStepper_ng_template_3_Template_mat_step_header_click_0_listener() {\n const step_r14 = i0.ɵɵrestoreView(_r13).step;\n return i0.ɵɵresetView(step_r14.select());\n })(\"keydown\", function MatStepper_ng_template_3_Template_mat_step_header_keydown_0_listener($event) {\n i0.ɵɵrestoreView(_r13);\n const ctx_r5 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r5._onKeydown($event));\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const step_r14 = ctx.step;\n const i_r15 = ctx.i;\n const ctx_r5 = i0.ɵɵnextContext();\n i0.ɵɵclassProp(\"mat-horizontal-stepper-header\", ctx_r5.orientation === \"horizontal\")(\"mat-vertical-stepper-header\", ctx_r5.orientation === \"vertical\");\n i0.ɵɵproperty(\"tabIndex\", ctx_r5._getFocusIndex() === i_r15 ? 0 : -1)(\"id\", ctx_r5._getStepLabelId(i_r15))(\"index\", i_r15)(\"state\", ctx_r5._getIndicatorType(i_r15, step_r14.state))(\"label\", step_r14.stepLabel || step_r14.label)(\"selected\", ctx_r5.selectedIndex === i_r15)(\"active\", ctx_r5._stepIsNavigable(i_r15, step_r14))(\"optional\", step_r14.optional)(\"errorMessage\", step_r14.errorMessage)(\"iconOverrides\", ctx_r5._iconOverrides)(\"disableRipple\", ctx_r5.disableRipple || !ctx_r5._stepIsNavigable(i_r15, step_r14))(\"color\", step_r14.color || ctx_r5.color);\n i0.ɵɵattribute(\"aria-posinset\", i_r15 + 1)(\"aria-setsize\", ctx_r5.steps.length)(\"aria-controls\", ctx_r5._getStepContentId(i_r15))(\"aria-selected\", ctx_r5.selectedIndex == i_r15)(\"aria-label\", step_r14.ariaLabel || null)(\"aria-labelledby\", !step_r14.ariaLabel && step_r14.ariaLabelledby ? step_r14.ariaLabelledby : null)(\"aria-disabled\", ctx_r5._stepIsNavigable(i_r15, step_r14) ? null : true);\n }\n}\nlet MatStepLabel = /*#__PURE__*/(() => {\n class MatStepLabel extends CdkStepLabel {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatStepLabel_BaseFactory;\n return function MatStepLabel_Factory(__ngFactoryType__) {\n return (ɵMatStepLabel_BaseFactory || (ɵMatStepLabel_BaseFactory = i0.ɵɵgetInheritedFactory(MatStepLabel)))(__ngFactoryType__ || MatStepLabel);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatStepLabel,\n selectors: [[\"\", \"matStepLabel\", \"\"]],\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatStepLabel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Stepper data that is required for internationalization. */\nlet MatStepperIntl = /*#__PURE__*/(() => {\n class MatStepperIntl {\n constructor() {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n this.changes = new Subject();\n /** Label that is rendered below optional steps. */\n this.optionalLabel = 'Optional';\n /** Label that is used to indicate step as completed to screen readers. */\n this.completedLabel = 'Completed';\n /** Label that is used to indicate step as editable to screen readers. */\n this.editableLabel = 'Editable';\n }\n static {\n this.ɵfac = function MatStepperIntl_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatStepperIntl)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MatStepperIntl,\n factory: MatStepperIntl.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return MatStepperIntl;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** @docs-private */\nfunction MAT_STEPPER_INTL_PROVIDER_FACTORY(parentIntl) {\n return parentIntl || new MatStepperIntl();\n}\n/** @docs-private */\nconst MAT_STEPPER_INTL_PROVIDER = {\n provide: MatStepperIntl,\n deps: [[/*#__PURE__*/new Optional(), /*#__PURE__*/new SkipSelf(), MatStepperIntl]],\n useFactory: MAT_STEPPER_INTL_PROVIDER_FACTORY\n};\nlet MatStepHeader = /*#__PURE__*/(() => {\n class MatStepHeader extends CdkStepHeader {\n constructor(_intl, _focusMonitor, _elementRef, changeDetectorRef) {\n super(_elementRef);\n this._intl = _intl;\n this._focusMonitor = _focusMonitor;\n this._intlSubscription = _intl.changes.subscribe(() => changeDetectorRef.markForCheck());\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true);\n }\n ngOnDestroy() {\n this._intlSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n /** Focuses the step header. */\n focus(origin, options) {\n if (origin) {\n this._focusMonitor.focusVia(this._elementRef, origin, options);\n } else {\n this._elementRef.nativeElement.focus(options);\n }\n }\n /** Returns string label of given step if it is a text label. */\n _stringLabel() {\n return this.label instanceof MatStepLabel ? null : this.label;\n }\n /** Returns MatStepLabel if the label of given step is a template label. */\n _templateLabel() {\n return this.label instanceof MatStepLabel ? this.label : null;\n }\n /** Returns the host HTML element. */\n _getHostElement() {\n return this._elementRef.nativeElement;\n }\n /** Template context variables that are exposed to the `matStepperIcon` instances. */\n _getIconContext() {\n return {\n index: this.index,\n active: this.active,\n optional: this.optional\n };\n }\n _getDefaultTextForState(state) {\n if (state == 'number') {\n return `${this.index + 1}`;\n }\n if (state == 'edit') {\n return 'create';\n }\n if (state == 'error') {\n return 'warning';\n }\n return state;\n }\n static {\n this.ɵfac = function MatStepHeader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatStepHeader)(i0.ɵɵdirectiveInject(MatStepperIntl), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatStepHeader,\n selectors: [[\"mat-step-header\"]],\n hostAttrs: [\"role\", \"tab\", 1, \"mat-step-header\"],\n hostVars: 2,\n hostBindings: function MatStepHeader_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassMap(\"mat-\" + (ctx.color || \"primary\"));\n }\n },\n inputs: {\n state: \"state\",\n label: \"label\",\n errorMessage: \"errorMessage\",\n iconOverrides: \"iconOverrides\",\n index: \"index\",\n selected: \"selected\",\n active: \"active\",\n optional: \"optional\",\n disableRipple: \"disableRipple\",\n color: \"color\"\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n decls: 10,\n vars: 17,\n consts: [[\"matRipple\", \"\", 1, \"mat-step-header-ripple\", \"mat-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\"], [1, \"mat-step-icon-content\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"mat-step-label\"], [1, \"mat-step-text-label\"], [1, \"mat-step-optional\"], [1, \"mat-step-sub-label-error\"], [\"aria-hidden\", \"true\"], [1, \"cdk-visually-hidden\"], [3, \"ngTemplateOutlet\"]],\n template: function MatStepHeader_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n i0.ɵɵelementStart(1, \"div\")(2, \"div\", 1);\n i0.ɵɵtemplate(3, MatStepHeader_Conditional_3_Template, 1, 2, \"ng-container\", 2)(4, MatStepHeader_Conditional_4_Template, 2, 1);\n i0.ɵɵelementEnd()();\n i0.ɵɵelementStart(5, \"div\", 3);\n i0.ɵɵtemplate(6, MatStepHeader_Conditional_6_Template, 2, 1, \"div\", 4)(7, MatStepHeader_Conditional_7_Template, 2, 1, \"div\", 4)(8, MatStepHeader_Conditional_8_Template, 2, 1, \"div\", 5)(9, MatStepHeader_Conditional_9_Template, 2, 1, \"div\", 6);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n let tmp_8_0;\n i0.ɵɵproperty(\"matRippleTrigger\", ctx._getHostElement())(\"matRippleDisabled\", ctx.disableRipple);\n i0.ɵɵadvance();\n i0.ɵɵclassMapInterpolate1(\"mat-step-icon-state-\", ctx.state, \" mat-step-icon\");\n i0.ɵɵclassProp(\"mat-step-icon-selected\", ctx.selected);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx.iconOverrides && ctx.iconOverrides[ctx.state] ? 3 : 4);\n i0.ɵɵadvance(2);\n i0.ɵɵclassProp(\"mat-step-label-active\", ctx.active)(\"mat-step-label-selected\", ctx.selected)(\"mat-step-label-error\", ctx.state == \"error\");\n i0.ɵɵadvance();\n i0.ɵɵconditional((tmp_8_0 = ctx._templateLabel()) ? 6 : ctx._stringLabel() ? 7 : -1, tmp_8_0);\n i0.ɵɵadvance(2);\n i0.ɵɵconditional(ctx.optional && ctx.state != \"error\" ? 8 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional(ctx.state === \"error\" ? 9 : -1);\n }\n },\n dependencies: [MatRipple, NgTemplateOutlet, MatIcon],\n styles: [\".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-step-header:focus .mat-focus-indicator::before{content:\\\"\\\"}.mat-step-header:hover[aria-disabled=true]{cursor:default}.mat-step-header:hover:not([aria-disabled]),.mat-step-header:hover[aria-disabled=false]{background-color:var(--mat-stepper-header-hover-state-layer-color);border-radius:var(--mat-stepper-header-hover-state-layer-shape, var(--mat-app-corner-medium))}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused{background-color:var(--mat-stepper-header-focus-state-layer-color);border-radius:var(--mat-stepper-header-focus-state-layer-shape, var(--mat-app-corner-medium))}@media(hover: none){.mat-step-header:hover{background:none}}.cdk-high-contrast-active .mat-step-header{outline:solid 1px}.cdk-high-contrast-active .mat-step-header[aria-selected=true] .mat-step-label{text-decoration:underline}.cdk-high-contrast-active .mat-step-header[aria-disabled=true]{outline-color:GrayText}.cdk-high-contrast-active .mat-step-header[aria-disabled=true] .mat-step-label,.cdk-high-contrast-active .mat-step-header[aria-disabled=true] .mat-step-icon,.cdk-high-contrast-active .mat-step-header[aria-disabled=true] .mat-step-optional{color:GrayText}.mat-step-optional{font-size:12px;color:var(--mat-stepper-header-optional-label-text-color, var(--mat-app-on-surface-variant))}.mat-step-sub-label-error{font-size:12px;font-weight:normal}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative;color:var(--mat-stepper-header-icon-foreground-color, var(--mat-app-surface));background-color:var(--mat-stepper-header-icon-background-color, var(--mat-app-on-surface-variant))}.mat-step-icon-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);display:flex}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error{background-color:var(--mat-stepper-header-error-state-icon-background-color);color:var(--mat-stepper-header-error-state-icon-foreground-color, var(--mat-app-error))}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle;font-family:var(--mat-stepper-header-label-text-font, var(--mat-app-title-small-font));font-size:var(--mat-stepper-header-label-text-size, var(--mat-app-title-small-size));font-weight:var(--mat-stepper-header-label-text-weight, var(--mat-app-title-small-weight));color:var(--mat-stepper-header-label-text-color, var(--mat-app-on-surface-variant))}.mat-step-label.mat-step-label-active{color:var(--mat-stepper-header-selected-state-label-text-color, var(--mat-app-on-surface-variant))}.mat-step-label.mat-step-label-error{color:var(--mat-stepper-header-error-state-label-text-color, var(--mat-app-error));font-size:var(--mat-stepper-header-error-state-label-text-size, var(--mat-app-title-small-size))}.mat-step-label.mat-step-label-selected{font-size:var(--mat-stepper-header-selected-state-label-text-size, var(--mat-app-title-small-size));font-weight:var(--mat-stepper-header-selected-state-label-text-weight, var(--mat-app-title-small-weight))}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-step-icon-selected{background-color:var(--mat-stepper-header-selected-state-icon-background-color, var(--mat-app-primary));color:var(--mat-stepper-header-selected-state-icon-foreground-color, var(--mat-app-on-primary))}.mat-step-icon-state-done{background-color:var(--mat-stepper-header-done-state-icon-background-color);color:var(--mat-stepper-header-done-state-icon-foreground-color)}.mat-step-icon-state-edit{background-color:var(--mat-stepper-header-edit-state-icon-background-color, var(--mat-app-primary));color:var(--mat-stepper-header-edit-state-icon-foreground-color, var(--mat-app-on-primary))}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatStepHeader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst DEFAULT_HORIZONTAL_ANIMATION_DURATION = '500ms';\nconst DEFAULT_VERTICAL_ANIMATION_DURATION = '225ms';\n/**\n * Animations used by the Material steppers.\n * @docs-private\n */\nconst matStepperAnimations = {\n /** Animation that transitions the step along the X axis in a horizontal stepper. */\n horizontalStepTransition: /*#__PURE__*/trigger('horizontalStepTransition', [/*#__PURE__*/state('previous', /*#__PURE__*/style({\n transform: 'translate3d(-100%, 0, 0)',\n visibility: 'hidden'\n })),\n /*#__PURE__*/\n // Transition to `inherit`, rather than `visible`,\n // because visibility on a child element the one from the parent,\n // making this element focusable inside of a `hidden` element.\n state('current', /*#__PURE__*/style({\n transform: 'none',\n visibility: 'inherit'\n })), /*#__PURE__*/state('next', /*#__PURE__*/style({\n transform: 'translate3d(100%, 0, 0)',\n visibility: 'hidden'\n })), /*#__PURE__*/transition('* => *', /*#__PURE__*/group([/*#__PURE__*/animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)'), /*#__PURE__*/query('@*', /*#__PURE__*/animateChild(), {\n optional: true\n })]), {\n params: {\n 'animationDuration': DEFAULT_HORIZONTAL_ANIMATION_DURATION\n }\n })]),\n /** Animation that transitions the step along the Y axis in a vertical stepper. */\n verticalStepTransition: /*#__PURE__*/trigger('verticalStepTransition', [/*#__PURE__*/state('previous', /*#__PURE__*/style({\n height: '0px',\n visibility: 'hidden'\n })), /*#__PURE__*/state('next', /*#__PURE__*/style({\n height: '0px',\n visibility: 'hidden'\n })),\n /*#__PURE__*/\n // Transition to `inherit`, rather than `visible`,\n // because visibility on a child element the one from the parent,\n // making this element focusable inside of a `hidden` element.\n state('current', /*#__PURE__*/style({\n height: '*',\n visibility: 'inherit'\n })), /*#__PURE__*/transition('* <=> current', /*#__PURE__*/group([/*#__PURE__*/animate('{{animationDuration}} cubic-bezier(0.4, 0.0, 0.2, 1)'), /*#__PURE__*/query('@*', /*#__PURE__*/animateChild(), {\n optional: true\n })]), {\n params: {\n 'animationDuration': DEFAULT_VERTICAL_ANIMATION_DURATION\n }\n })])\n};\n\n/**\n * Template to be used to override the icons inside the step header.\n */\nlet MatStepperIcon = /*#__PURE__*/(() => {\n class MatStepperIcon {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n static {\n this.ɵfac = function MatStepperIcon_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatStepperIcon)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatStepperIcon,\n selectors: [[\"ng-template\", \"matStepperIcon\", \"\"]],\n inputs: {\n name: [0, \"matStepperIcon\", \"name\"]\n },\n standalone: true\n });\n }\n }\n return MatStepperIcon;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Content for a `mat-step` that will be rendered lazily.\n */\nlet MatStepContent = /*#__PURE__*/(() => {\n class MatStepContent {\n constructor(_template) {\n this._template = _template;\n }\n static {\n this.ɵfac = function MatStepContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatStepContent)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatStepContent,\n selectors: [[\"ng-template\", \"matStepContent\", \"\"]],\n standalone: true\n });\n }\n }\n return MatStepContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatStep = /*#__PURE__*/(() => {\n class MatStep extends CdkStep {\n constructor(stepper, _errorStateMatcher, _viewContainerRef, stepperOptions) {\n super(stepper, stepperOptions);\n this._errorStateMatcher = _errorStateMatcher;\n this._viewContainerRef = _viewContainerRef;\n this._isSelected = Subscription.EMPTY;\n /** Content for step label given by ``. */\n // We need an initializer here to avoid a TS error.\n this.stepLabel = undefined;\n }\n ngAfterContentInit() {\n this._isSelected = this._stepper.steps.changes.pipe(switchMap(() => {\n return this._stepper.selectionChange.pipe(map(event => event.selectedStep === this), startWith(this._stepper.selected === this));\n })).subscribe(isSelected => {\n if (isSelected && this._lazyContent && !this._portal) {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n }\n });\n }\n ngOnDestroy() {\n this._isSelected.unsubscribe();\n }\n /** Custom error state matcher that additionally checks for validity of interacted form. */\n isErrorState(control, form) {\n const originalErrorState = this._errorStateMatcher.isErrorState(control, form);\n // Custom error state checks for the validity of form that is not submitted or touched\n // since user can trigger a form change by calling for another step without directly\n // interacting with the current form.\n const customErrorState = !!(control && control.invalid && this.interacted);\n return originalErrorState || customErrorState;\n }\n static {\n this.ɵfac = function MatStep_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatStep)(i0.ɵɵdirectiveInject(forwardRef(() => MatStepper)), i0.ɵɵdirectiveInject(i1.ErrorStateMatcher, 4), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(STEPPER_GLOBAL_OPTIONS, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatStep,\n selectors: [[\"mat-step\"]],\n contentQueries: function MatStep_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatStepLabel, 5);\n i0.ɵɵcontentQuery(dirIndex, MatStepContent, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.stepLabel = _t.first);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._lazyContent = _t.first);\n }\n },\n hostAttrs: [\"hidden\", \"\"],\n inputs: {\n color: \"color\"\n },\n exportAs: [\"matStep\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: ErrorStateMatcher,\n useExisting: MatStep\n }, {\n provide: CdkStep,\n useExisting: MatStep\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n consts: [[3, \"cdkPortalOutlet\"]],\n template: function MatStep_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵtemplate(0, MatStep_ng_template_0_Template, 2, 1, \"ng-template\");\n }\n },\n dependencies: [CdkPortalOutlet],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return MatStep;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatStepper = /*#__PURE__*/(() => {\n class MatStepper extends CdkStepper {\n /** Duration for the animation. Will be normalized to milliseconds if no units are set. */\n get animationDuration() {\n return this._animationDuration;\n }\n set animationDuration(value) {\n this._animationDuration = /^\\d+$/.test(value) ? value + 'ms' : value;\n }\n constructor(dir, changeDetectorRef, elementRef) {\n super(dir, changeDetectorRef, elementRef);\n /** The list of step headers of the steps in the stepper. */\n // We need an initializer here to avoid a TS error.\n this._stepHeader = undefined;\n /** Full list of steps inside the stepper, including inside nested steppers. */\n // We need an initializer here to avoid a TS error.\n this._steps = undefined;\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n this.steps = new QueryList();\n /** Event emitted when the current step is done transitioning in. */\n this.animationDone = new EventEmitter();\n /**\n * Whether the label should display in bottom or end position.\n * Only applies in the `horizontal` orientation.\n */\n this.labelPosition = 'end';\n /**\n * Position of the stepper's header.\n * Only applies in the `horizontal` orientation.\n */\n this.headerPosition = 'top';\n /** Consumer-specified template-refs to be used to override the header icons. */\n this._iconOverrides = {};\n /** Stream of animation `done` events when the body expands/collapses. */\n this._animationDone = new Subject();\n this._animationDuration = '';\n /** Whether the stepper is rendering on the server. */\n this._isServer = !inject(Platform).isBrowser;\n const nodeName = elementRef.nativeElement.nodeName.toLowerCase();\n this.orientation = nodeName === 'mat-vertical-stepper' ? 'vertical' : 'horizontal';\n }\n ngAfterContentInit() {\n super.ngAfterContentInit();\n this._icons.forEach(({\n name,\n templateRef\n }) => this._iconOverrides[name] = templateRef);\n // Mark the component for change detection whenever the content children query changes\n this.steps.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._stateChanged();\n });\n this._animationDone.pipe(takeUntil(this._destroyed)).subscribe(event => {\n if (event.toState === 'current') {\n this.animationDone.emit();\n }\n });\n }\n _stepIsNavigable(index, step) {\n return step.completed || this.selectedIndex === index || !this.linear;\n }\n _getAnimationDuration() {\n if (this.animationDuration) {\n return this.animationDuration;\n }\n return this.orientation === 'horizontal' ? DEFAULT_HORIZONTAL_ANIMATION_DURATION : DEFAULT_VERTICAL_ANIMATION_DURATION;\n }\n static {\n this.ɵfac = function MatStepper_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatStepper)(i0.ɵɵdirectiveInject(i2$1.Directionality, 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatStepper,\n selectors: [[\"mat-stepper\"], [\"mat-vertical-stepper\"], [\"mat-horizontal-stepper\"], [\"\", \"matStepper\", \"\"]],\n contentQueries: function MatStepper_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatStep, 5);\n i0.ɵɵcontentQuery(dirIndex, MatStepperIcon, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._steps = _t);\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._icons = _t);\n }\n },\n viewQuery: function MatStepper_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(MatStepHeader, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._stepHeader = _t);\n }\n },\n hostAttrs: [\"role\", \"tablist\"],\n hostVars: 11,\n hostBindings: function MatStepper_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-orientation\", ctx.orientation);\n i0.ɵɵclassProp(\"mat-stepper-horizontal\", ctx.orientation === \"horizontal\")(\"mat-stepper-vertical\", ctx.orientation === \"vertical\")(\"mat-stepper-label-position-end\", ctx.orientation === \"horizontal\" && ctx.labelPosition == \"end\")(\"mat-stepper-label-position-bottom\", ctx.orientation === \"horizontal\" && ctx.labelPosition == \"bottom\")(\"mat-stepper-header-position-bottom\", ctx.headerPosition === \"bottom\");\n }\n },\n inputs: {\n disableRipple: \"disableRipple\",\n color: \"color\",\n labelPosition: \"labelPosition\",\n headerPosition: \"headerPosition\",\n animationDuration: \"animationDuration\"\n },\n outputs: {\n animationDone: \"animationDone\"\n },\n exportAs: [\"matStepper\", \"matVerticalStepper\", \"matHorizontalStepper\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CdkStepper,\n useExisting: MatStepper\n }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c0,\n decls: 5,\n vars: 2,\n consts: [[\"stepTemplate\", \"\"], [1, \"mat-horizontal-stepper-wrapper\"], [1, \"mat-horizontal-stepper-header-container\"], [1, \"mat-horizontal-content-container\"], [\"role\", \"tabpanel\", 1, \"mat-horizontal-stepper-content\", 3, \"id\", \"mat-horizontal-stepper-content-inactive\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"mat-stepper-horizontal-line\"], [\"role\", \"tabpanel\", 1, \"mat-horizontal-stepper-content\", 3, \"id\"], [3, \"ngTemplateOutlet\"], [1, \"mat-step\"], [1, \"mat-vertical-content-container\"], [\"role\", \"tabpanel\", 1, \"mat-vertical-stepper-content\", 3, \"id\"], [1, \"mat-vertical-content\"], [3, \"click\", \"keydown\", \"tabIndex\", \"id\", \"index\", \"state\", \"label\", \"selected\", \"active\", \"optional\", \"errorMessage\", \"iconOverrides\", \"disableRipple\", \"color\"]],\n template: function MatStepper_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵtemplate(0, MatStepper_Conditional_0_Template, 1, 0)(1, MatStepper_Case_1_Template, 7, 0, \"div\", 1)(2, MatStepper_Case_2_Template, 2, 0)(3, MatStepper_ng_template_3_Template, 1, 23, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor);\n }\n if (rf & 2) {\n let tmp_2_0;\n i0.ɵɵconditional(ctx._isServer ? 0 : -1);\n i0.ɵɵadvance();\n i0.ɵɵconditional((tmp_2_0 = ctx.orientation) === \"horizontal\" ? 1 : tmp_2_0 === \"vertical\" ? 2 : -1);\n }\n },\n dependencies: [NgTemplateOutlet, MatStepHeader],\n styles: [\".mat-stepper-vertical,.mat-stepper-horizontal{display:block;font-family:var(--mat-stepper-container-text-font, var(--mat-app-body-medium-font));background:var(--mat-stepper-container-color, var(--mat-app-surface))}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-header-position-bottom .mat-horizontal-stepper-header-container{order:1}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px;border-top-color:var(--mat-stepper-line-color, var(--mat-app-outline))}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative;top:calc(calc((var(--mat-stepper-header-height) - 24px) / 2) + 12px)}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\\\"\\\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px;height:var(--mat-stepper-header-height)}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-horizontal-stepper-header::before,.mat-horizontal-stepper-header::after{border-top-color:var(--mat-stepper-line-color, var(--mat-app-outline))}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{padding:calc((var(--mat-stepper-header-height) - 24px) / 2) 24px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header::after{top:calc(calc((var(--mat-stepper-header-height) - 24px) / 2) + 12px)}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px;padding:calc((var(--mat-stepper-header-height) - 24px) / 2) 24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-wrapper{display:flex;flex-direction:column}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content.mat-horizontal-stepper-content-inactive{height:0;overflow:hidden}.mat-horizontal-stepper-content:not(.mat-horizontal-stepper-content-inactive){visibility:inherit !important}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.cdk-high-contrast-active .mat-horizontal-content-container{outline:solid 1px}.mat-stepper-header-position-bottom .mat-horizontal-content-container{padding:24px 24px 0 24px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}.cdk-high-contrast-active .mat-vertical-content-container{outline:solid 1px}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\\\"\\\";position:absolute;left:0;border-left-width:1px;border-left-style:solid;border-left-color:var(--mat-stepper-line-color, var(--mat-app-outline));top:calc(8px - calc((var(--mat-stepper-header-height) - 24px) / 2));bottom:calc(8px - calc((var(--mat-stepper-header-height) - 24px) / 2))}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-stepper-content:not(.mat-vertical-stepper-content-inactive){visibility:inherit !important}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\"],\n encapsulation: 2,\n data: {\n animation: [matStepperAnimations.horizontalStepTransition, matStepperAnimations.verticalStepTransition]\n },\n changeDetection: 0\n });\n }\n }\n return MatStepper;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Button that moves to the next step in a stepper workflow. */\nlet MatStepperNext = /*#__PURE__*/(() => {\n class MatStepperNext extends CdkStepperNext {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatStepperNext_BaseFactory;\n return function MatStepperNext_Factory(__ngFactoryType__) {\n return (ɵMatStepperNext_BaseFactory || (ɵMatStepperNext_BaseFactory = i0.ɵɵgetInheritedFactory(MatStepperNext)))(__ngFactoryType__ || MatStepperNext);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatStepperNext,\n selectors: [[\"button\", \"matStepperNext\", \"\"]],\n hostAttrs: [1, \"mat-stepper-next\"],\n hostVars: 1,\n hostBindings: function MatStepperNext_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"type\", ctx.type);\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatStepperNext;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Button that moves to the previous step in a stepper workflow. */\nlet MatStepperPrevious = /*#__PURE__*/(() => {\n class MatStepperPrevious extends CdkStepperPrevious {\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatStepperPrevious_BaseFactory;\n return function MatStepperPrevious_Factory(__ngFactoryType__) {\n return (ɵMatStepperPrevious_BaseFactory || (ɵMatStepperPrevious_BaseFactory = i0.ɵɵgetInheritedFactory(MatStepperPrevious)))(__ngFactoryType__ || MatStepperPrevious);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatStepperPrevious,\n selectors: [[\"button\", \"matStepperPrevious\", \"\"]],\n hostAttrs: [1, \"mat-stepper-previous\"],\n hostVars: 1,\n hostBindings: function MatStepperPrevious_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵhostProperty(\"type\", ctx.type);\n }\n },\n standalone: true,\n features: [i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatStepperPrevious;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatStepperModule = /*#__PURE__*/(() => {\n class MatStepperModule {\n static {\n this.ɵfac = function MatStepperModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatStepperModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatStepperModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [MAT_STEPPER_INTL_PROVIDER, ErrorStateMatcher],\n imports: [MatCommonModule, CommonModule, PortalModule, CdkStepperModule, MatIconModule, MatRippleModule, MatStepper, MatStepHeader, MatCommonModule]\n });\n }\n }\n return MatStepperModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_STEPPER_INTL_PROVIDER, MAT_STEPPER_INTL_PROVIDER_FACTORY, MatStep, MatStepContent, MatStepHeader, MatStepLabel, MatStepper, MatStepperIcon, MatStepperIntl, MatStepperModule, MatStepperNext, MatStepperPrevious, matStepperAnimations };\n","import * as i0 from '@angular/core';\nimport { signal, Component, ViewEncapsulation, ChangeDetectionStrategy, inject, ApplicationRef, EnvironmentInjector, createComponent, Injectable, Inject, InjectionToken, booleanAttribute, Directive, Optional, SkipSelf, Input, EventEmitter, Injector, afterNextRender, numberAttribute, Self, Output, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { isFakeTouchstartFromScreenReader, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y';\nimport { coerceElement, coerceNumberProperty, coerceArray } from '@angular/cdk/coercion';\nimport { _getEventTarget, normalizePassiveListenerOptions, _getShadowRoot } from '@angular/cdk/platform';\nimport { Subject, Subscription, interval, animationFrameScheduler, Observable, merge, BehaviorSubject } from 'rxjs';\nimport { takeUntil, map, take, tap, switchMap, startWith } from 'rxjs/operators';\nimport * as i1$1 from '@angular/cdk/bidi';\n\n/** Creates a deep clone of an element. */\nfunction deepCloneNode(node) {\n const clone = node.cloneNode(true);\n const descendantsWithId = clone.querySelectorAll('[id]');\n const nodeName = node.nodeName.toLowerCase();\n // Remove the `id` to avoid having multiple elements with the same id on the page.\n clone.removeAttribute('id');\n for (let i = 0; i < descendantsWithId.length; i++) {\n descendantsWithId[i].removeAttribute('id');\n }\n if (nodeName === 'canvas') {\n transferCanvasData(node, clone);\n } else if (nodeName === 'input' || nodeName === 'select' || nodeName === 'textarea') {\n transferInputData(node, clone);\n }\n transferData('canvas', node, clone, transferCanvasData);\n transferData('input, textarea, select', node, clone, transferInputData);\n return clone;\n}\n/** Matches elements between an element and its clone and allows for their data to be cloned. */\nfunction transferData(selector, node, clone, callback) {\n const descendantElements = node.querySelectorAll(selector);\n if (descendantElements.length) {\n const cloneElements = clone.querySelectorAll(selector);\n for (let i = 0; i < descendantElements.length; i++) {\n callback(descendantElements[i], cloneElements[i]);\n }\n }\n}\n// Counter for unique cloned radio button names.\nlet cloneUniqueId = 0;\n/** Transfers the data of one input element to another. */\nfunction transferInputData(source, clone) {\n // Browsers throw an error when assigning the value of a file input programmatically.\n if (clone.type !== 'file') {\n clone.value = source.value;\n }\n // Radio button `name` attributes must be unique for radio button groups\n // otherwise original radio buttons can lose their checked state\n // once the clone is inserted in the DOM.\n if (clone.type === 'radio' && clone.name) {\n clone.name = `mat-clone-${clone.name}-${cloneUniqueId++}`;\n }\n}\n/** Transfers the data of one canvas element to another. */\nfunction transferCanvasData(source, clone) {\n const context = clone.getContext('2d');\n if (context) {\n // In some cases `drawImage` can throw (e.g. if the canvas size is 0x0).\n // We can't do much about it so just ignore the error.\n try {\n context.drawImage(source, 0, 0);\n } catch {}\n }\n}\n\n/** Gets a mutable version of an element's bounding `DOMRect`. */\nfunction getMutableClientRect(element) {\n const rect = element.getBoundingClientRect();\n // We need to clone the `clientRect` here, because all the values on it are readonly\n // and we need to be able to update them. Also we can't use a spread here, because\n // the values on a `DOMRect` aren't own properties. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#Notes\n return {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n x: rect.x,\n y: rect.y\n };\n}\n/**\n * Checks whether some coordinates are within a `DOMRect`.\n * @param clientRect DOMRect that is being checked.\n * @param x Coordinates along the X axis.\n * @param y Coordinates along the Y axis.\n */\nfunction isInsideClientRect(clientRect, x, y) {\n const {\n top,\n bottom,\n left,\n right\n } = clientRect;\n return y >= top && y <= bottom && x >= left && x <= right;\n}\n/**\n * Updates the top/left positions of a `DOMRect`, as well as their bottom/right counterparts.\n * @param domRect `DOMRect` that should be updated.\n * @param top Amount to add to the `top` position.\n * @param left Amount to add to the `left` position.\n */\nfunction adjustDomRect(domRect, top, left) {\n domRect.top += top;\n domRect.bottom = domRect.top + domRect.height;\n domRect.left += left;\n domRect.right = domRect.left + domRect.width;\n}\n/**\n * Checks whether the pointer coordinates are close to a DOMRect.\n * @param rect DOMRect to check against.\n * @param threshold Threshold around the DOMRect.\n * @param pointerX Coordinates along the X axis.\n * @param pointerY Coordinates along the Y axis.\n */\nfunction isPointerNearDomRect(rect, threshold, pointerX, pointerY) {\n const {\n top,\n right,\n bottom,\n left,\n width,\n height\n } = rect;\n const xThreshold = width * threshold;\n const yThreshold = height * threshold;\n return pointerY > top - yThreshold && pointerY < bottom + yThreshold && pointerX > left - xThreshold && pointerX < right + xThreshold;\n}\n\n/** Keeps track of the scroll position and dimensions of the parents of an element. */\nclass ParentPositionTracker {\n constructor(_document) {\n this._document = _document;\n /** Cached positions of the scrollable parent elements. */\n this.positions = new Map();\n }\n /** Clears the cached positions. */\n clear() {\n this.positions.clear();\n }\n /** Caches the positions. Should be called at the beginning of a drag sequence. */\n cache(elements) {\n this.clear();\n this.positions.set(this._document, {\n scrollPosition: this.getViewportScrollPosition()\n });\n elements.forEach(element => {\n this.positions.set(element, {\n scrollPosition: {\n top: element.scrollTop,\n left: element.scrollLeft\n },\n clientRect: getMutableClientRect(element)\n });\n });\n }\n /** Handles scrolling while a drag is taking place. */\n handleScroll(event) {\n const target = _getEventTarget(event);\n const cachedPosition = this.positions.get(target);\n if (!cachedPosition) {\n return null;\n }\n const scrollPosition = cachedPosition.scrollPosition;\n let newTop;\n let newLeft;\n if (target === this._document) {\n const viewportScrollPosition = this.getViewportScrollPosition();\n newTop = viewportScrollPosition.top;\n newLeft = viewportScrollPosition.left;\n } else {\n newTop = target.scrollTop;\n newLeft = target.scrollLeft;\n }\n const topDifference = scrollPosition.top - newTop;\n const leftDifference = scrollPosition.left - newLeft;\n // Go through and update the cached positions of the scroll\n // parents that are inside the element that was scrolled.\n this.positions.forEach((position, node) => {\n if (position.clientRect && target !== node && target.contains(node)) {\n adjustDomRect(position.clientRect, topDifference, leftDifference);\n }\n });\n scrollPosition.top = newTop;\n scrollPosition.left = newLeft;\n return {\n top: topDifference,\n left: leftDifference\n };\n }\n /**\n * Gets the scroll position of the viewport. Note that we use the scrollX and scrollY directly,\n * instead of going through the `ViewportRuler`, because the first value the ruler looks at is\n * the top/left offset of the `document.documentElement` which works for most cases, but breaks\n * if the element is offset by something like the `BlockScrollStrategy`.\n */\n getViewportScrollPosition() {\n return {\n top: window.scrollY,\n left: window.scrollX\n };\n }\n}\n\n/**\n * Gets the root HTML element of an embedded view.\n * If the root is not an HTML element it gets wrapped in one.\n */\nfunction getRootNode(viewRef, _document) {\n const rootNodes = viewRef.rootNodes;\n if (rootNodes.length === 1 && rootNodes[0].nodeType === _document.ELEMENT_NODE) {\n return rootNodes[0];\n }\n const wrapper = _document.createElement('div');\n rootNodes.forEach(node => wrapper.appendChild(node));\n return wrapper;\n}\n\n/**\n * Shallow-extends a stylesheet object with another stylesheet-like object.\n * Note that the keys in `source` have to be dash-cased.\n * @docs-private\n */\nfunction extendStyles(dest, source, importantProperties) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n const value = source[key];\n if (value) {\n dest.setProperty(key, value, importantProperties?.has(key) ? 'important' : '');\n } else {\n dest.removeProperty(key);\n }\n }\n }\n return dest;\n}\n/**\n * Toggles whether the native drag interactions should be enabled for an element.\n * @param element Element on which to toggle the drag interactions.\n * @param enable Whether the drag interactions should be enabled.\n * @docs-private\n */\nfunction toggleNativeDragInteractions(element, enable) {\n const userSelect = enable ? '' : 'none';\n extendStyles(element.style, {\n 'touch-action': enable ? '' : 'none',\n '-webkit-user-drag': enable ? '' : 'none',\n '-webkit-tap-highlight-color': enable ? '' : 'transparent',\n 'user-select': userSelect,\n '-ms-user-select': userSelect,\n '-webkit-user-select': userSelect,\n '-moz-user-select': userSelect\n });\n}\n/**\n * Toggles whether an element is visible while preserving its dimensions.\n * @param element Element whose visibility to toggle\n * @param enable Whether the element should be visible.\n * @param importantProperties Properties to be set as `!important`.\n * @docs-private\n */\nfunction toggleVisibility(element, enable, importantProperties) {\n extendStyles(element.style, {\n position: enable ? '' : 'fixed',\n top: enable ? '' : '0',\n opacity: enable ? '' : '0',\n left: enable ? '' : '-999em'\n }, importantProperties);\n}\n/**\n * Combines a transform string with an optional other transform\n * that exited before the base transform was applied.\n */\nfunction combineTransforms(transform, initialTransform) {\n return initialTransform && initialTransform != 'none' ? transform + ' ' + initialTransform : transform;\n}\n/**\n * Matches the target element's size to the source's size.\n * @param target Element that needs to be resized.\n * @param sourceRect Dimensions of the source element.\n */\nfunction matchElementSize(target, sourceRect) {\n target.style.width = `${sourceRect.width}px`;\n target.style.height = `${sourceRect.height}px`;\n target.style.transform = getTransform(sourceRect.left, sourceRect.top);\n}\n/**\n * Gets a 3d `transform` that can be applied to an element.\n * @param x Desired position of the element along the X axis.\n * @param y Desired position of the element along the Y axis.\n */\nfunction getTransform(x, y) {\n // Round the transforms since some browsers will\n // blur the elements for sub-pixel transforms.\n return `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;\n}\n\n/** Parses a CSS time value to milliseconds. */\nfunction parseCssTimeUnitsToMs(value) {\n // Some browsers will return it in seconds, whereas others will return milliseconds.\n const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n return parseFloat(value) * multiplier;\n}\n/** Gets the transform transition duration, including the delay, of an element in milliseconds. */\nfunction getTransformTransitionDurationInMs(element) {\n const computedStyle = getComputedStyle(element);\n const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n const property = transitionedProperties.find(prop => prop === 'transform' || prop === 'all');\n // If there's no transition for `all` or `transform`, we shouldn't do anything.\n if (!property) {\n return 0;\n }\n // Get the index of the property that we're interested in and match\n // it up to the same index in `transition-delay` and `transition-duration`.\n const propertyIndex = transitionedProperties.indexOf(property);\n const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n return parseCssTimeUnitsToMs(rawDurations[propertyIndex]) + parseCssTimeUnitsToMs(rawDelays[propertyIndex]);\n}\n/** Parses out multiple values from a computed style into an array. */\nfunction parseCssPropertyValue(computedStyle, name) {\n const value = computedStyle.getPropertyValue(name);\n return value.split(',').map(part => part.trim());\n}\n\n/** Inline styles to be set as `!important` while dragging. */\nconst importantProperties = /*#__PURE__*/new Set([\n// Needs to be important, because some `mat-table` sets `position: sticky !important`. See #22781.\n'position']);\nclass PreviewRef {\n get element() {\n return this._preview;\n }\n constructor(_document, _rootElement, _direction, _initialDomRect, _previewTemplate, _previewClass, _pickupPositionOnPage, _initialTransform, _zIndex) {\n this._document = _document;\n this._rootElement = _rootElement;\n this._direction = _direction;\n this._initialDomRect = _initialDomRect;\n this._previewTemplate = _previewTemplate;\n this._previewClass = _previewClass;\n this._pickupPositionOnPage = _pickupPositionOnPage;\n this._initialTransform = _initialTransform;\n this._zIndex = _zIndex;\n }\n attach(parent) {\n this._preview = this._createPreview();\n parent.appendChild(this._preview);\n // The null check is necessary for browsers that don't support the popover API.\n // Note that we use a string access for compatibility with Closure.\n if (supportsPopover(this._preview)) {\n this._preview['showPopover']();\n }\n }\n destroy() {\n this._preview.remove();\n this._previewEmbeddedView?.destroy();\n this._preview = this._previewEmbeddedView = null;\n }\n setTransform(value) {\n this._preview.style.transform = value;\n }\n getBoundingClientRect() {\n return this._preview.getBoundingClientRect();\n }\n addClass(className) {\n this._preview.classList.add(className);\n }\n getTransitionDuration() {\n return getTransformTransitionDurationInMs(this._preview);\n }\n addEventListener(name, handler) {\n this._preview.addEventListener(name, handler);\n }\n removeEventListener(name, handler) {\n this._preview.removeEventListener(name, handler);\n }\n _createPreview() {\n const previewConfig = this._previewTemplate;\n const previewClass = this._previewClass;\n const previewTemplate = previewConfig ? previewConfig.template : null;\n let preview;\n if (previewTemplate && previewConfig) {\n // Measure the element before we've inserted the preview\n // since the insertion could throw off the measurement.\n const rootRect = previewConfig.matchSize ? this._initialDomRect : null;\n const viewRef = previewConfig.viewContainer.createEmbeddedView(previewTemplate, previewConfig.context);\n viewRef.detectChanges();\n preview = getRootNode(viewRef, this._document);\n this._previewEmbeddedView = viewRef;\n if (previewConfig.matchSize) {\n matchElementSize(preview, rootRect);\n } else {\n preview.style.transform = getTransform(this._pickupPositionOnPage.x, this._pickupPositionOnPage.y);\n }\n } else {\n preview = deepCloneNode(this._rootElement);\n matchElementSize(preview, this._initialDomRect);\n if (this._initialTransform) {\n preview.style.transform = this._initialTransform;\n }\n }\n extendStyles(preview.style, {\n // It's important that we disable the pointer events on the preview, because\n // it can throw off the `document.elementFromPoint` calls in the `CdkDropList`.\n 'pointer-events': 'none',\n // If the preview has a margin, it can throw off our positioning so we reset it. The reset\n // value for `margin-right` needs to be `auto` when opened as a popover, because our\n // positioning is always top/left based, but native popover seems to position itself\n // to the top/right if `` or `` have `dir=\"rtl\"` (see #29604). Setting it\n // to `auto` pushed it to the top/left corner in RTL and is a noop in LTR.\n 'margin': supportsPopover(preview) ? '0 auto 0 0' : '0',\n 'position': 'fixed',\n 'top': '0',\n 'left': '0',\n 'z-index': this._zIndex + ''\n }, importantProperties);\n toggleNativeDragInteractions(preview, false);\n preview.classList.add('cdk-drag-preview');\n preview.setAttribute('popover', 'manual');\n preview.setAttribute('dir', this._direction);\n if (previewClass) {\n if (Array.isArray(previewClass)) {\n previewClass.forEach(className => preview.classList.add(className));\n } else {\n preview.classList.add(previewClass);\n }\n }\n return preview;\n }\n}\n/** Checks whether a specific element supports the popover API. */\nfunction supportsPopover(element) {\n return 'showPopover' in element;\n}\n\n/** Options that can be used to bind a passive event listener. */\nconst passiveEventListenerOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: true\n});\n/** Options that can be used to bind an active event listener. */\nconst activeEventListenerOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: false\n});\n/** Event options that can be used to bind an active, capturing event. */\nconst activeCapturingEventOptions$1 = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: false,\n capture: true\n});\n/**\n * Time in milliseconds for which to ignore mouse events, after\n * receiving a touch event. Used to avoid doing double work for\n * touch devices where the browser fires fake mouse events, in\n * addition to touch events.\n */\nconst MOUSE_EVENT_IGNORE_TIME = 800;\n/** Inline styles to be set as `!important` while dragging. */\nconst dragImportantProperties = /*#__PURE__*/new Set([\n// Needs to be important, because some `mat-table` sets `position: sticky !important`. See #22781.\n'position']);\n/**\n * Reference to a draggable item. Used to manipulate or dispose of the item.\n */\nclass DragRef {\n /** Whether starting to drag this element is disabled. */\n get disabled() {\n return this._disabled || !!(this._dropContainer && this._dropContainer.disabled);\n }\n set disabled(value) {\n if (value !== this._disabled) {\n this._disabled = value;\n this._toggleNativeDragInteractions();\n this._handles.forEach(handle => toggleNativeDragInteractions(handle, value));\n }\n }\n constructor(element, _config, _document, _ngZone, _viewportRuler, _dragDropRegistry) {\n this._config = _config;\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._dragDropRegistry = _dragDropRegistry;\n /**\n * CSS `transform` applied to the element when it isn't being dragged. We need a\n * passive transform in order for the dragged element to retain its new position\n * after the user has stopped dragging and because we need to know the relative\n * position in case they start dragging again. This corresponds to `element.style.transform`.\n */\n this._passiveTransform = {\n x: 0,\n y: 0\n };\n /** CSS `transform` that is applied to the element while it's being dragged. */\n this._activeTransform = {\n x: 0,\n y: 0\n };\n /**\n * Whether the dragging sequence has been started. Doesn't\n * necessarily mean that the element has been moved.\n */\n this._hasStartedDragging = signal(false);\n /** Emits when the item is being moved. */\n this._moveEvents = new Subject();\n /** Subscription to pointer movement events. */\n this._pointerMoveSubscription = Subscription.EMPTY;\n /** Subscription to the event that is dispatched when the user lifts their pointer. */\n this._pointerUpSubscription = Subscription.EMPTY;\n /** Subscription to the viewport being scrolled. */\n this._scrollSubscription = Subscription.EMPTY;\n /** Subscription to the viewport being resized. */\n this._resizeSubscription = Subscription.EMPTY;\n /** Cached reference to the boundary element. */\n this._boundaryElement = null;\n /** Whether the native dragging interactions have been enabled on the root element. */\n this._nativeInteractionsEnabled = true;\n /** Elements that can be used to drag the draggable item. */\n this._handles = [];\n /** Registered handles that are currently disabled. */\n this._disabledHandles = new Set();\n /** Layout direction of the item. */\n this._direction = 'ltr';\n /**\n * Amount of milliseconds to wait after the user has put their\n * pointer down before starting to drag the element.\n */\n this.dragStartDelay = 0;\n /**\n * If the parent of the dragged element has a `scale` transform, it can throw off the\n * positioning when the user starts dragging. Use this input to notify the CDK of the scale.\n */\n this.scale = 1;\n this._disabled = false;\n /** Emits as the drag sequence is being prepared. */\n this.beforeStarted = new Subject();\n /** Emits when the user starts dragging the item. */\n this.started = new Subject();\n /** Emits when the user has released a drag item, before any animations have started. */\n this.released = new Subject();\n /** Emits when the user stops dragging an item in the container. */\n this.ended = new Subject();\n /** Emits when the user has moved the item into a new container. */\n this.entered = new Subject();\n /** Emits when the user removes the item its container by dragging it into another container. */\n this.exited = new Subject();\n /** Emits when the user drops the item inside a container. */\n this.dropped = new Subject();\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n this.moved = this._moveEvents;\n /** Handler for the `mousedown`/`touchstart` events. */\n this._pointerDown = event => {\n this.beforeStarted.next();\n // Delegate the event based on whether it started from a handle or the element itself.\n if (this._handles.length) {\n const targetHandle = this._getTargetHandle(event);\n if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {\n this._initializeDragSequence(targetHandle, event);\n }\n } else if (!this.disabled) {\n this._initializeDragSequence(this._rootElement, event);\n }\n };\n /** Handler that is invoked when the user moves their pointer after they've initiated a drag. */\n this._pointerMove = event => {\n const pointerPosition = this._getPointerPositionOnPage(event);\n if (!this._hasStartedDragging()) {\n const distanceX = Math.abs(pointerPosition.x - this._pickupPositionOnPage.x);\n const distanceY = Math.abs(pointerPosition.y - this._pickupPositionOnPage.y);\n const isOverThreshold = distanceX + distanceY >= this._config.dragStartThreshold;\n // Only start dragging after the user has moved more than the minimum distance in either\n // direction. Note that this is preferable over doing something like `skip(minimumDistance)`\n // in the `pointerMove` subscription, because we're not guaranteed to have one move event\n // per pixel of movement (e.g. if the user moves their pointer quickly).\n if (isOverThreshold) {\n const isDelayElapsed = Date.now() >= this._dragStartTime + this._getDragStartDelay(event);\n const container = this._dropContainer;\n if (!isDelayElapsed) {\n this._endDragSequence(event);\n return;\n }\n // Prevent other drag sequences from starting while something in the container is still\n // being dragged. This can happen while we're waiting for the drop animation to finish\n // and can cause errors, because some elements might still be moving around.\n if (!container || !container.isDragging() && !container.isReceiving()) {\n // Prevent the default action as soon as the dragging sequence is considered as\n // \"started\" since waiting for the next event can allow the device to begin scrolling.\n if (event.cancelable) {\n event.preventDefault();\n }\n this._hasStartedDragging.set(true);\n this._ngZone.run(() => this._startDragSequence(event));\n }\n }\n return;\n }\n // We prevent the default action down here so that we know that dragging has started. This is\n // important for touch devices where doing this too early can unnecessarily block scrolling,\n // if there's a dragging delay.\n if (event.cancelable) {\n event.preventDefault();\n }\n const constrainedPointerPosition = this._getConstrainedPointerPosition(pointerPosition);\n this._hasMoved = true;\n this._lastKnownPointerPosition = pointerPosition;\n this._updatePointerDirectionDelta(constrainedPointerPosition);\n if (this._dropContainer) {\n this._updateActiveDropContainer(constrainedPointerPosition, pointerPosition);\n } else {\n // If there's a position constraint function, we want the element's top/left to be at the\n // specific position on the page. Use the initial position as a reference if that's the case.\n const offset = this.constrainPosition ? this._initialDomRect : this._pickupPositionOnPage;\n const activeTransform = this._activeTransform;\n activeTransform.x = constrainedPointerPosition.x - offset.x + this._passiveTransform.x;\n activeTransform.y = constrainedPointerPosition.y - offset.y + this._passiveTransform.y;\n this._applyRootElementTransform(activeTransform.x, activeTransform.y);\n }\n // Since this event gets fired for every pixel while dragging, we only\n // want to fire it if the consumer opted into it. Also we have to\n // re-enter the zone because we run all of the events on the outside.\n if (this._moveEvents.observers.length) {\n this._ngZone.run(() => {\n this._moveEvents.next({\n source: this,\n pointerPosition: constrainedPointerPosition,\n event,\n distance: this._getDragDistance(constrainedPointerPosition),\n delta: this._pointerDirectionDelta\n });\n });\n }\n };\n /** Handler that is invoked when the user lifts their pointer up, after initiating a drag. */\n this._pointerUp = event => {\n this._endDragSequence(event);\n };\n /** Handles a native `dragstart` event. */\n this._nativeDragStart = event => {\n if (this._handles.length) {\n const targetHandle = this._getTargetHandle(event);\n if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {\n event.preventDefault();\n }\n } else if (!this.disabled) {\n // Usually this isn't necessary since the we prevent the default action in `pointerDown`,\n // but some cases like dragging of links can slip through (see #24403).\n event.preventDefault();\n }\n };\n this.withRootElement(element).withParent(_config.parentDragRef || null);\n this._parentPositions = new ParentPositionTracker(_document);\n _dragDropRegistry.registerDragItem(this);\n }\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n getPlaceholderElement() {\n return this._placeholder;\n }\n /** Returns the root draggable element. */\n getRootElement() {\n return this._rootElement;\n }\n /**\n * Gets the currently-visible element that represents the drag item.\n * While dragging this is the placeholder, otherwise it's the root element.\n */\n getVisibleElement() {\n return this.isDragging() ? this.getPlaceholderElement() : this.getRootElement();\n }\n /** Registers the handles that can be used to drag the element. */\n withHandles(handles) {\n this._handles = handles.map(handle => coerceElement(handle));\n this._handles.forEach(handle => toggleNativeDragInteractions(handle, this.disabled));\n this._toggleNativeDragInteractions();\n // Delete any lingering disabled handles that may have been destroyed. Note that we re-create\n // the set, rather than iterate over it and filter out the destroyed handles, because while\n // the ES spec allows for sets to be modified while they're being iterated over, some polyfills\n // use an array internally which may throw an error.\n const disabledHandles = new Set();\n this._disabledHandles.forEach(handle => {\n if (this._handles.indexOf(handle) > -1) {\n disabledHandles.add(handle);\n }\n });\n this._disabledHandles = disabledHandles;\n return this;\n }\n /**\n * Registers the template that should be used for the drag preview.\n * @param template Template that from which to stamp out the preview.\n */\n withPreviewTemplate(template) {\n this._previewTemplate = template;\n return this;\n }\n /**\n * Registers the template that should be used for the drag placeholder.\n * @param template Template that from which to stamp out the placeholder.\n */\n withPlaceholderTemplate(template) {\n this._placeholderTemplate = template;\n return this;\n }\n /**\n * Sets an alternate drag root element. The root element is the element that will be moved as\n * the user is dragging. Passing an alternate root element is useful when trying to enable\n * dragging on an element that you might not have access to.\n */\n withRootElement(rootElement) {\n const element = coerceElement(rootElement);\n if (element !== this._rootElement) {\n if (this._rootElement) {\n this._removeRootElementListeners(this._rootElement);\n }\n this._ngZone.runOutsideAngular(() => {\n element.addEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n element.addEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n element.addEventListener('dragstart', this._nativeDragStart, activeEventListenerOptions);\n });\n this._initialTransform = undefined;\n this._rootElement = element;\n }\n if (typeof SVGElement !== 'undefined' && this._rootElement instanceof SVGElement) {\n this._ownerSVGElement = this._rootElement.ownerSVGElement;\n }\n return this;\n }\n /**\n * Element to which the draggable's position will be constrained.\n */\n withBoundaryElement(boundaryElement) {\n this._boundaryElement = boundaryElement ? coerceElement(boundaryElement) : null;\n this._resizeSubscription.unsubscribe();\n if (boundaryElement) {\n this._resizeSubscription = this._viewportRuler.change(10).subscribe(() => this._containInsideBoundaryOnResize());\n }\n return this;\n }\n /** Sets the parent ref that the ref is nested in. */\n withParent(parent) {\n this._parentDragRef = parent;\n return this;\n }\n /** Removes the dragging functionality from the DOM element. */\n dispose() {\n this._removeRootElementListeners(this._rootElement);\n // Do this check before removing from the registry since it'll\n // stop being considered as dragged once it is removed.\n if (this.isDragging()) {\n // Since we move out the element to the end of the body while it's being\n // dragged, we have to make sure that it's removed if it gets destroyed.\n this._rootElement?.remove();\n }\n this._anchor?.remove();\n this._destroyPreview();\n this._destroyPlaceholder();\n this._dragDropRegistry.removeDragItem(this);\n this._removeListeners();\n this.beforeStarted.complete();\n this.started.complete();\n this.released.complete();\n this.ended.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this._moveEvents.complete();\n this._handles = [];\n this._disabledHandles.clear();\n this._dropContainer = undefined;\n this._resizeSubscription.unsubscribe();\n this._parentPositions.clear();\n this._boundaryElement = this._rootElement = this._ownerSVGElement = this._placeholderTemplate = this._previewTemplate = this._anchor = this._parentDragRef = null;\n }\n /** Checks whether the element is currently being dragged. */\n isDragging() {\n return this._hasStartedDragging() && this._dragDropRegistry.isDragging(this);\n }\n /** Resets a standalone drag item to its initial position. */\n reset() {\n this._rootElement.style.transform = this._initialTransform || '';\n this._activeTransform = {\n x: 0,\n y: 0\n };\n this._passiveTransform = {\n x: 0,\n y: 0\n };\n }\n /**\n * Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.\n * @param handle Handle element that should be disabled.\n */\n disableHandle(handle) {\n if (!this._disabledHandles.has(handle) && this._handles.indexOf(handle) > -1) {\n this._disabledHandles.add(handle);\n toggleNativeDragInteractions(handle, true);\n }\n }\n /**\n * Enables a handle, if it has been disabled.\n * @param handle Handle element to be enabled.\n */\n enableHandle(handle) {\n if (this._disabledHandles.has(handle)) {\n this._disabledHandles.delete(handle);\n toggleNativeDragInteractions(handle, this.disabled);\n }\n }\n /** Sets the layout direction of the draggable item. */\n withDirection(direction) {\n this._direction = direction;\n return this;\n }\n /** Sets the container that the item is part of. */\n _withDropContainer(container) {\n this._dropContainer = container;\n }\n /**\n * Gets the current position in pixels the draggable outside of a drop container.\n */\n getFreeDragPosition() {\n const position = this.isDragging() ? this._activeTransform : this._passiveTransform;\n return {\n x: position.x,\n y: position.y\n };\n }\n /**\n * Sets the current position in pixels the draggable outside of a drop container.\n * @param value New position to be set.\n */\n setFreeDragPosition(value) {\n this._activeTransform = {\n x: 0,\n y: 0\n };\n this._passiveTransform.x = value.x;\n this._passiveTransform.y = value.y;\n if (!this._dropContainer) {\n this._applyRootElementTransform(value.x, value.y);\n }\n return this;\n }\n /**\n * Sets the container into which to insert the preview element.\n * @param value Container into which to insert the preview.\n */\n withPreviewContainer(value) {\n this._previewContainer = value;\n return this;\n }\n /** Updates the item's sort order based on the last-known pointer position. */\n _sortFromLastPointerPosition() {\n const position = this._lastKnownPointerPosition;\n if (position && this._dropContainer) {\n this._updateActiveDropContainer(this._getConstrainedPointerPosition(position), position);\n }\n }\n /** Unsubscribes from the global subscriptions. */\n _removeListeners() {\n this._pointerMoveSubscription.unsubscribe();\n this._pointerUpSubscription.unsubscribe();\n this._scrollSubscription.unsubscribe();\n this._getShadowRoot()?.removeEventListener('selectstart', shadowDomSelectStart, activeCapturingEventOptions$1);\n }\n /** Destroys the preview element and its ViewRef. */\n _destroyPreview() {\n this._preview?.destroy();\n this._preview = null;\n }\n /** Destroys the placeholder element and its ViewRef. */\n _destroyPlaceholder() {\n this._placeholder?.remove();\n this._placeholderRef?.destroy();\n this._placeholder = this._placeholderRef = null;\n }\n /**\n * Clears subscriptions and stops the dragging sequence.\n * @param event Browser event object that ended the sequence.\n */\n _endDragSequence(event) {\n // Note that here we use `isDragging` from the service, rather than from `this`.\n // The difference is that the one from the service reflects whether a dragging sequence\n // has been initiated, whereas the one on `this` includes whether the user has passed\n // the minimum dragging threshold.\n if (!this._dragDropRegistry.isDragging(this)) {\n return;\n }\n this._removeListeners();\n this._dragDropRegistry.stopDragging(this);\n this._toggleNativeDragInteractions();\n if (this._handles) {\n this._rootElement.style.webkitTapHighlightColor = this._rootElementTapHighlight;\n }\n if (!this._hasStartedDragging()) {\n return;\n }\n this.released.next({\n source: this,\n event\n });\n if (this._dropContainer) {\n // Stop scrolling immediately, instead of waiting for the animation to finish.\n this._dropContainer._stopScrolling();\n this._animatePreviewToPlaceholder().then(() => {\n this._cleanupDragArtifacts(event);\n this._cleanupCachedDimensions();\n this._dragDropRegistry.stopDragging(this);\n });\n } else {\n // Convert the active transform into a passive one. This means that next time\n // the user starts dragging the item, its position will be calculated relatively\n // to the new passive transform.\n this._passiveTransform.x = this._activeTransform.x;\n const pointerPosition = this._getPointerPositionOnPage(event);\n this._passiveTransform.y = this._activeTransform.y;\n this._ngZone.run(() => {\n this.ended.next({\n source: this,\n distance: this._getDragDistance(pointerPosition),\n dropPoint: pointerPosition,\n event\n });\n });\n this._cleanupCachedDimensions();\n this._dragDropRegistry.stopDragging(this);\n }\n }\n /** Starts the dragging sequence. */\n _startDragSequence(event) {\n if (isTouchEvent(event)) {\n this._lastTouchEventTime = Date.now();\n }\n this._toggleNativeDragInteractions();\n // Needs to happen before the root element is moved.\n const shadowRoot = this._getShadowRoot();\n const dropContainer = this._dropContainer;\n if (shadowRoot) {\n // In some browsers the global `selectstart` that we maintain in the `DragDropRegistry`\n // doesn't cross the shadow boundary so we have to prevent it at the shadow root (see #28792).\n this._ngZone.runOutsideAngular(() => {\n shadowRoot.addEventListener('selectstart', shadowDomSelectStart, activeCapturingEventOptions$1);\n });\n }\n if (dropContainer) {\n const element = this._rootElement;\n const parent = element.parentNode;\n const placeholder = this._placeholder = this._createPlaceholderElement();\n const anchor = this._anchor = this._anchor || this._document.createComment(typeof ngDevMode === 'undefined' || ngDevMode ? 'cdk-drag-anchor' : '');\n // Insert an anchor node so that we can restore the element's position in the DOM.\n parent.insertBefore(anchor, element);\n // There's no risk of transforms stacking when inside a drop container so\n // we can keep the initial transform up to date any time dragging starts.\n this._initialTransform = element.style.transform || '';\n // Create the preview after the initial transform has\n // been cached, because it can be affected by the transform.\n this._preview = new PreviewRef(this._document, this._rootElement, this._direction, this._initialDomRect, this._previewTemplate || null, this.previewClass || null, this._pickupPositionOnPage, this._initialTransform, this._config.zIndex || 1000);\n this._preview.attach(this._getPreviewInsertionPoint(parent, shadowRoot));\n // We move the element out at the end of the body and we make it hidden, because keeping it in\n // place will throw off the consumer's `:last-child` selectors. We can't remove the element\n // from the DOM completely, because iOS will stop firing all subsequent events in the chain.\n toggleVisibility(element, false, dragImportantProperties);\n this._document.body.appendChild(parent.replaceChild(placeholder, element));\n this.started.next({\n source: this,\n event\n }); // Emit before notifying the container.\n dropContainer.start();\n this._initialContainer = dropContainer;\n this._initialIndex = dropContainer.getItemIndex(this);\n } else {\n this.started.next({\n source: this,\n event\n });\n this._initialContainer = this._initialIndex = undefined;\n }\n // Important to run after we've called `start` on the parent container\n // so that it has had time to resolve its scrollable parents.\n this._parentPositions.cache(dropContainer ? dropContainer.getScrollableParents() : []);\n }\n /**\n * Sets up the different variables and subscriptions\n * that will be necessary for the dragging sequence.\n * @param referenceElement Element that started the drag sequence.\n * @param event Browser event object that started the sequence.\n */\n _initializeDragSequence(referenceElement, event) {\n // Stop propagation if the item is inside another\n // draggable so we don't start multiple drag sequences.\n if (this._parentDragRef) {\n event.stopPropagation();\n }\n const isDragging = this.isDragging();\n const isTouchSequence = isTouchEvent(event);\n const isAuxiliaryMouseButton = !isTouchSequence && event.button !== 0;\n const rootElement = this._rootElement;\n const target = _getEventTarget(event);\n const isSyntheticEvent = !isTouchSequence && this._lastTouchEventTime && this._lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now();\n const isFakeEvent = isTouchSequence ? isFakeTouchstartFromScreenReader(event) : isFakeMousedownFromScreenReader(event);\n // If the event started from an element with the native HTML drag&drop, it'll interfere\n // with our own dragging (e.g. `img` tags do it by default). Prevent the default action\n // to stop it from happening. Note that preventing on `dragstart` also seems to work, but\n // it's flaky and it fails if the user drags it away quickly. Also note that we only want\n // to do this for `mousedown` since doing the same for `touchstart` will stop any `click`\n // events from firing on touch devices.\n if (target && target.draggable && event.type === 'mousedown') {\n event.preventDefault();\n }\n // Abort if the user is already dragging or is using a mouse button other than the primary one.\n if (isDragging || isAuxiliaryMouseButton || isSyntheticEvent || isFakeEvent) {\n return;\n }\n // If we've got handles, we need to disable the tap highlight on the entire root element,\n // otherwise iOS will still add it, even though all the drag interactions on the handle\n // are disabled.\n if (this._handles.length) {\n const rootStyles = rootElement.style;\n this._rootElementTapHighlight = rootStyles.webkitTapHighlightColor || '';\n rootStyles.webkitTapHighlightColor = 'transparent';\n }\n this._hasMoved = false;\n this._hasStartedDragging.set(this._hasMoved);\n // Avoid multiple subscriptions and memory leaks when multi touch\n // (isDragging check above isn't enough because of possible temporal and/or dimensional delays)\n this._removeListeners();\n this._initialDomRect = this._rootElement.getBoundingClientRect();\n this._pointerMoveSubscription = this._dragDropRegistry.pointerMove.subscribe(this._pointerMove);\n this._pointerUpSubscription = this._dragDropRegistry.pointerUp.subscribe(this._pointerUp);\n this._scrollSubscription = this._dragDropRegistry.scrolled(this._getShadowRoot()).subscribe(scrollEvent => this._updateOnScroll(scrollEvent));\n if (this._boundaryElement) {\n this._boundaryRect = getMutableClientRect(this._boundaryElement);\n }\n // If we have a custom preview we can't know ahead of time how large it'll be so we position\n // it next to the cursor. The exception is when the consumer has opted into making the preview\n // the same size as the root element, in which case we do know the size.\n const previewTemplate = this._previewTemplate;\n this._pickupPositionInElement = previewTemplate && previewTemplate.template && !previewTemplate.matchSize ? {\n x: 0,\n y: 0\n } : this._getPointerPositionInElement(this._initialDomRect, referenceElement, event);\n const pointerPosition = this._pickupPositionOnPage = this._lastKnownPointerPosition = this._getPointerPositionOnPage(event);\n this._pointerDirectionDelta = {\n x: 0,\n y: 0\n };\n this._pointerPositionAtLastDirectionChange = {\n x: pointerPosition.x,\n y: pointerPosition.y\n };\n this._dragStartTime = Date.now();\n this._dragDropRegistry.startDragging(this, event);\n }\n /** Cleans up the DOM artifacts that were added to facilitate the element being dragged. */\n _cleanupDragArtifacts(event) {\n // Restore the element's visibility and insert it at its old position in the DOM.\n // It's important that we maintain the position, because moving the element around in the DOM\n // can throw off `NgFor` which does smart diffing and re-creates elements only when necessary,\n // while moving the existing elements in all other cases.\n toggleVisibility(this._rootElement, true, dragImportantProperties);\n this._anchor.parentNode.replaceChild(this._rootElement, this._anchor);\n this._destroyPreview();\n this._destroyPlaceholder();\n this._initialDomRect = this._boundaryRect = this._previewRect = this._initialTransform = undefined;\n // Re-enter the NgZone since we bound `document` events on the outside.\n this._ngZone.run(() => {\n const container = this._dropContainer;\n const currentIndex = container.getItemIndex(this);\n const pointerPosition = this._getPointerPositionOnPage(event);\n const distance = this._getDragDistance(pointerPosition);\n const isPointerOverContainer = container._isOverContainer(pointerPosition.x, pointerPosition.y);\n this.ended.next({\n source: this,\n distance,\n dropPoint: pointerPosition,\n event\n });\n this.dropped.next({\n item: this,\n currentIndex,\n previousIndex: this._initialIndex,\n container: container,\n previousContainer: this._initialContainer,\n isPointerOverContainer,\n distance,\n dropPoint: pointerPosition,\n event\n });\n container.drop(this, currentIndex, this._initialIndex, this._initialContainer, isPointerOverContainer, distance, pointerPosition, event);\n this._dropContainer = this._initialContainer;\n });\n }\n /**\n * Updates the item's position in its drop container, or moves it\n * into a new one, depending on its current drag position.\n */\n _updateActiveDropContainer({\n x,\n y\n }, {\n x: rawX,\n y: rawY\n }) {\n // Drop container that draggable has been moved into.\n let newContainer = this._initialContainer._getSiblingContainerFromPosition(this, x, y);\n // If we couldn't find a new container to move the item into, and the item has left its\n // initial container, check whether the it's over the initial container. This handles the\n // case where two containers are connected one way and the user tries to undo dragging an\n // item into a new container.\n if (!newContainer && this._dropContainer !== this._initialContainer && this._initialContainer._isOverContainer(x, y)) {\n newContainer = this._initialContainer;\n }\n if (newContainer && newContainer !== this._dropContainer) {\n this._ngZone.run(() => {\n // Notify the old container that the item has left.\n this.exited.next({\n item: this,\n container: this._dropContainer\n });\n this._dropContainer.exit(this);\n // Notify the new container that the item has entered.\n this._dropContainer = newContainer;\n this._dropContainer.enter(this, x, y, newContainer === this._initialContainer &&\n // If we're re-entering the initial container and sorting is disabled,\n // put item the into its starting index to begin with.\n newContainer.sortingDisabled ? this._initialIndex : undefined);\n this.entered.next({\n item: this,\n container: newContainer,\n currentIndex: newContainer.getItemIndex(this)\n });\n });\n }\n // Dragging may have been interrupted as a result of the events above.\n if (this.isDragging()) {\n this._dropContainer._startScrollingIfNecessary(rawX, rawY);\n this._dropContainer._sortItem(this, x, y, this._pointerDirectionDelta);\n if (this.constrainPosition) {\n this._applyPreviewTransform(x, y);\n } else {\n this._applyPreviewTransform(x - this._pickupPositionInElement.x, y - this._pickupPositionInElement.y);\n }\n }\n }\n /**\n * Animates the preview element from its current position to the location of the drop placeholder.\n * @returns Promise that resolves when the animation completes.\n */\n _animatePreviewToPlaceholder() {\n // If the user hasn't moved yet, the transitionend event won't fire.\n if (!this._hasMoved) {\n return Promise.resolve();\n }\n const placeholderRect = this._placeholder.getBoundingClientRect();\n // Apply the class that adds a transition to the preview.\n this._preview.addClass('cdk-drag-animating');\n // Move the preview to the placeholder position.\n this._applyPreviewTransform(placeholderRect.left, placeholderRect.top);\n // If the element doesn't have a `transition`, the `transitionend` event won't fire. Since\n // we need to trigger a style recalculation in order for the `cdk-drag-animating` class to\n // apply its style, we take advantage of the available info to figure out whether we need to\n // bind the event in the first place.\n const duration = this._preview.getTransitionDuration();\n if (duration === 0) {\n return Promise.resolve();\n }\n return this._ngZone.runOutsideAngular(() => {\n return new Promise(resolve => {\n const handler = event => {\n if (!event || this._preview && _getEventTarget(event) === this._preview.element && event.propertyName === 'transform') {\n this._preview?.removeEventListener('transitionend', handler);\n resolve();\n clearTimeout(timeout);\n }\n };\n // If a transition is short enough, the browser might not fire the `transitionend` event.\n // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll\n // fire if the transition hasn't completed when it was supposed to.\n const timeout = setTimeout(handler, duration * 1.5);\n this._preview.addEventListener('transitionend', handler);\n });\n });\n }\n /** Creates an element that will be shown instead of the current element while dragging. */\n _createPlaceholderElement() {\n const placeholderConfig = this._placeholderTemplate;\n const placeholderTemplate = placeholderConfig ? placeholderConfig.template : null;\n let placeholder;\n if (placeholderTemplate) {\n this._placeholderRef = placeholderConfig.viewContainer.createEmbeddedView(placeholderTemplate, placeholderConfig.context);\n this._placeholderRef.detectChanges();\n placeholder = getRootNode(this._placeholderRef, this._document);\n } else {\n placeholder = deepCloneNode(this._rootElement);\n }\n // Stop pointer events on the preview so the user can't\n // interact with it while the preview is animating.\n placeholder.style.pointerEvents = 'none';\n placeholder.classList.add('cdk-drag-placeholder');\n return placeholder;\n }\n /**\n * Figures out the coordinates at which an element was picked up.\n * @param referenceElement Element that initiated the dragging.\n * @param event Event that initiated the dragging.\n */\n _getPointerPositionInElement(elementRect, referenceElement, event) {\n const handleElement = referenceElement === this._rootElement ? null : referenceElement;\n const referenceRect = handleElement ? handleElement.getBoundingClientRect() : elementRect;\n const point = isTouchEvent(event) ? event.targetTouches[0] : event;\n const scrollPosition = this._getViewportScrollPosition();\n const x = point.pageX - referenceRect.left - scrollPosition.left;\n const y = point.pageY - referenceRect.top - scrollPosition.top;\n return {\n x: referenceRect.left - elementRect.left + x,\n y: referenceRect.top - elementRect.top + y\n };\n }\n /** Determines the point of the page that was touched by the user. */\n _getPointerPositionOnPage(event) {\n const scrollPosition = this._getViewportScrollPosition();\n const point = isTouchEvent(event) ?\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n // Also note that on real devices we're guaranteed for either `touches` or `changedTouches`\n // to have a value, but Firefox in device emulation mode has a bug where both can be empty\n // for `touchstart` and `touchend` so we fall back to a dummy object in order to avoid\n // throwing an error. The value returned here will be incorrect, but since this only\n // breaks inside a developer tool and the value is only used for secondary information,\n // we can get away with it. See https://bugzilla.mozilla.org/show_bug.cgi?id=1615824.\n event.touches[0] || event.changedTouches[0] || {\n pageX: 0,\n pageY: 0\n } : event;\n const x = point.pageX - scrollPosition.left;\n const y = point.pageY - scrollPosition.top;\n // if dragging SVG element, try to convert from the screen coordinate system to the SVG\n // coordinate system\n if (this._ownerSVGElement) {\n const svgMatrix = this._ownerSVGElement.getScreenCTM();\n if (svgMatrix) {\n const svgPoint = this._ownerSVGElement.createSVGPoint();\n svgPoint.x = x;\n svgPoint.y = y;\n return svgPoint.matrixTransform(svgMatrix.inverse());\n }\n }\n return {\n x,\n y\n };\n }\n /** Gets the pointer position on the page, accounting for any position constraints. */\n _getConstrainedPointerPosition(point) {\n const dropContainerLock = this._dropContainer ? this._dropContainer.lockAxis : null;\n let {\n x,\n y\n } = this.constrainPosition ? this.constrainPosition(point, this, this._initialDomRect, this._pickupPositionInElement) : point;\n if (this.lockAxis === 'x' || dropContainerLock === 'x') {\n y = this._pickupPositionOnPage.y - (this.constrainPosition ? this._pickupPositionInElement.y : 0);\n } else if (this.lockAxis === 'y' || dropContainerLock === 'y') {\n x = this._pickupPositionOnPage.x - (this.constrainPosition ? this._pickupPositionInElement.x : 0);\n }\n if (this._boundaryRect) {\n // If not using a custom constrain we need to account for the pickup position in the element\n // otherwise we do not need to do this, as it has already been accounted for\n const {\n x: pickupX,\n y: pickupY\n } = !this.constrainPosition ? this._pickupPositionInElement : {\n x: 0,\n y: 0\n };\n const boundaryRect = this._boundaryRect;\n const {\n width: previewWidth,\n height: previewHeight\n } = this._getPreviewRect();\n const minY = boundaryRect.top + pickupY;\n const maxY = boundaryRect.bottom - (previewHeight - pickupY);\n const minX = boundaryRect.left + pickupX;\n const maxX = boundaryRect.right - (previewWidth - pickupX);\n x = clamp$1(x, minX, maxX);\n y = clamp$1(y, minY, maxY);\n }\n return {\n x,\n y\n };\n }\n /** Updates the current drag delta, based on the user's current pointer position on the page. */\n _updatePointerDirectionDelta(pointerPositionOnPage) {\n const {\n x,\n y\n } = pointerPositionOnPage;\n const delta = this._pointerDirectionDelta;\n const positionSinceLastChange = this._pointerPositionAtLastDirectionChange;\n // Amount of pixels the user has dragged since the last time the direction changed.\n const changeX = Math.abs(x - positionSinceLastChange.x);\n const changeY = Math.abs(y - positionSinceLastChange.y);\n // Because we handle pointer events on a per-pixel basis, we don't want the delta\n // to change for every pixel, otherwise anything that depends on it can look erratic.\n // To make the delta more consistent, we track how much the user has moved since the last\n // delta change and we only update it after it has reached a certain threshold.\n if (changeX > this._config.pointerDirectionChangeThreshold) {\n delta.x = x > positionSinceLastChange.x ? 1 : -1;\n positionSinceLastChange.x = x;\n }\n if (changeY > this._config.pointerDirectionChangeThreshold) {\n delta.y = y > positionSinceLastChange.y ? 1 : -1;\n positionSinceLastChange.y = y;\n }\n return delta;\n }\n /** Toggles the native drag interactions, based on how many handles are registered. */\n _toggleNativeDragInteractions() {\n if (!this._rootElement || !this._handles) {\n return;\n }\n const shouldEnable = this._handles.length > 0 || !this.isDragging();\n if (shouldEnable !== this._nativeInteractionsEnabled) {\n this._nativeInteractionsEnabled = shouldEnable;\n toggleNativeDragInteractions(this._rootElement, shouldEnable);\n }\n }\n /** Removes the manually-added event listeners from the root element. */\n _removeRootElementListeners(element) {\n element.removeEventListener('mousedown', this._pointerDown, activeEventListenerOptions);\n element.removeEventListener('touchstart', this._pointerDown, passiveEventListenerOptions);\n element.removeEventListener('dragstart', this._nativeDragStart, activeEventListenerOptions);\n }\n /**\n * Applies a `transform` to the root element, taking into account any existing transforms on it.\n * @param x New transform value along the X axis.\n * @param y New transform value along the Y axis.\n */\n _applyRootElementTransform(x, y) {\n const scale = 1 / this.scale;\n const transform = getTransform(x * scale, y * scale);\n const styles = this._rootElement.style;\n // Cache the previous transform amount only after the first drag sequence, because\n // we don't want our own transforms to stack on top of each other.\n // Should be excluded none because none + translate3d(x, y, x) is invalid css\n if (this._initialTransform == null) {\n this._initialTransform = styles.transform && styles.transform != 'none' ? styles.transform : '';\n }\n // Preserve the previous `transform` value, if there was one. Note that we apply our own\n // transform before the user's, because things like rotation can affect which direction\n // the element will be translated towards.\n styles.transform = combineTransforms(transform, this._initialTransform);\n }\n /**\n * Applies a `transform` to the preview, taking into account any existing transforms on it.\n * @param x New transform value along the X axis.\n * @param y New transform value along the Y axis.\n */\n _applyPreviewTransform(x, y) {\n // Only apply the initial transform if the preview is a clone of the original element, otherwise\n // it could be completely different and the transform might not make sense anymore.\n const initialTransform = this._previewTemplate?.template ? undefined : this._initialTransform;\n const transform = getTransform(x, y);\n this._preview.setTransform(combineTransforms(transform, initialTransform));\n }\n /**\n * Gets the distance that the user has dragged during the current drag sequence.\n * @param currentPosition Current position of the user's pointer.\n */\n _getDragDistance(currentPosition) {\n const pickupPosition = this._pickupPositionOnPage;\n if (pickupPosition) {\n return {\n x: currentPosition.x - pickupPosition.x,\n y: currentPosition.y - pickupPosition.y\n };\n }\n return {\n x: 0,\n y: 0\n };\n }\n /** Cleans up any cached element dimensions that we don't need after dragging has stopped. */\n _cleanupCachedDimensions() {\n this._boundaryRect = this._previewRect = undefined;\n this._parentPositions.clear();\n }\n /**\n * Checks whether the element is still inside its boundary after the viewport has been resized.\n * If not, the position is adjusted so that the element fits again.\n */\n _containInsideBoundaryOnResize() {\n let {\n x,\n y\n } = this._passiveTransform;\n if (x === 0 && y === 0 || this.isDragging() || !this._boundaryElement) {\n return;\n }\n // Note: don't use `_clientRectAtStart` here, because we want the latest position.\n const elementRect = this._rootElement.getBoundingClientRect();\n const boundaryRect = this._boundaryElement.getBoundingClientRect();\n // It's possible that the element got hidden away after dragging (e.g. by switching to a\n // different tab). Don't do anything in this case so we don't clear the user's position.\n if (boundaryRect.width === 0 && boundaryRect.height === 0 || elementRect.width === 0 && elementRect.height === 0) {\n return;\n }\n const leftOverflow = boundaryRect.left - elementRect.left;\n const rightOverflow = elementRect.right - boundaryRect.right;\n const topOverflow = boundaryRect.top - elementRect.top;\n const bottomOverflow = elementRect.bottom - boundaryRect.bottom;\n // If the element has become wider than the boundary, we can't\n // do much to make it fit so we just anchor it to the left.\n if (boundaryRect.width > elementRect.width) {\n if (leftOverflow > 0) {\n x += leftOverflow;\n }\n if (rightOverflow > 0) {\n x -= rightOverflow;\n }\n } else {\n x = 0;\n }\n // If the element has become taller than the boundary, we can't\n // do much to make it fit so we just anchor it to the top.\n if (boundaryRect.height > elementRect.height) {\n if (topOverflow > 0) {\n y += topOverflow;\n }\n if (bottomOverflow > 0) {\n y -= bottomOverflow;\n }\n } else {\n y = 0;\n }\n if (x !== this._passiveTransform.x || y !== this._passiveTransform.y) {\n this.setFreeDragPosition({\n y,\n x\n });\n }\n }\n /** Gets the drag start delay, based on the event type. */\n _getDragStartDelay(event) {\n const value = this.dragStartDelay;\n if (typeof value === 'number') {\n return value;\n } else if (isTouchEvent(event)) {\n return value.touch;\n }\n return value ? value.mouse : 0;\n }\n /** Updates the internal state of the draggable element when scrolling has occurred. */\n _updateOnScroll(event) {\n const scrollDifference = this._parentPositions.handleScroll(event);\n if (scrollDifference) {\n const target = _getEventTarget(event);\n // DOMRect dimensions are based on the scroll position of the page and its parent\n // node so we have to update the cached boundary DOMRect if the user has scrolled.\n if (this._boundaryRect && target !== this._boundaryElement && target.contains(this._boundaryElement)) {\n adjustDomRect(this._boundaryRect, scrollDifference.top, scrollDifference.left);\n }\n this._pickupPositionOnPage.x += scrollDifference.left;\n this._pickupPositionOnPage.y += scrollDifference.top;\n // If we're in free drag mode, we have to update the active transform, because\n // it isn't relative to the viewport like the preview inside a drop list.\n if (!this._dropContainer) {\n this._activeTransform.x -= scrollDifference.left;\n this._activeTransform.y -= scrollDifference.top;\n this._applyRootElementTransform(this._activeTransform.x, this._activeTransform.y);\n }\n }\n }\n /** Gets the scroll position of the viewport. */\n _getViewportScrollPosition() {\n return this._parentPositions.positions.get(this._document)?.scrollPosition || this._parentPositions.getViewportScrollPosition();\n }\n /**\n * Lazily resolves and returns the shadow root of the element. We do this in a function, rather\n * than saving it in property directly on init, because we want to resolve it as late as possible\n * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the\n * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.\n */\n _getShadowRoot() {\n if (this._cachedShadowRoot === undefined) {\n this._cachedShadowRoot = _getShadowRoot(this._rootElement);\n }\n return this._cachedShadowRoot;\n }\n /** Gets the element into which the drag preview should be inserted. */\n _getPreviewInsertionPoint(initialParent, shadowRoot) {\n const previewContainer = this._previewContainer || 'global';\n if (previewContainer === 'parent') {\n return initialParent;\n }\n if (previewContainer === 'global') {\n const documentRef = this._document;\n // We can't use the body if the user is in fullscreen mode,\n // because the preview will render under the fullscreen element.\n // TODO(crisbeto): dedupe this with the `FullscreenOverlayContainer` eventually.\n return shadowRoot || documentRef.fullscreenElement || documentRef.webkitFullscreenElement || documentRef.mozFullScreenElement || documentRef.msFullscreenElement || documentRef.body;\n }\n return coerceElement(previewContainer);\n }\n /** Lazily resolves and returns the dimensions of the preview. */\n _getPreviewRect() {\n // Cache the preview element rect if we haven't cached it already or if\n // we cached it too early before the element dimensions were computed.\n if (!this._previewRect || !this._previewRect.width && !this._previewRect.height) {\n this._previewRect = this._preview ? this._preview.getBoundingClientRect() : this._initialDomRect;\n }\n return this._previewRect;\n }\n /** Gets a handle that is the target of an event. */\n _getTargetHandle(event) {\n return this._handles.find(handle => {\n return event.target && (event.target === handle || handle.contains(event.target));\n });\n }\n}\n/** Clamps a value between a minimum and a maximum. */\nfunction clamp$1(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/** Determines whether an event is a touch event. */\nfunction isTouchEvent(event) {\n // This function is called for every pixel that the user has dragged so we need it to be\n // as fast as possible. Since we only bind mouse events and touch events, we can assume\n // that if the event's name starts with `t`, it's a touch event.\n return event.type[0] === 't';\n}\n/** Callback invoked for `selectstart` events inside the shadow DOM. */\nfunction shadowDomSelectStart(event) {\n event.preventDefault();\n}\n\n/**\n * Moves an item one index in an array to another.\n * @param array Array in which to move the item.\n * @param fromIndex Starting index of the item.\n * @param toIndex Index to which the item should be moved.\n */\nfunction moveItemInArray(array, fromIndex, toIndex) {\n const from = clamp(fromIndex, array.length - 1);\n const to = clamp(toIndex, array.length - 1);\n if (from === to) {\n return;\n }\n const target = array[from];\n const delta = to < from ? -1 : 1;\n for (let i = from; i !== to; i += delta) {\n array[i] = array[i + delta];\n }\n array[to] = target;\n}\n/**\n * Moves an item from one array to another.\n * @param currentArray Array from which to transfer the item.\n * @param targetArray Array into which to put the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n */\nfunction transferArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n const from = clamp(currentIndex, currentArray.length - 1);\n const to = clamp(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray.splice(from, 1)[0]);\n }\n}\n/**\n * Copies an item from one array to another, leaving it in its\n * original position in current array.\n * @param currentArray Array from which to copy the item.\n * @param targetArray Array into which is copy the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n *\n */\nfunction copyArrayItem(currentArray, targetArray, currentIndex, targetIndex) {\n const to = clamp(targetIndex, targetArray.length);\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray[currentIndex]);\n }\n}\n/** Clamps a number between zero and a maximum. */\nfunction clamp(value, max) {\n return Math.max(0, Math.min(max, value));\n}\n\n/**\n * Strategy that only supports sorting along a single axis.\n * Items are reordered using CSS transforms which allows for sorting to be animated.\n * @docs-private\n */\nclass SingleAxisSortStrategy {\n constructor(_dragDropRegistry) {\n this._dragDropRegistry = _dragDropRegistry;\n /** Cache of the dimensions of all the items inside the container. */\n this._itemPositions = [];\n /** Direction in which the list is oriented. */\n this.orientation = 'vertical';\n /**\n * Keeps track of the item that was last swapped with the dragged item, as well as what direction\n * the pointer was moving in when the swap occurred and whether the user's pointer continued to\n * overlap with the swapped item after the swapping occurred.\n */\n this._previousSwap = {\n drag: null,\n delta: 0,\n overlaps: false\n };\n }\n /**\n * To be called when the drag sequence starts.\n * @param items Items that are currently in the list.\n */\n start(items) {\n this.withItems(items);\n }\n /**\n * To be called when an item is being sorted.\n * @param item Item to be sorted.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param pointerDelta Direction in which the pointer is moving along each axis.\n */\n sort(item, pointerX, pointerY, pointerDelta) {\n const siblings = this._itemPositions;\n const newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY, pointerDelta);\n if (newIndex === -1 && siblings.length > 0) {\n return null;\n }\n const isHorizontal = this.orientation === 'horizontal';\n const currentIndex = siblings.findIndex(currentItem => currentItem.drag === item);\n const siblingAtNewPosition = siblings[newIndex];\n const currentPosition = siblings[currentIndex].clientRect;\n const newPosition = siblingAtNewPosition.clientRect;\n const delta = currentIndex > newIndex ? 1 : -1;\n // How many pixels the item's placeholder should be offset.\n const itemOffset = this._getItemOffsetPx(currentPosition, newPosition, delta);\n // How many pixels all the other items should be offset.\n const siblingOffset = this._getSiblingOffsetPx(currentIndex, siblings, delta);\n // Save the previous order of the items before moving the item to its new index.\n // We use this to check whether an item has been moved as a result of the sorting.\n const oldOrder = siblings.slice();\n // Shuffle the array in place.\n moveItemInArray(siblings, currentIndex, newIndex);\n siblings.forEach((sibling, index) => {\n // Don't do anything if the position hasn't changed.\n if (oldOrder[index] === sibling) {\n return;\n }\n const isDraggedItem = sibling.drag === item;\n const offset = isDraggedItem ? itemOffset : siblingOffset;\n const elementToOffset = isDraggedItem ? item.getPlaceholderElement() : sibling.drag.getRootElement();\n // Update the offset to reflect the new position.\n sibling.offset += offset;\n const transformAmount = Math.round(sibling.offset * (1 / sibling.drag.scale));\n // Since we're moving the items with a `transform`, we need to adjust their cached\n // client rects to reflect their new position, as well as swap their positions in the cache.\n // Note that we shouldn't use `getBoundingClientRect` here to update the cache, because the\n // elements may be mid-animation which will give us a wrong result.\n if (isHorizontal) {\n // Round the transforms since some browsers will\n // blur the elements, for sub-pixel transforms.\n elementToOffset.style.transform = combineTransforms(`translate3d(${transformAmount}px, 0, 0)`, sibling.initialTransform);\n adjustDomRect(sibling.clientRect, 0, offset);\n } else {\n elementToOffset.style.transform = combineTransforms(`translate3d(0, ${transformAmount}px, 0)`, sibling.initialTransform);\n adjustDomRect(sibling.clientRect, offset, 0);\n }\n });\n // Note that it's important that we do this after the client rects have been adjusted.\n this._previousSwap.overlaps = isInsideClientRect(newPosition, pointerX, pointerY);\n this._previousSwap.drag = siblingAtNewPosition.drag;\n this._previousSwap.delta = isHorizontal ? pointerDelta.x : pointerDelta.y;\n return {\n previousIndex: currentIndex,\n currentIndex: newIndex\n };\n }\n /**\n * Called when an item is being moved into the container.\n * @param item Item that was moved into the container.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param index Index at which the item entered. If omitted, the container will try to figure it\n * out automatically.\n */\n enter(item, pointerX, pointerY, index) {\n const newIndex = index == null || index < 0 ?\n // We use the coordinates of where the item entered the drop\n // zone to figure out at which index it should be inserted.\n this._getItemIndexFromPointerPosition(item, pointerX, pointerY) : index;\n const activeDraggables = this._activeDraggables;\n const currentIndex = activeDraggables.indexOf(item);\n const placeholder = item.getPlaceholderElement();\n let newPositionReference = activeDraggables[newIndex];\n // If the item at the new position is the same as the item that is being dragged,\n // it means that we're trying to restore the item to its initial position. In this\n // case we should use the next item from the list as the reference.\n if (newPositionReference === item) {\n newPositionReference = activeDraggables[newIndex + 1];\n }\n // If we didn't find a new position reference, it means that either the item didn't start off\n // in this container, or that the item requested to be inserted at the end of the list.\n if (!newPositionReference && (newIndex == null || newIndex === -1 || newIndex < activeDraggables.length - 1) && this._shouldEnterAsFirstChild(pointerX, pointerY)) {\n newPositionReference = activeDraggables[0];\n }\n // Since the item may be in the `activeDraggables` already (e.g. if the user dragged it\n // into another container and back again), we have to ensure that it isn't duplicated.\n if (currentIndex > -1) {\n activeDraggables.splice(currentIndex, 1);\n }\n // Don't use items that are being dragged as a reference, because\n // their element has been moved down to the bottom of the body.\n if (newPositionReference && !this._dragDropRegistry.isDragging(newPositionReference)) {\n const element = newPositionReference.getRootElement();\n element.parentElement.insertBefore(placeholder, element);\n activeDraggables.splice(newIndex, 0, item);\n } else {\n this._element.appendChild(placeholder);\n activeDraggables.push(item);\n }\n // The transform needs to be cleared so it doesn't throw off the measurements.\n placeholder.style.transform = '';\n // Note that usually `start` is called together with `enter` when an item goes into a new\n // container. This will cache item positions, but we need to refresh them since the amount\n // of items has changed.\n this._cacheItemPositions();\n }\n /** Sets the items that are currently part of the list. */\n withItems(items) {\n this._activeDraggables = items.slice();\n this._cacheItemPositions();\n }\n /** Assigns a sort predicate to the strategy. */\n withSortPredicate(predicate) {\n this._sortPredicate = predicate;\n }\n /** Resets the strategy to its initial state before dragging was started. */\n reset() {\n // TODO(crisbeto): may have to wait for the animations to finish.\n this._activeDraggables?.forEach(item => {\n const rootElement = item.getRootElement();\n if (rootElement) {\n const initialTransform = this._itemPositions.find(p => p.drag === item)?.initialTransform;\n rootElement.style.transform = initialTransform || '';\n }\n });\n this._itemPositions = [];\n this._activeDraggables = [];\n this._previousSwap.drag = null;\n this._previousSwap.delta = 0;\n this._previousSwap.overlaps = false;\n }\n /**\n * Gets a snapshot of items currently in the list.\n * Can include items that we dragged in from another list.\n */\n getActiveItemsSnapshot() {\n return this._activeDraggables;\n }\n /** Gets the index of a specific item. */\n getItemIndex(item) {\n // Items are sorted always by top/left in the cache, however they flow differently in RTL.\n // The rest of the logic still stands no matter what orientation we're in, however\n // we need to invert the array when determining the index.\n const items = this.orientation === 'horizontal' && this.direction === 'rtl' ? this._itemPositions.slice().reverse() : this._itemPositions;\n return items.findIndex(currentItem => currentItem.drag === item);\n }\n /** Used to notify the strategy that the scroll position has changed. */\n updateOnScroll(topDifference, leftDifference) {\n // Since we know the amount that the user has scrolled we can shift all of the\n // client rectangles ourselves. This is cheaper than re-measuring everything and\n // we can avoid inconsistent behavior where we might be measuring the element before\n // its position has changed.\n this._itemPositions.forEach(({\n clientRect\n }) => {\n adjustDomRect(clientRect, topDifference, leftDifference);\n });\n // We need two loops for this, because we want all of the cached\n // positions to be up-to-date before we re-sort the item.\n this._itemPositions.forEach(({\n drag\n }) => {\n if (this._dragDropRegistry.isDragging(drag)) {\n // We need to re-sort the item manually, because the pointer move\n // events won't be dispatched while the user is scrolling.\n drag._sortFromLastPointerPosition();\n }\n });\n }\n withElementContainer(container) {\n this._element = container;\n }\n /** Refreshes the position cache of the items and sibling containers. */\n _cacheItemPositions() {\n const isHorizontal = this.orientation === 'horizontal';\n this._itemPositions = this._activeDraggables.map(drag => {\n const elementToMeasure = drag.getVisibleElement();\n return {\n drag,\n offset: 0,\n initialTransform: elementToMeasure.style.transform || '',\n clientRect: getMutableClientRect(elementToMeasure)\n };\n }).sort((a, b) => {\n return isHorizontal ? a.clientRect.left - b.clientRect.left : a.clientRect.top - b.clientRect.top;\n });\n }\n /**\n * Gets the offset in pixels by which the item that is being dragged should be moved.\n * @param currentPosition Current position of the item.\n * @param newPosition Position of the item where the current item should be moved.\n * @param delta Direction in which the user is moving.\n */\n _getItemOffsetPx(currentPosition, newPosition, delta) {\n const isHorizontal = this.orientation === 'horizontal';\n let itemOffset = isHorizontal ? newPosition.left - currentPosition.left : newPosition.top - currentPosition.top;\n // Account for differences in the item width/height.\n if (delta === -1) {\n itemOffset += isHorizontal ? newPosition.width - currentPosition.width : newPosition.height - currentPosition.height;\n }\n return itemOffset;\n }\n /**\n * Gets the offset in pixels by which the items that aren't being dragged should be moved.\n * @param currentIndex Index of the item currently being dragged.\n * @param siblings All of the items in the list.\n * @param delta Direction in which the user is moving.\n */\n _getSiblingOffsetPx(currentIndex, siblings, delta) {\n const isHorizontal = this.orientation === 'horizontal';\n const currentPosition = siblings[currentIndex].clientRect;\n const immediateSibling = siblings[currentIndex + delta * -1];\n let siblingOffset = currentPosition[isHorizontal ? 'width' : 'height'] * delta;\n if (immediateSibling) {\n const start = isHorizontal ? 'left' : 'top';\n const end = isHorizontal ? 'right' : 'bottom';\n // Get the spacing between the start of the current item and the end of the one immediately\n // after it in the direction in which the user is dragging, or vice versa. We add it to the\n // offset in order to push the element to where it will be when it's inline and is influenced\n // by the `margin` of its siblings.\n if (delta === -1) {\n siblingOffset -= immediateSibling.clientRect[start] - currentPosition[end];\n } else {\n siblingOffset += currentPosition[start] - immediateSibling.clientRect[end];\n }\n }\n return siblingOffset;\n }\n /**\n * Checks if pointer is entering in the first position\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n */\n _shouldEnterAsFirstChild(pointerX, pointerY) {\n if (!this._activeDraggables.length) {\n return false;\n }\n const itemPositions = this._itemPositions;\n const isHorizontal = this.orientation === 'horizontal';\n // `itemPositions` are sorted by position while `activeDraggables` are sorted by child index\n // check if container is using some sort of \"reverse\" ordering (eg: flex-direction: row-reverse)\n const reversed = itemPositions[0].drag !== this._activeDraggables[0];\n if (reversed) {\n const lastItemRect = itemPositions[itemPositions.length - 1].clientRect;\n return isHorizontal ? pointerX >= lastItemRect.right : pointerY >= lastItemRect.bottom;\n } else {\n const firstItemRect = itemPositions[0].clientRect;\n return isHorizontal ? pointerX <= firstItemRect.left : pointerY <= firstItemRect.top;\n }\n }\n /**\n * Gets the index of an item in the drop container, based on the position of the user's pointer.\n * @param item Item that is being sorted.\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n * @param delta Direction in which the user is moving their pointer.\n */\n _getItemIndexFromPointerPosition(item, pointerX, pointerY, delta) {\n const isHorizontal = this.orientation === 'horizontal';\n const index = this._itemPositions.findIndex(({\n drag,\n clientRect\n }) => {\n // Skip the item itself.\n if (drag === item) {\n return false;\n }\n if (delta) {\n const direction = isHorizontal ? delta.x : delta.y;\n // If the user is still hovering over the same item as last time, their cursor hasn't left\n // the item after we made the swap, and they didn't change the direction in which they're\n // dragging, we don't consider it a direction swap.\n if (drag === this._previousSwap.drag && this._previousSwap.overlaps && direction === this._previousSwap.delta) {\n return false;\n }\n }\n return isHorizontal ?\n // Round these down since most browsers report client rects with\n // sub-pixel precision, whereas the pointer coordinates are rounded to pixels.\n pointerX >= Math.floor(clientRect.left) && pointerX < Math.floor(clientRect.right) : pointerY >= Math.floor(clientRect.top) && pointerY < Math.floor(clientRect.bottom);\n });\n return index === -1 || !this._sortPredicate(index, item) ? -1 : index;\n }\n}\n\n/**\n * Strategy that only supports sorting on a list that might wrap.\n * Items are reordered by moving their DOM nodes around.\n * @docs-private\n */\nclass MixedSortStrategy {\n constructor(_document, _dragDropRegistry) {\n this._document = _document;\n this._dragDropRegistry = _dragDropRegistry;\n /**\n * Keeps track of the item that was last swapped with the dragged item, as well as what direction\n * the pointer was moving in when the swap occurred and whether the user's pointer continued to\n * overlap with the swapped item after the swapping occurred.\n */\n this._previousSwap = {\n drag: null,\n deltaX: 0,\n deltaY: 0,\n overlaps: false\n };\n /**\n * Keeps track of the relationship between a node and its next sibling. This information\n * is used to restore the DOM to the order it was in before dragging started.\n */\n this._relatedNodes = [];\n }\n /**\n * To be called when the drag sequence starts.\n * @param items Items that are currently in the list.\n */\n start(items) {\n const childNodes = this._element.childNodes;\n this._relatedNodes = [];\n for (let i = 0; i < childNodes.length; i++) {\n const node = childNodes[i];\n this._relatedNodes.push([node, node.nextSibling]);\n }\n this.withItems(items);\n }\n /**\n * To be called when an item is being sorted.\n * @param item Item to be sorted.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param pointerDelta Direction in which the pointer is moving along each axis.\n */\n sort(item, pointerX, pointerY, pointerDelta) {\n const newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY);\n const previousSwap = this._previousSwap;\n if (newIndex === -1 || this._activeItems[newIndex] === item) {\n return null;\n }\n const toSwapWith = this._activeItems[newIndex];\n // Prevent too many swaps over the same item.\n if (previousSwap.drag === toSwapWith && previousSwap.overlaps && previousSwap.deltaX === pointerDelta.x && previousSwap.deltaY === pointerDelta.y) {\n return null;\n }\n const previousIndex = this.getItemIndex(item);\n const current = item.getPlaceholderElement();\n const overlapElement = toSwapWith.getRootElement();\n if (newIndex > previousIndex) {\n overlapElement.after(current);\n } else {\n overlapElement.before(current);\n }\n moveItemInArray(this._activeItems, previousIndex, newIndex);\n const newOverlapElement = this._getRootNode().elementFromPoint(pointerX, pointerY);\n // Note: it's tempting to save the entire `pointerDelta` object here, however that'll\n // break this functionality, because the same object is passed for all `sort` calls.\n previousSwap.deltaX = pointerDelta.x;\n previousSwap.deltaY = pointerDelta.y;\n previousSwap.drag = toSwapWith;\n previousSwap.overlaps = overlapElement === newOverlapElement || overlapElement.contains(newOverlapElement);\n return {\n previousIndex,\n currentIndex: newIndex\n };\n }\n /**\n * Called when an item is being moved into the container.\n * @param item Item that was moved into the container.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param index Index at which the item entered. If omitted, the container will try to figure it\n * out automatically.\n */\n enter(item, pointerX, pointerY, index) {\n let enterIndex = index == null || index < 0 ? this._getItemIndexFromPointerPosition(item, pointerX, pointerY) : index;\n // In some cases (e.g. when the container has padding) we might not be able to figure\n // out which item to insert the dragged item next to, because the pointer didn't overlap\n // with anything. In that case we find the item that's closest to the pointer.\n if (enterIndex === -1) {\n enterIndex = this._getClosestItemIndexToPointer(item, pointerX, pointerY);\n }\n const targetItem = this._activeItems[enterIndex];\n const currentIndex = this._activeItems.indexOf(item);\n if (currentIndex > -1) {\n this._activeItems.splice(currentIndex, 1);\n }\n if (targetItem && !this._dragDropRegistry.isDragging(targetItem)) {\n this._activeItems.splice(enterIndex, 0, item);\n targetItem.getRootElement().before(item.getPlaceholderElement());\n } else {\n this._activeItems.push(item);\n this._element.appendChild(item.getPlaceholderElement());\n }\n }\n /** Sets the items that are currently part of the list. */\n withItems(items) {\n this._activeItems = items.slice();\n }\n /** Assigns a sort predicate to the strategy. */\n withSortPredicate(predicate) {\n this._sortPredicate = predicate;\n }\n /** Resets the strategy to its initial state before dragging was started. */\n reset() {\n const root = this._element;\n const previousSwap = this._previousSwap;\n // Moving elements around in the DOM can break things like the `@for` loop, because it\n // uses comment nodes to know where to insert elements. To avoid such issues, we restore\n // the DOM nodes in the list to their original order when the list is reset.\n // Note that this could be simpler if we just saved all the nodes, cleared the root\n // and then appended them in the original order. We don't do it, because it can break\n // down depending on when the snapshot was taken. E.g. we may end up snapshotting the\n // placeholder element which is removed after dragging.\n for (let i = this._relatedNodes.length - 1; i > -1; i--) {\n const [node, nextSibling] = this._relatedNodes[i];\n if (node.parentNode === root && node.nextSibling !== nextSibling) {\n if (nextSibling === null) {\n root.appendChild(node);\n } else if (nextSibling.parentNode === root) {\n root.insertBefore(node, nextSibling);\n }\n }\n }\n this._relatedNodes = [];\n this._activeItems = [];\n previousSwap.drag = null;\n previousSwap.deltaX = previousSwap.deltaY = 0;\n previousSwap.overlaps = false;\n }\n /**\n * Gets a snapshot of items currently in the list.\n * Can include items that we dragged in from another list.\n */\n getActiveItemsSnapshot() {\n return this._activeItems;\n }\n /** Gets the index of a specific item. */\n getItemIndex(item) {\n return this._activeItems.indexOf(item);\n }\n /** Used to notify the strategy that the scroll position has changed. */\n updateOnScroll() {\n this._activeItems.forEach(item => {\n if (this._dragDropRegistry.isDragging(item)) {\n // We need to re-sort the item manually, because the pointer move\n // events won't be dispatched while the user is scrolling.\n item._sortFromLastPointerPosition();\n }\n });\n }\n withElementContainer(container) {\n if (container !== this._element) {\n this._element = container;\n this._rootNode = undefined;\n }\n }\n /**\n * Gets the index of an item in the drop container, based on the position of the user's pointer.\n * @param item Item that is being sorted.\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n * @param delta Direction in which the user is moving their pointer.\n */\n _getItemIndexFromPointerPosition(item, pointerX, pointerY) {\n const elementAtPoint = this._getRootNode().elementFromPoint(Math.floor(pointerX), Math.floor(pointerY));\n const index = elementAtPoint ? this._activeItems.findIndex(item => {\n const root = item.getRootElement();\n return elementAtPoint === root || root.contains(elementAtPoint);\n }) : -1;\n return index === -1 || !this._sortPredicate(index, item) ? -1 : index;\n }\n /** Lazily resolves the list's root node. */\n _getRootNode() {\n // Resolve the root node lazily to ensure that the drop list is in its final place in the DOM.\n if (!this._rootNode) {\n this._rootNode = _getShadowRoot(this._element) || this._document;\n }\n return this._rootNode;\n }\n /**\n * Finds the index of the item that's closest to the item being dragged.\n * @param item Item being dragged.\n * @param pointerX Position of the user's pointer along the X axis.\n * @param pointerY Position of the user's pointer along the Y axis.\n */\n _getClosestItemIndexToPointer(item, pointerX, pointerY) {\n if (this._activeItems.length === 0) {\n return -1;\n }\n if (this._activeItems.length === 1) {\n return 0;\n }\n let minDistance = Infinity;\n let minIndex = -1;\n // Find the Euclidean distance (https://en.wikipedia.org/wiki/Euclidean_distance) between each\n // item and the pointer, and return the smallest one. Note that this is a bit flawed in that DOM\n // nodes are rectangles, not points, so we use the top/left coordinates. It should be enough\n // for our purposes.\n for (let i = 0; i < this._activeItems.length; i++) {\n const current = this._activeItems[i];\n if (current !== item) {\n const {\n x,\n y\n } = current.getRootElement().getBoundingClientRect();\n const distance = Math.hypot(pointerX - x, pointerY - y);\n if (distance < minDistance) {\n minDistance = distance;\n minIndex = i;\n }\n }\n }\n return minIndex;\n }\n}\n\n/**\n * Proximity, as a ratio to width/height, at which a\n * dragged item will affect the drop container.\n */\nconst DROP_PROXIMITY_THRESHOLD = 0.05;\n/**\n * Proximity, as a ratio to width/height at which to start auto-scrolling the drop list or the\n * viewport. The value comes from trying it out manually until it feels right.\n */\nconst SCROLL_PROXIMITY_THRESHOLD = 0.05;\n/** Vertical direction in which we can auto-scroll. */\nvar AutoScrollVerticalDirection = /*#__PURE__*/function (AutoScrollVerticalDirection) {\n AutoScrollVerticalDirection[AutoScrollVerticalDirection[\"NONE\"] = 0] = \"NONE\";\n AutoScrollVerticalDirection[AutoScrollVerticalDirection[\"UP\"] = 1] = \"UP\";\n AutoScrollVerticalDirection[AutoScrollVerticalDirection[\"DOWN\"] = 2] = \"DOWN\";\n return AutoScrollVerticalDirection;\n}(AutoScrollVerticalDirection || {});\n/** Horizontal direction in which we can auto-scroll. */\nvar AutoScrollHorizontalDirection = /*#__PURE__*/function (AutoScrollHorizontalDirection) {\n AutoScrollHorizontalDirection[AutoScrollHorizontalDirection[\"NONE\"] = 0] = \"NONE\";\n AutoScrollHorizontalDirection[AutoScrollHorizontalDirection[\"LEFT\"] = 1] = \"LEFT\";\n AutoScrollHorizontalDirection[AutoScrollHorizontalDirection[\"RIGHT\"] = 2] = \"RIGHT\";\n return AutoScrollHorizontalDirection;\n}(AutoScrollHorizontalDirection || {});\n/**\n * Reference to a drop list. Used to manipulate or dispose of the container.\n */\nclass DropListRef {\n constructor(element, _dragDropRegistry, _document, _ngZone, _viewportRuler) {\n this._dragDropRegistry = _dragDropRegistry;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n /** Whether starting a dragging sequence from this container is disabled. */\n this.disabled = false;\n /** Whether sorting items within the list is disabled. */\n this.sortingDisabled = false;\n /**\n * Whether auto-scrolling the view when the user\n * moves their pointer close to the edges is disabled.\n */\n this.autoScrollDisabled = false;\n /** Number of pixels to scroll for each frame when auto-scrolling an element. */\n this.autoScrollStep = 2;\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n this.enterPredicate = () => true;\n /** Function that is used to determine whether an item can be sorted into a particular index. */\n this.sortPredicate = () => true;\n /** Emits right before dragging has started. */\n this.beforeStarted = new Subject();\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n this.entered = new Subject();\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n this.exited = new Subject();\n /** Emits when the user drops an item inside the container. */\n this.dropped = new Subject();\n /** Emits as the user is swapping items while actively dragging. */\n this.sorted = new Subject();\n /** Emits when a dragging sequence is started in a list connected to the current one. */\n this.receivingStarted = new Subject();\n /** Emits when a dragging sequence is stopped from a list connected to the current one. */\n this.receivingStopped = new Subject();\n /** Whether an item in the list is being dragged. */\n this._isDragging = false;\n /** Draggable items in the container. */\n this._draggables = [];\n /** Drop lists that are connected to the current one. */\n this._siblings = [];\n /** Connected siblings that currently have a dragged item. */\n this._activeSiblings = new Set();\n /** Subscription to the window being scrolled. */\n this._viewportScrollSubscription = Subscription.EMPTY;\n /** Vertical direction in which the list is currently scrolling. */\n this._verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n /** Horizontal direction in which the list is currently scrolling. */\n this._horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n /** Used to signal to the current auto-scroll sequence when to stop. */\n this._stopScrollTimers = new Subject();\n /** Shadow root of the current element. Necessary for `elementFromPoint` to resolve correctly. */\n this._cachedShadowRoot = null;\n /** Elements that can be scrolled while the user is dragging. */\n this._scrollableElements = [];\n /** Direction of the list's layout. */\n this._direction = 'ltr';\n /** Starts the interval that'll auto-scroll the element. */\n this._startScrollInterval = () => {\n this._stopScrolling();\n interval(0, animationFrameScheduler).pipe(takeUntil(this._stopScrollTimers)).subscribe(() => {\n const node = this._scrollNode;\n const scrollStep = this.autoScrollStep;\n if (this._verticalScrollDirection === AutoScrollVerticalDirection.UP) {\n node.scrollBy(0, -scrollStep);\n } else if (this._verticalScrollDirection === AutoScrollVerticalDirection.DOWN) {\n node.scrollBy(0, scrollStep);\n }\n if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.LEFT) {\n node.scrollBy(-scrollStep, 0);\n } else if (this._horizontalScrollDirection === AutoScrollHorizontalDirection.RIGHT) {\n node.scrollBy(scrollStep, 0);\n }\n });\n };\n const coercedElement = this.element = coerceElement(element);\n this._document = _document;\n this.withOrientation('vertical').withElementContainer(coercedElement);\n _dragDropRegistry.registerDropContainer(this);\n this._parentPositions = new ParentPositionTracker(_document);\n }\n /** Removes the drop list functionality from the DOM element. */\n dispose() {\n this._stopScrolling();\n this._stopScrollTimers.complete();\n this._viewportScrollSubscription.unsubscribe();\n this.beforeStarted.complete();\n this.entered.complete();\n this.exited.complete();\n this.dropped.complete();\n this.sorted.complete();\n this.receivingStarted.complete();\n this.receivingStopped.complete();\n this._activeSiblings.clear();\n this._scrollNode = null;\n this._parentPositions.clear();\n this._dragDropRegistry.removeDropContainer(this);\n }\n /** Whether an item from this list is currently being dragged. */\n isDragging() {\n return this._isDragging;\n }\n /** Starts dragging an item. */\n start() {\n this._draggingStarted();\n this._notifyReceivingSiblings();\n }\n /**\n * Attempts to move an item into the container.\n * @param item Item that was moved into the container.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param index Index at which the item entered. If omitted, the container will try to figure it\n * out automatically.\n */\n enter(item, pointerX, pointerY, index) {\n this._draggingStarted();\n // If sorting is disabled, we want the item to return to its starting\n // position if the user is returning it to its initial container.\n if (index == null && this.sortingDisabled) {\n index = this._draggables.indexOf(item);\n }\n this._sortStrategy.enter(item, pointerX, pointerY, index);\n // Note that this usually happens inside `_draggingStarted` as well, but the dimensions\n // can change when the sort strategy moves the item around inside `enter`.\n this._cacheParentPositions();\n // Notify siblings at the end so that the item has been inserted into the `activeDraggables`.\n this._notifyReceivingSiblings();\n this.entered.next({\n item,\n container: this,\n currentIndex: this.getItemIndex(item)\n });\n }\n /**\n * Removes an item from the container after it was dragged into another container by the user.\n * @param item Item that was dragged out.\n */\n exit(item) {\n this._reset();\n this.exited.next({\n item,\n container: this\n });\n }\n /**\n * Drops an item into this container.\n * @param item Item being dropped into the container.\n * @param currentIndex Index at which the item should be inserted.\n * @param previousIndex Index of the item when dragging started.\n * @param previousContainer Container from which the item got dragged in.\n * @param isPointerOverContainer Whether the user's pointer was over the\n * container when the item was dropped.\n * @param distance Distance the user has dragged since the start of the dragging sequence.\n * @param event Event that triggered the dropping sequence.\n *\n * @breaking-change 15.0.0 `previousIndex` and `event` parameters to become required.\n */\n drop(item, currentIndex, previousIndex, previousContainer, isPointerOverContainer, distance, dropPoint, event = {}) {\n this._reset();\n this.dropped.next({\n item,\n currentIndex,\n previousIndex,\n container: this,\n previousContainer,\n isPointerOverContainer,\n distance,\n dropPoint,\n event\n });\n }\n /**\n * Sets the draggable items that are a part of this list.\n * @param items Items that are a part of this list.\n */\n withItems(items) {\n const previousItems = this._draggables;\n this._draggables = items;\n items.forEach(item => item._withDropContainer(this));\n if (this.isDragging()) {\n const draggedItems = previousItems.filter(item => item.isDragging());\n // If all of the items being dragged were removed\n // from the list, abort the current drag sequence.\n if (draggedItems.every(item => items.indexOf(item) === -1)) {\n this._reset();\n } else {\n this._sortStrategy.withItems(this._draggables);\n }\n }\n return this;\n }\n /** Sets the layout direction of the drop list. */\n withDirection(direction) {\n this._direction = direction;\n if (this._sortStrategy instanceof SingleAxisSortStrategy) {\n this._sortStrategy.direction = direction;\n }\n return this;\n }\n /**\n * Sets the containers that are connected to this one. When two or more containers are\n * connected, the user will be allowed to transfer items between them.\n * @param connectedTo Other containers that the current containers should be connected to.\n */\n connectedTo(connectedTo) {\n this._siblings = connectedTo.slice();\n return this;\n }\n /**\n * Sets the orientation of the container.\n * @param orientation New orientation for the container.\n */\n withOrientation(orientation) {\n if (orientation === 'mixed') {\n this._sortStrategy = new MixedSortStrategy(this._document, this._dragDropRegistry);\n } else {\n const strategy = new SingleAxisSortStrategy(this._dragDropRegistry);\n strategy.direction = this._direction;\n strategy.orientation = orientation;\n this._sortStrategy = strategy;\n }\n this._sortStrategy.withElementContainer(this._container);\n this._sortStrategy.withSortPredicate((index, item) => this.sortPredicate(index, item, this));\n return this;\n }\n /**\n * Sets which parent elements are can be scrolled while the user is dragging.\n * @param elements Elements that can be scrolled.\n */\n withScrollableParents(elements) {\n const element = this._container;\n // We always allow the current element to be scrollable\n // so we need to ensure that it's in the array.\n this._scrollableElements = elements.indexOf(element) === -1 ? [element, ...elements] : elements.slice();\n return this;\n }\n /**\n * Configures the drop list so that a different element is used as the container for the\n * dragged items. This is useful for the cases when one might not have control over the\n * full DOM that sets up the dragging.\n * Note that the alternate container needs to be a descendant of the drop list.\n * @param container New element container to be assigned.\n */\n withElementContainer(container) {\n if (container === this._container) {\n return this;\n }\n const element = coerceElement(this.element);\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && container !== element && !element.contains(container)) {\n throw new Error('Invalid DOM structure for drop list. Alternate container element must be a descendant of the drop list.');\n }\n const oldContainerIndex = this._scrollableElements.indexOf(this._container);\n const newContainerIndex = this._scrollableElements.indexOf(container);\n if (oldContainerIndex > -1) {\n this._scrollableElements.splice(oldContainerIndex, 1);\n }\n if (newContainerIndex > -1) {\n this._scrollableElements.splice(newContainerIndex, 1);\n }\n if (this._sortStrategy) {\n this._sortStrategy.withElementContainer(container);\n }\n this._cachedShadowRoot = null;\n this._scrollableElements.unshift(container);\n this._container = container;\n return this;\n }\n /** Gets the scrollable parents that are registered with this drop container. */\n getScrollableParents() {\n return this._scrollableElements;\n }\n /**\n * Figures out the index of an item in the container.\n * @param item Item whose index should be determined.\n */\n getItemIndex(item) {\n return this._isDragging ? this._sortStrategy.getItemIndex(item) : this._draggables.indexOf(item);\n }\n /**\n * Whether the list is able to receive the item that\n * is currently being dragged inside a connected drop list.\n */\n isReceiving() {\n return this._activeSiblings.size > 0;\n }\n /**\n * Sorts an item inside the container based on its position.\n * @param item Item to be sorted.\n * @param pointerX Position of the item along the X axis.\n * @param pointerY Position of the item along the Y axis.\n * @param pointerDelta Direction in which the pointer is moving along each axis.\n */\n _sortItem(item, pointerX, pointerY, pointerDelta) {\n // Don't sort the item if sorting is disabled or it's out of range.\n if (this.sortingDisabled || !this._domRect || !isPointerNearDomRect(this._domRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {\n return;\n }\n const result = this._sortStrategy.sort(item, pointerX, pointerY, pointerDelta);\n if (result) {\n this.sorted.next({\n previousIndex: result.previousIndex,\n currentIndex: result.currentIndex,\n container: this,\n item\n });\n }\n }\n /**\n * Checks whether the user's pointer is close to the edges of either the\n * viewport or the drop list and starts the auto-scroll sequence.\n * @param pointerX User's pointer position along the x axis.\n * @param pointerY User's pointer position along the y axis.\n */\n _startScrollingIfNecessary(pointerX, pointerY) {\n if (this.autoScrollDisabled) {\n return;\n }\n let scrollNode;\n let verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n let horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n // Check whether we should start scrolling any of the parent containers.\n this._parentPositions.positions.forEach((position, element) => {\n // We have special handling for the `document` below. Also this would be\n // nicer with a for...of loop, but it requires changing a compiler flag.\n if (element === this._document || !position.clientRect || scrollNode) {\n return;\n }\n if (isPointerNearDomRect(position.clientRect, DROP_PROXIMITY_THRESHOLD, pointerX, pointerY)) {\n [verticalScrollDirection, horizontalScrollDirection] = getElementScrollDirections(element, position.clientRect, this._direction, pointerX, pointerY);\n if (verticalScrollDirection || horizontalScrollDirection) {\n scrollNode = element;\n }\n }\n });\n // Otherwise check if we can start scrolling the viewport.\n if (!verticalScrollDirection && !horizontalScrollDirection) {\n const {\n width,\n height\n } = this._viewportRuler.getViewportSize();\n const domRect = {\n width,\n height,\n top: 0,\n right: width,\n bottom: height,\n left: 0\n };\n verticalScrollDirection = getVerticalScrollDirection(domRect, pointerY);\n horizontalScrollDirection = getHorizontalScrollDirection(domRect, pointerX);\n scrollNode = window;\n }\n if (scrollNode && (verticalScrollDirection !== this._verticalScrollDirection || horizontalScrollDirection !== this._horizontalScrollDirection || scrollNode !== this._scrollNode)) {\n this._verticalScrollDirection = verticalScrollDirection;\n this._horizontalScrollDirection = horizontalScrollDirection;\n this._scrollNode = scrollNode;\n if ((verticalScrollDirection || horizontalScrollDirection) && scrollNode) {\n this._ngZone.runOutsideAngular(this._startScrollInterval);\n } else {\n this._stopScrolling();\n }\n }\n }\n /** Stops any currently-running auto-scroll sequences. */\n _stopScrolling() {\n this._stopScrollTimers.next();\n }\n /** Starts the dragging sequence within the list. */\n _draggingStarted() {\n const styles = this._container.style;\n this.beforeStarted.next();\n this._isDragging = true;\n if ((typeof ngDevMode === 'undefined' || ngDevMode) &&\n // Prevent the check from running on apps not using an alternate container. Ideally we\n // would always run it, but introducing it at this stage would be a breaking change.\n this._container !== coerceElement(this.element)) {\n for (const drag of this._draggables) {\n if (!drag.isDragging() && drag.getVisibleElement().parentNode !== this._container) {\n throw new Error('Invalid DOM structure for drop list. All items must be placed directly inside of the element container.');\n }\n }\n }\n // We need to disable scroll snapping while the user is dragging, because it breaks automatic\n // scrolling. The browser seems to round the value based on the snapping points which means\n // that we can't increment/decrement the scroll position.\n this._initialScrollSnap = styles.msScrollSnapType || styles.scrollSnapType || '';\n styles.scrollSnapType = styles.msScrollSnapType = 'none';\n this._sortStrategy.start(this._draggables);\n this._cacheParentPositions();\n this._viewportScrollSubscription.unsubscribe();\n this._listenToScrollEvents();\n }\n /** Caches the positions of the configured scrollable parents. */\n _cacheParentPositions() {\n this._parentPositions.cache(this._scrollableElements);\n // The list element is always in the `scrollableElements`\n // so we can take advantage of the cached `DOMRect`.\n this._domRect = this._parentPositions.positions.get(this._container).clientRect;\n }\n /** Resets the container to its initial state. */\n _reset() {\n this._isDragging = false;\n const styles = this._container.style;\n styles.scrollSnapType = styles.msScrollSnapType = this._initialScrollSnap;\n this._siblings.forEach(sibling => sibling._stopReceiving(this));\n this._sortStrategy.reset();\n this._stopScrolling();\n this._viewportScrollSubscription.unsubscribe();\n this._parentPositions.clear();\n }\n /**\n * Checks whether the user's pointer is positioned over the container.\n * @param x Pointer position along the X axis.\n * @param y Pointer position along the Y axis.\n */\n _isOverContainer(x, y) {\n return this._domRect != null && isInsideClientRect(this._domRect, x, y);\n }\n /**\n * Figures out whether an item should be moved into a sibling\n * drop container, based on its current position.\n * @param item Drag item that is being moved.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n _getSiblingContainerFromPosition(item, x, y) {\n return this._siblings.find(sibling => sibling._canReceive(item, x, y));\n }\n /**\n * Checks whether the drop list can receive the passed-in item.\n * @param item Item that is being dragged into the list.\n * @param x Position of the item along the X axis.\n * @param y Position of the item along the Y axis.\n */\n _canReceive(item, x, y) {\n if (!this._domRect || !isInsideClientRect(this._domRect, x, y) || !this.enterPredicate(item, this)) {\n return false;\n }\n const elementFromPoint = this._getShadowRoot().elementFromPoint(x, y);\n // If there's no element at the pointer position, then\n // the client rect is probably scrolled out of the view.\n if (!elementFromPoint) {\n return false;\n }\n // The `DOMRect`, that we're using to find the container over which the user is\n // hovering, doesn't give us any information on whether the element has been scrolled\n // out of the view or whether it's overlapping with other containers. This means that\n // we could end up transferring the item into a container that's invisible or is positioned\n // below another one. We use the result from `elementFromPoint` to get the top-most element\n // at the pointer position and to find whether it's one of the intersecting drop containers.\n return elementFromPoint === this._container || this._container.contains(elementFromPoint);\n }\n /**\n * Called by one of the connected drop lists when a dragging sequence has started.\n * @param sibling Sibling in which dragging has started.\n */\n _startReceiving(sibling, items) {\n const activeSiblings = this._activeSiblings;\n if (!activeSiblings.has(sibling) && items.every(item => {\n // Note that we have to add an exception to the `enterPredicate` for items that started off\n // in this drop list. The drag ref has logic that allows an item to return to its initial\n // container, if it has left the initial container and none of the connected containers\n // allow it to enter. See `DragRef._updateActiveDropContainer` for more context.\n return this.enterPredicate(item, this) || this._draggables.indexOf(item) > -1;\n })) {\n activeSiblings.add(sibling);\n this._cacheParentPositions();\n this._listenToScrollEvents();\n this.receivingStarted.next({\n initiator: sibling,\n receiver: this,\n items\n });\n }\n }\n /**\n * Called by a connected drop list when dragging has stopped.\n * @param sibling Sibling whose dragging has stopped.\n */\n _stopReceiving(sibling) {\n this._activeSiblings.delete(sibling);\n this._viewportScrollSubscription.unsubscribe();\n this.receivingStopped.next({\n initiator: sibling,\n receiver: this\n });\n }\n /**\n * Starts listening to scroll events on the viewport.\n * Used for updating the internal state of the list.\n */\n _listenToScrollEvents() {\n this._viewportScrollSubscription = this._dragDropRegistry.scrolled(this._getShadowRoot()).subscribe(event => {\n if (this.isDragging()) {\n const scrollDifference = this._parentPositions.handleScroll(event);\n if (scrollDifference) {\n this._sortStrategy.updateOnScroll(scrollDifference.top, scrollDifference.left);\n }\n } else if (this.isReceiving()) {\n this._cacheParentPositions();\n }\n });\n }\n /**\n * Lazily resolves and returns the shadow root of the element. We do this in a function, rather\n * than saving it in property directly on init, because we want to resolve it as late as possible\n * in order to ensure that the element has been moved into the shadow DOM. Doing it inside the\n * constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.\n */\n _getShadowRoot() {\n if (!this._cachedShadowRoot) {\n const shadowRoot = _getShadowRoot(this._container);\n this._cachedShadowRoot = shadowRoot || this._document;\n }\n return this._cachedShadowRoot;\n }\n /** Notifies any siblings that may potentially receive the item. */\n _notifyReceivingSiblings() {\n const draggedItems = this._sortStrategy.getActiveItemsSnapshot().filter(item => item.isDragging());\n this._siblings.forEach(sibling => sibling._startReceiving(this, draggedItems));\n }\n}\n/**\n * Gets whether the vertical auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getVerticalScrollDirection(clientRect, pointerY) {\n const {\n top,\n bottom,\n height\n } = clientRect;\n const yThreshold = height * SCROLL_PROXIMITY_THRESHOLD;\n if (pointerY >= top - yThreshold && pointerY <= top + yThreshold) {\n return AutoScrollVerticalDirection.UP;\n } else if (pointerY >= bottom - yThreshold && pointerY <= bottom + yThreshold) {\n return AutoScrollVerticalDirection.DOWN;\n }\n return AutoScrollVerticalDirection.NONE;\n}\n/**\n * Gets whether the horizontal auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerX Position of the user's pointer along the x axis.\n */\nfunction getHorizontalScrollDirection(clientRect, pointerX) {\n const {\n left,\n right,\n width\n } = clientRect;\n const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {\n return AutoScrollHorizontalDirection.LEFT;\n } else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {\n return AutoScrollHorizontalDirection.RIGHT;\n }\n return AutoScrollHorizontalDirection.NONE;\n}\n/**\n * Gets the directions in which an element node should be scrolled,\n * assuming that the user's pointer is already within it scrollable region.\n * @param element Element for which we should calculate the scroll direction.\n * @param clientRect Bounding client rectangle of the element.\n * @param direction Layout direction of the drop list.\n * @param pointerX Position of the user's pointer along the x axis.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getElementScrollDirections(element, clientRect, direction, pointerX, pointerY) {\n const computedVertical = getVerticalScrollDirection(clientRect, pointerY);\n const computedHorizontal = getHorizontalScrollDirection(clientRect, pointerX);\n let verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n let horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n // Note that we here we do some extra checks for whether the element is actually scrollable in\n // a certain direction and we only assign the scroll direction if it is. We do this so that we\n // can allow other elements to be scrolled, if the current element can't be scrolled anymore.\n // This allows us to handle cases where the scroll regions of two scrollable elements overlap.\n if (computedVertical) {\n const scrollTop = element.scrollTop;\n if (computedVertical === AutoScrollVerticalDirection.UP) {\n if (scrollTop > 0) {\n verticalScrollDirection = AutoScrollVerticalDirection.UP;\n }\n } else if (element.scrollHeight - scrollTop > element.clientHeight) {\n verticalScrollDirection = AutoScrollVerticalDirection.DOWN;\n }\n }\n if (computedHorizontal) {\n const scrollLeft = element.scrollLeft;\n if (direction === 'rtl') {\n if (computedHorizontal === AutoScrollHorizontalDirection.RIGHT) {\n // In RTL `scrollLeft` will be negative when scrolled.\n if (scrollLeft < 0) {\n horizontalScrollDirection = AutoScrollHorizontalDirection.RIGHT;\n }\n } else if (element.scrollWidth + scrollLeft > element.clientWidth) {\n horizontalScrollDirection = AutoScrollHorizontalDirection.LEFT;\n }\n } else {\n if (computedHorizontal === AutoScrollHorizontalDirection.LEFT) {\n if (scrollLeft > 0) {\n horizontalScrollDirection = AutoScrollHorizontalDirection.LEFT;\n }\n } else if (element.scrollWidth - scrollLeft > element.clientWidth) {\n horizontalScrollDirection = AutoScrollHorizontalDirection.RIGHT;\n }\n }\n }\n return [verticalScrollDirection, horizontalScrollDirection];\n}\n\n/** Event options that can be used to bind an active, capturing event. */\nconst activeCapturingEventOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n passive: false,\n capture: true\n});\n/** Keeps track of the apps currently containing drag items. */\nconst activeApps = /*#__PURE__*/new Set();\n/**\n * Component used to load the drag&drop reset styles.\n * @docs-private\n */\nlet _ResetsLoader = /*#__PURE__*/(() => {\n class _ResetsLoader {\n static {\n this.ɵfac = function _ResetsLoader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || _ResetsLoader)();\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: _ResetsLoader,\n selectors: [[\"ng-component\"]],\n hostAttrs: [\"cdk-drag-resets-container\", \"\"],\n standalone: true,\n features: [i0.ɵɵStandaloneFeature],\n decls: 0,\n vars: 0,\n template: function _ResetsLoader_Template(rf, ctx) {},\n styles: [\"@layer cdk-resets{.cdk-drag-preview{background:none;border:none;padding:0;color:inherit;inset:auto}}.cdk-drag-placeholder *,.cdk-drag-preview *{pointer-events:none !important}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n }\n return _ResetsLoader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n// TODO(crisbeto): remove generics when making breaking changes.\n/**\n * Service that keeps track of all the drag item and drop container\n * instances, and manages global event listeners on the `document`.\n * @docs-private\n */\nlet DragDropRegistry = /*#__PURE__*/(() => {\n class DragDropRegistry {\n constructor(_ngZone, _document) {\n this._ngZone = _ngZone;\n this._appRef = inject(ApplicationRef);\n this._environmentInjector = inject(EnvironmentInjector);\n /** Registered drop container instances. */\n this._dropInstances = new Set();\n /** Registered drag item instances. */\n this._dragInstances = new Set();\n /** Drag item instances that are currently being dragged. */\n this._activeDragInstances = signal([]);\n /** Keeps track of the event listeners that we've bound to the `document`. */\n this._globalListeners = new Map();\n /**\n * Predicate function to check if an item is being dragged. Moved out into a property,\n * because it'll be called a lot and we don't want to create a new function every time.\n */\n this._draggingPredicate = item => item.isDragging();\n /**\n * Emits the `touchmove` or `mousemove` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n this.pointerMove = new Subject();\n /**\n * Emits the `touchend` or `mouseup` events that are dispatched\n * while the user is dragging a drag item instance.\n */\n this.pointerUp = new Subject();\n /**\n * Emits when the viewport has been scrolled while the user is dragging an item.\n * @deprecated To be turned into a private member. Use the `scrolled` method instead.\n * @breaking-change 13.0.0\n */\n this.scroll = new Subject();\n /**\n * Event listener that will prevent the default browser action while the user is dragging.\n * @param event Event whose default action should be prevented.\n */\n this._preventDefaultWhileDragging = event => {\n if (this._activeDragInstances().length > 0) {\n event.preventDefault();\n }\n };\n /** Event listener for `touchmove` that is bound even if no dragging is happening. */\n this._persistentTouchmoveListener = event => {\n if (this._activeDragInstances().length > 0) {\n // Note that we only want to prevent the default action after dragging has actually started.\n // Usually this is the same time at which the item is added to the `_activeDragInstances`,\n // but it could be pushed back if the user has set up a drag delay or threshold.\n if (this._activeDragInstances().some(this._draggingPredicate)) {\n event.preventDefault();\n }\n this.pointerMove.next(event);\n }\n };\n this._document = _document;\n }\n /** Adds a drop container to the registry. */\n registerDropContainer(drop) {\n if (!this._dropInstances.has(drop)) {\n this._dropInstances.add(drop);\n }\n }\n /** Adds a drag item instance to the registry. */\n registerDragItem(drag) {\n this._dragInstances.add(drag);\n // The `touchmove` event gets bound once, ahead of time, because WebKit\n // won't preventDefault on a dynamically-added `touchmove` listener.\n // See https://bugs.webkit.org/show_bug.cgi?id=184250.\n if (this._dragInstances.size === 1) {\n this._ngZone.runOutsideAngular(() => {\n // The event handler has to be explicitly active,\n // because newer browsers make it passive by default.\n this._document.addEventListener('touchmove', this._persistentTouchmoveListener, activeCapturingEventOptions);\n });\n }\n }\n /** Removes a drop container from the registry. */\n removeDropContainer(drop) {\n this._dropInstances.delete(drop);\n }\n /** Removes a drag item instance from the registry. */\n removeDragItem(drag) {\n this._dragInstances.delete(drag);\n this.stopDragging(drag);\n if (this._dragInstances.size === 0) {\n this._document.removeEventListener('touchmove', this._persistentTouchmoveListener, activeCapturingEventOptions);\n }\n }\n /**\n * Starts the dragging sequence for a drag instance.\n * @param drag Drag instance which is being dragged.\n * @param event Event that initiated the dragging.\n */\n startDragging(drag, event) {\n // Do not process the same drag twice to avoid memory leaks and redundant listeners\n if (this._activeDragInstances().indexOf(drag) > -1) {\n return;\n }\n this._loadResets();\n this._activeDragInstances.update(instances => [...instances, drag]);\n if (this._activeDragInstances().length === 1) {\n const isTouchEvent = event.type.startsWith('touch');\n // We explicitly bind __active__ listeners here, because newer browsers will default to\n // passive ones for `mousemove` and `touchmove`. The events need to be active, because we\n // use `preventDefault` to prevent the page from scrolling while the user is dragging.\n this._globalListeners.set(isTouchEvent ? 'touchend' : 'mouseup', {\n handler: e => this.pointerUp.next(e),\n options: true\n }).set('scroll', {\n handler: e => this.scroll.next(e),\n // Use capturing so that we pick up scroll changes in any scrollable nodes that aren't\n // the document. See https://github.com/angular/components/issues/17144.\n options: true\n })\n // Preventing the default action on `mousemove` isn't enough to disable text selection\n // on Safari so we need to prevent the selection event as well. Alternatively this can\n // be done by setting `user-select: none` on the `body`, however it has causes a style\n // recalculation which can be expensive on pages with a lot of elements.\n .set('selectstart', {\n handler: this._preventDefaultWhileDragging,\n options: activeCapturingEventOptions\n });\n // We don't have to bind a move event for touch drag sequences, because\n // we already have a persistent global one bound from `registerDragItem`.\n if (!isTouchEvent) {\n this._globalListeners.set('mousemove', {\n handler: e => this.pointerMove.next(e),\n options: activeCapturingEventOptions\n });\n }\n this._ngZone.runOutsideAngular(() => {\n this._globalListeners.forEach((config, name) => {\n this._document.addEventListener(name, config.handler, config.options);\n });\n });\n }\n }\n /** Stops dragging a drag item instance. */\n stopDragging(drag) {\n this._activeDragInstances.update(instances => {\n const index = instances.indexOf(drag);\n if (index > -1) {\n instances.splice(index, 1);\n return [...instances];\n }\n return instances;\n });\n if (this._activeDragInstances().length === 0) {\n this._clearGlobalListeners();\n }\n }\n /** Gets whether a drag item instance is currently being dragged. */\n isDragging(drag) {\n return this._activeDragInstances().indexOf(drag) > -1;\n }\n /**\n * Gets a stream that will emit when any element on the page is scrolled while an item is being\n * dragged.\n * @param shadowRoot Optional shadow root that the current dragging sequence started from.\n * Top-level listeners won't pick up events coming from the shadow DOM so this parameter can\n * be used to include an additional top-level listener at the shadow root level.\n */\n scrolled(shadowRoot) {\n const streams = [this.scroll];\n if (shadowRoot && shadowRoot !== this._document) {\n // Note that this is basically the same as `fromEvent` from rxjs, but we do it ourselves,\n // because we want to guarantee that the event is bound outside of the `NgZone`. With\n // `fromEvent` it'll only happen if the subscription is outside the `NgZone`.\n streams.push(new Observable(observer => {\n return this._ngZone.runOutsideAngular(() => {\n const eventOptions = true;\n const callback = event => {\n if (this._activeDragInstances().length) {\n observer.next(event);\n }\n };\n shadowRoot.addEventListener('scroll', callback, eventOptions);\n return () => {\n shadowRoot.removeEventListener('scroll', callback, eventOptions);\n };\n });\n }));\n }\n return merge(...streams);\n }\n ngOnDestroy() {\n this._dragInstances.forEach(instance => this.removeDragItem(instance));\n this._dropInstances.forEach(instance => this.removeDropContainer(instance));\n this._clearGlobalListeners();\n this.pointerMove.complete();\n this.pointerUp.complete();\n }\n /** Clears out the global event listeners from the `document`. */\n _clearGlobalListeners() {\n this._globalListeners.forEach((config, name) => {\n this._document.removeEventListener(name, config.handler, config.options);\n });\n this._globalListeners.clear();\n }\n // TODO(crisbeto): abstract this away into something reusable.\n /** Loads the CSS resets needed for the module to work correctly. */\n _loadResets() {\n if (!activeApps.has(this._appRef)) {\n activeApps.add(this._appRef);\n const componentRef = createComponent(_ResetsLoader, {\n environmentInjector: this._environmentInjector\n });\n this._appRef.onDestroy(() => {\n activeApps.delete(this._appRef);\n if (activeApps.size === 0) {\n componentRef.destroy();\n }\n });\n }\n }\n static {\n this.ɵfac = function DragDropRegistry_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DragDropRegistry)(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(DOCUMENT));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DragDropRegistry,\n factory: DragDropRegistry.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return DragDropRegistry;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Default configuration to be used when creating a `DragRef`. */\nconst DEFAULT_CONFIG = {\n dragStartThreshold: 5,\n pointerDirectionChangeThreshold: 5\n};\n/**\n * Service that allows for drag-and-drop functionality to be attached to DOM elements.\n */\nlet DragDrop = /*#__PURE__*/(() => {\n class DragDrop {\n constructor(_document, _ngZone, _viewportRuler, _dragDropRegistry) {\n this._document = _document;\n this._ngZone = _ngZone;\n this._viewportRuler = _viewportRuler;\n this._dragDropRegistry = _dragDropRegistry;\n }\n /**\n * Turns an element into a draggable item.\n * @param element Element to which to attach the dragging functionality.\n * @param config Object used to configure the dragging behavior.\n */\n createDrag(element, config = DEFAULT_CONFIG) {\n return new DragRef(element, config, this._document, this._ngZone, this._viewportRuler, this._dragDropRegistry);\n }\n /**\n * Turns an element into a drop list.\n * @param element Element to which to attach the drop list functionality.\n */\n createDropList(element) {\n return new DropListRef(element, this._dragDropRegistry, this._document, this._ngZone, this._viewportRuler);\n }\n static {\n this.ɵfac = function DragDrop_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DragDrop)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.ViewportRuler), i0.ɵɵinject(DragDropRegistry));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DragDrop,\n factory: DragDrop.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return DragDrop;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used for a `CdkDrag` to provide itself as a parent to the\n * drag-specific child directive (`CdkDragHandle`, `CdkDragPreview` etc.). Used primarily\n * to avoid circular imports.\n * @docs-private\n */\nconst CDK_DRAG_PARENT = /*#__PURE__*/new InjectionToken('CDK_DRAG_PARENT');\n\n/**\n * Asserts that a particular node is an element.\n * @param node Node to be checked.\n * @param name Name to attach to the error message.\n */\nfunction assertElementNode(node, name) {\n if (node.nodeType !== 1) {\n throw Error(`${name} must be attached to an element node. ` + `Currently attached to \"${node.nodeName}\".`);\n }\n}\n\n/**\n * Injection token that can be used to reference instances of `CdkDragHandle`. It serves as\n * alternative token to the actual `CdkDragHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DRAG_HANDLE = /*#__PURE__*/new InjectionToken('CdkDragHandle');\n/** Handle that can be used to drag a CdkDrag instance. */\nlet CdkDragHandle = /*#__PURE__*/(() => {\n class CdkDragHandle {\n /** Whether starting to drag through this handle is disabled. */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = value;\n this._stateChanges.next(this);\n }\n constructor(element, _parentDrag) {\n this.element = element;\n this._parentDrag = _parentDrag;\n /** Emits when the state of the handle has changed. */\n this._stateChanges = new Subject();\n this._disabled = false;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertElementNode(element.nativeElement, 'cdkDragHandle');\n }\n _parentDrag?._addHandle(this);\n }\n ngOnDestroy() {\n this._parentDrag?._removeHandle(this);\n this._stateChanges.complete();\n }\n static {\n this.ɵfac = function CdkDragHandle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkDragHandle)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(CDK_DRAG_PARENT, 12));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkDragHandle,\n selectors: [[\"\", \"cdkDragHandle\", \"\"]],\n hostAttrs: [1, \"cdk-drag-handle\"],\n inputs: {\n disabled: [2, \"cdkDragHandleDisabled\", \"disabled\", booleanAttribute]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CDK_DRAG_HANDLE,\n useExisting: CdkDragHandle\n }]), i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return CdkDragHandle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to configure the\n * behavior of the drag&drop-related components.\n */\nconst CDK_DRAG_CONFIG = /*#__PURE__*/new InjectionToken('CDK_DRAG_CONFIG');\nconst DRAG_HOST_CLASS = 'cdk-drag';\n/**\n * Injection token that can be used to reference instances of `CdkDropList`. It serves as\n * alternative token to the actual `CdkDropList` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DROP_LIST = /*#__PURE__*/new InjectionToken('CdkDropList');\n/** Element that can be moved inside a CdkDropList container. */\nlet CdkDrag = /*#__PURE__*/(() => {\n class CdkDrag {\n static {\n this._dragInstances = [];\n }\n /** Whether starting to drag this element is disabled. */\n get disabled() {\n return this._disabled || this.dropContainer && this.dropContainer.disabled;\n }\n set disabled(value) {\n this._disabled = value;\n this._dragRef.disabled = this._disabled;\n }\n constructor(/** Element that the draggable is attached to. */\n element, /** Droppable container that the draggable is a part of. */\n dropContainer,\n /**\n * @deprecated `_document` parameter no longer being used and will be removed.\n * @breaking-change 12.0.0\n */\n _document, _ngZone, _viewContainerRef, config, _dir, dragDrop, _changeDetectorRef, _selfHandle, _parentDrag) {\n this.element = element;\n this.dropContainer = dropContainer;\n this._ngZone = _ngZone;\n this._viewContainerRef = _viewContainerRef;\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._selfHandle = _selfHandle;\n this._parentDrag = _parentDrag;\n this._destroyed = new Subject();\n this._handles = new BehaviorSubject([]);\n /**\n * If the parent of the dragged element has a `scale` transform, it can throw off the\n * positioning when the user starts dragging. Use this input to notify the CDK of the scale.\n */\n this.scale = 1;\n /** Emits when the user starts dragging the item. */\n this.started = new EventEmitter();\n /** Emits when the user has released a drag item, before any animations have started. */\n this.released = new EventEmitter();\n /** Emits when the user stops dragging an item in the container. */\n this.ended = new EventEmitter();\n /** Emits when the user has moved the item into a new container. */\n this.entered = new EventEmitter();\n /** Emits when the user removes the item its container by dragging it into another container. */\n this.exited = new EventEmitter();\n /** Emits when the user drops the item inside a container. */\n this.dropped = new EventEmitter();\n /**\n * Emits as the user is dragging the item. Use with caution,\n * because this event will fire for every pixel that the user has dragged.\n */\n this.moved = new Observable(observer => {\n const subscription = this._dragRef.moved.pipe(map(movedEvent => ({\n source: this,\n pointerPosition: movedEvent.pointerPosition,\n event: movedEvent.event,\n delta: movedEvent.delta,\n distance: movedEvent.distance\n }))).subscribe(observer);\n return () => {\n subscription.unsubscribe();\n };\n });\n this._injector = inject(Injector);\n this._dragRef = dragDrop.createDrag(element, {\n dragStartThreshold: config && config.dragStartThreshold != null ? config.dragStartThreshold : 5,\n pointerDirectionChangeThreshold: config && config.pointerDirectionChangeThreshold != null ? config.pointerDirectionChangeThreshold : 5,\n zIndex: config?.zIndex\n });\n this._dragRef.data = this;\n // We have to keep track of the drag instances in order to be able to match an element to\n // a drag instance. We can't go through the global registry of `DragRef`, because the root\n // element could be different.\n CdkDrag._dragInstances.push(this);\n if (config) {\n this._assignDefaults(config);\n }\n // Note that usually the container is assigned when the drop list is picks up the item, but in\n // some cases (mainly transplanted views with OnPush, see #18341) we may end up in a situation\n // where there are no items on the first change detection pass, but the items get picked up as\n // soon as the user triggers another pass by dragging. This is a problem, because the item would\n // have to switch from standalone mode to drag mode in the middle of the dragging sequence which\n // is too late since the two modes save different kinds of information. We work around it by\n // assigning the drop container both from here and the list.\n if (dropContainer) {\n this._dragRef._withDropContainer(dropContainer._dropListRef);\n dropContainer.addItem(this);\n // The drop container reads this so we need to sync it here.\n dropContainer._dropListRef.beforeStarted.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._dragRef.scale = this.scale;\n });\n }\n this._syncInputs(this._dragRef);\n this._handleEvents(this._dragRef);\n }\n /**\n * Returns the element that is being used as a placeholder\n * while the current element is being dragged.\n */\n getPlaceholderElement() {\n return this._dragRef.getPlaceholderElement();\n }\n /** Returns the root draggable element. */\n getRootElement() {\n return this._dragRef.getRootElement();\n }\n /** Resets a standalone drag item to its initial position. */\n reset() {\n this._dragRef.reset();\n }\n /**\n * Gets the pixel coordinates of the draggable outside of a drop container.\n */\n getFreeDragPosition() {\n return this._dragRef.getFreeDragPosition();\n }\n /**\n * Sets the current position in pixels the draggable outside of a drop container.\n * @param value New position to be set.\n */\n setFreeDragPosition(value) {\n this._dragRef.setFreeDragPosition(value);\n }\n ngAfterViewInit() {\n // We need to wait until after render, in order for the reference\n // element to be in the proper place in the DOM. This is mostly relevant\n // for draggable elements inside portals since they get stamped out in\n // their original DOM position, and then they get transferred to the portal.\n afterNextRender(() => {\n this._updateRootElement();\n this._setupHandlesListener();\n this._dragRef.scale = this.scale;\n if (this.freeDragPosition) {\n this._dragRef.setFreeDragPosition(this.freeDragPosition);\n }\n }, {\n injector: this._injector\n });\n }\n ngOnChanges(changes) {\n const rootSelectorChange = changes['rootElementSelector'];\n const positionChange = changes['freeDragPosition'];\n // We don't have to react to the first change since it's being\n // handled in the `afterNextRender` queued up in the constructor.\n if (rootSelectorChange && !rootSelectorChange.firstChange) {\n this._updateRootElement();\n }\n // Scale affects the free drag position so we need to sync it up here.\n this._dragRef.scale = this.scale;\n // Skip the first change since it's being handled in the `afterNextRender` queued up in the\n // constructor.\n if (positionChange && !positionChange.firstChange && this.freeDragPosition) {\n this._dragRef.setFreeDragPosition(this.freeDragPosition);\n }\n }\n ngOnDestroy() {\n if (this.dropContainer) {\n this.dropContainer.removeItem(this);\n }\n const index = CdkDrag._dragInstances.indexOf(this);\n if (index > -1) {\n CdkDrag._dragInstances.splice(index, 1);\n }\n // Unnecessary in most cases, but used to avoid extra change detections with `zone-paths-rxjs`.\n this._ngZone.runOutsideAngular(() => {\n this._handles.complete();\n this._destroyed.next();\n this._destroyed.complete();\n this._dragRef.dispose();\n });\n }\n _addHandle(handle) {\n const handles = this._handles.getValue();\n handles.push(handle);\n this._handles.next(handles);\n }\n _removeHandle(handle) {\n const handles = this._handles.getValue();\n const index = handles.indexOf(handle);\n if (index > -1) {\n handles.splice(index, 1);\n this._handles.next(handles);\n }\n }\n _setPreviewTemplate(preview) {\n this._previewTemplate = preview;\n }\n _resetPreviewTemplate(preview) {\n if (preview === this._previewTemplate) {\n this._previewTemplate = null;\n }\n }\n _setPlaceholderTemplate(placeholder) {\n this._placeholderTemplate = placeholder;\n }\n _resetPlaceholderTemplate(placeholder) {\n if (placeholder === this._placeholderTemplate) {\n this._placeholderTemplate = null;\n }\n }\n /** Syncs the root element with the `DragRef`. */\n _updateRootElement() {\n const element = this.element.nativeElement;\n let rootElement = element;\n if (this.rootElementSelector) {\n rootElement = element.closest !== undefined ? element.closest(this.rootElementSelector) :\n // Comment tag doesn't have closest method, so use parent's one.\n element.parentElement?.closest(this.rootElementSelector);\n }\n if (rootElement && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n assertElementNode(rootElement, 'cdkDrag');\n }\n this._dragRef.withRootElement(rootElement || element);\n }\n /** Gets the boundary element, based on the `boundaryElement` value. */\n _getBoundaryElement() {\n const boundary = this.boundaryElement;\n if (!boundary) {\n return null;\n }\n if (typeof boundary === 'string') {\n return this.element.nativeElement.closest(boundary);\n }\n return coerceElement(boundary);\n }\n /** Syncs the inputs of the CdkDrag with the options of the underlying DragRef. */\n _syncInputs(ref) {\n ref.beforeStarted.subscribe(() => {\n if (!ref.isDragging()) {\n const dir = this._dir;\n const dragStartDelay = this.dragStartDelay;\n const placeholder = this._placeholderTemplate ? {\n template: this._placeholderTemplate.templateRef,\n context: this._placeholderTemplate.data,\n viewContainer: this._viewContainerRef\n } : null;\n const preview = this._previewTemplate ? {\n template: this._previewTemplate.templateRef,\n context: this._previewTemplate.data,\n matchSize: this._previewTemplate.matchSize,\n viewContainer: this._viewContainerRef\n } : null;\n ref.disabled = this.disabled;\n ref.lockAxis = this.lockAxis;\n ref.scale = this.scale;\n ref.dragStartDelay = typeof dragStartDelay === 'object' && dragStartDelay ? dragStartDelay : coerceNumberProperty(dragStartDelay);\n ref.constrainPosition = this.constrainPosition;\n ref.previewClass = this.previewClass;\n ref.withBoundaryElement(this._getBoundaryElement()).withPlaceholderTemplate(placeholder).withPreviewTemplate(preview).withPreviewContainer(this.previewContainer || 'global');\n if (dir) {\n ref.withDirection(dir.value);\n }\n }\n });\n // This only needs to be resolved once.\n ref.beforeStarted.pipe(take(1)).subscribe(() => {\n // If we managed to resolve a parent through DI, use it.\n if (this._parentDrag) {\n ref.withParent(this._parentDrag._dragRef);\n return;\n }\n // Otherwise fall back to resolving the parent by looking up the DOM. This can happen if\n // the item was projected into another item by something like `ngTemplateOutlet`.\n let parent = this.element.nativeElement.parentElement;\n while (parent) {\n if (parent.classList.contains(DRAG_HOST_CLASS)) {\n ref.withParent(CdkDrag._dragInstances.find(drag => {\n return drag.element.nativeElement === parent;\n })?._dragRef || null);\n break;\n }\n parent = parent.parentElement;\n }\n });\n }\n /** Handles the events from the underlying `DragRef`. */\n _handleEvents(ref) {\n ref.started.subscribe(startEvent => {\n this.started.emit({\n source: this,\n event: startEvent.event\n });\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n this._changeDetectorRef.markForCheck();\n });\n ref.released.subscribe(releaseEvent => {\n this.released.emit({\n source: this,\n event: releaseEvent.event\n });\n });\n ref.ended.subscribe(endEvent => {\n this.ended.emit({\n source: this,\n distance: endEvent.distance,\n dropPoint: endEvent.dropPoint,\n event: endEvent.event\n });\n // Since all of these events run outside of change detection,\n // we need to ensure that everything is marked correctly.\n this._changeDetectorRef.markForCheck();\n });\n ref.entered.subscribe(enterEvent => {\n this.entered.emit({\n container: enterEvent.container.data,\n item: this,\n currentIndex: enterEvent.currentIndex\n });\n });\n ref.exited.subscribe(exitEvent => {\n this.exited.emit({\n container: exitEvent.container.data,\n item: this\n });\n });\n ref.dropped.subscribe(dropEvent => {\n this.dropped.emit({\n previousIndex: dropEvent.previousIndex,\n currentIndex: dropEvent.currentIndex,\n previousContainer: dropEvent.previousContainer.data,\n container: dropEvent.container.data,\n isPointerOverContainer: dropEvent.isPointerOverContainer,\n item: this,\n distance: dropEvent.distance,\n dropPoint: dropEvent.dropPoint,\n event: dropEvent.event\n });\n });\n }\n /** Assigns the default input values based on a provided config object. */\n _assignDefaults(config) {\n const {\n lockAxis,\n dragStartDelay,\n constrainPosition,\n previewClass,\n boundaryElement,\n draggingDisabled,\n rootElementSelector,\n previewContainer\n } = config;\n this.disabled = draggingDisabled == null ? false : draggingDisabled;\n this.dragStartDelay = dragStartDelay || 0;\n if (lockAxis) {\n this.lockAxis = lockAxis;\n }\n if (constrainPosition) {\n this.constrainPosition = constrainPosition;\n }\n if (previewClass) {\n this.previewClass = previewClass;\n }\n if (boundaryElement) {\n this.boundaryElement = boundaryElement;\n }\n if (rootElementSelector) {\n this.rootElementSelector = rootElementSelector;\n }\n if (previewContainer) {\n this.previewContainer = previewContainer;\n }\n }\n /** Sets up the listener that syncs the handles with the drag ref. */\n _setupHandlesListener() {\n // Listen for any newly-added handles.\n this._handles.pipe(\n // Sync the new handles with the DragRef.\n tap(handles => {\n const handleElements = handles.map(handle => handle.element);\n // Usually handles are only allowed to be a descendant of the drag element, but if\n // the consumer defined a different drag root, we should allow the drag element\n // itself to be a handle too.\n if (this._selfHandle && this.rootElementSelector) {\n handleElements.push(this.element);\n }\n this._dragRef.withHandles(handleElements);\n }),\n // Listen if the state of any of the handles changes.\n switchMap(handles => {\n return merge(...handles.map(item => item._stateChanges.pipe(startWith(item))));\n }), takeUntil(this._destroyed)).subscribe(handleInstance => {\n // Enabled/disable the handle that changed in the DragRef.\n const dragRef = this._dragRef;\n const handle = handleInstance.element.nativeElement;\n handleInstance.disabled ? dragRef.disableHandle(handle) : dragRef.enableHandle(handle);\n });\n }\n static {\n this.ɵfac = function CdkDrag_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkDrag)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(CDK_DROP_LIST, 12), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(CDK_DRAG_CONFIG, 8), i0.ɵɵdirectiveInject(i1$1.Directionality, 8), i0.ɵɵdirectiveInject(DragDrop), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(CDK_DRAG_HANDLE, 10), i0.ɵɵdirectiveInject(CDK_DRAG_PARENT, 12));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkDrag,\n selectors: [[\"\", \"cdkDrag\", \"\"]],\n hostAttrs: [1, \"cdk-drag\"],\n hostVars: 4,\n hostBindings: function CdkDrag_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"cdk-drag-disabled\", ctx.disabled)(\"cdk-drag-dragging\", ctx._dragRef.isDragging());\n }\n },\n inputs: {\n data: [0, \"cdkDragData\", \"data\"],\n lockAxis: [0, \"cdkDragLockAxis\", \"lockAxis\"],\n rootElementSelector: [0, \"cdkDragRootElement\", \"rootElementSelector\"],\n boundaryElement: [0, \"cdkDragBoundary\", \"boundaryElement\"],\n dragStartDelay: [0, \"cdkDragStartDelay\", \"dragStartDelay\"],\n freeDragPosition: [0, \"cdkDragFreeDragPosition\", \"freeDragPosition\"],\n disabled: [2, \"cdkDragDisabled\", \"disabled\", booleanAttribute],\n constrainPosition: [0, \"cdkDragConstrainPosition\", \"constrainPosition\"],\n previewClass: [0, \"cdkDragPreviewClass\", \"previewClass\"],\n previewContainer: [0, \"cdkDragPreviewContainer\", \"previewContainer\"],\n scale: [2, \"cdkDragScale\", \"scale\", numberAttribute]\n },\n outputs: {\n started: \"cdkDragStarted\",\n released: \"cdkDragReleased\",\n ended: \"cdkDragEnded\",\n entered: \"cdkDragEntered\",\n exited: \"cdkDragExited\",\n dropped: \"cdkDragDropped\",\n moved: \"cdkDragMoved\"\n },\n exportAs: [\"cdkDrag\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CDK_DRAG_PARENT,\n useExisting: CdkDrag\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return CdkDrag;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to reference instances of `CdkDropListGroup`. It serves as\n * alternative token to the actual `CdkDropListGroup` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DROP_LIST_GROUP = /*#__PURE__*/new InjectionToken('CdkDropListGroup');\n/**\n * Declaratively connects sibling `cdkDropList` instances together. All of the `cdkDropList`\n * elements that are placed inside a `cdkDropListGroup` will be connected to each other\n * automatically. Can be used as an alternative to the `cdkDropListConnectedTo` input\n * from `cdkDropList`.\n */\nlet CdkDropListGroup = /*#__PURE__*/(() => {\n class CdkDropListGroup {\n constructor() {\n /** Drop lists registered inside the group. */\n this._items = new Set();\n /** Whether starting a dragging sequence from inside this group is disabled. */\n this.disabled = false;\n }\n ngOnDestroy() {\n this._items.clear();\n }\n static {\n this.ɵfac = function CdkDropListGroup_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkDropListGroup)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkDropListGroup,\n selectors: [[\"\", \"cdkDropListGroup\", \"\"]],\n inputs: {\n disabled: [2, \"cdkDropListGroupDisabled\", \"disabled\", booleanAttribute]\n },\n exportAs: [\"cdkDropListGroup\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CDK_DROP_LIST_GROUP,\n useExisting: CdkDropListGroup\n }]), i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return CdkDropListGroup;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Counter used to generate unique ids for drop zones. */\nlet _uniqueIdCounter = 0;\n/** Container that wraps a set of draggable items. */\nlet CdkDropList = /*#__PURE__*/(() => {\n class CdkDropList {\n /** Keeps track of the drop lists that are currently on the page. */\n static {\n this._dropLists = [];\n }\n /** Whether starting a dragging sequence from this container is disabled. */\n get disabled() {\n return this._disabled || !!this._group && this._group.disabled;\n }\n set disabled(value) {\n // Usually we sync the directive and ref state right before dragging starts, in order to have\n // a single point of failure and to avoid having to use setters for everything. `disabled` is\n // a special case, because it can prevent the `beforeStarted` event from firing, which can lock\n // the user in a disabled state, so we also need to sync it as it's being set.\n this._dropListRef.disabled = this._disabled = value;\n }\n constructor(/** Element that the drop list is attached to. */\n element, dragDrop, _changeDetectorRef, _scrollDispatcher, _dir, _group, config) {\n this.element = element;\n this._changeDetectorRef = _changeDetectorRef;\n this._scrollDispatcher = _scrollDispatcher;\n this._dir = _dir;\n this._group = _group;\n /** Emits when the list has been destroyed. */\n this._destroyed = new Subject();\n /**\n * Other draggable containers that this container is connected to and into which the\n * container's items can be transferred. Can either be references to other drop containers,\n * or their unique IDs.\n */\n this.connectedTo = [];\n /**\n * Unique ID for the drop zone. Can be used as a reference\n * in the `connectedTo` of another `CdkDropList`.\n */\n this.id = `cdk-drop-list-${_uniqueIdCounter++}`;\n /**\n * Function that is used to determine whether an item\n * is allowed to be moved into a drop container.\n */\n this.enterPredicate = () => true;\n /** Functions that is used to determine whether an item can be sorted into a particular index. */\n this.sortPredicate = () => true;\n /** Emits when the user drops an item inside the container. */\n this.dropped = new EventEmitter();\n /**\n * Emits when the user has moved a new drag item into this container.\n */\n this.entered = new EventEmitter();\n /**\n * Emits when the user removes an item from the container\n * by dragging it into another container.\n */\n this.exited = new EventEmitter();\n /** Emits as the user is swapping items while actively dragging. */\n this.sorted = new EventEmitter();\n /**\n * Keeps track of the items that are registered with this container. Historically we used to\n * do this with a `ContentChildren` query, however queries don't handle transplanted views very\n * well which means that we can't handle cases like dragging the headers of a `mat-table`\n * correctly. What we do instead is to have the items register themselves with the container\n * and then we sort them based on their position in the DOM.\n */\n this._unsortedItems = new Set();\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n assertElementNode(element.nativeElement, 'cdkDropList');\n }\n this._dropListRef = dragDrop.createDropList(element);\n this._dropListRef.data = this;\n if (config) {\n this._assignDefaults(config);\n }\n this._dropListRef.enterPredicate = (drag, drop) => {\n return this.enterPredicate(drag.data, drop.data);\n };\n this._dropListRef.sortPredicate = (index, drag, drop) => {\n return this.sortPredicate(index, drag.data, drop.data);\n };\n this._setupInputSyncSubscription(this._dropListRef);\n this._handleEvents(this._dropListRef);\n CdkDropList._dropLists.push(this);\n if (_group) {\n _group._items.add(this);\n }\n }\n /** Registers an items with the drop list. */\n addItem(item) {\n this._unsortedItems.add(item);\n if (this._dropListRef.isDragging()) {\n this._syncItemsWithRef();\n }\n }\n /** Removes an item from the drop list. */\n removeItem(item) {\n this._unsortedItems.delete(item);\n if (this._dropListRef.isDragging()) {\n this._syncItemsWithRef();\n }\n }\n /** Gets the registered items in the list, sorted by their position in the DOM. */\n getSortedItems() {\n return Array.from(this._unsortedItems).sort((a, b) => {\n const documentPosition = a._dragRef.getVisibleElement().compareDocumentPosition(b._dragRef.getVisibleElement());\n // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // tslint:disable-next-line:no-bitwise\n return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n });\n }\n ngOnDestroy() {\n const index = CdkDropList._dropLists.indexOf(this);\n if (index > -1) {\n CdkDropList._dropLists.splice(index, 1);\n }\n if (this._group) {\n this._group._items.delete(this);\n }\n this._unsortedItems.clear();\n this._dropListRef.dispose();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Syncs the inputs of the CdkDropList with the options of the underlying DropListRef. */\n _setupInputSyncSubscription(ref) {\n if (this._dir) {\n this._dir.change.pipe(startWith(this._dir.value), takeUntil(this._destroyed)).subscribe(value => ref.withDirection(value));\n }\n ref.beforeStarted.subscribe(() => {\n const siblings = coerceArray(this.connectedTo).map(drop => {\n if (typeof drop === 'string') {\n const correspondingDropList = CdkDropList._dropLists.find(list => list.id === drop);\n if (!correspondingDropList && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n console.warn(`CdkDropList could not find connected drop list with id \"${drop}\"`);\n }\n return correspondingDropList;\n }\n return drop;\n });\n if (this._group) {\n this._group._items.forEach(drop => {\n if (siblings.indexOf(drop) === -1) {\n siblings.push(drop);\n }\n });\n }\n // Note that we resolve the scrollable parents here so that we delay the resolution\n // as long as possible, ensuring that the element is in its final place in the DOM.\n if (!this._scrollableParentsResolved) {\n const scrollableParents = this._scrollDispatcher.getAncestorScrollContainers(this.element).map(scrollable => scrollable.getElementRef().nativeElement);\n this._dropListRef.withScrollableParents(scrollableParents);\n // Only do this once since it involves traversing the DOM and the parents\n // shouldn't be able to change without the drop list being destroyed.\n this._scrollableParentsResolved = true;\n }\n if (this.elementContainerSelector) {\n const container = this.element.nativeElement.querySelector(this.elementContainerSelector);\n if (!container && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error(`CdkDropList could not find an element container matching the selector \"${this.elementContainerSelector}\"`);\n }\n ref.withElementContainer(container);\n }\n ref.disabled = this.disabled;\n ref.lockAxis = this.lockAxis;\n ref.sortingDisabled = this.sortingDisabled;\n ref.autoScrollDisabled = this.autoScrollDisabled;\n ref.autoScrollStep = coerceNumberProperty(this.autoScrollStep, 2);\n ref.connectedTo(siblings.filter(drop => drop && drop !== this).map(list => list._dropListRef)).withOrientation(this.orientation);\n });\n }\n /** Handles events from the underlying DropListRef. */\n _handleEvents(ref) {\n ref.beforeStarted.subscribe(() => {\n this._syncItemsWithRef();\n this._changeDetectorRef.markForCheck();\n });\n ref.entered.subscribe(event => {\n this.entered.emit({\n container: this,\n item: event.item.data,\n currentIndex: event.currentIndex\n });\n });\n ref.exited.subscribe(event => {\n this.exited.emit({\n container: this,\n item: event.item.data\n });\n this._changeDetectorRef.markForCheck();\n });\n ref.sorted.subscribe(event => {\n this.sorted.emit({\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n container: this,\n item: event.item.data\n });\n });\n ref.dropped.subscribe(dropEvent => {\n this.dropped.emit({\n previousIndex: dropEvent.previousIndex,\n currentIndex: dropEvent.currentIndex,\n previousContainer: dropEvent.previousContainer.data,\n container: dropEvent.container.data,\n item: dropEvent.item.data,\n isPointerOverContainer: dropEvent.isPointerOverContainer,\n distance: dropEvent.distance,\n dropPoint: dropEvent.dropPoint,\n event: dropEvent.event\n });\n // Mark for check since all of these events run outside of change\n // detection and we're not guaranteed for something else to have triggered it.\n this._changeDetectorRef.markForCheck();\n });\n merge(ref.receivingStarted, ref.receivingStopped).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n /** Assigns the default input values based on a provided config object. */\n _assignDefaults(config) {\n const {\n lockAxis,\n draggingDisabled,\n sortingDisabled,\n listAutoScrollDisabled,\n listOrientation\n } = config;\n this.disabled = draggingDisabled == null ? false : draggingDisabled;\n this.sortingDisabled = sortingDisabled == null ? false : sortingDisabled;\n this.autoScrollDisabled = listAutoScrollDisabled == null ? false : listAutoScrollDisabled;\n this.orientation = listOrientation || 'vertical';\n if (lockAxis) {\n this.lockAxis = lockAxis;\n }\n }\n /** Syncs up the registered drag items with underlying drop list ref. */\n _syncItemsWithRef() {\n this._dropListRef.withItems(this.getSortedItems().map(item => item._dragRef));\n }\n static {\n this.ɵfac = function CdkDropList_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkDropList)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(DragDrop), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.ScrollDispatcher), i0.ɵɵdirectiveInject(i1$1.Directionality, 8), i0.ɵɵdirectiveInject(CDK_DROP_LIST_GROUP, 12), i0.ɵɵdirectiveInject(CDK_DRAG_CONFIG, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkDropList,\n selectors: [[\"\", \"cdkDropList\", \"\"], [\"cdk-drop-list\"]],\n hostAttrs: [1, \"cdk-drop-list\"],\n hostVars: 7,\n hostBindings: function CdkDropList_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵattribute(\"id\", ctx.id);\n i0.ɵɵclassProp(\"cdk-drop-list-disabled\", ctx.disabled)(\"cdk-drop-list-dragging\", ctx._dropListRef.isDragging())(\"cdk-drop-list-receiving\", ctx._dropListRef.isReceiving());\n }\n },\n inputs: {\n connectedTo: [0, \"cdkDropListConnectedTo\", \"connectedTo\"],\n data: [0, \"cdkDropListData\", \"data\"],\n orientation: [0, \"cdkDropListOrientation\", \"orientation\"],\n id: \"id\",\n lockAxis: [0, \"cdkDropListLockAxis\", \"lockAxis\"],\n disabled: [2, \"cdkDropListDisabled\", \"disabled\", booleanAttribute],\n sortingDisabled: [2, \"cdkDropListSortingDisabled\", \"sortingDisabled\", booleanAttribute],\n enterPredicate: [0, \"cdkDropListEnterPredicate\", \"enterPredicate\"],\n sortPredicate: [0, \"cdkDropListSortPredicate\", \"sortPredicate\"],\n autoScrollDisabled: [2, \"cdkDropListAutoScrollDisabled\", \"autoScrollDisabled\", booleanAttribute],\n autoScrollStep: [0, \"cdkDropListAutoScrollStep\", \"autoScrollStep\"],\n elementContainerSelector: [0, \"cdkDropListElementContainer\", \"elementContainerSelector\"]\n },\n outputs: {\n dropped: \"cdkDropListDropped\",\n entered: \"cdkDropListEntered\",\n exited: \"cdkDropListExited\",\n sorted: \"cdkDropListSorted\"\n },\n exportAs: [\"cdkDropList\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([\n // Prevent child drop lists from picking up the same group as their parent.\n {\n provide: CDK_DROP_LIST_GROUP,\n useValue: undefined\n }, {\n provide: CDK_DROP_LIST,\n useExisting: CdkDropList\n }]), i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return CdkDropList;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to reference instances of `CdkDragPreview`. It serves as\n * alternative token to the actual `CdkDragPreview` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DRAG_PREVIEW = /*#__PURE__*/new InjectionToken('CdkDragPreview');\n/**\n * Element that will be used as a template for the preview\n * of a CdkDrag when it is being dragged.\n */\nlet CdkDragPreview = /*#__PURE__*/(() => {\n class CdkDragPreview {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._drag = inject(CDK_DRAG_PARENT, {\n optional: true\n });\n /** Whether the preview should preserve the same size as the item that is being dragged. */\n this.matchSize = false;\n this._drag?._setPreviewTemplate(this);\n }\n ngOnDestroy() {\n this._drag?._resetPreviewTemplate(this);\n }\n static {\n this.ɵfac = function CdkDragPreview_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkDragPreview)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkDragPreview,\n selectors: [[\"ng-template\", \"cdkDragPreview\", \"\"]],\n inputs: {\n data: \"data\",\n matchSize: [2, \"matchSize\", \"matchSize\", booleanAttribute]\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CDK_DRAG_PREVIEW,\n useExisting: CdkDragPreview\n }]), i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return CdkDragPreview;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to reference instances of `CdkDragPlaceholder`. It serves as\n * alternative token to the actual `CdkDragPlaceholder` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_DRAG_PLACEHOLDER = /*#__PURE__*/new InjectionToken('CdkDragPlaceholder');\n/**\n * Element that will be used as a template for the placeholder of a CdkDrag when\n * it is being dragged. The placeholder is displayed in place of the element being dragged.\n */\nlet CdkDragPlaceholder = /*#__PURE__*/(() => {\n class CdkDragPlaceholder {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._drag = inject(CDK_DRAG_PARENT, {\n optional: true\n });\n this._drag?._setPlaceholderTemplate(this);\n }\n ngOnDestroy() {\n this._drag?._resetPlaceholderTemplate(this);\n }\n static {\n this.ɵfac = function CdkDragPlaceholder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkDragPlaceholder)(i0.ɵɵdirectiveInject(i0.TemplateRef));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkDragPlaceholder,\n selectors: [[\"ng-template\", \"cdkDragPlaceholder\", \"\"]],\n inputs: {\n data: \"data\"\n },\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CDK_DRAG_PLACEHOLDER,\n useExisting: CdkDragPlaceholder\n }])]\n });\n }\n }\n return CdkDragPlaceholder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst DRAG_DROP_DIRECTIVES = [CdkDropList, CdkDropListGroup, CdkDrag, CdkDragHandle, CdkDragPreview, CdkDragPlaceholder];\nlet DragDropModule = /*#__PURE__*/(() => {\n class DragDropModule {\n static {\n this.ɵfac = function DragDropModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DragDropModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: DragDropModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [DragDrop],\n imports: [CdkScrollableModule]\n });\n }\n }\n return DragDropModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CDK_DRAG_CONFIG, CDK_DRAG_HANDLE, CDK_DRAG_PARENT, CDK_DRAG_PLACEHOLDER, CDK_DRAG_PREVIEW, CDK_DROP_LIST, CDK_DROP_LIST_GROUP, CdkDrag, CdkDragHandle, CdkDragPlaceholder, CdkDragPreview, CdkDropList, CdkDropListGroup, DragDrop, DragDropModule, DragDropRegistry, DragRef, DropListRef, copyArrayItem, moveItemInArray, transferArrayItem };\n","import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';\nimport { Component, ElementRef, EventEmitter, Inject, OnInit, Output, ViewChild } from '@angular/core';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AudioType } from '@app/preferences/models/settings.models';\n\ninterface FileUploadData {\n Name: string;\n Id;\n}\n\n@Component({\n selector: 'app-upload-music-dialog',\n templateUrl: './upload-music-dialog.component.html',\n styleUrls: ['./upload-music-dialog.component.scss'],\n})\nexport class UploadMusicDialogComponent implements OnInit {\n @Output() completeEvent = new EventEmitter();\n @ViewChild('fileInput') fileInput: ElementRef;\n\n private fileId: string = '';\n protected fileName: string = '';\n protected songDescription: string = '';\n protected files: File[] = [];\n protected loadingFiles: boolean = false;\n\n constructor(\n public dialogReference: DialogRef,\n private appConfigService: AppConfigService,\n\n @Inject(DIALOG_DATA) public currentFile: FileUploadData\n ) {}\n\n ngOnInit(): void {\n //Only show the custom status in the status field, do not show the presence text\n this.fileId = this.currentFile.Id || '0';\n }\n\n openFileSelector() {\n this.fileInput.nativeElement.click();\n }\n\n protected addFile(event: Event): void {\n const target = event.target as HTMLInputElement;\n if (target.files) {\n this.files = Array.from(target.files);\n this.fileName = this.files.map((file) => file.name).join('; ');\n }\n target.value = '';\n }\n\n async onSubmit() {\n this.loadingFiles = true;\n const fileType = this.files[0].type === 'audio/mpeg' ? 'audio/mp3' : this.files[0].type;\n const data = { description: this.songDescription, name: this.songDescription, format: fileType };\n await this.appConfigService.uploadAudioFile(this.fileId, data, this.files[0], AudioType.moh);\n\n //Set a 3 second timeout so the GET will return the new uploaded file\n const uploadCompleted = await this.pollForUploadCompletion(15, 500);\n if (uploadCompleted) {\n this.loadingFiles = false;\n this.completeEvent.emit(true);\n this.dialogReference.close();\n }\n }\n\n close(): void {\n this.dialogReference.close();\n }\n\n /**\n * Async function which polls api endpoint to detect when upload has completed. Returns a promise which resolves to true if upload has completed, false otherwise.\n * @param attempts number of attempts to try\n * @param interval interval between each attempt (milliseconds)\n * @returns\n */\n async pollForUploadCompletion(attempts: number, interval: number): Promise {\n let count = 0;\n while (count < attempts) {\n const audioFiles = await this.appConfigService.getAudioFiles();\n // Check if the uploaded file was returned\n const result = audioFiles.find((c) => c.index === Number(this.fileId));\n if (result) {\n return true;\n }\n count++;\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n return false;\n }\n}\n","
\n
\n

{{ 'MUSIC_ON_HOLD_PREFERENCES.MANAGE_MUSIC' | translate }}

\n
\n
\n \n {{ 'MUSIC_ON_HOLD_PREFERENCES.FILE_NAME_LABEL' | translate }}\n \n \n
\n \n {{ 'MUSIC_ON_HOLD_PREFERENCES.SELECT_DIFFERENT_FILE' | translate }}\n upload\n \n \n
\n \n {{ 'MUSIC_ON_HOLD_PREFERENCES.SONG_NAME_OR_DESCRIPTION_LABEL' | translate }}\n \n \n
\n\n
\n \n \n {{ 'MUSIC_ON_HOLD_PREFERENCES.CANCEL_BUTTON' | translate }}\n \n \n {{ 'MUSIC_ON_HOLD_PREFERENCES.SAVE_BUTTON' | translate }}\n \n
\n
\n","import { CdkDragDrop, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { AudioPlayerComponent } from '@app/shared/components/audio-player/audio-player.component';\nimport { Track } from '@app/shared/models/track.model';\nimport { SecondsToMinutesPipe } from '@app/shared/pipes/seconds-to-minutes.pipe';\nimport { AudioUtil, microphonePermission } from '@app/shared/utils/audio.util';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { getWaveBlob } from 'webm-to-wav-converter';\n\nimport {\n AudioType,\n GreetingAudioList,\n MohAudioList,\n MohLanguages,\n MohSettings,\n VoiceOptions,\n} from '../../models/settings.models';\nimport { SettingsPage } from '../../models/settings-page';\nimport { MusicOnHoldService } from '../../services/music-on-hold.service';\nimport { SettingsService } from '../../services/settings.service';\nimport { UploadMusicDialogComponent } from '../upload-music-dialog/upload-music-dialog.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-music-on-hold',\n templateUrl: './music-on-hold.component.html',\n styleUrls: ['./music-on-hold.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatIconModule,\n MatButtonModule,\n MatInputModule,\n TranslateModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatTooltipModule,\n DragDropModule,\n FormsModule,\n SecondsToMinutesPipe,\n MatRadioModule,\n MatSelectModule,\n AudioPlayerComponent,\n MatSliderModule,\n ],\n})\nexport class MusicOnHoldComponent extends SettingsPage implements OnInit, AfterViewInit {\n @Output() toggleEvent = new EventEmitter();\n @ViewChild('fileInput') fileInput: ElementRef;\n @ViewChild(AudioPlayerComponent) player: AudioPlayerComponent;\n @ViewChild('container') container: ElementRef;\n @ViewChild('greyMask') greyMask?: ElementRef;\n\n protected mohSettings: MohSettings = {\n enableMoh: false,\n randomizeMoh: false,\n greetingType: 'TTS',\n greetingMessage: '',\n greetingLanguage: '',\n greetingVoice: '',\n greetingIndex: 0,\n };\n readonly AudioType = AudioType;\n protected enablePlayIntroductoryGreeting = false;\n protected mohFiles: MohAudioList[] = [];\n protected greetingFiles: GreetingAudioList[];\n protected voiceOptions: VoiceOptions[];\n protected languages: MohLanguages[] = [];\n protected greetingText: string;\n protected uploadGreetingFileName: string = '';\n private files: File[] = [];\n protected showUploadOptions: boolean = false;\n protected greetingChanged: boolean = false;\n\n protected inputSound: AudioUtil = new Audio() as AudioUtil;\n protected isRecording: boolean | null = false; //null means playing back the recorded sound\n private recorder: MediaRecorder;\n private stream: MediaStream | null = null;\n protected recordedFile: File | null = null;\n protected showUploadAudioPlayer: boolean = false;\n protected showGreetingAudioPlayer: boolean = false;\n protected track: Track = { title: '', link: '' };\n protected recordingFound: boolean = false;\n private recorderTimeout?: NodeJS.Timeout = undefined;\n protected microphoneAccessDenied: boolean = false;\n private remoteAudioElement = new Audio() as AudioUtil;\n protected playingIndex: number | null = null;\n protected readonly Number = Number;\n protected recordingIntervalId: NodeJS.Timeout;\n protected recordingSeconds: number = 0;\n protected playingAudioId: string | null;\n private playingAudio = new BehaviorSubject(undefined);\n protected editingDisabled = true;\n\n constructor(\n private musicOnHoldService: MusicOnHoldService,\n private appConfigService: AppConfigService,\n private settingsService: SettingsService,\n private dialog: MatDialog,\n private appTranslateService: AppTranslateService\n ) {\n super();\n }\n\n async ngOnInit() {\n try {\n this.editingDisabled = !this.appConfigService.features[AppFeature.ModifyMusicOnHold];\n\n const [languages, settings] = await Promise.all([\n this.appConfigService.getTextToSpeechLanguages(),\n this.appConfigService.getLocalMohSettings(),\n this.getAudioFiles(),\n ]);\n\n this.languages = languages.languages;\n this.mohSettings = settings;\n\n this.setupMohSettings();\n\n //Upload and Recording - check if greetingFiles contains a file\n //TTS - check if the message is empty then set enablePlayIntroductoryGreeting to false\n if (\n (this.mohSettings.greetingType === 'TTS' && this.mohSettings.greetingMessage.length > 0) ||\n (this.mohSettings.greetingType !== 'TTS' && this.greetingFiles.length > 0)\n ) {\n this.enablePlayIntroductoryGreeting = true;\n }\n } catch (error) {\n console.error('music-on-hold.component --> ngOnInit:', error.message);\n }\n }\n\n ngAfterViewInit(): void {\n if (this.editingDisabled) {\n // pass scroll events from grey mask to main container\n this.greyMask?.nativeElement.addEventListener('wheel', (event: WheelEvent) => {\n this.container.nativeElement.scrollBy(event.deltaX, event.deltaY);\n });\n\n // block mouse and keyboard events\n this.container.nativeElement.addEventListener('click', this.stopAndPreventDefault, true);\n this.container.nativeElement.addEventListener('keydown', (event: KeyboardEvent) => {\n if (event.key !== 'Escape') {\n this.stopAndPreventDefault(event);\n }\n });\n }\n }\n\n private stopAndPreventDefault(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n private async setupMohSettings() {\n //If TTS was set, load the voices based on language set\n switch (this.mohSettings.greetingType) {\n case 'TTS': {\n if (this.mohSettings.greetingLanguage) {\n await this.getTextToSpeechVoices(this.mohSettings.greetingLanguage);\n }\n break;\n }\n case 'Recording': {\n //Setup the audio file\n const greeting = this.greetingFiles.find((c) => c.index === this.mohSettings.greetingIndex);\n if (greeting) {\n this.inputSound.src = greeting.mediaUrl;\n this.recordingSeconds = Number(greeting.duration);\n this.track = { title: '', link: this.inputSound.src as string, duration: this.recordingSeconds };\n this.recordingFound = true;\n this.recordedFile = new File([greeting.mediaUrl], 'RecordedGreeting.wav', { type: 'audio/wav' });\n this.inputSound.load();\n }\n this.showGreetingAudioPlayer = this.inputSound.src === '' ? false : true;\n break;\n }\n case 'Upload': {\n //Setup the audio file\n const greeting = this.greetingFiles.find((c) => c.index === this.mohSettings.greetingIndex);\n if (greeting) {\n this.inputSound.src = greeting.mediaUrl;\n this.showUploadAudioPlayer = true;\n this.track = { title: '', link: this.inputSound.src as string };\n }\n break;\n }\n }\n\n return true;\n }\n\n private async getAudioFiles() {\n try {\n //Split out the greeting and moh files (there will only be one greeting file)\n const allFiles = await this.appConfigService.getAudioFiles();\n this.mohFiles = allFiles.filter((c) => c.index > 0);\n this.greetingFiles = allFiles.filter((c) => c.index === 0);\n this.mohFiles.sort((a, b) => a.index - b.index);\n this.mohFiles.forEach((file) => {\n //Include values needed for better handling of the data\n file.changed = false;\n file.edit = false;\n });\n return true;\n } catch (error) {\n console.log(error);\n return false;\n }\n }\n\n private async getTextToSpeechVoices(language: string) {\n this.voiceOptions = await this.appConfigService.getTextToSpeechVoices(language);\n }\n\n protected toggleMusicOnHoldSettings() {\n this.mohSettings.enableMoh = !this.mohSettings.enableMoh;\n this.disabled = false;\n }\n\n protected toggleRandomizeMusicOnHold() {\n this.mohSettings.randomizeMoh = !this.mohSettings.randomizeMoh;\n this.disabled = false;\n }\n\n private async updateMusicOnHoldSettings() {\n await this.appConfigService.setLocalMohSettings(this.mohSettings);\n }\n\n protected editDescription(data) {\n data.descriptionEdit = data.description;\n data.edit = true;\n }\n\n protected async saveDescriptionChange(data) {\n data.description = data.descriptionEdit;\n await this.appConfigService.updateAudioFiles(data.index, data);\n data.edit = false;\n }\n\n protected cancelDescriptionChange(data) {\n data.descriptionEdit = data.description;\n data.edit = false;\n }\n\n protected async onLanguageChanged(option: string) {\n this.mohSettings.greetingLanguage = option;\n await this.getTextToSpeechVoices(option);\n this.greetingChanged = true;\n }\n\n protected onVoiceChanged(option: string) {\n this.mohSettings.greetingVoice = option;\n this.disabled = false;\n this.greetingChanged = true;\n }\n\n async save() {\n if (this.editingDisabled) {\n return;\n }\n if (this.greetingChanged) {\n //Use index=0 for greeting files\n const newIndex = '0';\n if (this.enablePlayIntroductoryGreeting) {\n switch (this.mohSettings.greetingType) {\n case 'TTS': {\n //get the current highest index used and validate the index to make sure it's unique\n const ttsSettings = {\n description: this.appTranslateService.instant('MUSIC_ON_HOLD_PREFERENCES.TEXT_TO_SPEECH_GREETING'),\n voice_id: this.mohSettings.greetingVoice,\n voice_language: this.mohSettings.greetingLanguage,\n tts_script: this.mohSettings.greetingMessage,\n source_type: 'tts',\n };\n await this.appConfigService.addAudioFile(newIndex, AudioType.moh, ttsSettings);\n this.mohSettings.greetingIndex = Number(newIndex);\n break;\n }\n case 'Upload': {\n const fileType = this.files[0].type === 'audio/mpeg' ? 'audio/mp3' : this.files[0].type;\n const data = {\n description: this.uploadGreetingFileName,\n name: this.uploadGreetingFileName,\n format: fileType,\n };\n await this.appConfigService.uploadAudioFile(newIndex, data, this.files[0], AudioType.moh);\n this.mohSettings.greetingIndex = Number(newIndex);\n this.mohSettings.greetingMessage = '';\n this.mohSettings.greetingLanguage = '';\n this.mohSettings.greetingVoice = '';\n break;\n }\n case 'Recording': {\n if (this.recordedFile !== null) {\n const data = { description: 'RecordedGreeting', name: 'RecordedGreeting.wav' };\n await this.appConfigService.uploadAudioFile(newIndex, data, this.recordedFile, AudioType.moh);\n }\n this.mohSettings.greetingIndex = Number(newIndex);\n this.mohSettings.greetingMessage = '';\n this.mohSettings.greetingLanguage = '';\n this.mohSettings.greetingVoice = '';\n break;\n }\n }\n } else {\n await this.appConfigService.deleteAudioFile(Number(newIndex), AudioType.moh);\n this.mohSettings.greetingIndex = Number(newIndex);\n this.mohSettings.greetingMessage = '';\n this.mohSettings.greetingLanguage = '';\n this.mohSettings.greetingVoice = '';\n }\n }\n this.updateMusicOnHoldSettings();\n const newIndexOrder = this.mohFiles.map(({ index }) => index);\n\n //After all changes have been saved, reorder the files\n const orderChanged = this.mohFiles.some((file) => file.changed);\n if (orderChanged) {\n this.reorderMohFiles(newIndexOrder);\n }\n }\n\n private async reorderMohFiles(newIndexOrder) {\n try {\n await this.appConfigService.reorderAudioFiles(newIndexOrder.toString());\n } catch (error) {\n console.log(error);\n }\n }\n\n //Pass in the current index we want to use, check if it's valid and if not then increment it\n private generateIndex(value) {\n if (this.validateIndex(value)) {\n return value;\n } else {\n this.generateIndex(value + 1);\n }\n }\n\n private validateIndex(value) {\n const duplicateValues = this.mohFiles.filter((c) => c.index === value);\n return duplicateValues.length > 0 ? false : true;\n }\n\n protected togglePlayIntroGreeting() {\n this.enablePlayIntroductoryGreeting = !this.enablePlayIntroductoryGreeting;\n if (this.enablePlayIntroductoryGreeting) {\n if (\n this.mohSettings.greetingType === 'TTS' &&\n (this.mohSettings.greetingLanguage === null || this.mohSettings.greetingLanguage === '')\n ) {\n this.setDefaultLanguage();\n }\n } else {\n this.mohSettings.greetingIndex = 0;\n this.mohSettings.greetingMessage = '';\n this.mohSettings.greetingLanguage = '';\n this.mohSettings.greetingVoice = '';\n this.mohSettings.greetingType = 'TTS';\n this.disabled = false;\n }\n this.greetingChanged = true;\n }\n\n protected openFileUploadDialog() {\n const highestIndex =\n this.mohFiles\n .map((file) => file.index)\n .sort()\n .reverse()[0] ?? 0;\n const newIndex = this.generateIndex(highestIndex + 1);\n this.toggleEvent.emit(false);\n\n const dialogReference = this.dialog.open(UploadMusicDialogComponent, {\n data: {\n Name: this.appTranslateService.instant('MUSIC_ON_HOLD_PREFERENCES.TEST_FILE_NAME'),\n Id: newIndex,\n },\n hasBackdrop: true,\n panelClass: ['upload-music-dialog'],\n autoFocus: false,\n });\n\n dialogReference\n .afterClosed()\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.getAudioFiles();\n });\n }\n\n protected onGreetingChange() {\n this.disabled = false;\n this.greetingChanged = true;\n if (this.mohSettings.greetingType === 'TTS') {\n if (this.mohSettings.greetingLanguage === null || this.mohSettings.greetingLanguage === '') {\n this.setDefaultLanguage();\n } else {\n this.onLanguageChanged(this.mohSettings.greetingLanguage);\n }\n }\n }\n\n private async setDefaultLanguage() {\n //Default to the browser language or english\n this.mohSettings.greetingLanguage = this.languages.some((item) => item.id === window.navigator.language)\n ? window.navigator.language\n : 'en-US';\n await this.getTextToSpeechVoices(this.mohSettings.greetingLanguage);\n //Default to the first voice in the list\n this.mohSettings.greetingVoice = this.voiceOptions[0].id;\n }\n\n protected selectGreetingFile() {\n this.fileInput.nativeElement.click();\n }\n\n protected addFile(event: Event): void {\n const target = event.target as HTMLInputElement;\n if (target.files) {\n this.files = Array.from(target.files);\n this.uploadGreetingFileName = this.files.map((file) => file.name).join('; ');\n }\n\n target.value = '';\n\n //Enable the save button\n this.greetingChanged = true;\n this.disabled = false;\n }\n\n protected playSelectedAudioFile(url: string, id: number) {\n this.remoteAudioElement.src = url;\n this.remoteAudioElement.load();\n this.remoteAudioElement.addEventListener('loadedmetadata', () => {\n this.playingIndex = id;\n this.settingsService.playAudio(this.remoteAudioElement).catch((error) => {\n console.error('Failed to play media!', error);\n this.playingIndex = null;\n });\n });\n\n this.remoteAudioElement.addEventListener('ended', () => {\n this.playingIndex = null;\n });\n }\n\n protected pauseSelectedAudioFile() {\n this.playingIndex = null;\n this.remoteAudioElement.pause();\n }\n\n protected async downloadAudioFile(id: number) {\n await this.musicOnHoldService.downloadAudioFile(id, AudioType.moh);\n }\n\n protected async deleteAudioFile(id: number) {\n try {\n await this.appConfigService.deleteAudioFile(id, AudioType.moh);\n //On success, reload the audio files\n this.getAudioFiles();\n } catch (error) {\n // Handle any error that occurs during the delete operation\n console.error('Error occurred while deleting audio file:', error);\n }\n }\n\n //Recording\n protected async startInputSound() {\n try {\n if (await microphonePermission.check()) {\n this.microphoneAccessDenied = false;\n this.stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const { source, destination } = await this.setupAudioContextAndNodes(this.stream);\n await this.setupAndStartRecorder(destination);\n source.connect(destination);\n } else {\n this.microphoneAccessDenied = true;\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n protected stopInputSound() {\n this.inputSound.pause();\n if (this.isRecording) {\n this.recorder.stop();\n }\n if (this.stream) {\n for (const track of this.stream.getTracks()) {\n track.stop();\n }\n this.stream = null;\n }\n\n this.greetingChanged = true;\n this.disabled = false;\n }\n\n private setupAudioContextAndNodes(audio: MediaStream | HTMLAudioElement) {\n const audioContext = new AudioContext();\n const source =\n audio instanceof HTMLAudioElement\n ? audioContext.createMediaElementSource(audio)\n : audioContext.createMediaStreamSource(audio);\n const destination = audioContext.createMediaStreamDestination();\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n source.connect(analyser);\n return { source, destination, analyser };\n }\n\n private async setupAndStartRecorder(destination: MediaStreamAudioDestinationNode) {\n if (await microphonePermission.check()) {\n this.recordingSeconds = 0;\n this.recorder = new MediaRecorder(destination.stream);\n this.recordingIntervalId = setInterval(() => this.recordingSeconds++, 1000);\n const chunks: Blob[] = [];\n this.isRecording = true;\n this.recorder.ondataavailable = (event) => {\n chunks.push(event.data);\n };\n this.recorder.onstop = async () => {\n this.inputSound.pause();\n const audioBlob = new Blob(chunks, { type: 'audio/webm' });\n\n try {\n //Create a wav file for the new recording so it can be used to upload on Save\n const wavBlob = await getWaveBlob(audioBlob, false);\n this.recordedFile = new File([wavBlob], 'RecordedGreeting.wav', { type: 'audio/wav' });\n this.inputSound.src = URL.createObjectURL(wavBlob);\n this.track = {\n link: this.inputSound.src,\n title: 'RecordedGreeting.wav',\n duration: this.recordingSeconds,\n };\n this.inputSound.load();\n this.showGreetingAudioPlayer = true;\n } catch {\n console.error('Error converting blob format');\n }\n\n this.isRecording = false;\n clearInterval(this.recordingIntervalId);\n this.recordingSeconds = 0;\n };\n\n this.recorder.start();\n\n this.recorderTimeout = setTimeout(() => {\n this.stopInputSound();\n }, 10_000);\n }\n }\n\n protected deleteRecording(id: number) {\n //Make sure recording has stopped\n if (this.isRecording) {\n this.isRecording = false;\n this.recorder.stop();\n }\n\n //Reset the audio controls src so no file is loaded\n this.inputSound.src = '';\n\n //Reset the audio stream and file so it's not accidentally saved\n this.stream = null;\n this.recordedFile = null;\n this.track.link = this.inputSound.src;\n this.showGreetingAudioPlayer = false;\n this.recordingFound = false;\n this.recordingSeconds = 0;\n this.deleteAudioFile(id);\n }\n\n protected async drop(evt: CdkDragDrop) {\n if (evt.previousContainer === evt.container) {\n //Reorders the array to match the display order\n await moveItemInArray(evt.container.data, evt.previousIndex, evt.currentIndex);\n\n //Use the changed flag so only the updated rows are saved\n for (let i = 0; i < this.mohFiles.length; i++) {\n if (i === evt.currentIndex || i === evt.previousIndex) {\n this.mohFiles[i].changed = true;\n }\n }\n } else {\n transferArrayItem(evt.previousContainer.data, evt.container.data, evt.previousIndex, evt.currentIndex);\n }\n\n //Enable the save button\n this.disabled = false;\n }\n\n protected async onRecordedFilePlayClicked() {\n if (this.track && this.playingAudioId != 'recorded') {\n const audioUtil: AudioUtil = new Audio(this.track.link) as AudioUtil;\n await this.playAudio(audioUtil);\n this.recordingSeconds = 0;\n this.recordingIntervalId = setInterval(() => this.recordingSeconds++, 1000);\n this.playingAudioId = 'recorded';\n } else {\n this.stopAudio();\n }\n }\n\n private async playAudio(audio: AudioUtil) {\n audio.addEventListener('play', () => {\n this.setPlayingAudio(audio);\n });\n audio.addEventListener('ended', () => {\n this.stopAudio();\n });\n await this.settingsService.playAudio(audio);\n }\n\n private stopAudio() {\n this.playingAudioId = null;\n this.recordingSeconds = 0;\n clearInterval(this.recordingIntervalId);\n this.setPlayingAudio();\n }\n\n private setPlayingAudio(audio?: AudioUtil) {\n const currentAudio = this.playingAudio.getValue();\n currentAudio?.pause();\n this.playingAudio.next(audio);\n }\n}\n","
\n
\n

\n {{ 'MUSIC_ON_HOLD_PREFERENCES.TITLE' | translate }}\n

\n \n\n
\n \n \n \n
\n \n \n \n
\n \n\n
\n","export abstract class SettingsPage {\n abstract save();\n\n disabled = true;\n loading = false;\n}\n","import { Injectable } from '@angular/core';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { saveAs } from 'file-saver-es';\n\nimport { AudioType } from '../models/settings.models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MusicOnHoldService {\n public blobData: Map = new Map();\n\n constructor(private appConfigService: AppConfigService) {}\n\n downloadAudioFile(id: number, type: AudioType) {\n this.downloadWavFile(id, type).then((response) => {\n saveAs(response, `${type}-${id}.wav`);\n });\n }\n\n downloadWavFile(id: number, type: AudioType) {\n return this.appConfigService.downloadWavFile(id, type);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output } from '@angular/core';\nimport {\n AbstractControl,\n FormBuilder,\n FormGroup,\n ReactiveFormsModule,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { ApiChangePassword } from '../../models/profile';\n\n@Component({\n selector: 'app-change-password',\n templateUrl: './change-password.component.html',\n styleUrls: ['./change-password.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatIconModule,\n MatButtonModule,\n MatInputModule,\n TranslateModule,\n ],\n})\nexport class ChangePasswordComponent {\n protected type = 'password';\n protected passwordForm: FormGroup;\n @Output() passwordChange = new EventEmitter();\n @Output() cancelChanges = new EventEmitter();\n\n /**\n *\n * @param fb\n */\n constructor(private fb: FormBuilder) {\n this.passwordForm = this.fb.group(\n {\n currentPassword: ['', [Validators.required]],\n newPassword: [\n '',\n [\n Validators.required,\n Validators.minLength(8),\n this.patternValidator(/\\d/, { hasNumber: true }),\n this.patternValidator(/[A-Z]/, { hasCapitalCase: true }),\n this.patternValidator(/[a-z]/, { hasSmallCase: true }),\n ],\n ],\n confirmPassword: ['', [Validators.required, Validators.minLength(8)]],\n },\n {\n validators: [this.match('newPassword', 'confirmPassword')],\n }\n );\n }\n\n /**\n *\n */\n get field(): { [key: string]: AbstractControl } {\n return this.passwordForm.controls;\n }\n\n protected changePassword(): void {\n if (this.passwordForm.valid) {\n this.passwordChange.emit(this.passwordForm.value);\n }\n }\n\n protected close() {\n this.cancelChanges.emit();\n }\n\n protected peaky(): void {\n this.type = this.type === 'password' ? 'text' : 'password';\n }\n\n /**\n *\n * @param controlName\n * @param checkControlName\n */\n private match(controlName: string, checkControlName: string): ValidatorFn {\n return (controls: AbstractControl) => {\n const control = controls.get(controlName);\n const checkControl = controls.get(checkControlName);\n if (checkControl?.errors && !checkControl.errors['matching']) {\n return null;\n }\n if (control?.value === checkControl?.value) {\n return null;\n } else {\n controls.get(checkControlName)?.setErrors({ matching: true });\n return { matching: true };\n }\n };\n }\n\n /**\n *\n * @param regex\n * @param error\n */\n private patternValidator(regex: RegExp, error: ValidationErrors): ValidatorFn {\n return (control: AbstractControl) => {\n const valid = regex.test(control.value);\n return valid ? null : error;\n };\n }\n}\n","
\n
\n

\n chevron_left\n {{ 'CHANGE_PASSWORD.EDIT_PASSWORD' | translate }}\n

\n
\n {{ 'CHANGE_PASSWORD.PASSWORD_REQUIREMENTS' | translate }}:\n
\n
\n
\n \n {{ 'CHANGE_PASSWORD.ONE_LOWER_CASE' | translate }}\n
\n
\n \n {{ 'CHANGE_PASSWORD.ONE_UPPER_CASE' | translate }}\n
\n
\n
\n
\n \n {{ 'CHANGE_PASSWORD.ONE_NUMBER' | translate }}\n
\n
\n = 8 }\">\n {{ 'CHANGE_PASSWORD.EIGHT_CHAR_MIN' | translate }}\n
\n
\n
\n
\n
\n \n \n {{ 'CHANGE_PASSWORD.CURRENT_PWD' | translate }}\n \n @if (type === 'text') {\n visibility_off\n \n } @else if (type === 'password') {\n visibility\n \n }\n \n \n {{ 'CHANGE_PASSWORD.NEW_PWD' | translate }}\n \n @if (type === 'text') {\n visibility_off\n \n } @else if (type === 'password') {\n visibility\n \n }\n \n \n {{ 'CHANGE_PASSWORD.CONFIRM_NEW_PWD' | translate }}\n \n visibility_off\n \n visibility\n \n \n \n
\n
\n
\n
\n
\n \n {{ 'CONTACT_PREFERENCES.CANCEL' | translate }}\n \n \n {{ 'CONTACT_PREFERENCES.SAVE' | translate }}\n \n
\n
\n
\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { UserService } from '@app/auth/services/user.service';\nimport { Contact, ContactUpdateResult, ExtensionTypes } from '@app/contacts/models/contact';\nimport { ContactService } from '@app/contacts/services/contact.service';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { SnackbarService } from '@app/core/services/snack-bar.service';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { base64ToFile } from 'ngx-image-cropper';\nimport { catchError, firstValueFrom, throwError } from 'rxjs';\n\nimport { ApiChangePassword } from '../../models/profile';\n\n@UntilDestroy()\n@Component({\n selector: 'app-profile',\n templateUrl: './profile.component.html',\n styleUrls: ['./profile.component.scss'],\n})\nexport class ProfileComponent implements OnInit {\n isChangingPassword = false;\n edit = false;\n image = false;\n @Input() profile: Contact | undefined;\n imageChangedEvent!: Event;\n editProfileLoading = false;\n avatarLoading = false;\n selectedHourFormat: string | null;\n localTimezone: string;\n DIDNumbers: string[] = [];\n readonly defaultAvatarsBaseUrl = 'https://www.gravatar.com';\n @ViewChild('file') fileInput!: ElementRef;\n\n protected availableLanguages = AppTranslateService.availableLanguages;\n\n constructor(\n private snackBar: SnackbarService,\n private contactService: ContactService,\n private userService: UserService,\n private configService: AppConfigService,\n protected appTranslateService: AppTranslateService\n ) {}\n\n ngOnInit(): void {\n this.localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n this.configService.data$.subscribe((config) => {\n if (config && config.settings.preferences) {\n this.selectedHourFormat = config.settings.preferences.hourFormat;\n }\n });\n this.DIDNumbers = this.configService.getDIDs();\n }\n\n fileChangeEvent(event: Event): void {\n this.imageChangedEvent = event;\n this.image = true;\n }\n\n save(resultImage: string) {\n this.avatarLoading = true;\n this.profile!.avatar = resultImage;\n this.saveProfilePhoto(base64ToFile(resultImage));\n this.image = false;\n }\n\n removeAvatar() {\n this.avatarLoading = true;\n this.contactService\n .removeAvatar(this.profile!.id)\n .pipe(\n untilDestroyed(this),\n catchError((error) => this.onFailedProfileEdit(error))\n )\n .subscribe(() => {\n this.onSuccessProfileEdit();\n if (!this.profile?.firstName && !this.profile?.lastName) {\n this.profile!.avatar = 'assets/company.svg';\n } else {\n this.profile!.avatar = null;\n }\n });\n }\n\n async onUILanguageChanged(event: Event) {\n await this.appTranslateService.updateLanguage(String(event));\n }\n\n onPasswordChange($event: ApiChangePassword) {\n this.userService\n .changePassword($event)\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.snackBar.open('Password has been updated', 'ok');\n this.isChangingPassword = false;\n });\n }\n\n onPasswordChangeCanceled() {\n this.isChangingPassword = false;\n }\n\n getCoin(): string {\n return this.profile!.firstName?.charAt(0).toUpperCase() + this.profile!.lastName?.charAt(0).toUpperCase();\n }\n\n onDataSubmitted(result: ContactUpdateResult) {\n this.editProfileLoading = true;\n this.contactService\n .update(result.contact)\n .pipe(\n untilDestroyed(this),\n catchError((error) => this.onFailedProfileEdit(error))\n )\n .subscribe((response: Contact) => {\n this.edit = false;\n this.contactService.currentUserSubject.next(response);\n this.onSuccessProfileEdit();\n });\n }\n\n private saveProfilePhoto(avatar: Blob) {\n const formData = new FormData();\n formData.append('avatar', avatar);\n this.contactService\n .uploadContactAvatar(this.profile!, formData)\n .pipe(\n untilDestroyed(this),\n catchError((error) => this.onFailedProfileEdit(error))\n )\n .subscribe(() => {\n this.onSuccessProfileEdit();\n });\n }\n\n private onFailedProfileEdit(error) {\n this.editProfileLoading = false;\n this.avatarLoading = false;\n return throwError(error);\n }\n\n private onSuccessProfileEdit() {\n this.editProfileLoading = false;\n this.avatarLoading = false;\n this.snackBar.open('Profile has been updated', 'Ok');\n }\n\n onEditCanceled() {\n this.edit = false;\n }\n\n async onHourFormatChange() {\n await firstValueFrom(\n this.configService.updatePreferences({\n hourFormat: this.selectedHourFormat!,\n timezone: this.localTimezone,\n })\n );\n }\n\n protected readonly ExtensionTypes = ExtensionTypes;\n}\n","\n
\n
\n
\n

{{ 'PROFILE.PROFILE' | translate }}

\n

\n {{ 'PROFILE.MY_INFORMATION' | translate }}\n {{ 'PROFILE.EDIT' | translate }}\n

\n
\n {{ 'PROFILE.NAME' | translate }}\n

{{ profile.fullName }}

\n
\n \n {{ 'PROFILE.COMPANY' | translate }}\n

{{ profile.company }}

\n
\n
\n {{ 'PROFILE.TITLE' | translate }}\n

{{ profile.title }}

\n
\n
\n {{ 'PROFILE.EMAIL' | translate }}\n
\n \n {{ email.value }}\n \n {{ email.type | titlecase }}\n
\n
\n
\n {{ 'PROFILE.EXTENSION' | translate }}\n
\n \n {{ profile.ext }}\n \n
\n
\n
\n {{ 'PROFILE.PHONE_NUMBERS' | translate }}\n
\n \n {{ DID | phoneNumber }}\n \n {{ 'PROFILE.DID' | translate }}\n
\n\n
\n \n {{ phone.number | phoneNumber }}\n \n {{ phone.type | uppercase }}\n \n {{ phone.type | titlecase }}\n \n
\n
\n
\n {{ 'PROFILE.ADDRESS' | translate }}\n
\n \n {{ address.addressLine1 }} {{ address.city }} {{ address.state }} {{ address.postalCode }}\n \n {{ address.type | titlecase }}\n
\n
\n
\n
\n
\n \n
\n {{ getCoin() }}\n
\n

{{ profile.fullName }}

\n {{ 'PROFILE.CHOOSE_PROFILE_PHOTO' | translate }}\n
\n \n \n
\n \n \n add_a_photo\n
\n
\n \n {{ 'PROFILE.CHOOSE_PHOTO' | translate }}\n \n \n {{ 'PROFILE.REMOVE_PHOTO' | translate }}\n \n
\n
\n
\n {{ 'PROFILE.FILE_TYPES' | translate }}: jpg,png,jpeg,gif,svg\n
\n
\n {{ 'PROFILE.SIZE_UP_TO' | translate }}\n \n
\n
\n \n \n \n
\n

{{ 'PROFILE.TIME_FORMAT' | translate }}

\n
\n
\n
{{ 'PROFILE.HOUR_FORMAT' | translate }}
\n
\n {{ 'PROFILE.TIMEZONE_COMPUTER_DEFAULT' | translate }}\n \n
\n
\n
\n \n {{ 'PROFILE.12_HOUR' | translate }}\n {{ 'PROFILE.24_HOUR' | translate }}\n \n
{{ localTimezone }}
\n
\n
\n
\n
\n

\n {{ 'PROFILE.LANGUAGE' | translate }}\n
\n Beta\n
\n

\n
\n
\n \n @for(lang of availableLanguages; track lang.key) {\n {{ lang.name }}\n }\n \n
\n
\n
\n
\n

{{ 'PROFILE.ACCOUNT_SETTINGS' | translate }}

\n {{ 'PROFILE.SIGN_IN_PASSWORD' | translate }}\n {{ 'PROFILE.CHANGE' | translate }}\n
\n
\n\n\n \n\n\n\n \n\n\n\n","import { animate, AUTO_STYLE, style, transition, trigger } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\ninterface BannerAction {\n text: string;\n tooltip: string;\n}\n\n@Component({\n standalone: true,\n imports: [MatIconModule, CommonModule, MatTooltipModule],\n selector: 'app-banner',\n templateUrl: './banner.component.html',\n styleUrls: ['./banner.component.scss'],\n animations: [\n trigger('expandCollapse', [\n transition(':enter', [\n style({ opacity: 0, height: 0 }),\n animate('300ms 0s ease-in', style({ opacity: 1, height: AUTO_STYLE })),\n ]),\n transition(':leave', [animate('300ms ease-out', style({ opacity: 0, height: 0 }))]),\n ]),\n ],\n})\nexport class BannerComponent {\n @Input() type: 'error' | 'info' | 'success' | 'warning' | 'notice' = 'info';\n @Input() open: boolean;\n @Input() icon: string;\n @Input() customIcon: string;\n @Input() text: string;\n @Input() actions: Array = [];\n @Input() closeTooltip: string = 'close';\n @Output() actionClick: EventEmitter = new EventEmitter();\n @Output() closeClick: EventEmitter = new EventEmitter();\n\n get actionsTransformed(): BannerAction[] {\n return this.actions.map((action) => {\n if (typeof action === 'string') {\n return {\n text: action,\n tooltip: '',\n };\n }\n return action;\n });\n }\n\n handleActionClick(action: BannerAction) {\n this.actionClick.emit(action.text);\n }\n}\n","\n
\n \n close\n \n
\n \n {{ icon }}\n \n {{ text }}\n
\n
\n \n \n {{ action.text }}\n chevron_right\n \n \n \n {{ action.text }}\n chevron_right\n \n \n \n
\n
\n\n","import { Injectable } from '@angular/core';\n\nimport { LocalStorageService } from './local-storage.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProtocolHandlerService implements NavigatorContentUtils {\n static readonly localStorageKey = 'registeredProtocolHandlers';\n\n constructor(private storage: LocalStorageService) {}\n\n isRegistered(protocol: string): boolean {\n const registeredProtocolHandlers = this.storage.get(ProtocolHandlerService.localStorageKey) ?? [];\n return registeredProtocolHandlers.includes(protocol);\n }\n\n registerProtocolHandler(scheme: string, url: string | URL): void {\n navigator.registerProtocolHandler(scheme, url);\n const registeredProtocolHandlers = this.storage.get(ProtocolHandlerService.localStorageKey) ?? [];\n if (registeredProtocolHandlers.length === 0) {\n this.storage.set(ProtocolHandlerService.localStorageKey, ['tel']);\n } else {\n registeredProtocolHandlers.push('tel');\n this.storage.set(ProtocolHandlerService.localStorageKey, registeredProtocolHandlers);\n }\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\nimport { ProtocolHandlerService } from '@app/core/services/protocol-handler.service';\nimport { ConfirmDialogComponent } from '@app/shared/components/confirm-dialog/confirm-dialog.component';\nimport { ButtonType } from '@app/shared/models/dialog-data';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'app-register-tel-handler-dialog',\n templateUrl: './register-tel-handler-dialog.component.html',\n styleUrls: ['./register-tel-handler-dialog.component.scss'],\n})\nexport class RegisterTelHandlerDialogComponent {\n protocolUrl: string;\n\n constructor(\n private protocolHandlerService: ProtocolHandlerService,\n @Inject(MAT_DIALOG_DATA) public data: { protocolUrl: string },\n private dialog: MatDialog\n ) {\n this.protocolUrl = data.protocolUrl;\n\n this.dialog\n .open(ConfirmDialogComponent, {\n data: {\n title: 'ConntecUC has been installed.',\n description: 'Click on Register to have ConnectUC handle phone number links.',\n buttons: [\n {\n label: 'Cancel',\n action: () => null,\n type: ButtonType.matButton,\n color: 'primary',\n },\n {\n label: 'Register',\n action: () => this.emitRegister(),\n type: ButtonType.matRaisedButton,\n color: 'primary',\n },\n ],\n },\n })\n ?.afterClosed()\n .pipe(untilDestroyed(this))\n .subscribe(() => dialog.closeAll());\n }\n\n emitRegister() {\n this.dialog.closeAll();\n this.protocolHandlerService.registerProtocolHandler('tel', this.protocolUrl);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BeforeInstallPromptEvent } from '@app/core/models/pwa.models';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PwaService {\n private _promptEvent?: BeforeInstallPromptEvent;\n\n private _pwaInstalled = new BehaviorSubject(true);\n pwaInstalled$ = this._pwaInstalled.asObservable();\n\n listenForInstallPrompt() {\n window.addEventListener('beforeinstallprompt', (e: BeforeInstallPromptEvent) => {\n // Prevent the default browser prompt from showing up immediately.\n e.preventDefault();\n this._pwaInstalled.next(false);\n this._promptEvent = e;\n });\n }\n\n promptInstall(): Promise {\n return new Promise((resolve, reject) => {\n this._promptEvent?.prompt() ?? reject();\n\n this._promptEvent?.userChoice.then((choiceResult) => {\n if (choiceResult.outcome === 'accepted') {\n this._pwaInstalled.next(true);\n resolve(true);\n } else {\n resolve(false);\n }\n });\n });\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { RegisterTelHandlerDialogComponent } from '@app/shared/components/register-tel-handler-dialog/register-tel-handler-dialog.component';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\nimport { LocalStorageService } from '../../../services/local-storage.service';\nimport { ProtocolHandlerService } from '../../../services/protocol-handler.service';\nimport { PwaService } from '../../../services/pwa.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-register-tel-handler',\n templateUrl: './register-tel-handler.component.html',\n styleUrls: ['./register-tel-handler.component.scss'],\n})\nexport class RegisterTelHandlerComponent implements OnInit {\n static readonly protocolUrl = '/calls/history/%s';\n static readonly dismissLocalStorageKey = 'dismissRegisterTelHandler';\n\n open: boolean = false;\n pwaInstalled = true;\n\n constructor(\n private pwaService: PwaService,\n private dialog: MatDialog,\n private protocolHandlerService: ProtocolHandlerService,\n private storage: LocalStorageService,\n private appTranslateService: AppTranslateService\n ) {}\n\n ngOnInit() {\n const dismissBanner = this.storage.get(RegisterTelHandlerComponent.dismissLocalStorageKey);\n if (dismissBanner) {\n return;\n }\n this.pwaService.pwaInstalled$.pipe(untilDestroyed(this)).subscribe((pwaInstalled) => {\n this.pwaInstalled = pwaInstalled;\n });\n if (!this.protocolHandlerService.isRegistered('tel')) {\n this.open = true;\n }\n }\n\n async handleActionClick(action: string) {\n switch (action) {\n case this.appTranslateService.instant('BANNERS.LEARN_MORE_ACTION'): {\n window.open('https://docs.connectuc.io/en/articles/14-use-one-click-calling-with-connectuc', '_blank');\n break;\n }\n case this.appTranslateService.instant('BANNERS.INSTALL_APP_ACTION'): {\n if (await this.pwaService.promptInstall()) {\n this.open = false;\n this.dialog.open(RegisterTelHandlerDialogComponent, {\n data: {\n protocolUrl: RegisterTelHandlerComponent.protocolUrl,\n },\n disableClose: true,\n });\n }\n break;\n }\n case this.appTranslateService.instant('BANNERS.REGISTER_NOW_ACTION'): {\n this.registerTelHandler();\n break;\n }\n }\n }\n\n dismiss() {\n this.storage.set(RegisterTelHandlerComponent.dismissLocalStorageKey, true);\n this.open = false;\n }\n\n registerTelHandler() {\n // used an array to make it easier to add more handlers in the future\n // in the case of adding more handlers, this could be moved to a service\n try {\n this.protocolHandlerService.registerProtocolHandler('tel', RegisterTelHandlerComponent.protocolUrl);\n this.open = false;\n } catch (error) {\n console.log('registerProtocolHandler error', error);\n }\n }\n}\n","\n","import * as i0 from '@angular/core';\nimport { InjectionToken, booleanAttribute, Directive, Input, EventEmitter, Optional, Inject, SkipSelf, Output, NgModule } from '@angular/core';\nimport * as i1 from '@angular/cdk/collections';\nimport { Subject, Subscription } from 'rxjs';\n\n/** Used to generate unique ID for each accordion. */\nlet nextId$1 = 0;\n/**\n * Injection token that can be used to reference instances of `CdkAccordion`. It serves\n * as alternative token to the actual `CdkAccordion` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst CDK_ACCORDION = /*#__PURE__*/new InjectionToken('CdkAccordion');\n/**\n * Directive whose purpose is to manage the expanded state of CdkAccordionItem children.\n */\nlet CdkAccordion = /*#__PURE__*/(() => {\n class CdkAccordion {\n constructor() {\n /** Emits when the state of the accordion changes */\n this._stateChanges = new Subject();\n /** Stream that emits true/false when openAll/closeAll is triggered. */\n this._openCloseAllActions = new Subject();\n /** A readonly id value to use for unique selection coordination. */\n this.id = `cdk-accordion-${nextId$1++}`;\n /** Whether the accordion should allow multiple expanded accordion items simultaneously. */\n this.multi = false;\n }\n /** Opens all enabled accordion items in an accordion where multi is enabled. */\n openAll() {\n if (this.multi) {\n this._openCloseAllActions.next(true);\n }\n }\n /** Closes all enabled accordion items. */\n closeAll() {\n this._openCloseAllActions.next(false);\n }\n ngOnChanges(changes) {\n this._stateChanges.next(changes);\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n this._openCloseAllActions.complete();\n }\n static {\n this.ɵfac = function CdkAccordion_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkAccordion)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkAccordion,\n selectors: [[\"cdk-accordion\"], [\"\", \"cdkAccordion\", \"\"]],\n inputs: {\n multi: [2, \"multi\", \"multi\", booleanAttribute]\n },\n exportAs: [\"cdkAccordion\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: CDK_ACCORDION,\n useExisting: CdkAccordion\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return CdkAccordion;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Used to generate unique ID for each accordion item. */\nlet nextId = 0;\n/**\n * A basic directive expected to be extended and decorated as a component. Sets up all\n * events and attributes needed to be managed by a CdkAccordion parent.\n */\nlet CdkAccordionItem = /*#__PURE__*/(() => {\n class CdkAccordionItem {\n /** Whether the AccordionItem is expanded. */\n get expanded() {\n return this._expanded;\n }\n set expanded(expanded) {\n // Only emit events and update the internal value if the value changes.\n if (this._expanded !== expanded) {\n this._expanded = expanded;\n this.expandedChange.emit(expanded);\n if (expanded) {\n this.opened.emit();\n /**\n * In the unique selection dispatcher, the id parameter is the id of the CdkAccordionItem,\n * the name value is the id of the accordion.\n */\n const accordionId = this.accordion ? this.accordion.id : this.id;\n this._expansionDispatcher.notify(this.id, accordionId);\n } else {\n this.closed.emit();\n }\n // Ensures that the animation will run when the value is set outside of an `@Input`.\n // This includes cases like the open, close and toggle methods.\n this._changeDetectorRef.markForCheck();\n }\n }\n constructor(accordion, _changeDetectorRef, _expansionDispatcher) {\n this.accordion = accordion;\n this._changeDetectorRef = _changeDetectorRef;\n this._expansionDispatcher = _expansionDispatcher;\n /** Subscription to openAll/closeAll events. */\n this._openCloseAllSubscription = Subscription.EMPTY;\n /** Event emitted every time the AccordionItem is closed. */\n this.closed = new EventEmitter();\n /** Event emitted every time the AccordionItem is opened. */\n this.opened = new EventEmitter();\n /** Event emitted when the AccordionItem is destroyed. */\n this.destroyed = new EventEmitter();\n /**\n * Emits whenever the expanded state of the accordion changes.\n * Primarily used to facilitate two-way binding.\n * @docs-private\n */\n this.expandedChange = new EventEmitter();\n /** The unique AccordionItem id. */\n this.id = `cdk-accordion-child-${nextId++}`;\n this._expanded = false;\n /** Whether the AccordionItem is disabled. */\n this.disabled = false;\n /** Unregister function for _expansionDispatcher. */\n this._removeUniqueSelectionListener = () => {};\n this._removeUniqueSelectionListener = _expansionDispatcher.listen((id, accordionId) => {\n if (this.accordion && !this.accordion.multi && this.accordion.id === accordionId && this.id !== id) {\n this.expanded = false;\n }\n });\n // When an accordion item is hosted in an accordion, subscribe to open/close events.\n if (this.accordion) {\n this._openCloseAllSubscription = this._subscribeToOpenCloseAllActions();\n }\n }\n /** Emits an event for the accordion item being destroyed. */\n ngOnDestroy() {\n this.opened.complete();\n this.closed.complete();\n this.destroyed.emit();\n this.destroyed.complete();\n this._removeUniqueSelectionListener();\n this._openCloseAllSubscription.unsubscribe();\n }\n /** Toggles the expanded state of the accordion item. */\n toggle() {\n if (!this.disabled) {\n this.expanded = !this.expanded;\n }\n }\n /** Sets the expanded state of the accordion item to false. */\n close() {\n if (!this.disabled) {\n this.expanded = false;\n }\n }\n /** Sets the expanded state of the accordion item to true. */\n open() {\n if (!this.disabled) {\n this.expanded = true;\n }\n }\n _subscribeToOpenCloseAllActions() {\n return this.accordion._openCloseAllActions.subscribe(expanded => {\n // Only change expanded state if item is enabled\n if (!this.disabled) {\n this.expanded = expanded;\n }\n });\n }\n static {\n this.ɵfac = function CdkAccordionItem_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkAccordionItem)(i0.ɵɵdirectiveInject(CDK_ACCORDION, 12), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.UniqueSelectionDispatcher));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: CdkAccordionItem,\n selectors: [[\"cdk-accordion-item\"], [\"\", \"cdkAccordionItem\", \"\"]],\n inputs: {\n expanded: [2, \"expanded\", \"expanded\", booleanAttribute],\n disabled: [2, \"disabled\", \"disabled\", booleanAttribute]\n },\n outputs: {\n closed: \"closed\",\n opened: \"opened\",\n destroyed: \"destroyed\",\n expandedChange: \"expandedChange\"\n },\n exportAs: [\"cdkAccordionItem\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([\n // Provide `CDK_ACCORDION` as undefined to prevent nested accordion items from\n // registering to the same accordion.\n {\n provide: CDK_ACCORDION,\n useValue: undefined\n }]), i0.ɵɵInputTransformsFeature]\n });\n }\n }\n return CdkAccordionItem;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CdkAccordionModule = /*#__PURE__*/(() => {\n class CdkAccordionModule {\n static {\n this.ɵfac = function CdkAccordionModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || CdkAccordionModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: CdkAccordionModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n }\n return CdkAccordionModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CDK_ACCORDION, CdkAccordion, CdkAccordionItem, CdkAccordionModule };\n","import { CdkAccordionItem, CdkAccordion, CdkAccordionModule } from '@angular/cdk/accordion';\nimport { TemplatePortal, CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Directive, Inject, Optional, EventEmitter, ANIMATION_MODULE_TYPE, booleanAttribute, Component, ViewEncapsulation, ChangeDetectionStrategy, SkipSelf, Input, Output, ContentChild, ViewChild, numberAttribute, Host, Attribute, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport * as i2 from '@angular/cdk/a11y';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { startWith, filter, take } from 'rxjs/operators';\nimport { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes';\nimport { Subject, Subscription, EMPTY, merge } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i1 from '@angular/cdk/collections';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Token used to provide a `MatAccordion` to `MatExpansionPanel`.\n * Used primarily to avoid circular imports between `MatAccordion` and `MatExpansionPanel`.\n */\nconst _c0 = [\"body\"];\nconst _c1 = [[[\"mat-expansion-panel-header\"]], \"*\", [[\"mat-action-row\"]]];\nconst _c2 = [\"mat-expansion-panel-header\", \"*\", \"mat-action-row\"];\nfunction MatExpansionPanel_ng_template_5_Template(rf, ctx) {}\nconst _c3 = [[[\"mat-panel-title\"]], [[\"mat-panel-description\"]], \"*\"];\nconst _c4 = [\"mat-panel-title\", \"mat-panel-description\", \"*\"];\nfunction MatExpansionPanelHeader_Conditional_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 1);\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(1, \"svg\", 2);\n i0.ɵɵelement(2, \"path\", 3);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"@indicatorRotate\", ctx_r0._getExpandedState());\n }\n}\nconst MAT_ACCORDION = /*#__PURE__*/new InjectionToken('MAT_ACCORDION');\n\n/** Time and timing curve for expansion panel animations. */\n// Note: Keep this in sync with the Sass variable for the panel header animation.\nconst EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';\n/**\n * Animations used by the Material expansion panel.\n *\n * A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()\n * causes the animation state of moved components to become `void` upon exit, and not update again\n * upon reentry into the DOM. This can lead a to situation for the expansion panel where the state\n * of the panel is `expanded` or `collapsed` but the animation state is `void`.\n *\n * To correctly handle animating to the next state, we animate between `void` and `collapsed` which\n * are defined to have the same styles. Since angular animates from the current styles to the\n * destination state's style definition, in situations where we are moving from `void`'s styles to\n * `collapsed` this acts a noop since no style values change.\n *\n * In the case where angular's animation state is out of sync with the expansion panel's state, the\n * expansion panel being `expanded` and angular animations being `void`, the animation from the\n * `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will\n * occur as expected.\n *\n * Angular Bug: https://github.com/angular/angular/issues/18847\n *\n * @docs-private\n */\nconst matExpansionAnimations = {\n /** Animation that rotates the indicator arrow. */\n indicatorRotate: /*#__PURE__*/trigger('indicatorRotate', [/*#__PURE__*/state('collapsed, void', /*#__PURE__*/style({\n transform: 'rotate(0deg)'\n })), /*#__PURE__*/state('expanded', /*#__PURE__*/style({\n transform: 'rotate(180deg)'\n })), /*#__PURE__*/transition('expanded <=> collapsed, void => collapsed', /*#__PURE__*/animate(EXPANSION_PANEL_ANIMATION_TIMING))]),\n /** Animation that expands and collapses the panel content. */\n bodyExpansion: /*#__PURE__*/trigger('bodyExpansion', [/*#__PURE__*/state('collapsed, void', /*#__PURE__*/style({\n height: '0px',\n visibility: 'hidden'\n })),\n /*#__PURE__*/\n // Clear the `visibility` while open, otherwise the content will be visible when placed in\n // a parent that's `visibility: hidden`, because `visibility` doesn't apply to descendants\n // that have a `visibility` of their own (see #27436).\n state('expanded', /*#__PURE__*/style({\n height: '*',\n visibility: ''\n })), /*#__PURE__*/transition('expanded <=> collapsed, void => collapsed', /*#__PURE__*/animate(EXPANSION_PANEL_ANIMATION_TIMING))])\n};\n\n/**\n * Token used to provide a `MatExpansionPanel` to `MatExpansionPanelContent`.\n * Used to avoid circular imports between `MatExpansionPanel` and `MatExpansionPanelContent`.\n */\nconst MAT_EXPANSION_PANEL = /*#__PURE__*/new InjectionToken('MAT_EXPANSION_PANEL');\n\n/**\n * Expansion panel content that will be rendered lazily\n * after the panel is opened for the first time.\n */\nlet MatExpansionPanelContent = /*#__PURE__*/(() => {\n class MatExpansionPanelContent {\n constructor(_template, _expansionPanel) {\n this._template = _template;\n this._expansionPanel = _expansionPanel;\n }\n static {\n this.ɵfac = function MatExpansionPanelContent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatExpansionPanelContent)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(MAT_EXPANSION_PANEL, 8));\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatExpansionPanelContent,\n selectors: [[\"ng-template\", \"matExpansionPanelContent\", \"\"]],\n standalone: true\n });\n }\n }\n return MatExpansionPanelContent;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Counter for generating unique element ids. */\nlet uniqueId = 0;\n/**\n * Injection token that can be used to configure the default\n * options for the expansion panel component.\n */\nconst MAT_EXPANSION_PANEL_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('MAT_EXPANSION_PANEL_DEFAULT_OPTIONS');\n/**\n * This component can be used as a single element to show expandable content, or as one of\n * multiple children of an element with the MatAccordion directive attached.\n */\nlet MatExpansionPanel = /*#__PURE__*/(() => {\n class MatExpansionPanel extends CdkAccordionItem {\n /** Whether the toggle indicator should be hidden. */\n get hideToggle() {\n return this._hideToggle || this.accordion && this.accordion.hideToggle;\n }\n set hideToggle(value) {\n this._hideToggle = value;\n }\n /** The position of the expansion indicator. */\n get togglePosition() {\n return this._togglePosition || this.accordion && this.accordion.togglePosition;\n }\n set togglePosition(value) {\n this._togglePosition = value;\n }\n constructor(accordion, _changeDetectorRef, _uniqueSelectionDispatcher, _viewContainerRef, _document, _animationMode, defaultOptions) {\n super(accordion, _changeDetectorRef, _uniqueSelectionDispatcher);\n this._viewContainerRef = _viewContainerRef;\n this._animationMode = _animationMode;\n this._hideToggle = false;\n /** An event emitted after the body's expansion animation happens. */\n this.afterExpand = new EventEmitter();\n /** An event emitted after the body's collapse animation happens. */\n this.afterCollapse = new EventEmitter();\n /** Stream that emits for changes in `@Input` properties. */\n this._inputChanges = new Subject();\n /** ID for the associated header element. Used for a11y labelling. */\n this._headerId = `mat-expansion-panel-header-${uniqueId++}`;\n this.accordion = accordion;\n this._document = _document;\n this._animationsDisabled = _animationMode === 'NoopAnimations';\n if (defaultOptions) {\n this.hideToggle = defaultOptions.hideToggle;\n }\n }\n /** Determines whether the expansion panel should have spacing between it and its siblings. */\n _hasSpacing() {\n if (this.accordion) {\n return this.expanded && this.accordion.displayMode === 'default';\n }\n return false;\n }\n /** Gets the expanded state string. */\n _getExpandedState() {\n return this.expanded ? 'expanded' : 'collapsed';\n }\n /** Toggles the expanded state of the expansion panel. */\n toggle() {\n this.expanded = !this.expanded;\n }\n /** Sets the expanded state of the expansion panel to false. */\n close() {\n this.expanded = false;\n }\n /** Sets the expanded state of the expansion panel to true. */\n open() {\n this.expanded = true;\n }\n ngAfterContentInit() {\n if (this._lazyContent && this._lazyContent._expansionPanel === this) {\n // Render the content as soon as the panel becomes open.\n this.opened.pipe(startWith(null), filter(() => this.expanded && !this._portal), take(1)).subscribe(() => {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n });\n }\n }\n ngOnChanges(changes) {\n this._inputChanges.next(changes);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._inputChanges.complete();\n }\n /** Checks whether the expansion panel's content contains the currently-focused element. */\n _containsFocus() {\n if (this._body) {\n const focusedElement = this._document.activeElement;\n const bodyElement = this._body.nativeElement;\n return focusedElement === bodyElement || bodyElement.contains(focusedElement);\n }\n return false;\n }\n /** Called when the expansion animation has started. */\n _animationStarted(event) {\n if (!isInitialAnimation(event) && !this._animationsDisabled && this._body) {\n // Prevent the user from tabbing into the content while it's animating.\n // TODO(crisbeto): maybe use `inert` to prevent focus from entering while closed as well\n // instead of `visibility`? Will allow us to clean up some code but needs more testing.\n this._body?.nativeElement.setAttribute('inert', '');\n }\n }\n /** Called when the expansion animation has finished. */\n _animationDone(event) {\n if (!isInitialAnimation(event)) {\n if (event.toState === 'expanded') {\n this.afterExpand.emit();\n } else if (event.toState === 'collapsed') {\n this.afterCollapse.emit();\n }\n // Re-enable tabbing once the animation is finished.\n if (!this._animationsDisabled && this._body) {\n this._body.nativeElement.removeAttribute('inert');\n }\n }\n }\n static {\n this.ɵfac = function MatExpansionPanel_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatExpansionPanel)(i0.ɵɵdirectiveInject(MAT_ACCORDION, 12), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.UniqueSelectionDispatcher), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(DOCUMENT), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵdirectiveInject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatExpansionPanel,\n selectors: [[\"mat-expansion-panel\"]],\n contentQueries: function MatExpansionPanel_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatExpansionPanelContent, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._lazyContent = _t.first);\n }\n },\n viewQuery: function MatExpansionPanel_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c0, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._body = _t.first);\n }\n },\n hostAttrs: [1, \"mat-expansion-panel\"],\n hostVars: 6,\n hostBindings: function MatExpansionPanel_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-expanded\", ctx.expanded)(\"_mat-animation-noopable\", ctx._animationsDisabled)(\"mat-expansion-panel-spacing\", ctx._hasSpacing());\n }\n },\n inputs: {\n hideToggle: [2, \"hideToggle\", \"hideToggle\", booleanAttribute],\n togglePosition: \"togglePosition\"\n },\n outputs: {\n afterExpand: \"afterExpand\",\n afterCollapse: \"afterCollapse\"\n },\n exportAs: [\"matExpansionPanel\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([\n // Provide MatAccordion as undefined to prevent nested expansion panels from registering\n // to the same accordion.\n {\n provide: MAT_ACCORDION,\n useValue: undefined\n }, {\n provide: MAT_EXPANSION_PANEL,\n useExisting: MatExpansionPanel\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c2,\n decls: 7,\n vars: 4,\n consts: [[\"body\", \"\"], [\"role\", \"region\", 1, \"mat-expansion-panel-content\", 3, \"id\"], [1, \"mat-expansion-panel-body\"], [3, \"cdkPortalOutlet\"]],\n template: function MatExpansionPanel_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵprojectionDef(_c1);\n i0.ɵɵprojection(0);\n i0.ɵɵelementStart(1, \"div\", 1, 0);\n i0.ɵɵlistener(\"@bodyExpansion.start\", function MatExpansionPanel_Template_div_animation_bodyExpansion_start_1_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._animationStarted($event));\n })(\"@bodyExpansion.done\", function MatExpansionPanel_Template_div_animation_bodyExpansion_done_1_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx._animationDone($event));\n });\n i0.ɵɵelementStart(3, \"div\", 2);\n i0.ɵɵprojection(4, 1);\n i0.ɵɵtemplate(5, MatExpansionPanel_ng_template_5_Template, 0, 0, \"ng-template\", 3);\n i0.ɵɵelementEnd();\n i0.ɵɵprojection(6, 2);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"@bodyExpansion\", ctx._getExpandedState())(\"id\", ctx.id);\n i0.ɵɵattribute(\"aria-labelledby\", ctx._headerId);\n i0.ɵɵadvance(4);\n i0.ɵɵproperty(\"cdkPortalOutlet\", ctx._portal);\n }\n },\n dependencies: [CdkPortalOutlet],\n styles: [\".mat-expansion-panel{box-sizing:content-box;display:block;margin:0;overflow:hidden;transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);position:relative;background:var(--mat-expansion-container-background-color, var(--mat-app-surface));color:var(--mat-expansion-container-text-color, var(--mat-app-on-surface));border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:var(--mat-expansion-container-shape);border-top-left-radius:var(--mat-expansion-container-shape)}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:var(--mat-expansion-container-shape);border-bottom-left-radius:var(--mat-expansion-container-shape)}.cdk-high-contrast-active .mat-expansion-panel{outline:solid 1px}.mat-expansion-panel.ng-animate-disabled,.ng-animate-disabled .mat-expansion-panel,.mat-expansion-panel._mat-animation-noopable{transition:none}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible;font-family:var(--mat-expansion-container-text-font, var(--mat-app-body-large-font));font-size:var(--mat-expansion-container-text-size, var(--mat-app-body-large-size));font-weight:var(--mat-expansion-container-text-weight, var(--mat-app-body-large-weight));line-height:var(--mat-expansion-container-text-line-height, var(--mat-app-body-large-line-height));letter-spacing:var(--mat-expansion-container-text-tracking, var(--mat-app-body-large-tracking))}.mat-expansion-panel-content[style*=\\\"visibility: hidden\\\"] *{visibility:hidden !important}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px;border-top-color:var(--mat-expansion-actions-divider-color, var(--mat-app-outline))}.mat-action-row .mat-button-base,.mat-action-row .mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row .mat-button-base,[dir=rtl] .mat-action-row .mat-mdc-button-base{margin-left:0;margin-right:8px}\"],\n encapsulation: 2,\n data: {\n animation: [matExpansionAnimations.bodyExpansion]\n },\n changeDetection: 0\n });\n }\n }\n return MatExpansionPanel;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Checks whether an animation is the initial setup animation. */\nfunction isInitialAnimation(event) {\n return event.fromState === 'void';\n}\n/**\n * Actions of a ``.\n */\nlet MatExpansionPanelActionRow = /*#__PURE__*/(() => {\n class MatExpansionPanelActionRow {\n static {\n this.ɵfac = function MatExpansionPanelActionRow_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatExpansionPanelActionRow)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatExpansionPanelActionRow,\n selectors: [[\"mat-action-row\"]],\n hostAttrs: [1, \"mat-action-row\"],\n standalone: true\n });\n }\n }\n return MatExpansionPanelActionRow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Header element of a ``.\n */\nlet MatExpansionPanelHeader = /*#__PURE__*/(() => {\n class MatExpansionPanelHeader {\n constructor(panel, _element, _focusMonitor, _changeDetectorRef, defaultOptions, _animationMode, tabIndex) {\n this.panel = panel;\n this._element = _element;\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n this._parentChangeSubscription = Subscription.EMPTY;\n /** Tab index of the header. */\n this.tabIndex = 0;\n const accordionHideToggleChange = panel.accordion ? panel.accordion._stateChanges.pipe(filter(changes => !!(changes['hideToggle'] || changes['togglePosition']))) : EMPTY;\n this.tabIndex = parseInt(tabIndex || '') || 0;\n // Since the toggle state depends on an @Input on the panel, we\n // need to subscribe and trigger change detection manually.\n this._parentChangeSubscription = merge(panel.opened, panel.closed, accordionHideToggleChange, panel._inputChanges.pipe(filter(changes => {\n return !!(changes['hideToggle'] || changes['disabled'] || changes['togglePosition']);\n }))).subscribe(() => this._changeDetectorRef.markForCheck());\n // Avoids focus being lost if the panel contained the focused element and was closed.\n panel.closed.pipe(filter(() => panel._containsFocus())).subscribe(() => _focusMonitor.focusVia(_element, 'program'));\n if (defaultOptions) {\n this.expandedHeight = defaultOptions.expandedHeight;\n this.collapsedHeight = defaultOptions.collapsedHeight;\n }\n }\n /**\n * Whether the associated panel is disabled. Implemented as a part of `FocusableOption`.\n * @docs-private\n */\n get disabled() {\n return this.panel.disabled;\n }\n /** Toggles the expanded state of the panel. */\n _toggle() {\n if (!this.disabled) {\n this.panel.toggle();\n }\n }\n /** Gets whether the panel is expanded. */\n _isExpanded() {\n return this.panel.expanded;\n }\n /** Gets the expanded state string of the panel. */\n _getExpandedState() {\n return this.panel._getExpandedState();\n }\n /** Gets the panel id. */\n _getPanelId() {\n return this.panel.id;\n }\n /** Gets the toggle position for the header. */\n _getTogglePosition() {\n return this.panel.togglePosition;\n }\n /** Gets whether the expand indicator should be shown. */\n _showToggle() {\n return !this.panel.hideToggle && !this.panel.disabled;\n }\n /**\n * Gets the current height of the header. Null if no custom height has been\n * specified, and if the default height from the stylesheet should be used.\n */\n _getHeaderHeight() {\n const isExpanded = this._isExpanded();\n if (isExpanded && this.expandedHeight) {\n return this.expandedHeight;\n } else if (!isExpanded && this.collapsedHeight) {\n return this.collapsedHeight;\n }\n return null;\n }\n /** Handle keydown event calling to toggle() if appropriate. */\n _keydown(event) {\n switch (event.keyCode) {\n // Toggle for space and enter keys.\n case SPACE:\n case ENTER:\n if (!hasModifierKey(event)) {\n event.preventDefault();\n this._toggle();\n }\n break;\n default:\n if (this.panel.accordion) {\n this.panel.accordion._handleHeaderKeydown(event);\n }\n return;\n }\n }\n /**\n * Focuses the panel header. Implemented as a part of `FocusableOption`.\n * @param origin Origin of the action that triggered the focus.\n * @docs-private\n */\n focus(origin, options) {\n if (origin) {\n this._focusMonitor.focusVia(this._element, origin, options);\n } else {\n this._element.nativeElement.focus(options);\n }\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._element).subscribe(origin => {\n if (origin && this.panel.accordion) {\n this.panel.accordion._handleHeaderFocus(this);\n }\n });\n }\n ngOnDestroy() {\n this._parentChangeSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._element);\n }\n static {\n this.ɵfac = function MatExpansionPanelHeader_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatExpansionPanelHeader)(i0.ɵɵdirectiveInject(MatExpansionPanel, 1), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, 8), i0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), i0.ɵɵinjectAttribute('tabindex'));\n };\n }\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MatExpansionPanelHeader,\n selectors: [[\"mat-expansion-panel-header\"]],\n hostAttrs: [\"role\", \"button\", 1, \"mat-expansion-panel-header\", \"mat-focus-indicator\"],\n hostVars: 15,\n hostBindings: function MatExpansionPanelHeader_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function MatExpansionPanelHeader_click_HostBindingHandler() {\n return ctx._toggle();\n })(\"keydown\", function MatExpansionPanelHeader_keydown_HostBindingHandler($event) {\n return ctx._keydown($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"id\", ctx.panel._headerId)(\"tabindex\", ctx.disabled ? -1 : ctx.tabIndex)(\"aria-controls\", ctx._getPanelId())(\"aria-expanded\", ctx._isExpanded())(\"aria-disabled\", ctx.panel.disabled);\n i0.ɵɵstyleProp(\"height\", ctx._getHeaderHeight());\n i0.ɵɵclassProp(\"mat-expanded\", ctx._isExpanded())(\"mat-expansion-toggle-indicator-after\", ctx._getTogglePosition() === \"after\")(\"mat-expansion-toggle-indicator-before\", ctx._getTogglePosition() === \"before\")(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\");\n }\n },\n inputs: {\n expandedHeight: \"expandedHeight\",\n collapsedHeight: \"collapsedHeight\",\n tabIndex: [2, \"tabIndex\", \"tabIndex\", value => value == null ? 0 : numberAttribute(value)]\n },\n standalone: true,\n features: [i0.ɵɵInputTransformsFeature, i0.ɵɵStandaloneFeature],\n ngContentSelectors: _c4,\n decls: 5,\n vars: 3,\n consts: [[1, \"mat-content\"], [1, \"mat-expansion-indicator\"], [\"xmlns\", \"http://www.w3.org/2000/svg\", \"viewBox\", \"0 -960 960 960\", \"aria-hidden\", \"true\", \"focusable\", \"false\"], [\"d\", \"M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z\"]],\n template: function MatExpansionPanelHeader_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef(_c3);\n i0.ɵɵelementStart(0, \"span\", 0);\n i0.ɵɵprojection(1);\n i0.ɵɵprojection(2, 1);\n i0.ɵɵprojection(3, 2);\n i0.ɵɵelementEnd();\n i0.ɵɵtemplate(4, MatExpansionPanelHeader_Conditional_4_Template, 3, 1, \"span\", 1);\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-content-hide-toggle\", !ctx._showToggle());\n i0.ɵɵadvance(4);\n i0.ɵɵconditional(ctx._showToggle() ? 4 : -1);\n }\n },\n styles: [\".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1);height:var(--mat-expansion-header-collapsed-state-height);font-family:var(--mat-expansion-header-text-font, var(--mat-app-title-medium-font));font-size:var(--mat-expansion-header-text-size, var(--mat-app-title-medium-size));font-weight:var(--mat-expansion-header-text-weight, var(--mat-app-title-medium-weight));line-height:var(--mat-expansion-header-text-line-height, var(--mat-app-title-medium-line-height));letter-spacing:var(--mat-expansion-header-text-tracking, var(--mat-app-title-medium-tracking))}.mat-expansion-panel-header.mat-expanded{height:var(--mat-expansion-header-expanded-state-height)}.mat-expansion-panel-header[aria-disabled=true]{color:var(--mat-expansion-header-disabled-state-text-color)}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-header-hover-state-layer-color)}@media(hover: none){.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-container-background-color, var(--mat-app-surface))}}.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused{background:var(--mat-expansion-header-focus-state-layer-color)}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-content.mat-content-hide-toggle{margin-right:8px}[dir=rtl] .mat-content.mat-content-hide-toggle{margin-right:0;margin-left:8px}.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-left:24px;margin-right:0}[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-right:24px;margin-left:0}.mat-expansion-panel-header-title{color:var(--mat-expansion-header-text-color, var(--mat-app-on-surface))}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header-description{flex-grow:2;color:var(--mat-expansion-header-description-color, var(--mat-app-on-surface-variant))}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:\\\"\\\";display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle;color:var(--mat-expansion-header-indicator-color, var(--mat-app-on-surface-variant));display:var(--mat-expansion-legacy-header-indicator-display, inline-block)}.mat-expansion-indicator svg{width:24px;height:24px;margin:0 -8px;vertical-align:middle;fill:var(--mat-expansion-header-indicator-color, var(--mat-app-on-surface-variant));display:var(--mat-expansion-header-indicator-display, none)}.cdk-high-contrast-active .mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}\"],\n encapsulation: 2,\n data: {\n animation: [matExpansionAnimations.indicatorRotate]\n },\n changeDetection: 0\n });\n }\n }\n return MatExpansionPanelHeader;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Description element of a ``.\n */\nlet MatExpansionPanelDescription = /*#__PURE__*/(() => {\n class MatExpansionPanelDescription {\n static {\n this.ɵfac = function MatExpansionPanelDescription_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatExpansionPanelDescription)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatExpansionPanelDescription,\n selectors: [[\"mat-panel-description\"]],\n hostAttrs: [1, \"mat-expansion-panel-header-description\"],\n standalone: true\n });\n }\n }\n return MatExpansionPanelDescription;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Title element of a ``.\n */\nlet MatExpansionPanelTitle = /*#__PURE__*/(() => {\n class MatExpansionPanelTitle {\n static {\n this.ɵfac = function MatExpansionPanelTitle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatExpansionPanelTitle)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatExpansionPanelTitle,\n selectors: [[\"mat-panel-title\"]],\n hostAttrs: [1, \"mat-expansion-panel-header-title\"],\n standalone: true\n });\n }\n }\n return MatExpansionPanelTitle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Directive for a Material Design Accordion.\n */\nlet MatAccordion = /*#__PURE__*/(() => {\n class MatAccordion extends CdkAccordion {\n constructor() {\n super(...arguments);\n /** Headers belonging to this accordion. */\n this._ownHeaders = new QueryList();\n /** Whether the expansion indicator should be hidden. */\n this.hideToggle = false;\n /**\n * Display mode used for all expansion panels in the accordion. Currently two display\n * modes exist:\n * default - a gutter-like spacing is placed around any expanded panel, placing the expanded\n * panel at a different elevation from the rest of the accordion.\n * flat - no spacing is placed around expanded panels, showing all panels at the same\n * elevation.\n */\n this.displayMode = 'default';\n /** The position of the expansion indicator. */\n this.togglePosition = 'after';\n }\n ngAfterContentInit() {\n this._headers.changes.pipe(startWith(this._headers)).subscribe(headers => {\n this._ownHeaders.reset(headers.filter(header => header.panel.accordion === this));\n this._ownHeaders.notifyOnChanges();\n });\n this._keyManager = new FocusKeyManager(this._ownHeaders).withWrap().withHomeAndEnd();\n }\n /** Handles keyboard events coming in from the panel headers. */\n _handleHeaderKeydown(event) {\n this._keyManager.onKeydown(event);\n }\n _handleHeaderFocus(header) {\n this._keyManager.updateActiveItem(header);\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this._keyManager?.destroy();\n this._ownHeaders.destroy();\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵMatAccordion_BaseFactory;\n return function MatAccordion_Factory(__ngFactoryType__) {\n return (ɵMatAccordion_BaseFactory || (ɵMatAccordion_BaseFactory = i0.ɵɵgetInheritedFactory(MatAccordion)))(__ngFactoryType__ || MatAccordion);\n };\n })();\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MatAccordion,\n selectors: [[\"mat-accordion\"]],\n contentQueries: function MatAccordion_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MatExpansionPanelHeader, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._headers = _t);\n }\n },\n hostAttrs: [1, \"mat-accordion\"],\n hostVars: 2,\n hostBindings: function MatAccordion_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"mat-accordion-multi\", ctx.multi);\n }\n },\n inputs: {\n hideToggle: [2, \"hideToggle\", \"hideToggle\", booleanAttribute],\n displayMode: \"displayMode\",\n togglePosition: \"togglePosition\"\n },\n exportAs: [\"matAccordion\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: MAT_ACCORDION,\n useExisting: MatAccordion\n }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature]\n });\n }\n }\n return MatAccordion;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatExpansionModule = /*#__PURE__*/(() => {\n class MatExpansionModule {\n static {\n this.ɵfac = function MatExpansionModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MatExpansionModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: MatExpansionModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [MatCommonModule, CdkAccordionModule, PortalModule]\n });\n }\n }\n return MatExpansionModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { EXPANSION_PANEL_ANIMATION_TIMING, MAT_ACCORDION, MAT_EXPANSION_PANEL, MAT_EXPANSION_PANEL_DEFAULT_OPTIONS, MatAccordion, MatExpansionModule, MatExpansionPanel, MatExpansionPanelActionRow, MatExpansionPanelContent, MatExpansionPanelDescription, MatExpansionPanelHeader, MatExpansionPanelTitle, matExpansionAnimations };\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'initials',\n standalone: true,\n})\nexport class InitialsPipe implements PipeTransform {\n transform(value?: string | null | undefined): string {\n if (!value) {\n return '-'; // Return an empty string if name is null, undefined, or empty\n }\n\n // Split the name by spaces to separate each word\n const words = value.trim().split(/\\s+/);\n\n // Map each word to its first letter and convert to uppercase\n const initials = words.map((word) => word[0].toUpperCase());\n\n // Join the initials together and return\n return initials.join('');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\nimport { Integration } from '@app/preferences/models/integrations.models';\nimport { InitialsPipe } from '@app/shared/pipes/initials.pipe';\n\n@Component({\n selector: 'app-integration-favicon',\n standalone: true,\n templateUrl: './integration-favicon.component.html',\n imports: [CommonModule, InitialsPipe],\n styleUrls: ['./integration-favicon.component.scss'],\n})\nexport class IntegrationFaviconComponent {\n integration = input.required();\n}\n","
\n @if (integration().favicon) {\n \n } @else {\n {{ integration().display_name | initials }}\n }\n
\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { Integration } from '@app/preferences/models/integrations.models';\nimport { IntegrationFaviconComponent } from '@app/shared/components/integration-favicon/integration-favicon.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-integration-settings-item',\n standalone: true,\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, IntegrationFaviconComponent, MatIcon, TranslateModule],\n templateUrl: './integration-settings-item.component.html',\n styleUrls: ['./integration-settings-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IntegrationSettingsItemComponent {\n @Input({ required: true }) integration: Integration;\n @Output() integrationChanged = new EventEmitter();\n\n protected isOverlayOpen = false;\n\n protected integrationEnableChanged(event: Event) {\n this.integration.enabled = (event.target as HTMLInputElement).checked;\n this.integrationChanged.emit(this.integration);\n }\n\n protected integrationAutoPopChanged(event: Event) {\n this.integration.auto_pop = (event.target as HTMLInputElement).checked;\n this.integrationChanged.emit(this.integration);\n }\n\n protected integrationAutoDialChanged(event: Event) {\n this.integration.auto_dial = (event.target as HTMLInputElement).checked;\n this.integrationChanged.emit(this.integration);\n }\n}\n","
\n
\n \n {{ integration.display_name }}\n
\n \n
\n \n
\n
\n
\n \n
\n\n
\n \n {{ 'INTEGRATIONS_PREFERENCES.AUTO_POP_SETTINGS' | translate }}\n chevron_right\n \n
\n\n
\n \n \n
\n\n","import { DatePipe, KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { LambdaLogDBModel } from '@app/preferences/models/lambda.model';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n standalone: true,\n selector: 'app-lambda-output-details',\n imports: [KeyValuePipe, DatePipe, NgTemplateOutlet, MatIcon, TranslateModule],\n templateUrl: './lambda-output-details.component.html',\n styleUrls: ['./lambda-output-details.component.scss'],\n})\nexport class LambdaOutputDetailsComponent {\n lambdaOutput = input.required();\n downloadFileBtnClicked = output();\n}\n","
\n @if (!!lambdaOutput().errorMessage) {\n
\n

\n error_outline\n Run time error\n

\n

{{ lambdaOutput().errorMessage }}

\n
\n }\n\n
\n \n \n\n @if (!!lambdaOutput().callObj) {\n @for (item of lambdaOutput().callObj | keyvalue; track $index) {\n \n \n }\n }\n \n {{ 'INTEGRATIONS_PREFERENCES.DOWNLOAD_LOG_FILE' | translate }}\n \n
\n
\n\n\n
\n {{ key }}\n {{ value || 'empty' }}\n
\n\n","import { CallDirection } from '@app/call-history/models/call-history.models';\n\nexport enum CallEventTypes {\n /** CallAnswered is a domain event and likely needs to be filtered by aor to get events just for this user */\n CallAnswered = 'CallAnswered',\n CallRang = 'CallRang',\n CallStarted = 'CallStarted',\n CallEnded = 'CallEnded',\n}\n\nexport interface BaseCallEventData {\n orig_callid: string;\n term_callid: string;\n aor: string;\n status?: string;\n trigger?: string;\n callTag?: string;\n fromTag?: string;\n toTag?: string;\n}\n\nexport interface CallAnsweredEventData extends BaseCallEventData {\n caller_id: string;\n caller_name: string;\n dialed: string;\n time_start: string;\n to: string;\n from: string;\n subscriberName: string;\n ivr: boolean;\n callDirection?: CallDirection;\n}\n\nexport interface CallStartedEventData extends BaseCallEventData {\n caller_id: string;\n caller_name: string;\n time_start: string;\n to: string;\n status: string;\n}\n\nexport interface CallRangEventData extends BaseCallEventData {\n caller_id: string;\n caller_name: string;\n time_start: string;\n to: string;\n status: string;\n}\n\nexport interface CallStartedEvent {\n event: CallEventTypes.CallStarted;\n payload: CallStartedEventData;\n}\n\nexport interface CallRangEvent {\n event: CallEventTypes.CallRang;\n payload: CallRangEventData;\n}\n\nexport interface CallAnsweredEvent {\n event: CallEventTypes.CallAnswered;\n payload: CallAnsweredEventData;\n}\n\nexport interface CallEndedEvent {\n event: CallEventTypes.CallEnded;\n payload: BaseCallEventData;\n}\n","import { CallDirection } from '@app/call-history/models/call-history.models';\n\nexport interface Integration {\n id: number;\n display_name: string;\n description: string;\n favicon?: string;\n enabled: boolean;\n\n /** If true, opens on incoming call */\n auto_pop: boolean;\n\n /** If true, opens on outgoing call */\n auto_dial: boolean;\n\n launch_url: string;\n lambda: string | null;\n launch_scenarios: {\n onIncomingCall: {\n value: boolean;\n event: LaunchAutoPopType;\n };\n onOutboundCall: {\n value: boolean;\n };\n silentWebCall: {\n value: true;\n };\n onInboundSMS: {\n value: boolean;\n event: 1;\n };\n };\n variables: {\n customer_id: string;\n };\n}\n\nexport enum LaunchAutoPopType {\n ON_RING = 0,\n ON_ANSWER = 1,\n}\n\nexport type WebPopCallObject = {\n phone_number: string;\n caller_ID: string;\n caller_name: string | '';\n call_direction: CallDirection;\n date_time: string;\n call_ID: string;\n dialed_number: string | null;\n dialed_number_10_digit: string | null;\n caller_ID_10_digit: string;\n customer_id?: string;\n};\n","import { Injectable } from '@angular/core';\nimport Dexie, { liveQuery, Table } from 'dexie';\nimport { from, Observable } from 'rxjs';\n\nimport { LambdaLogDBModel } from '../models/lambda.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LambdaStorageService {\n private db = new LambdaLogDB();\n\n public async insert(log: LambdaLogDBModel): Promise {\n await this.db.logs.add({\n ...log,\n });\n\n // If the log count > 10, delete the oldest entry\n const count = await this.db.logs.count();\n if (count > 10) {\n const oldestLog = await this.db.logs.orderBy('createdAt').first();\n if (oldestLog?.id) {\n await this.db.logs.delete(oldestLog.id);\n }\n }\n }\n\n public liveQuery(filter?: (LambdaLogDBModel) => boolean): Observable {\n const dexieObservable = liveQuery(() => {\n let collection = this.db.logs.orderBy('createdAt').reverse();\n\n if (filter) {\n collection = collection.filter((item) => filter(item));\n }\n\n return collection.toArray();\n });\n\n return from(dexieObservable);\n }\n\n public drop() {\n this.db.resetDatabase();\n }\n}\n\nclass LambdaLogDB extends Dexie {\n private static readonly DB_NAME = 'lambdaLogs';\n private static readonly TABLE_NAME = 'logs';\n public logs!: Table;\n\n constructor() {\n super(LambdaLogDB.DB_NAME);\n this.version(1).stores({\n [LambdaLogDB.TABLE_NAME]:\n '++id, callObj, integrationTitle, lambdaOutputLogs, errorMessage, lambdaResult, createdAt',\n });\n }\n\n public async resetDatabase() {\n await this.transaction('rw', LambdaLogDB.TABLE_NAME, () => {\n this.logs.clear();\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { WebPopCallObject } from '../models/integrations.models';\nimport { LambdaCallResult, LambdaFileModel, LambdaLogDBModel, LogObject, LogType } from '../models/lambda.model';\nimport { LambdaStorageService } from './lambda-storage.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LambdaService {\n private readonly LOG_FILE_PREFIX = 'lambda-execution-';\n private readonly LOG_FILE_EXTENSION = '.log';\n\n public logs$ = this.lambdaStorageService.liveQuery();\n\n constructor(private lambdaStorageService: LambdaStorageService) {}\n\n public async callLambdaFunction(\n integrationTitle: string,\n lambda: string,\n callObj: WebPopCallObject\n ): Promise {\n const lambdaOutputLogs: LogObject[] = [];\n\n // TODO: refactor\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (globalThis as any).customLog = function (logType: LogType, ...args: any[]): string {\n let result = '';\n\n for (const argument of args) {\n if (typeof argument === 'string') {\n result += `${argument}`;\n } else {\n try {\n result += `${JSON.stringify(argument)}`;\n } catch {\n result += `${argument.toString()}`;\n }\n }\n }\n\n lambdaOutputLogs.push({ logType, output: result });\n\n return result;\n };\n\n try {\n lambda = this.replaceConsoleCalls(lambda);\n const lambdaResult = this.runLambda(lambda, callObj);\n await this.logLambdaCall({\n integrationTitle,\n callObj,\n lambdaOutputLogs,\n errorMessage: undefined,\n lambdaResult,\n createdAt: Date.now().toString(),\n });\n return {\n errorMessage: undefined,\n lambdaResult,\n logs: lambdaOutputLogs,\n };\n } catch (error) {\n const errorMessage = this.getLambdaCallErrorMessage(error);\n await this.logLambdaCall({\n integrationTitle,\n callObj,\n lambdaOutputLogs,\n errorMessage,\n lambdaResult: undefined,\n createdAt: Date.now().toString(),\n });\n return {\n errorMessage,\n lambdaResult: undefined,\n logs: lambdaOutputLogs,\n };\n } finally {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (globalThis as any).customLog = undefined;\n }\n }\n\n private runLambda(lambda: string, callObj: WebPopCallObject) {\n const fn = (0, eval)(`(${lambda})`);\n const lambdaResult = fn(callObj);\n return lambdaResult;\n }\n\n private getLambdaCallErrorMessage(error: unknown) {\n console.error('Error calling lambda function:', error);\n\n let err: string;\n if (error instanceof SyntaxError) {\n err = error.message;\n } else if (error instanceof Error) {\n err = error.message;\n } else {\n err = JSON.stringify(error);\n }\n return err;\n }\n\n downloadLogFile(model: LambdaLogDBModel) {\n const _fileModel: LambdaFileModel = {\n fileName: this.getLogFileName(model.createdAt),\n content: model,\n };\n // window.electron.saveFile(fileModel);\n }\n\n private async logLambdaCall(model: LambdaLogDBModel) {\n await this.lambdaStorageService.insert(model);\n }\n\n private replaceConsoleCalls(lambda: string): string {\n const methods = ['log', 'info', 'warn', 'error'];\n\n methods.forEach((method) => {\n const regex = new RegExp(`console.${method}\\\\(`, 'g');\n lambda = lambda.replace(regex, `customLog('${method}',`);\n });\n\n return lambda;\n }\n\n private getLogFileName(date: string): string {\n return this.LOG_FILE_PREFIX + date + this.LOG_FILE_EXTENSION;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { CallDirection } from '@app/call-history/models/call-history.models';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { ApiService } from '@app/core/services/api.service';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { WsService } from '@app/core/services/ws.service';\nimport { ElectronService } from '@app/electron/electron.service';\nimport { Call } from '@app/phone/models/call.model';\nimport normalizePhoneNumber from '@app/shared/utils/phone.util';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { ElectronChannel } from '@shared/types';\nimport { BehaviorSubject, finalize, firstValueFrom, map, Observable, of, tap } from 'rxjs';\n\nimport {\n CallAnsweredEventData,\n CallEventTypes,\n CallRangEventData,\n CallStartedEventData,\n} from '../models/call-events.model';\nimport { Integration, LaunchAutoPopType, WebPopCallObject } from '../models/integrations.models';\nimport { LambdaService } from './lambda.service';\n\n@UntilDestroy()\n@Injectable({\n providedIn: 'root',\n})\nexport class IntegrationsService extends ApiService {\n private integrationsSubject = new BehaviorSubject(undefined);\n private isLoadingSubject = new BehaviorSubject(false);\n\n /**\n * The list of available integrations. Will be undefined until the first time the API call\n * has been made. At that point it will be an empty array if no integrations are available.\n */\n public integrations$ = this.integrationsSubject.asObservable();\n public nonAutoWebPopIntegrations$ = this.integrations$.pipe(\n map((integrations) => this.getNonAutoWebPopIntegrations(integrations ?? []))\n );\n public isLoading$ = this.isLoadingSubject.asObservable();\n\n private get integrations(): Integration[] | undefined {\n return this.integrationsSubject.value;\n }\n\n constructor(\n httpClient: HttpClient,\n private lambdaService: LambdaService,\n private wsService: WsService,\n private appConfigService: AppConfigService,\n private configService: AppConfigService,\n private electronService: ElectronService\n ) {\n super(httpClient);\n }\n\n public init() {\n this.setUpWebPopListeners();\n\n this.configService.features$.pipe(untilDestroyed(this)).subscribe((features) => {\n if (\n this.electronService.isRunningInElectron &&\n features[AppFeature.WebPopIntegration] &&\n this.integrations === undefined\n ) {\n this.refreshData().subscribe();\n }\n });\n }\n\n private setUpWebPopListeners() {\n const openIncomingCallAutoWebPops = async (\n event: CallAnsweredEventData | CallRangEventData,\n launchAutoPopType: LaunchAutoPopType\n ) => {\n const callObject = this.createWebPopCallObj(\n event.to,\n event.caller_id,\n event.caller_name,\n event.to,\n event.orig_callid,\n CallDirection.incoming,\n event.time_start\n );\n\n const integrationsToOpen = (this.integrations ?? []).filter(\n (i) => i.launch_scenarios.onIncomingCall.event === launchAutoPopType\n );\n await this.openIncomingCallAutoWebPops(callObject, integrationsToOpen);\n };\n\n this.wsService.socket.on(CallEventTypes.CallRang, async (event: CallRangEventData) => {\n await openIncomingCallAutoWebPops(event, LaunchAutoPopType.ON_RING);\n });\n\n this.wsService.socket.on(CallEventTypes.CallAnswered, async (event: CallAnsweredEventData) => {\n // CallAnswered is a domain event and needs to be filtered by aor to get events just for this user\n if (event.aor === this.appConfigService.provision?.data.nsUid) {\n await openIncomingCallAutoWebPops(event, LaunchAutoPopType.ON_ANSWER);\n }\n });\n\n this.wsService.socket.on(CallEventTypes.CallStarted, async (event: CallStartedEventData) => {\n const callObject = this.createWebPopCallObj(\n event.to,\n event.caller_id,\n event.caller_name,\n event.to,\n event.orig_callid,\n CallDirection.outgoing,\n event.time_start\n );\n\n await this.openOutgoingCallAutoWebPops(callObject, this.integrations ?? []);\n });\n }\n\n // ========== API ==========\n\n public refreshData(): Observable {\n if (!this.electronService.isRunningInElectron || !this.configService.features[AppFeature.WebPopIntegration]) {\n return of(void 0);\n }\n\n this.isLoadingSubject.next(true);\n return this.get(`users/{me}/link-integrations-extensions`).pipe(\n untilDestroyed(this),\n tap((integrations) => {\n this.integrationsSubject.next(integrations);\n }),\n finalize(() => this.isLoadingSubject.next(false))\n );\n }\n\n public async putIntegration(\n integration: Pick\n ): Promise {\n const body = {\n enabled: integration.enabled,\n auto_pop: integration.auto_pop,\n auto_dial: integration.auto_dial,\n };\n\n return await firstValueFrom(\n this.post(`users/{me}/link-integrations-extensions/${integration.id}`, body, {\n method: 'PUT',\n }).pipe(\n tap(() => {\n const integrations = this.integrations;\n if (integrations) {\n const updatedIntegrations = integrations.map((i) => (i.id === integration.id ? { ...i, ...body } : i));\n this.integrationsSubject.next(updatedIntegrations);\n }\n })\n )\n );\n }\n\n // ========== Web Pop ==========\n\n public async openWebPopForIntegration(integration: Integration, call: Call | WebPopCallObject) {\n let webPopCall: WebPopCallObject;\n if (call instanceof Call) {\n webPopCall = this.createWebPopCallWithSIPCall(call);\n } else {\n webPopCall = call;\n }\n\n const url = await this.getIntegrationUrl(integration, webPopCall);\n if (url) {\n if (this.electronService.isRunningInElectron) {\n this.electronService.send(ElectronChannel.OpenLink, { url });\n } else {\n window.open(url, '_blank');\n }\n }\n }\n\n private async openOutgoingCallAutoWebPops(callObj: WebPopCallObject, integrations: Integration[]) {\n const outgoingIntegrations = this.getAutoWebPopIntegrations(integrations, CallDirection.outgoing);\n await Promise.all(outgoingIntegrations.map((integration) => this.openWebPopForIntegration(integration, callObj)));\n }\n\n // Opening Auto web pops for incoming calls\n private async openIncomingCallAutoWebPops(callObj: WebPopCallObject, integrations: Integration[]) {\n const incomingIntegrations = this.getAutoWebPopIntegrations(integrations, CallDirection.incoming);\n await Promise.all(incomingIntegrations.map((integration) => this.openWebPopForIntegration(integration, callObj)));\n }\n\n private async getIntegrationUrl(integration: Integration, callObject: WebPopCallObject): Promise {\n // Assign the integration's customer_id value to the call object, so then it gets replaced by the provided value.\n callObject.customer_id = integration.variables.customer_id ?? '';\n\n let url: string | undefined;\n if (integration.lambda) {\n const result = await this.lambdaService.callLambdaFunction(\n integration.display_name,\n integration.lambda,\n callObject\n );\n url = result.lambdaResult;\n } else {\n url = this.createIntegrationUrl(integration, callObject);\n }\n return url;\n }\n\n private createIntegrationUrl(integration: Integration, callObject: WebPopCallObject): string {\n try {\n let integrationUrl = integration.launch_url;\n const integrationParams = {\n $CALLER_ID_10_DIGIT: this.getProcessedNationalNumber(callObject.phone_number),\n $PHONE_NUMBER: callObject.phone_number,\n $CALLER_ID: callObject.caller_ID,\n $CALL_ID: callObject.call_ID,\n $DATE_TIME: callObject.date_time ?? new Date().toISOString(),\n $DIALED_NUMBER_10_DIGIT: callObject.dialed_number\n ? this.getProcessedNationalNumber(callObject.dialed_number)\n : '',\n $DIALED_NUMBER: callObject.dialed_number ?? '',\n $CALL_DIRECTION: callObject.call_direction === 'incoming' ? 'incoming' : 'outgoing',\n $CUSTOMER_ID: callObject.customer_id ?? '',\n };\n\n for (const [key, value] of Object.entries(integrationParams)) {\n integrationUrl = integrationUrl.replaceAll(key, value);\n }\n\n return integrationUrl;\n } catch (error) {\n console.error('Error calling lambda function:', error);\n return '';\n }\n }\n\n private createWebPopCallWithSIPCall(call: Call): WebPopCallObject {\n if (call.direction === 'outgoing') {\n console.warn('Cannot create web pop call object for outgoing call');\n }\n\n // Strip the suffix character off the \"to\" field.\n const to = call.session.remoteIdentity.uri.user?.replace(/[a-zA-Z]+$/, '') || '';\n return this.createWebPopCallObj(\n to,\n call.remoteUriUser,\n call.remoteDisplayName || call.remoteUriUser,\n call.remoteUriUser,\n call.origCallId || call.id,\n call.direction === 'incoming' ? CallDirection.incoming : CallDirection.outgoing,\n call.createdTimestamp.toISOString()\n );\n }\n\n private createWebPopCallObj(\n phoneNumber: string,\n callerId: string,\n callerName: string,\n dialedNumber: string | null,\n callId: string,\n callDirection: CallDirection,\n dateTime?: string | null\n ): WebPopCallObject {\n return {\n phone_number: phoneNumber,\n caller_ID_10_digit: this.getProcessedNationalNumber(callerId),\n caller_ID: callerId,\n caller_name: callerName ?? '',\n call_direction: callDirection,\n date_time: dateTime ?? new Date().toISOString(),\n call_ID: callId,\n dialed_number: dialedNumber ?? '',\n dialed_number_10_digit: dialedNumber ? this.getProcessedNationalNumber(dialedNumber) : '',\n };\n }\n\n // ========== Helpers ==========\n\n private getAutoWebPopIntegrations(integrations: Integration[], direction: CallDirection): Integration[] {\n return integrations.filter((integration) => {\n const enabled = integration.enabled;\n const autoPopsInDirection = direction === CallDirection.incoming ? integration.auto_pop : integration.auto_dial;\n return enabled && autoPopsInDirection;\n });\n }\n\n private getNonAutoWebPopIntegrations(integrations: Integration[]): Integration[] {\n return integrations.filter(\n (integration) => integration.enabled && (!integration.auto_pop || !integration.auto_dial)\n );\n }\n\n private getProcessedNationalNumber(tel: string): string {\n const result = this.getNationalNumberOrDefault(tel);\n return this.getLastCharacters(result, 10);\n }\n\n private getLastCharacters(str: string, charCount: number): string {\n return str.trim().slice(-charCount);\n }\n\n public getNationalNumberOrDefault(tel: string): string {\n try {\n const number = normalizePhoneNumber(tel);\n return number;\n } catch {\n return tel;\n }\n }\n}\n","import { Component, signal } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { RegisterTelHandlerComponent } from '@app/core/components/banners/register-tel-handler/register-tel-handler.component';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { ProtocolHandlerService } from '@app/core/services/protocol-handler.service';\nimport { PwaService } from '@app/core/services/pwa.service';\nimport { ElectronService } from '@app/electron/electron.service';\nimport { Integration } from '@app/preferences/models/integrations.models';\nimport { LambdaLogDBModel } from '@app/preferences/models/lambda.model';\nimport { IntegrationsService } from '@app/preferences/services/integrations.service';\nimport { LambdaService } from '@app/preferences/services/lambda.service';\nimport { RegisterTelHandlerDialogComponent } from '@app/shared/components/register-tel-handler-dialog/register-tel-handler-dialog.component';\nimport { downloadFile } from '@app/shared/utils/file.util';\nimport { environment } from '@environment/environment';\nimport { UntilDestroy } from '@ngneat/until-destroy';\n\n@UntilDestroy()\n@Component({\n selector: 'app-integrations',\n templateUrl: './integrations.component.html',\n styleUrls: ['./integrations.component.scss'],\n})\nexport class IntegrationsComponent {\n protected readonly panelOpenState = signal(false);\n\n protected readonly isRunningInElectron = this.electronService.isRunningInElectron;\n readonly AppStoreUrls = {\n macAppStore: environment.app.macOS.appStore,\n microsoftStore: environment.app.windows.microsoftStore,\n };\n protected readonly AppFeature = AppFeature;\n\n constructor(\n protected pwaService: PwaService,\n protected appConfigService: AppConfigService,\n protected protocolHandlerService: ProtocolHandlerService,\n protected electronService: ElectronService,\n protected integrationsService: IntegrationsService,\n protected lambdaService: LambdaService,\n private dialog: MatDialog\n ) {}\n\n async installConnectUCPwa() {\n if (await this.pwaService.promptInstall()) {\n this.dialog.open(RegisterTelHandlerDialogComponent, {\n data: {\n protocolUrl: RegisterTelHandlerComponent.protocolUrl,\n },\n disableClose: true,\n });\n }\n }\n\n protected registerTelHandler() {\n try {\n this.protocolHandlerService.registerProtocolHandler('tel', RegisterTelHandlerComponent.protocolUrl);\n } catch (error) {\n console.error('registerProtocolHandler error', error);\n }\n }\n\n protected handleAppStoreUrlClick(url: string) {\n if (url) {\n window.open(url);\n }\n }\n\n protected async handleIntegrationUpdated(integration: Integration) {\n try {\n await this.integrationsService.putIntegration(integration);\n } catch (error) {\n console.error('handleIntegrationUpdated error', error);\n }\n }\n\n protected handleDownloadLogClick(log: LambdaLogDBModel) {\n downloadFile(`lambda-log-${log.createdAt}.txt`, JSON.stringify(log, null, 2), 'document');\n }\n}\n","
\n

{{ 'INTEGRATIONS_PREFERENCES.WEBPOP' | translate }}

\n

{{ 'INTEGRATIONS_PREFERENCES.BROWSER_INTEGRATION' | translate }}

\n \n

{{ 'INTEGRATIONS_PREFERENCES.BROWSER_INTEGRATION_DESCRIPTION' | translate }}

\n\n
\n \n @let isPwaInstalled = pwaService.pwaInstalled$ | async;\n \n publish\n {{ 'INTEGRATIONS_PREFERENCES.INSTALL_BUTTON' | translate }}\n \n \n {{ 'INTEGRATIONS_PREFERENCES.REGISTER_FOR_ONE_CLICK' | translate }}\n \n
\n
\n\n\n\n@if (!isRunningInElectron) {\n
\n

{{ 'INTEGRATIONS_PREFERENCES.CONNECTUC_LINK' | translate }}

\n \n

\n {{ 'INTEGRATIONS_PREFERENCES.CONNECTUC_LINK_DESCRIPTION' | translate }}\n

\n
\n \n \n {{ 'INTEGRATIONS_PREFERENCES.INSTALL_FOR_MAC' | translate }}\n \n \n \n {{ 'INTEGRATIONS_PREFERENCES.INSTALL_FOR_WINDOWS' | translate }}\n \n
\n
\n}\n\n@if (isRunningInElectron && appConfigService.features[AppFeature.WebPopIntegration]) {\n
\n

{{ 'INTEGRATIONS_PREFERENCES.AVAILABLE_WEBPOP_INTEGRATIONS' | translate }}

\n \n

{{ 'INTEGRATIONS_PREFERENCES.AVAILABLE_WEBPOP_INTEGRATIONS_DESCRIPTION' | translate }}

\n\n @let isLoading = integrationsService.isLoading$ | async;\n @if (isLoading) {\n \n } @else {\n
\n @let integrations = integrationsService.integrations$ | async;\n @if (integrations && integrations.length > 0) {\n @for (integration of integrations; track integration.id) {\n \n \n \n }\n\n
\n

\n {{ 'INTEGRATIONS_PREFERENCES.ADVANCED_CONFIGURATION_LOGS' | translate }}\n

\n\n @let logs = (lambdaService.logs$ | async) || [];\n @if (logs.length > 0) {\n \n @for (log of logs; track log.createdAt) {\n \n \n {{ log.integrationTitle }} \n {{ log.createdAt | date: 'mediumDate' }} \n \n \n \n }\n \n } @else {\n
\n {{ 'INTEGRATIONS_PREFERENCES.NO_LOGS' | translate }}\n
\n }\n
\n }\n
\n }\n
\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AudioUtil } from '@app/shared/utils/audio.util';\nimport { firstValueFrom } from 'rxjs';\n\nimport { notificationItemMap, NotificationItems, NotificationType } from '../../models/settings.models';\nimport { SettingsPage } from '../../models/settings-page';\nimport { NotificationService } from '../../services/notification.service';\nimport { SettingsService } from '../../services/settings.service';\n\n@Component({\n selector: 'app-notification',\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n})\nexport class NotificationComponent extends SettingsPage implements OnInit, OnDestroy {\n notificationItems: NotificationItems[];\n audioUtil: AudioUtil;\n formGroup: FormGroup;\n\n private removedTypes: NotificationType[] = [];\n\n constructor(\n private formBuilder: FormBuilder,\n private settingsService: SettingsService,\n private notificationService: NotificationService,\n private configService: AppConfigService\n ) {\n super();\n this.formGroup = this.formBuilder.group({\n formItems: this.formBuilder.array([]),\n });\n }\n\n ngOnInit(): void {\n if (!this.configService.features[AppFeature.Chat]) {\n this.removedTypes.push(\n NotificationType.Chat,\n NotificationType.GroupMeetingStarted,\n NotificationType.MeetingJoined\n );\n }\n if (!this.configService.features[AppFeature.Fax]) {\n this.removedTypes.push(NotificationType.IncomingFax);\n }\n this.notificationItems = Object.values(notificationItemMap).filter(\n (item) => !this.removedTypes.includes(item.title)\n );\n this.notificationItems.forEach((_item) => {\n this.formItems.push(this.createItem(_item));\n });\n }\n\n get formItems(): FormArray {\n return this.formGroup.get('formItems') as FormArray;\n }\n\n private createItem(item: NotificationItems): FormGroup {\n return this.formBuilder.group({\n enableSound: item.notificationSound,\n enableNotification: item.showNotification,\n enableForegroundNotification: item.showInForeground,\n soundSelect: item.ringtone,\n });\n }\n\n async save() {\n this.notificationItems.forEach((item, index) => {\n item.ringtone = this.formItems.controls[index].value.soundSelect;\n item.notificationSound = this.formItems.controls[index].value.enableSound;\n item.showNotification = this.formItems.controls[index].value.enableNotification;\n item.showInForeground = this.formItems.controls[index].value.enableForegroundNotification;\n });\n await firstValueFrom(this.notificationService.updateNotificationSettings([...this.notificationItems]));\n }\n\n onCheckChange() {\n this.disabled = false;\n }\n\n async onRingtoneChanged(index: number, option: string) {\n this.formItems.controls[index].patchValue({ select: option });\n this.disabled = false;\n await this.play(option);\n }\n\n async play(select: string, e?: MouseEvent) {\n e?.stopPropagation();\n this.audioUtil?.pause();\n this.audioUtil = new Audio(`../../../assets/sounds/${select}.wav`) as AudioUtil;\n await this.settingsService.playAudio(this.audioUtil);\n }\n\n ngOnDestroy(): void {\n this.audioUtil?.pause();\n }\n\n getItemName(index: number): string {\n return this.notificationItems[index].title === 'SMS'\n ? this.notificationItems[index].title\n : this.notificationItems[index].title.toLowerCase();\n }\n}\n","
\n
\n \n \n

{{ notificationItems[i].title }}

\n
\n \n {{ 'NOTIFICATION_PREFERENCES.ENABLE_SOUND' | translate:{itemName: getItemName(i)} }}\n \n \n {{ 'NOTIFICATION_PREFERENCES.SHOW_NOTIFICATION_MINIMIZED' | translate }}\n \n \n {{ 'NOTIFICATION_PREFERENCES.SHOW_NOTIFICATION_FOREGROUND' | translate }}\n \n \n {{ 'NOTIFICATION_PREFERENCES.SELECT_LABEL' | translate }}\n
\n \n \n {{ option.title }}\n \n \n volume_up\n
\n \n
\n \n \n \n
\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AudioUtil, microphonePermission, sanitizeAudioContextSinkId } from '@app/shared/utils/audio.util';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { finalize, firstValueFrom } from 'rxjs';\n\nimport { AudioSettings } from '../../models/settings.models';\nimport { SettingsPage } from '../../models/settings-page';\nimport { SettingsService } from '../../services/settings.service';\n\ntype Type = 'Call' | 'Notification';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audio',\n templateUrl: './audio.component.html',\n styleUrls: ['./audio.component.scss'],\n})\nexport class AudioComponent extends SettingsPage implements OnInit, OnDestroy {\n ringtoneIncomingCall = '../../../assets/sounds/ringtone-incoming-call.wav';\n notificationSound = '../../../assets/sounds/notification_simple-01.wav';\n audioElement = new Audio() as AudioUtil;\n inputSound = new Audio() as AudioUtil;\n isRecording: boolean | null = false; //null means playing back the recorded sound\n recorder: MediaRecorder;\n counter = 0;\n currentMicrophoneVolume: number = 0;\n currentSpeakerVolume: number = 0;\n canceled = false;\n stream: MediaStream | null = null;\n private audioContext = new AudioContext();\n private audioSource: MediaElementAudioSourceNode | MediaStreamAudioSourceNode | null = null;\n audioForm: FormGroup;\n @Input() displayedInPopupWindow = false;\n protected activeTest?: Type;\n\n get microphoneDevice(): string {\n return this.audioForm.get('microphoneDevice')!.value;\n }\n\n get speakerDevice(): string {\n return this.audioForm.get('speakerDevice')!.value;\n }\n\n get notificationSoundVolume(): number {\n return this.audioForm.get('notificationSoundVolume')!.value;\n }\n\n get ringingSoundVolume(): number {\n return this.audioForm.get('ringingSoundVolume')!.value;\n }\n\n get notificationSpeakerDevice() {\n return this.audioForm.get('notificationSpeakerDevice')!.value;\n }\n\n constructor(\n public settingsService: SettingsService,\n private appConfigService: AppConfigService,\n private formBuilder: FormBuilder\n ) {\n super();\n this.audioForm = this.createFormGroup(this.settingsService.getDefaultAudioSettings());\n }\n\n ngOnInit() {\n this.settingsService.audioSettings$.pipe(untilDestroyed(this)).subscribe(async (settings: AudioSettings) => {\n settings.quietRinging = false; // TODO: remove this when we return to the quietRinging option\n settings = this.settingsService.audioReplaceNullsWithDefaults(settings);\n this.audioForm = this.createFormGroup(settings);\n await this.scanDevices();\n\n if (!this.settingsService.isSetSinkIdSupported || this.settingsService.outputDevices.length === 0) {\n this.audioForm.controls['speakerDevice'].disable();\n }\n });\n }\n\n private createFormGroup(audioSettings: AudioSettings): FormGroup {\n return this.formBuilder.group({\n notificationSoundVolume: [audioSettings.notificationSoundVolume],\n ringingSoundVolume: [audioSettings.ringingSoundVolume],\n quietRinging: [audioSettings.quietRinging],\n speakerDevice: [audioSettings.speakerDevice],\n notificationSpeakerDevice: [audioSettings.notificationSpeakerDevice],\n microphoneDevice: [audioSettings.microphoneDevice],\n enableDualRinging: [audioSettings.enableDualRinging],\n });\n }\n\n async scanDevices() {\n try {\n if (await microphonePermission.check()) {\n await this.settingsService.scanForAudioDevices();\n this.setDefaultDevices();\n }\n } catch (error) {\n console.error('Error enumerating devices:', error);\n }\n }\n\n private setDefaultDevices(): void {\n const inputDevices = this.settingsService.inputDevices;\n if (inputDevices.length > 0) {\n const defaultMicrophoneDevice = inputDevices[0].deviceId;\n const isDefaultMicrophoneAvailable = inputDevices.some((device) => device.deviceId === this.microphoneDevice);\n this.audioForm.patchValue({\n microphoneDevice: isDefaultMicrophoneAvailable ? this.microphoneDevice : defaultMicrophoneDevice,\n });\n } else {\n this.audioForm.controls['microphoneDevice'].disable();\n }\n\n const outputDevices = this.settingsService.outputDevices;\n if (outputDevices.length > 0) {\n const defaultSpeakerDevice = outputDevices[0].deviceId;\n const isDefaultSpeakerAvailable = outputDevices.some((device) => device.deviceId === this.speakerDevice);\n const isDefaultNotificationSpeakerAvailable = outputDevices.some(\n (device) => device.deviceId === this.notificationSpeakerDevice\n );\n this.audioForm.patchValue({\n speakerDevice: isDefaultSpeakerAvailable ? this.speakerDevice : defaultSpeakerDevice,\n notificationSpeakerDevice: isDefaultNotificationSpeakerAvailable\n ? this.notificationSpeakerDevice\n : defaultSpeakerDevice,\n });\n }\n }\n\n async setupAudioContextAndNodes(\n audio: MediaStream | HTMLAudioElement,\n device?: {\n deviceId: string;\n isOutputDevice: boolean;\n }\n ) {\n this.audioSource =\n audio instanceof HTMLAudioElement\n ? this.audioContext.createMediaElementSource(audio)\n : this.audioContext.createMediaStreamSource(audio);\n\n const destination = this.audioContext.createMediaStreamDestination();\n const analyser = this.audioContext.createAnalyser();\n analyser.fftSize = 2048;\n\n // When the audio graph is set up using AudioContext, we need to call\n // setSinkId on it otherwise audio gets piped through the OS-default audio device.\n if ('setSinkId' in AudioContext.prototype && device && device.isOutputDevice) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await (this.audioContext as any).setSinkId(sanitizeAudioContextSinkId(device.deviceId));\n }\n this.audioSource?.connect(analyser);\n audio instanceof HTMLAudioElement && analyser.connect(this.audioContext.destination);\n\n return { destination, analyser };\n }\n\n drawAudioMeter(analyser: AnalyserNode, updateVolumeCallback: (volume: number) => void) {\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n const drawMeter = () => {\n requestAnimationFrame(drawMeter);\n analyser.getByteFrequencyData(dataArray);\n const average = dataArray.reduce((a, b) => a + b) / bufferLength;\n const percentage = Math.min(100, average);\n const volume = Math.floor(percentage / 10);\n updateVolumeCallback(volume);\n };\n drawMeter();\n }\n\n async setupAndStartRecorder(destination: MediaStreamAudioDestinationNode) {\n this.recorder = new MediaRecorder(destination.stream);\n const chunks: Blob[] = [];\n this.counter = 1;\n let intervalId = setInterval(() => {\n this.counter++;\n }, 1000);\n this.isRecording = true;\n this.recorder.ondataavailable = (event) => {\n chunks.push(event.data);\n };\n this.recorder.onstop = async () => {\n clearInterval(intervalId);\n const audioBlob = new Blob(chunks, { type: 'audio/webm' });\n this.inputSound.src = URL.createObjectURL(audioBlob);\n this.isRecording = null;\n intervalId = setInterval(() => {\n this.counter--;\n if (this.counter === 0) {\n this.isRecording = false;\n clearInterval(intervalId);\n }\n }, 1000);\n if (!this.canceled) {\n await this.settingsService.playAudio(this.inputSound, this.ringingSoundVolume, this.speakerDevice);\n }\n };\n\n this.recorder.start();\n\n setTimeout(() => {\n this.stopInputTest();\n }, 10_000);\n }\n\n async testInputSound() {\n try {\n this.stopInputTest();\n this.stopOutputTest();\n\n this.audioElement = new Audio() as AudioUtil;\n this.stream = await navigator.mediaDevices.getUserMedia({ audio: { deviceId: this.microphoneDevice } });\n const { destination, analyser } = await this.setupAudioContextAndNodes(this.stream, {\n deviceId: this.microphoneDevice,\n isOutputDevice: false,\n });\n this.drawAudioMeter(analyser, (volume) => (this.currentMicrophoneVolume = volume));\n await this.setupAndStartRecorder(destination);\n this.audioSource?.connect(destination);\n } catch (error) {\n console.log(error);\n }\n }\n\n async testOutputDevice(device: string, type: Type) {\n this.stopInputTest();\n this.stopOutputTest();\n\n this.audioElement = new Audio(this.ringtoneIncomingCall) as AudioUtil;\n this.activeTest = type;\n this.audioElement.loop = true;\n const soundVolume = type === 'Call' ? this.ringingSoundVolume : this.notificationSoundVolume;\n await this.settingsService.playAudio(this.audioElement, soundVolume, device);\n const { analyser } = await this.setupAudioContextAndNodes(this.audioElement, {\n deviceId: device,\n isOutputDevice: true,\n });\n this.drawAudioMeter(analyser, (volume) => (this.currentSpeakerVolume = volume));\n }\n\n stopOutputTest() {\n this.activeTest = undefined;\n this.audioElement.pause();\n }\n\n stopInputTest() {\n this.activeTest = undefined;\n this.inputSound.pause();\n if (this.isRecording) {\n this.recorder.stop();\n }\n if (this.stream) {\n for (const track of this.stream.getTracks()) {\n track.stop();\n }\n this.stream = null;\n }\n }\n\n protected async onChange(type: Type) {\n this.stopInputTest();\n this.stopOutputTest();\n\n const src = type === 'Call' ? this.ringtoneIncomingCall : this.notificationSound;\n const volume = type === 'Call' ? this.ringingSoundVolume : this.notificationSoundVolume;\n\n this.audioElement = new Audio(src) as AudioUtil;\n this.audioElement.loop = false;\n await this.settingsService.playAudio(this.audioElement, volume, this.notificationSpeakerDevice);\n\n this.disabled = false;\n }\n\n async save() {\n this.stopInputTest();\n this.stopOutputTest();\n this.loading = true;\n await firstValueFrom(\n this.appConfigService.saveAudioSettings(this.audioForm.value).pipe(finalize(() => (this.loading = false)))\n );\n }\n\n ngOnDestroy() {\n this.canceled = true;\n this.disabled = true;\n this.stopInputTest();\n this.stopOutputTest();\n }\n}\n","\n
\n

{{ 'AUDIO.AUDIO_SETTINGS' | translate }}

\n \n {{ 'AUDIO.RESCAN_DEVICES' | translate }}\n \n
\n \n
{{ 'AUDIO.NOTIFICATIONS_AND_RINGING' | translate }}
\n
\n
\n {{ 'AUDIO.NOTIFICATION_SOUND_VOLUME' | translate }}\n \n \n \n
\n
\n {{ 'AUDIO.RINGING_SOUND_VOLUME' | translate }}\n \n \n \n
\n \n {{ 'AUDIO.RINGING_&_NOTIFICATION_SPEAKER' | translate }}\n \n {{ device.label }}\n \n \n \n {{ device.label }}\n \n \n \n \n \n {{ 'AUDIO.QUIET_RINGING_WHEN_IN_MEETING' | translate }}\n \n
\n {{ 'AUDIO.ALSO_RING_CALLS_&_MEETINGS_SPEAKER' | translate }}\n \n
\n
\n
{{ 'AUDIO.CALLS_&_MEETINGS' | translate }}
\n
\n
\n \n {{ 'AUDIO.CALLS_AND_MEETINGS_SPEAKER' | translate }}\n \n \n {{ device.label }}\n \n \n \n \n {{ device.label }}\n \n \n \n \n
\n
\n \n {{ 'AUDIO.MICROPHONE' | translate }}\n \n \n {{ device.label }}\n \n \n \n \n {{ device.label }}\n \n \n \n
\n
\n \n {{ 'AUDIO.TEST_SOUND' | translate }}\n \n \n {{ 'AUDIO.STOP_TEST_AND_HEAR_RECORDING' | translate }}\n \n 0\"\n class=\"counter-time\">\n {{ (isRecording ? 'AUDIO.RECORDING_TIME' : 'AUDIO.PLAYING_TIME_LEFT') | translate }} : {{ counter }} sec\n

\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n\n\n
\n \n {{ 'AUDIO.TEST_SOUND' | translate }}\n \n \n {{ 'AUDIO.STOP_TEST' | translate }}\n \n
\n
\n \n
\n
\n \n {{ 'AUDIO.BROWSER_NOT_SUPPORTED' | translate }}\n \n

\n
\n\n","import { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { ChimeMeetingService } from '@app/meetings/services/chime-meeting.service';\nimport { ConsoleLogger, DefaultDeviceController, Device, LogLevel } from 'amazon-chime-sdk-js';\nimport { finalize, firstValueFrom } from 'rxjs';\n\nimport { VideoSettings } from '../../models/settings.models';\nimport { SettingsPage } from '../../models/settings-page';\nimport { SettingsService } from '../../services/settings.service';\n\n@Component({\n selector: 'app-video',\n templateUrl: './video.component.html',\n styleUrls: ['./video.component.scss'],\n})\nexport class VideoComponent extends SettingsPage implements OnInit, OnDestroy {\n @ViewChild('video', { static: true })\n private webcam: ElementRef;\n private currentMediaStream: MediaStream;\n private componentDestroyed = false;\n activeCameraList: MediaDeviceInfo[] = [];\n selectedCamera?: MediaDeviceInfo;\n form: FormGroup;\n private deviceController: DefaultDeviceController;\n\n get mirrorLocalVideo(): boolean {\n return this.form.controls['mirrorLocalVideo'].value;\n }\n\n get cameraDevice(): string {\n return this.form.controls['cameraDevice'].value;\n }\n\n set cameraDevice(deviceId: string) {\n this.form.controls['cameraDevice'].setValue(deviceId);\n }\n\n get blurBackground(): boolean {\n return this.form.controls['blurBackground'].value;\n }\n\n set blurBackground(blurBackground: boolean) {\n this.form.controls['blurBackground'].setValue(blurBackground);\n }\n\n constructor(\n private settingsService: SettingsService,\n private formBuilder: FormBuilder,\n private chimeMeetingService: ChimeMeetingService,\n private appConfigService: AppConfigService,\n private appTranslateService: AppTranslateService\n ) {\n super();\n this.form = this.createFormGroup(this.settingsService.videoSettings);\n }\n\n public ngOnInit(): void {\n this.settingsService.videoSettings$.subscribe(async (settings: VideoSettings) => {\n this.form = this.createFormGroup(settings);\n await this.scanDevices();\n await this.tryStartCameraStream();\n });\n }\n\n private createFormGroup(settings: VideoSettings): FormGroup {\n return this.formBuilder.group({\n cameraDevice: [settings.cameraDevice],\n mirrorLocalVideo: [settings.mirrorLocalVideo],\n blurBackground: [settings.blurBackground],\n cameraOn: [settings.cameraOn],\n });\n }\n\n async scanDevices() {\n this.activeCameraList = [];\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n const mediaDevices: MediaDeviceInfo[] = await navigator.mediaDevices.enumerateDevices();\n if (mediaDevices && mediaDevices.length > 0) {\n this.activeCameraList = mediaDevices.filter(\n (camera: MediaDeviceInfo) => camera.deviceId && camera.kind === 'videoinput'\n );\n if (this.activeCameraList.length > 0) {\n if (this.cameraDevice) {\n this.selectedCamera = this.activeCameraList.find(\n (camera: MediaDeviceInfo) => camera.deviceId === this.cameraDevice\n );\n if (!this.selectedCamera) {\n this.selectFirstCamera();\n }\n } else {\n this.selectFirstCamera();\n }\n }\n }\n }\n }\n\n selectFirstCamera() {\n this.selectedCamera = this.activeCameraList[0];\n this.cameraDevice = this.selectedCamera.deviceId;\n }\n\n async tryStartCameraStream() {\n try {\n await this.startCameraStream();\n } catch (error) {\n alert(error);\n }\n }\n\n async startCameraStream() {\n const logger = new ConsoleLogger('uc-web-v2 Video Preferences', LogLevel.INFO);\n this.deviceController = new DefaultDeviceController(logger);\n\n // Get the input stream. Use either the selected camera or query for one using `getUserMedia`\n let inputDevice: Device | undefined = this.selectedCamera;\n if (!inputDevice) {\n inputDevice = await navigator.mediaDevices.getUserMedia({\n video: {\n deviceId: this.cameraDevice ?? undefined,\n },\n });\n }\n\n if (!inputDevice) {\n throw new Error(this.appTranslateService.instant('VIDEO_SETTINGS_PREFERENCES.NOT_SUPPORTED_YOUR_CAMERA'));\n }\n\n const transformDevice = await this.chimeMeetingService.getVideoTransformDevice(\n this.selectedCamera!,\n this.blurBackground\n );\n const mediaStream = await this.deviceController.startVideoInput(transformDevice);\n if (!mediaStream) {\n throw new Error(this.appTranslateService.instant('VIDEO_SETTINGS_PREFERENCES.NOT_SUPPORTED_YOUR_CAMERA'));\n }\n if (this.componentDestroyed) {\n await this.stopCameraStream(mediaStream);\n return;\n }\n this.bindStreamToVideoElement(mediaStream);\n }\n\n private bindStreamToVideoElement(stream: MediaStream) {\n this.currentMediaStream = stream;\n const videoElement = this.webcam.nativeElement;\n videoElement.srcObject = stream;\n videoElement.muted = videoElement.autoplay = videoElement.playsInline = true;\n }\n\n private async stopCameraStream(stream: MediaStream) {\n if (stream) {\n for (const track of stream.getTracks()) {\n track.stop();\n }\n await this.deviceController?.stopVideoInput();\n }\n }\n\n async onCameraChanged(selectedCamera: MediaDeviceInfo) {\n this.disabled = false;\n // stop previous camera's stream\n await this.stopCameraStream(this.currentMediaStream);\n // start new camera's stream\n this.cameraDevice = selectedCamera.deviceId;\n this.selectedCamera = selectedCamera;\n await this.tryStartCameraStream();\n }\n\n async save() {\n this.loading = true;\n await firstValueFrom(\n this.appConfigService.saveVideoSettings(this.form.value).pipe(finalize(() => (this.loading = false)))\n );\n }\n\n onFormChange() {\n this.disabled = false;\n }\n\n async onBackgroundStatusChange(event) {\n const isChecked = event.checked;\n this.disabled = false;\n this.blurBackground = isChecked;\n await this.stopCameraStream(this.currentMediaStream);\n await this.tryStartCameraStream();\n }\n\n async ngOnDestroy() {\n this.componentDestroyed = true;\n await this.stopCameraStream(this.currentMediaStream);\n }\n}\n","
\n
\n

{{ 'VIDEO_SETTINGS_PREFERENCES.VIDEO_SETTINGS' | translate }}

\n \n {{ 'VIDEO_SETTINGS_PREFERENCES.RESCAN_DEVICES' | translate }}\n \n
\n
\n \n
\n\n 0\"\n appearance=\"outline\">\n {{ 'VIDEO_SETTINGS_PREFERENCES.CAMERA' | translate }}\n \n \n {{ item.label }}\n \n \n \n
\n
\n {{'VIDEO_SETTINGS_PREFERENCES.MIRROR_LOCAL_VIDEO' | translate}}\n \n {{ 'VIDEO_SETTINGS_PREFERENCES.BLUR_BACKGROUND_DURING_CALLS' | translate }}\n \n {{'VIDEO_SETTINGS_PREFERENCES.CAMERA_WHEN_ENTERING_MEETING' | translate}}\n \n
\n
\n
\n","export interface TimeRangeData {\n order: string;\n date_from: string;\n date_to: string;\n days: string;\n tod_from: string;\n tod_to: string;\n invert: string;\n}\n\nexport interface TimeFrame {\n time_frame: string;\n owner: string;\n in_use: boolean;\n time_range_data: TimeRangeData[];\n}\n\nexport interface SimRingDestination {\n destination: string;\n delay: number;\n}\n\nexport interface AnsweringRule {\n priority?: string;\n timeFrame?: string;\n enabled: boolean;\n doNotDisturb: boolean;\n callScreening: boolean;\n forwardAlways: {\n enabled: boolean;\n destination: string;\n };\n forwardOnActive: {\n enabled: boolean;\n destination: string;\n };\n forwardBusy: {\n enabled: boolean;\n destination: string;\n };\n forwardNoAnswer: {\n enabled: boolean;\n destination: string;\n };\n forwardOffline: {\n enabled: boolean;\n destination: string;\n };\n simRing: {\n enabled: boolean;\n usersExtension: boolean;\n allDevices: boolean;\n confirmOffnet: boolean;\n otherDestinations: SimRingDestination[];\n };\n}\n\nexport interface AnsweringRuleResponse {\n id?: string;\n priority: string;\n domain: string;\n user: string;\n timeframe: string;\n enabled: boolean;\n doNotDisturb: boolean;\n callScreening: boolean;\n forwardAlways: {\n enabled: boolean;\n destination: string | Record | null;\n };\n forwardOnActive: {\n enabled: boolean;\n destination: string | Record | null;\n };\n forwardBusy: {\n enabled: boolean;\n destination: string | Record | null;\n };\n forwardNoAnswer: {\n enabled: boolean;\n destination: string | Record | null;\n };\n forwardOffline: {\n enabled: boolean;\n destination: string | Record | null;\n };\n simRing: {\n enabled: boolean;\n usersExtension: boolean;\n allDevices: boolean;\n confirmOffnet?: boolean;\n otherDestinations: SimRingDestination[];\n };\n}\n\nexport enum AnsweringRuleType {\n ForwardAllCalls = 'forwardAllCalls',\n DoNotDisturb = 'doNotDisturb',\n OnlyPrimaryDeskphone = 'onlyPrimaryDeskphone',\n SimultaneousRing = 'simultaneousRing',\n}\n\nexport enum TimeFrameType {\n Always = 'always',\n DaysAndTimes = 'daysAndTimes',\n SpecificDates = 'specificDates',\n}\n\nexport interface GeneralResponse {\n success: boolean;\n}\n\nexport interface RingDurationResponse {\n success: boolean;\n duration: number;\n}\n\nexport interface InUseResponse {\n inuse: boolean;\n}\n\nexport interface ForwardDestination {\n value: string;\n description: string;\n}\n\nexport interface ActiveRuleResponse {\n active: string;\n time_frame: string;\n dnd_control: string;\n domain: string;\n enable: string;\n fbu_control: string;\n fna_control: string;\n fnr_control: string;\n foa_control: string;\n for_control: string;\n priority: string;\n scr_control: string;\n sim_control: string;\n user: string;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ContactService } from '@app/contacts/services/contact.service';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { BaseStateService } from '@app/core/services/base.state.service';\nimport { PhoneNumberPipe } from '@app/shared/pipes/phone-number.pipe';\nimport { environment } from '@environment/environment';\nimport { BehaviorSubject, catchError, finalize, firstValueFrom, forkJoin, map, Observable, of, tap } from 'rxjs';\n\nimport {\n ActiveRuleResponse,\n AnsweringRule,\n AnsweringRuleResponse,\n AnsweringRuleType,\n ForwardDestination,\n GeneralResponse,\n InUseResponse,\n RingDurationResponse,\n TimeFrame,\n TimeFrameType,\n TimeRangeData,\n} from '../models/answering-rules.models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AnsweringRulesService extends BaseStateService {\n protected path = '';\n protected override baseUrl = `${environment.gateway}/users/{me}`;\n\n private answeringRulesLoadingSubject = new BehaviorSubject(true);\n public answeringRulesLoading$ = this.answeringRulesLoadingSubject.asObservable();\n\n private timeFramesLoadingSubject = new BehaviorSubject(false);\n public timeFramesLoading$ = this.timeFramesLoadingSubject.asObservable();\n\n public readonly answeringRulesSubject = new BehaviorSubject([]);\n public readonly answeringRules$ = this.answeringRulesSubject.asObservable();\n\n private readonly timeFramesSubject = new BehaviorSubject([]);\n public readonly timeFrames$ = this.timeFramesSubject.asObservable();\n\n private forwardDestinationsSubject = new BehaviorSubject([]);\n public readonly forwardDestinations$ = this.forwardDestinationsSubject.asObservable();\n\n private readonly activeRuleNameSubject = new BehaviorSubject('');\n public readonly activeRuleName$ = this.activeRuleNameSubject.asObservable();\n\n public isCurrentUserOfficeManager = false;\n\n constructor(\n httpClient: HttpClient,\n private contactService: ContactService,\n private appConfigService: AppConfigService\n ) {\n super(httpClient);\n\n this.contactService.currentUser$.subscribe((currentUser) => {\n this.isCurrentUserOfficeManager = currentUser?.scope?.includes('Office Manager') || false;\n });\n }\n\n public fetchData() {\n this.getDestinationsAndRules();\n this.getTimeFrames();\n }\n\n public getRingDuration(): Observable {\n return this.get('ring-duration');\n }\n\n public setRingDuration(duration: number): Observable {\n return this.post(`ring-duration/${duration}`, '', { method: 'PUT' });\n }\n\n public createRule(timeFrame: string, rule: AnsweringRule): Observable {\n return this.post(`answering-rules/${timeFrame}`, rule, { method: 'POST' }).pipe(\n tap(() => {\n this.getAnsweringRules(true);\n this.updateInUseState(timeFrame);\n })\n );\n }\n\n public updateRule(timeFrame: string, rule: AnsweringRule, withLoadingObserver = true): Observable {\n return this.post(`answering-rules/${timeFrame}`, rule, { method: 'PUT' }).pipe(\n tap(() => {\n this.getAnsweringRules(withLoadingObserver);\n })\n );\n }\n\n public deleteRule(timeFrame: string): Observable {\n return this.delete(`answering-rules/${timeFrame}`).pipe(\n tap(() => {\n this.getAnsweringRules(false);\n this.updateInUseState(timeFrame);\n })\n ) as Observable;\n }\n\n public getActiveRule(): Observable {\n return this.get('answering-rules/active').pipe(\n tap((data) => {\n this.activeRuleNameSubject.next(data.time_frame);\n })\n );\n }\n\n public addTimeFrame(name: string, data: TimeRangeData[], inUse = false): Observable {\n return this.upsertTimeFrame(name, data, inUse, 'add');\n }\n\n public updateTimeFrame(name: string, data: TimeRangeData[], inUse = false): Observable {\n return this.upsertTimeFrame(name, data, inUse, 'update');\n }\n\n private upsertTimeFrame(\n name: string,\n data: TimeRangeData[],\n inUse: boolean,\n action: 'add' | 'update'\n ): Observable {\n const timeFrameData = {\n shared: this.isCurrentUserOfficeManager && this.appConfigService.features[AppFeature.ModifyTimeFrames],\n time_range_data: data,\n };\n return this.post(`time-frames/${name}`, timeFrameData, {\n method: action === 'add' ? 'POST' : 'PUT',\n }).pipe(\n tap(() => {\n this.upsertLocalTimeFrame(name, data, inUse);\n })\n );\n }\n\n public deleteTimeFrame(timeFrame: string): Observable {\n return this.delete(`time-frames/${timeFrame}`).pipe(\n tap(() => {\n this.deleteLocalTimeFrame(timeFrame);\n })\n ) as Observable;\n }\n\n public setPriority(rulesOrder: string): Observable {\n return this.post('answering-rules', { priority: rulesOrder }, { method: 'PUT' }).pipe(\n tap(() => {\n this.getAnsweringRules(false);\n })\n );\n }\n\n public timeFrameInUse(timeFrame: string): Observable {\n return this.get(`time-frames-inuse/${timeFrame}`);\n }\n\n public answeringRuleType(answeringRule: AnsweringRule): AnsweringRuleType {\n if (answeringRule.doNotDisturb) {\n return AnsweringRuleType.DoNotDisturb;\n } else if (answeringRule.simRing.enabled) {\n return AnsweringRuleType.SimultaneousRing;\n } else if (answeringRule.forwardAlways.enabled) {\n return AnsweringRuleType.ForwardAllCalls;\n } else {\n return AnsweringRuleType.OnlyPrimaryDeskphone;\n }\n }\n\n public timeFrameType(timeFrame: TimeFrame): TimeFrameType {\n if (timeFrame.time_range_data.some((tf) => tf.date_from === 'now' && tf.date_to === 'never' && tf.days === '*')) {\n return TimeFrameType.Always;\n } else if (timeFrame.time_range_data.length > 0 && timeFrame.time_range_data[0].days.match(String.raw`\\d`)) {\n return TimeFrameType.DaysAndTimes;\n } else {\n return TimeFrameType.SpecificDates;\n }\n }\n\n public filterTimeFrames(filterPersonal: boolean): TimeFrame[] {\n return filterPersonal\n ? this.timeFramesSubject.value.filter((tf) => tf.owner !== '*')\n : this.timeFramesSubject.value;\n }\n\n public fwdDestDescriptionToValueString(description: string): string {\n const dest = this.forwardDestinationsSubject.value.find((item) => item.description === description);\n return dest ? dest.value : description;\n }\n\n public fwdDestValueToDescriptionString(value: string): string {\n const dest = this.forwardDestinationsSubject.value.find((item) => item.value === value);\n return dest ? dest.description : value;\n }\n\n private getTimeFrames() {\n this.timeFramesLoadingSubject.next(true);\n return this.get('time-frames')\n .pipe(\n catchError((error) => {\n this.timeFramesSubject.next([]);\n return error;\n }),\n finalize(() => this.timeFramesLoadingSubject.next(false))\n )\n .subscribe((data: TimeFrame[]) => {\n this.timeFramesSubject.next(this.sortTimeFrames(data));\n });\n }\n\n private getAnsweringRulesAPI(withLoadingObserver: boolean): Observable {\n if (withLoadingObserver) {\n this.answeringRulesLoadingSubject.next(true);\n }\n this.getActiveRuleInternal();\n\n return this.get('answering-rules').pipe(\n catchError((error) => {\n console.warn('Get answering rules error', error);\n return of([]);\n })\n );\n }\n\n private async getActiveRuleInternal() {\n try {\n await firstValueFrom(this.getActiveRule());\n } catch (error) {\n console.error('Get active rule error:', error);\n this.activeRuleNameSubject.next('');\n }\n }\n\n private getAnsweringRules(withLoadingObserver: boolean) {\n return this.getAnsweringRulesAPI(withLoadingObserver).subscribe((data: AnsweringRuleResponse[]) => {\n this.setAnsweringRules(data);\n });\n }\n\n private setAnsweringRules(rulesResponse: AnsweringRuleResponse[]): void {\n const rules: AnsweringRule[] = rulesResponse.map((rule) => {\n return {\n enabled: rule.enabled,\n timeFrame: rule.timeframe,\n priority: rule.priority,\n doNotDisturb: rule.doNotDisturb,\n callScreening: rule.callScreening,\n forwardAlways: {\n enabled: rule.forwardAlways.enabled,\n destination: this.fwdDestValueToDescriptionString(this.destString(rule.forwardAlways.destination)),\n },\n forwardOnActive: {\n enabled: rule.forwardOnActive.enabled,\n destination: this.fwdDestValueToDescriptionString(this.destString(rule.forwardOnActive.destination)),\n },\n forwardBusy: {\n enabled: rule.forwardBusy.enabled,\n destination: this.fwdDestValueToDescriptionString(this.destString(rule.forwardBusy.destination)),\n },\n forwardNoAnswer: {\n enabled: rule.forwardNoAnswer.enabled,\n destination: this.fwdDestValueToDescriptionString(this.destString(rule.forwardNoAnswer.destination)),\n },\n forwardOffline: {\n enabled: rule.forwardOffline.enabled,\n destination: this.fwdDestValueToDescriptionString(this.destString(rule.forwardOffline.destination)),\n },\n simRing: {\n enabled: rule.simRing.enabled,\n usersExtension: rule.simRing.usersExtension,\n allDevices: rule.simRing.allDevices,\n confirmOffnet: rule.simRing.confirmOffnet || false,\n otherDestinations: rule.simRing.otherDestinations,\n },\n };\n });\n\n this.answeringRulesSubject.next(rules);\n this.answeringRulesLoadingSubject.next(false);\n }\n\n private getForwardDestinations(): Observable {\n return this.get('answering-rules/forward').pipe(\n catchError(() => {\n return of([]);\n })\n );\n }\n\n private getDestinationsAndRules() {\n forkJoin([this.getForwardDestinations(), this.getAnsweringRulesAPI(true)])\n .pipe(\n map(([destinations, rules]) => {\n const filtered = destinations.filter((item) => item.description !== undefined && item.value !== undefined);\n\n const numberPipe = new PhoneNumberPipe();\n const contactDestinations = this.contactService.source.value\n .flatMap((contact) => {\n // Map each tel value to an individual entry.\n return (contact.tels ?? []).map((tel) => ({ tel, contact }));\n })\n .map((item) => {\n return {\n value: item.tel.number,\n description: `Contact - ${numberPipe.transform(item.tel.number)} (${item.contact.fullName})`,\n };\n }) as ForwardDestination[];\n\n this.forwardDestinationsSubject.next([...filtered, ...contactDestinations]);\n\n this.setAnsweringRules(rules);\n })\n )\n .subscribe();\n }\n\n private deleteLocalTimeFrame(timeFrame: string): void {\n const timeFrames = this.timeFramesSubject.value.filter((tf) => {\n return tf.time_frame !== timeFrame;\n });\n this.timeFramesSubject.next(timeFrames);\n }\n\n private updateInUseState(timeFrame: string): void {\n this.timeFrameInUse(timeFrame)\n .pipe(\n catchError((error) => {\n return error;\n })\n )\n .subscribe((response: InUseResponse) => {\n const foundTf = this.timeFramesSubject.value.find((tf) => tf.time_frame === timeFrame);\n if (foundTf) {\n foundTf.in_use = response.inuse;\n const updatedTimeFrames = this.timeFramesSubject.value.map((tf) =>\n tf.time_frame === timeFrame ? foundTf : tf\n );\n this.timeFramesSubject.next(updatedTimeFrames);\n }\n });\n }\n\n private upsertLocalTimeFrame(name: string, data: TimeRangeData[], inUse: boolean): void {\n const timeFrame = this.timeFramesSubject.value.find((tf) => tf.time_frame === name);\n\n let newTimeFrame: TimeFrame;\n\n if (timeFrame) {\n newTimeFrame = timeFrame;\n newTimeFrame.time_range_data = data;\n } else {\n const owner =\n this.isCurrentUserOfficeManager && this.appConfigService.features[AppFeature.ModifyTimeFrames]\n ? '*'\n : this.contactService.currentUser?.ext || 'ext';\n newTimeFrame = { time_frame: name, owner: owner, in_use: inUse, time_range_data: data };\n }\n\n const updatedTimeFrames = timeFrame\n ? this.timeFramesSubject.value.map((tf) => (tf.time_frame === name ? newTimeFrame : tf))\n : [...this.timeFramesSubject.value, newTimeFrame];\n\n this.timeFramesSubject.next(this.sortTimeFrames(updatedTimeFrames));\n }\n\n private sortTimeFrames(timeFrames: TimeFrame[]): TimeFrame[] {\n const personal = this.sortArray(timeFrames.filter((tf) => tf.owner !== '*'));\n const shared = this.sortArray(timeFrames.filter((tf) => tf.owner === '*'));\n\n return [...personal, ...shared];\n }\n\n private sortArray(timeFrames: TimeFrame[]): TimeFrame[] {\n return timeFrames.sort((a, b) => {\n return a.time_frame.localeCompare(b.time_frame);\n });\n }\n\n private destString(dest: string | Record | null): string {\n return typeof dest === 'string' ? dest : '';\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { MatSlideToggleChange } from '@angular/material/slide-toggle';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { SnackbarService } from '@app/core/services/snack-bar.service';\nimport { AnsweringRulesService } from '@app/preferences/services/answering-rules.service';\nimport { firstValueFrom } from 'rxjs';\n\nimport { AnsweringRule, AnsweringRuleType } from '../../../models/answering-rules.models';\n\n@Component({\n selector: 'app-answering-rule',\n templateUrl: './answering-rule.component.html',\n styleUrls: ['./answering-rule.component.scss'],\n})\nexport class AnsweringRuleComponent implements OnInit {\n @Input() answeringRule: AnsweringRule;\n\n @Output() edit = new EventEmitter();\n @Output() delete = new EventEmitter();\n\n protected readonly AppFeature = AppFeature;\n\n protected disabled = false;\n protected ruleType: AnsweringRuleType;\n protected ruleTypeString: string;\n\n protected editable = false;\n\n constructor(\n protected answeringRuleService: AnsweringRulesService,\n protected appConfigService: AppConfigService,\n private snackBar: SnackbarService,\n private appTranslateService: AppTranslateService\n ) {}\n\n ngOnInit(): void {\n this.editable = this.appConfigService.features[AppFeature.ModifyAnsweringRules];\n this.answeringRule.simRing.otherDestinations.sort((a, b) => a.delay - b.delay);\n this.ruleType = this.answeringRuleService.answeringRuleType(this.answeringRule);\n switch (this.ruleType) {\n case AnsweringRuleType.DoNotDisturb: {\n this.ruleTypeString = this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.DO_NOT_DISTURB');\n break;\n }\n case AnsweringRuleType.ForwardAllCalls: {\n this.ruleTypeString = this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.FORWARD_ALL_CALLS');\n break;\n }\n case AnsweringRuleType.SimultaneousRing: {\n this.ruleTypeString = this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SIMULTANEOUS_RING');\n break;\n }\n case AnsweringRuleType.OnlyPrimaryDeskphone: {\n this.ruleTypeString = this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.ONLY_PRIMARY_DESKPHONE');\n }\n }\n }\n\n protected stateChanged(event: MatSlideToggleChange) {\n this.updateState(event.checked);\n }\n\n protected editRule(): void {\n this.edit.emit();\n }\n\n protected deleteRule(): void {\n this.delete.emit();\n }\n\n private async updateState(newState: boolean) {\n this.disabled = true;\n this.answeringRule.enabled = newState;\n const rule = { ...this.answeringRule };\n delete rule.timeFrame;\n delete rule.priority;\n\n try {\n await firstValueFrom(this.answeringRuleService.updateRule(this.answeringRule.timeFrame!, rule, false));\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.NEW_RULE_STATE_WAS_SAVED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } catch (error) {\n console.error('Answering rule state change error:', error);\n this.answeringRule.enabled = !newState; // revert state\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.NEW_RULE_STATE_WAS_NOT_SAVED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n }\n\n this.disabled = false;\n }\n}\n","
\n
\n drag_indicator \n
\n {{ answeringRule.timeFrame === '*' ? 'Default' : answeringRule.timeFrame }}\n
\n \n \n Active\n
\n \n
\n {{ ruleTypeString }}\n
\n {{ answeringRule.forwardAlways.destination }}\n
\n
\n \n edit_outline \n \n delete_outline\n \n
\n \n \n \n\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n AbstractControl,\n FormArray,\n FormBuilder,\n FormControl,\n FormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MenuCloseReason } from '@angular/material/menu';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { SnackbarService } from '@app/core/services/snack-bar.service';\nimport { TimeFrame, TimeFrameType, TimeRangeData } from '@app/preferences/models/answering-rules.models';\nimport { AnsweringRulesService } from '@app/preferences/services/answering-rules.service';\nimport { ConfirmDialogComponent } from '@app/shared/components/confirm-dialog/confirm-dialog.component';\nimport { ButtonType } from '@app/shared/models/dialog-data';\nimport moment from 'moment';\nimport { firstValueFrom } from 'rxjs';\n\n@Component({\n selector: 'app-add-timeframe',\n templateUrl: './add-time-frame.component.html',\n styleUrls: ['./add-time-frame.component.scss'],\n})\nexport class AddTimeFrameComponent implements OnInit {\n @Input() timeFrame: TimeFrame | undefined;\n @Input() standalone: boolean = true;\n @Input() invalid: boolean | undefined;\n\n @Output() invalidChange = new EventEmitter();\n @Output() save = new EventEmitter();\n @Output() cancelChanges = new EventEmitter();\n\n protected readonly TimeFrameType = TimeFrameType;\n\n protected get selectedOption() {\n return this.form.get('selectedOption') as FormControl;\n }\n\n protected daysAndTimes: FormArray;\n protected specificDates: FormArray;\n\n protected daysOfWeek: string[] = [\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SUNDAY'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.MONDAY'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.TUESDAY'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.WEDNESDAY'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.THURSDAY'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.FRIDAY'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SATURDAY'),\n ];\n\n protected form!: FormGroup;\n\n protected copyTimesModel = [false, false, false, false, false, false, false];\n protected copyTimesInitiator = -1;\n protected copyTimesSelectedRangeIndex = -1;\n\n protected saving = false;\n\n private lastOrderIndex: number = -1;\n\n constructor(\n private answeringRuleService: AnsweringRulesService,\n private fb: FormBuilder,\n private snackBar: SnackbarService,\n private dialog: MatDialog,\n private appTranslateService: AppTranslateService\n ) {\n this.form = this.fb.group({\n name: ['', [Validators.required, Validators.minLength(1)]],\n selectedOption: TimeFrameType.Always,\n });\n\n this.specificDates = this.fb.array([]);\n this.daysAndTimes = this.fb.array([]);\n this.daysAndTimes.addValidators(this.daysAndTimesValidator());\n\n for (let i = 0; i < 7; i++) {\n this.daysAndTimes.push(\n this.fb.group({\n checked: false,\n ranges: this.fb.array([]),\n })\n );\n }\n }\n\n ngOnInit(): void {\n if (this.timeFrame) {\n const tfType = this.answeringRuleService.timeFrameType(this.timeFrame);\n this.form.patchValue({\n selectedOption: tfType,\n });\n\n if (tfType === TimeFrameType.SpecificDates) {\n this.form.addControl('specificDates', this.specificDates);\n for (const range of this.timeFrame.time_range_data) {\n if (Number(range.order) > this.lastOrderIndex) {\n this.lastOrderIndex = Number(range.order);\n }\n this.specificDates.push(\n this.fb.group({\n fromDate: [range.date_from, [Validators.required]],\n fromTime: [range.tod_from, [Validators.required]],\n toDate: [range.date_to, [Validators.required]],\n toTime: [\n range.tod_to === '23:59' ? range.tod_to : this.addMinutes(range.tod_to, 1),\n [Validators.required, this.maxTimeValidator()],\n ],\n })\n );\n }\n }\n\n if (tfType === TimeFrameType.DaysAndTimes) {\n this.form.addControl('daysAndTimes', this.daysAndTimes);\n for (const trData of this.timeFrame.time_range_data) {\n if (Number(trData.order) > this.lastOrderIndex) {\n this.lastOrderIndex = Number(trData.order);\n }\n const ctrl = this.daysAndTimes.at(Number(trData.days));\n ctrl.patchValue({\n checked: true,\n });\n this.daysAndTimesRanges(Number(trData.days)).push(\n this.fb.group({\n timeFrom: [trData.tod_from, [Validators.required]],\n timeTo: [\n trData.tod_to === '23:59' ? trData.tod_to : this.addMinutes(trData.tod_to, 1),\n [Validators.required, this.maxTimeValidator()],\n ],\n })\n );\n }\n }\n\n if (this.timeFrame.owner === '*' && !this.answeringRuleService.isCurrentUserOfficeManager) {\n // 'clone' shared time frame so non-office manager user can save it as personal one\n this.timeFrame = undefined;\n } else {\n this.form.get('name')?.disable(); // can not edit name for existing time frame\n this.form.patchValue({\n name: this.timeFrame.time_frame,\n });\n }\n }\n\n this.form.statusChanges.subscribe((status) => {\n this.invalidChange.emit(status === 'INVALID');\n });\n\n this.form.updateValueAndValidity();\n }\n\n public getTimeFrameData(): TimeFrame {\n return {\n time_frame: this.form.get('name')?.value,\n owner: '',\n in_use: (this.timeFrame && this.timeFrame.in_use) || false,\n time_range_data: this.getFormData(),\n };\n }\n\n protected onSelectionChange(): void {\n const option: TimeFrameType = this.selectedOption.value;\n switch (option) {\n case TimeFrameType.Always: {\n this.form.removeControl('daysAndTimes');\n this.form.removeControl('specificDates');\n break;\n }\n case TimeFrameType.DaysAndTimes: {\n this.form.addControl('daysAndTimes', this.daysAndTimes);\n this.form.removeControl('specificDates');\n break;\n }\n case TimeFrameType.SpecificDates: {\n this.form.addControl('specificDates', this.specificDates);\n this.form.removeControl('daysAndTimes');\n if (this.specificDates.length === 0) {\n this.addSpecificDatesRange();\n }\n }\n }\n }\n\n protected onDayOfWeekChange(event: MatCheckboxChange, dayOfWeek: number): void {\n if (event.checked) {\n this.addDaysAndTimesRange(dayOfWeek);\n } else {\n this.daysAndTimesRanges(dayOfWeek).clear();\n }\n }\n\n protected addSpecificDatesRange(): void {\n this.specificDates.push(\n this.fb.group(\n {\n fromDate: ['', Validators.required],\n fromTime: ['00:00', Validators.required],\n toDate: ['', Validators.required],\n toTime: ['23:59', [Validators.required, this.maxTimeValidator()]],\n },\n { validators: [this.toTimeValidator()] }\n )\n );\n }\n\n protected removeSpecificDatesRange(idx: number): void {\n this.specificDates.removeAt(idx);\n this.specificDates.markAsDirty();\n }\n\n protected addDaysAndTimesRange(dayOfWeek: number): void {\n this.daysAndTimesRanges(dayOfWeek).push(\n this.fb.group({\n timeFrom: ['09:00', Validators.required],\n timeTo: ['17:00', [Validators.required, this.maxTimeValidator()]],\n })\n );\n }\n\n protected removeDaysAndTimesRange(dayOfWeek: number, index: number): void {\n this.daysAndTimesRanges(dayOfWeek).removeAt(index);\n if (this.daysAndTimesRanges(dayOfWeek).length === 0) {\n this.daysAndTimes.at(dayOfWeek).patchValue({\n checked: false,\n });\n }\n this.daysAndTimes.markAsDirty();\n }\n\n protected confirmDeleteTimeFrame(): void {\n const timeFrame = this.form.get('name')?.value;\n this.dialog.open(ConfirmDialogComponent, {\n data: {\n description: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.ARE_YOU_WANT_DELETE_TIME_FRAME', {\n timeFrame,\n }),\n buttons: [\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.CANCEL'),\n action: () => null,\n type: ButtonType.matFlatButton,\n },\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.DELETE_TIME_FRAME'),\n action: async () => await this.deleteTimeFrame(timeFrame),\n type: ButtonType.matRaisedButton,\n default: true,\n color: 'primary',\n },\n ],\n },\n });\n }\n\n protected async onSaveEvent() {\n if (this.timeFrame?.owner === '*' && this.answeringRuleService.isCurrentUserOfficeManager) {\n this.dialog.open(ConfirmDialogComponent, {\n data: {\n title: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.ARE_YOU_SURE'),\n description: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.EDITING_TIME_FRAME_WARNING'),\n buttons: [\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.CANCEL'),\n action: () => null,\n type: ButtonType.matFlatButton,\n },\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SAVE'),\n action: async () => await this.saveTimeFrame(),\n type: ButtonType.matRaisedButton,\n default: true,\n color: 'primary',\n },\n ],\n },\n });\n } else {\n this.saveTimeFrame();\n }\n }\n\n protected onCancelEvent(): void {\n this.cancelChanges.emit();\n }\n\n protected daysAndTimesRanges(dayOfWeek: number): FormArray {\n return this.daysAndTimes.at(dayOfWeek).get('ranges') as FormArray;\n }\n\n protected copyTimesOpen(dayOfWeek: number, timeRangeIdx: number): void {\n this.copyTimesInitiator = dayOfWeek;\n this.copyTimesSelectedRangeIndex = timeRangeIdx;\n }\n\n protected copyMenuClosed(event: MenuCloseReason): void {\n if (event === undefined) {\n this.clearCopyTimesModel();\n }\n }\n\n protected copyTimesClick(): void {\n const ctrl = this.daysAndTimesRanges(this.copyTimesInitiator).at(this.copyTimesSelectedRangeIndex);\n const timeFrom = ctrl.get('timeFrom')?.value;\n const timeTo = ctrl.get('timeTo')?.value;\n\n for (let i = 0; i < this.daysOfWeek.length; i++) {\n if (this.copyTimesModel[i]) {\n this.insertTimeRange(i, timeFrom, timeTo);\n }\n }\n\n this.clearCopyTimesModel();\n }\n\n protected fromDateSelected(index: number): void {\n const ctrl = this.specificDates.at(index);\n const fromDate = ctrl.get('fromDate')?.value;\n\n if (fromDate && fromDate !== '') {\n ctrl.get('toDate')?.setValue(fromDate);\n // mark following control as touched so validation can mark it red in case of error\n ctrl.get('toTime')?.markAsTouched();\n }\n }\n\n private async saveTimeFrame() {\n this.saving = true;\n try {\n this.timeFrame\n ? await firstValueFrom(\n this.answeringRuleService.updateTimeFrame(this.form.get('name')?.value, this.getFormData())\n )\n : await firstValueFrom(\n this.answeringRuleService.addTimeFrame(this.form.get('name')?.value, this.getFormData())\n );\n if (this.standalone) {\n this.cancelChanges.emit();\n }\n } catch (error) {\n console.error('Save time frame error:', error);\n const message: string = error.error?.message ?? '';\n this.snackBar.open(\n message.includes('time frame already exists')\n ? message\n : this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.TIME_FRAME_WAS_NOT_SAVED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } finally {\n this.saving = false;\n }\n }\n\n private async deleteTimeFrame(timeFrame: string) {\n try {\n await firstValueFrom(this.answeringRuleService.deleteTimeFrame(timeFrame));\n if (this.standalone) {\n this.cancelChanges.emit();\n }\n } catch (error) {\n console.error('Delete time frame error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.DELETE_TIME_FRAME_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n }\n }\n\n private addMinutes(timeString: string, amount: number): string {\n return moment(timeString, 'HH:mm').add(amount, 'm').format('HH:mm');\n }\n\n private getFormData(): TimeRangeData[] {\n const tfType = this.selectedOption.value;\n if (tfType === TimeFrameType.DaysAndTimes) {\n return this.daysAndTimesData();\n } else if (tfType === TimeFrameType.SpecificDates) {\n return this.specificDatesData();\n } else {\n return this.alwaysData();\n }\n }\n\n private alwaysData(): TimeRangeData[] {\n return [\n {\n order: '0',\n date_from: 'now',\n date_to: 'never',\n days: '*',\n tod_from: '00:00',\n tod_to: '23:59',\n invert: 'no',\n },\n ];\n }\n\n private daysAndTimesData(): TimeRangeData[] {\n const data: TimeRangeData[] = [];\n let order = 0;\n for (let i = 0; i < this.daysAndTimes.length; i++) {\n const ctrl = this.daysAndTimes.at(i);\n const ranges = this.daysAndTimesRanges(i);\n if (ctrl.get('checked')?.value) {\n for (let j = 0; j < ranges.length; j++) {\n const rangeCtrl = this.daysAndTimesRanges(i).controls.at(j);\n const timeTo = rangeCtrl?.get('timeTo')?.value;\n data.push({\n order: String(order++),\n date_from: 'now',\n date_to: 'never',\n days: String(i),\n tod_from: rangeCtrl?.get('timeFrom')?.value,\n tod_to: timeTo === '23:59' ? timeTo : this.addMinutes(timeTo, -1),\n invert: 'no',\n });\n }\n }\n }\n\n return data;\n }\n\n private specificDatesData(): TimeRangeData[] {\n const data: TimeRangeData[] = [];\n for (let i = 0; i < this.specificDates.length; i++) {\n const ctrl = this.specificDates.at(i);\n const toTime = ctrl.get('toTime')?.value;\n data.push({\n order: String(i),\n date_from: moment(ctrl.get('fromDate')?.value).format('YYYY-MM-DD'),\n date_to: moment(ctrl.get('toDate')?.value).format('YYYY-MM-DD'),\n days: '*',\n tod_from: ctrl.get('fromTime')?.value,\n tod_to: toTime === '23:59' ? toTime : this.addMinutes(toTime, -1),\n invert: 'no',\n });\n }\n\n return data;\n }\n\n private insertTimeRange(dayOfWeek: number, fromTime: string, toTime: string): void {\n const from = moment(fromTime, 'HH:mm');\n const ctrl = this.daysAndTimesRanges(dayOfWeek);\n\n this.daysAndTimes.at(dayOfWeek).patchValue({\n checked: true,\n });\n this.removeEmptyRanges(dayOfWeek);\n\n let i = 0;\n while (i < ctrl.length && moment(ctrl.at(i).get('timeTo')?.value, 'HH:mm').isBefore(from)) {\n i++;\n }\n\n if (\n i < ctrl.length &&\n ctrl.at(i).get('timeFrom')?.value === fromTime &&\n ctrl.at(i).get('timeTo')?.value === toTime\n ) {\n // do not insert range that is already there\n return;\n }\n\n ctrl.insert(\n i,\n this.fb.group({\n timeFrom: [fromTime, [Validators.required]],\n timeTo: [toTime, [Validators.required]],\n })\n );\n\n ctrl.markAsDirty();\n }\n\n private removeEmptyRanges(dayOfWeek: number): void {\n const ctrl = this.daysAndTimesRanges(dayOfWeek);\n for (let i = ctrl.length - 1; i >= 0; i--) {\n if (ctrl.at(i).get('timeFrom')?.value == '' || ctrl.at(i).get('timeTo')?.value == '') {\n ctrl.removeAt(i);\n }\n }\n }\n\n private clearCopyTimesModel(): void {\n this.copyTimesModel = [false, false, false, false, false, false, false];\n }\n\n private daysAndTimesValidator(): ValidatorFn {\n // checks at least one day in a week is checked\n return (): ValidationErrors | null => {\n let someChecked = false;\n for (let i = 0; i < this.daysAndTimes.length; i++) {\n someChecked = someChecked || this.daysAndTimes.at(i).get('checked')?.value;\n }\n\n return someChecked ? null : { noneCheckedError: 'None checked' };\n };\n }\n\n private maxTimeValidator(): ValidatorFn {\n // checks time is not midnight\n return (control: AbstractControl): ValidationErrors | null => {\n return control.value === '00:00' ? { maxTimeError: 'End Time should not be midnight' } : null;\n };\n }\n\n private toTimeValidator(): ValidatorFn | null {\n // checks if the 'toTime' is greater than 'fromTime'\n return (control: AbstractControl): ValidationErrors | null => {\n const fromTimeCtrl = control.get('fromTime');\n const toTimeCtrl = control.get('toTime');\n const fromDateCtrl = control.get('fromDate');\n const toDateCtrl = control.get('toDate');\n\n if (!fromTimeCtrl || !toTimeCtrl || !fromDateCtrl || !toDateCtrl) {\n return null; // One of the controls is missing, cannot validate\n }\n\n const fromTime = moment(fromTimeCtrl.value, 'HH:mm');\n const toTime = moment(toTimeCtrl.value, 'HH:mm');\n const from = moment(fromDateCtrl.value).hours(fromTime.hours()).minutes(fromTime.minutes());\n const to = moment(toDateCtrl.value).hours(toTime.hours()).minutes(toTime.minutes());\n\n if (to.isSameOrBefore(from)) {\n toTimeCtrl.setErrors({ toTimeError: 'End Time is same or before Start Time' });\n } else if (toTimeCtrl.hasError('toTimeError')) {\n // Remove the 'toTimeError' if it no longer applies\n delete toTimeCtrl.errors!['toTimeError'];\n toTimeCtrl.updateValueAndValidity();\n }\n\n return null;\n };\n }\n}\n","\n \n
\n

\n chevron_left\n {{ 'ANSWERING_RULES_PREFERENCES.MANAGE_TIME_FRAME' | translate }}\n

\n
\n
\n\n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.NAME_NEW_TIME_FRAME' | translate }}\n {{ 'ANSWERING_RULES_PREFERENCES.NAME_CANNOT_BE_CHANGED' | translate }}\n \n \n\n
{{ 'ANSWERING_RULES_PREFERENCES.WHEN' | translate }}:
\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.ALWAYS' | translate }}\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.DAYS_AND_TIMES_WEEK' | translate }}\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.SPECIFIC_DATES_RANGES' | translate }}\n \n \n\n \n \n \n \n \n {{ daysOfWeek[i] }}\n \n \n \n
\n \n \n \n arrow_right_alt\n \n \n \n
\n
\n delete_outline\n \n content_copy\n \n add_box\n
\n \n \n \n \n
\n\n \n
{{ 'ANSWERING_RULES_PREFERENCES.SPECIFIC_DATES_RANGES' | translate }}:
\n
\n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.START_DATE' | translate }}\n \n \n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.START_TIME' | translate }}\n \n \n arrow_right_alt\n \n {{ 'ANSWERING_RULES_PREFERENCES.END_DATE' | translate }}\n \n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.END_TIME' | translate }}\n \n \n \n add_box\n \n \n delete_outline\n \n
\n
\n \n \n \n \n \n
{{ 'ANSWERING_RULES_PREFERENCES.DELETE_TIME_FRAME' | translate }}
\n delete_outline\n \n
\n\n\n\n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.CANCEL' | translate }}\n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.SAVE' | translate }}\n \n
\n
\n\n\n
{{ 'ANSWERING_RULES_PREFERENCES.COPY_TIMES' | translate }}
\n \n \n \n {{ item }}\n \n \n \n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.COPY_TIMES_BUTTON' | translate }}\n \n\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSelectChange } from '@angular/material/select';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { SnackbarService } from '@app/core/services/snack-bar.service';\nimport { ConfirmDialogComponent } from '@app/shared/components/confirm-dialog/confirm-dialog.component';\nimport { ButtonType } from '@app/shared/models/dialog-data';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { filter, firstValueFrom, map, startWith, Subject, takeUntil } from 'rxjs';\n\nimport {\n AnsweringRule,\n AnsweringRuleType,\n ForwardDestination,\n SimRingDestination,\n TimeFrame,\n} from '../../../models/answering-rules.models';\nimport { AnsweringRulesService } from '../../../services/answering-rules.service';\nimport { AddTimeFrameComponent } from '../add-time-frame/add-time-frame.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-add-answering-rule',\n templateUrl: './add-answering-rule.component.html',\n styleUrls: ['./add-answering-rule.component.scss'],\n})\nexport class AddAnsweringRuleComponent implements OnInit, AfterViewInit {\n @Input() answeringRule: AnsweringRule | undefined;\n @Input() timeFramesUsedByMe: string[] = [];\n\n @Output() saveRule = new EventEmitter();\n @Output() cancelChanges = new EventEmitter();\n\n @ViewChild('container') container: ElementRef;\n @ViewChild('greyMask') greyMask: ElementRef;\n\n @ViewChild('timeFrame') timeFrame: AddTimeFrameComponent;\n @ViewChild('simRingDestination') simRingDestination: ElementRef;\n @ViewChild('simRingDelay') simRingDelay: ElementRef;\n\n protected readonly AutocompleteSource = AutocompleteSource;\n protected readonly AnsweringRuleType = AnsweringRuleType;\n protected readonly AppFeature = AppFeature;\n protected readonly Number = Number;\n\n protected saving = false;\n\n protected filteredTimeFrames: TimeFrame[] = [];\n protected filterCtrl: FormControl;\n\n private allDestinations: ForwardDestination[];\n protected filteredDestinations: ForwardDestination[];\n private autocompleteChange$: Subject = new Subject();\n\n protected newTimeFrameOptionString = '!_!_newTimeFrame_!_!';\n\n protected ruleForm!: FormGroup;\n protected pageTitle: string;\n protected editSimRingDestIndex: number = -1;\n\n protected defaultRule = false;\n protected invalidTimeFrame = false;\n\n protected editingDisabled = true;\n\n protected get otherDestinations() {\n return this.ruleForm.get('simRingOtherDestinations') as FormArray;\n }\n protected get alwaysDestinationCtrl() {\n return this.ruleForm.get('forwardAlwaysDestination') as FormControl;\n }\n protected get ruleType() {\n return this.ruleForm.get('ruleType') as FormControl;\n }\n\n private callForwardCheckboxes = [\n 'forwardOnActiveEnabled',\n 'forwardBusyEnabled',\n 'forwardNoAnswerEnabled',\n 'forwardOfflineEnabled',\n ];\n private callForwardInputs = [\n 'forwardOnActiveDestination',\n 'forwardBusyDestination',\n 'forwardNoAnswerDestination',\n 'forwardOfflineDestination',\n ];\n\n constructor(\n private fb: FormBuilder,\n protected answeringRulesService: AnsweringRulesService,\n protected appConfigService: AppConfigService,\n private cdr: ChangeDetectorRef,\n private snackBar: SnackbarService,\n private dialog: MatDialog,\n private appTranslateService: AppTranslateService\n ) {\n this.ruleForm = this.fb.group({\n ruleType: ['', Validators.required],\n enabled: true,\n timeFrame: ['', Validators.required],\n doNotDisturb: false,\n callScreening: false,\n forwardAlwaysEnabled: false,\n forwardAlwaysDestination: '',\n forwardOnActiveEnabled: false,\n forwardOnActiveDestination: '',\n forwardBusyEnabled: false,\n forwardBusyDestination: '',\n forwardNoAnswerEnabled: false,\n forwardNoAnswerDestination: '',\n forwardOfflineEnabled: false,\n forwardOfflineDestination: '',\n simRingEnabled: false,\n simRingUsersExtension: false,\n simRingAllDevices: false,\n simRingConfirmOffnet: false,\n simRingOtherDestinations: this.fb.array([]),\n });\n\n this.filterCtrl = this.fb.control(false || !appConfigService.features[AppFeature.ModifyTimeFrames]);\n\n this.answeringRulesService.timeFrames$.pipe(untilDestroyed(this)).subscribe(() => {\n this.filterTimeFrames();\n });\n\n this.answeringRulesService.forwardDestinations$.pipe(untilDestroyed(this)).subscribe((destinations) => {\n this.allDestinations = destinations;\n });\n }\n\n ngOnInit() {\n this.editingDisabled = !this.appConfigService.features[AppFeature.ModifyAnsweringRules];\n\n this.setControlsState(this.callForwardInputs, false);\n\n if (this.answeringRule) {\n this.pageTitle = 'Edit an Answering Rule';\n\n if (this.answeringRule.timeFrame === '*') {\n this.defaultRule = true;\n }\n\n const ruleType = this.answeringRulesService.answeringRuleType(this.answeringRule);\n this.ruleType.patchValue(ruleType);\n this.setRuleType(ruleType, false);\n\n this.ruleForm.patchValue({\n enabled: this.answeringRule.enabled,\n timeFrame: this.answeringRule.timeFrame,\n doNotDisturb: this.answeringRule.doNotDisturb,\n callScreening: this.answeringRule.callScreening,\n forwardAlwaysEnabled: this.answeringRule.forwardAlways.enabled,\n forwardAlwaysDestination: this.answeringRule.forwardAlways.destination,\n forwardOnActiveEnabled: this.answeringRule.forwardOnActive.enabled,\n forwardOnActiveDestination: this.answeringRule.forwardOnActive.destination,\n forwardBusyEnabled: this.answeringRule.forwardBusy.enabled,\n forwardBusyDestination: this.answeringRule.forwardBusy.destination,\n forwardNoAnswerEnabled: this.answeringRule.forwardNoAnswer.enabled,\n forwardNoAnswerDestination: this.answeringRule.forwardNoAnswer.destination,\n forwardOfflineEnabled: this.answeringRule.forwardOffline.enabled,\n forwardOfflineDestination: this.answeringRule.forwardOffline.destination,\n simRingEnabled: this.answeringRule.simRing.enabled,\n simRingUsersExtension: this.answeringRule.simRing.usersExtension,\n simRingAllDevices: this.answeringRule.simRing.allDevices,\n simRingConfirmOffnet: this.answeringRule.simRing.confirmOffnet,\n });\n\n for (const dest of this.answeringRule.simRing.otherDestinations) {\n this.addDestination(dest);\n }\n\n this.ruleForm.get('timeFrame')?.disable();\n\n this.enableCallForwardInputs();\n } else {\n this.pageTitle = 'Add an Answering Rule';\n }\n }\n\n ngAfterViewInit(): void {\n if (this.editingDisabled) {\n // pass scroll events from grey mask to main container\n this.greyMask?.nativeElement.addEventListener('wheel', (event: WheelEvent) => {\n this.container.nativeElement.scrollBy(event.deltaX, event.deltaY);\n });\n\n // block mouse and keyboard events\n this.container.nativeElement.addEventListener('click', this.stopAndPreventDefault, true);\n this.container.nativeElement.addEventListener('keydown', (event: KeyboardEvent) => {\n if (event.key !== 'Escape') {\n this.stopAndPreventDefault(event);\n }\n });\n }\n }\n\n private stopAndPreventDefault(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n protected async saveEvent() {\n if (this.editingDisabled) {\n return;\n }\n\n const timeFrame = this.ruleForm.get('timeFrame')?.value;\n const rule = this.getRuleData();\n\n if (timeFrame === this.newTimeFrameOptionString) {\n const timeFrameData = this.timeFrame.getTimeFrameData();\n this.saving = true;\n try {\n await firstValueFrom(\n this.answeringRulesService.addTimeFrame(timeFrameData.time_frame, timeFrameData.time_range_data, true)\n );\n this.createRule(timeFrameData.time_frame, rule);\n } catch (error) {\n console.error('Create new time frame error:', error);\n const message: string = error.error?.message ?? '';\n this.snackBar.open(\n message.includes('time frame already exists')\n ? message\n : this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.CREATE_TIME_FRAME_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } finally {\n this.saving = false;\n }\n return;\n }\n\n if (this.answeringRule) {\n this.updateRule(timeFrame, rule);\n } else {\n this.createRule(timeFrame, rule);\n }\n }\n\n protected cancelEvent(): void {\n this.cancelChanges.emit();\n }\n\n protected behaviourSelectionChange(event: MatSelectChange): void {\n this.setRuleType(event.value, true);\n }\n\n protected async deleteTimeFrame(event: Event, timeFrame: string) {\n event.stopPropagation();\n if (!this.timeFramesUsedByMe.includes(timeFrame)) {\n this.confirmTimeFrameDelete(timeFrame);\n }\n }\n\n protected editSimRingDestination(index: number): void {\n this.editSimRingDestIndex = index;\n }\n\n protected deleteSimRingDestination(index: number): void {\n this.editSimRingDestIndex = -1;\n this.otherDestinations.removeAt(index);\n }\n\n protected editSimRingDestinationDone(): void {\n this.editSimRingDestIndex = -1;\n }\n\n protected addSimRingDestination(): void {\n this.addDestination({\n destination: this.simRingDestination.nativeElement.value,\n delay: Number(this.simRingDelay.nativeElement.value),\n });\n this.simRingDestination.nativeElement.value = '';\n this.simRingDelay.nativeElement.value = '0';\n this.ruleForm.markAsDirty();\n }\n\n protected onInputFieldFocus(source: AutocompleteSource): void {\n this.autocompleteChange$.next();\n\n let ctrl: AbstractControl | null;\n switch (source) {\n case AutocompleteSource.Always: {\n ctrl = this.alwaysDestinationCtrl;\n break;\n }\n case AutocompleteSource.OnActive: {\n ctrl = this.ruleForm.get('forwardOnActiveDestination');\n break;\n }\n case AutocompleteSource.Busy: {\n ctrl = this.ruleForm.get('forwardBusyDestination');\n break;\n }\n case AutocompleteSource.NoAnswer: {\n ctrl = this.ruleForm.get('forwardNoAnswerDestination');\n break;\n }\n case AutocompleteSource.Offline: {\n ctrl = this.ruleForm.get('forwardOfflineDestination');\n break;\n }\n }\n\n if (ctrl) {\n ctrl.valueChanges\n .pipe(\n untilDestroyed(this),\n takeUntil(this.autocompleteChange$),\n filter((value) => typeof value === 'string'),\n startWith(ctrl.value),\n map((value) => this.filter(value || ''))\n )\n .subscribe((destinations) => {\n this.filteredDestinations = destinations;\n });\n }\n }\n\n protected trackByValue(index: number, destination: ForwardDestination) {\n return destination.value;\n }\n\n protected close(): void {\n this.cancelChanges.emit();\n }\n\n protected filterTimeFrames(): void {\n this.filteredTimeFrames = this.answeringRulesService.filterTimeFrames(this.filterCtrl.value);\n }\n\n private getRuleData(): AnsweringRule {\n const formData = this.ruleForm.getRawValue();\n return {\n enabled: formData.enabled,\n doNotDisturb: formData.doNotDisturb,\n callScreening: formData.callScreening,\n forwardAlways: {\n enabled: formData.forwardAlwaysEnabled,\n destination: this.answeringRulesService.fwdDestDescriptionToValueString(formData.forwardAlwaysDestination),\n },\n forwardOnActive: {\n enabled: formData.forwardOnActiveEnabled,\n destination: this.answeringRulesService.fwdDestDescriptionToValueString(formData.forwardOnActiveDestination),\n },\n forwardBusy: {\n enabled: formData.forwardBusyEnabled,\n destination: this.answeringRulesService.fwdDestDescriptionToValueString(formData.forwardBusyDestination),\n },\n forwardNoAnswer: {\n enabled: formData.forwardNoAnswerEnabled,\n destination: this.answeringRulesService.fwdDestDescriptionToValueString(formData.forwardNoAnswerDestination),\n },\n forwardOffline: {\n enabled: formData.forwardOfflineEnabled,\n destination: this.answeringRulesService.fwdDestDescriptionToValueString(formData.forwardOfflineDestination),\n },\n simRing: {\n enabled: formData.simRingEnabled,\n usersExtension: formData.simRingUsersExtension,\n allDevices: formData.simRingAllDevices,\n confirmOffnet: formData.simRingConfirmOffnet,\n otherDestinations: formData.simRingOtherDestinations,\n },\n };\n }\n\n private async createRule(timeFrame: string, rule: AnsweringRule) {\n this.saving = true;\n try {\n await firstValueFrom(this.answeringRulesService.createRule(timeFrame, rule));\n this.close(); // return to main panel on success\n } catch (error) {\n console.error('Create rule error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SAVING_RULE_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } finally {\n this.saving = false;\n }\n }\n\n private async updateRule(timeFrame: string, rule: AnsweringRule) {\n this.saving = true;\n try {\n await firstValueFrom(this.answeringRulesService.updateRule(timeFrame, rule));\n this.close(); // return to main panel on success\n } catch (error) {\n console.error('Update rule error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SAVING_RULE_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } finally {\n this.saving = false;\n }\n }\n\n private confirmTimeFrameDelete(timeFrame: string): void {\n this.dialog.open(ConfirmDialogComponent, {\n data: {\n description: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.ARE_YOU_WANT_DELETE_TIME_FRAME', {\n timeFrame,\n }),\n buttons: [\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.CANCEL'),\n action: () => null,\n type: ButtonType.matFlatButton,\n },\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.DELETE_TIME_FRAME'),\n action: async () => await this.deleteTimeFrameSnack(timeFrame),\n type: ButtonType.matRaisedButton,\n default: true,\n color: 'primary',\n },\n ],\n },\n });\n }\n\n private async deleteTimeFrameSnack(timeFrame: string) {\n try {\n await firstValueFrom(this.answeringRulesService.deleteTimeFrame(timeFrame));\n } catch (error) {\n console.error('Delete time frame error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.DELETING_TIME_FRAME_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n }\n }\n\n private setRuleType(type: AnsweringRuleType, markDirty: boolean): void {\n this.cdr.detectChanges();\n if (markDirty) {\n // rule type was changed by user\n this.ruleForm.markAsDirty();\n }\n this.editSimRingDestinationDone();\n switch (type) {\n case AnsweringRuleType.DoNotDisturb: {\n this.setDNDMode();\n break;\n }\n case AnsweringRuleType.ForwardAllCalls: {\n this.setForwardAllMode();\n break;\n }\n case AnsweringRuleType.OnlyPrimaryDeskphone: {\n this.setOnlyPrimaryPhoneMode();\n break;\n }\n case AnsweringRuleType.SimultaneousRing: {\n this.setSimRingMode();\n }\n }\n }\n\n private baseFormState(): void {\n this.ruleForm.patchValue({\n doNotDisturb: false,\n forwardAlwaysEnabled: false,\n forwardAlwaysDestination: '',\n forwardOnActiveEnabled: false,\n forwardOnActiveDestination: '',\n forwardBusyEnabled: false,\n forwardBusyDestination: '',\n forwardNoAnswerEnabled: false,\n forwardNoAnswerDestination: '',\n forwardOfflineEnabled: false,\n forwardOfflineDestination: '',\n simRingEnabled: false,\n simRingUsersExtension: false,\n simRingAllDevices: false,\n });\n\n for (const destInput of this.callForwardInputs) {\n this.ruleForm.get(destInput)?.markAsUntouched();\n }\n\n this.setCallForwardInputsState(this.callForwardInputs, false);\n this.alwaysDestinationCtrl.clearValidators();\n this.alwaysDestinationCtrl.disable();\n this.alwaysDestinationCtrl.markAsUntouched();\n this.otherDestinations.clear();\n this.ruleForm.updateValueAndValidity();\n }\n\n private setDNDMode(): void {\n this.baseFormState();\n this.ruleForm.patchValue({\n doNotDisturb: true,\n callScreening: false,\n simRingEnabled: false,\n });\n this.ruleForm.get('callScreening')?.disable();\n this.ruleForm.updateValueAndValidity();\n }\n\n private setForwardAllMode(): void {\n this.baseFormState();\n this.ruleForm.patchValue({\n doNotDisturb: false,\n forwardAlwaysEnabled: true,\n simRingEnabled: false,\n });\n this.ruleForm.get('callScreening')?.enable();\n this.alwaysDestinationCtrl.enable();\n this.alwaysDestinationCtrl.addValidators([Validators.required, Validators.minLength(1)]);\n this.alwaysDestinationCtrl.updateValueAndValidity();\n this.ruleForm.updateValueAndValidity();\n }\n\n private setSimRingMode(): void {\n this.baseFormState();\n this.ruleForm.patchValue({\n doNotDisturb: false,\n forwardAlwaysEnabled: false,\n simRingEnabled: true,\n simRingUsersExtension: true,\n });\n this.ruleForm.get('callScreening')?.enable();\n this.ruleForm.updateValueAndValidity();\n }\n\n private setOnlyPrimaryPhoneMode(): void {\n this.baseFormState();\n this.ruleForm.patchValue({\n doNotDisturb: false,\n forwardAlwaysEnabled: false,\n simRingEnabled: false,\n });\n this.ruleForm.get('callScreening')?.enable();\n this.ruleForm.updateValueAndValidity();\n }\n\n private addDestination(dest: SimRingDestination): void {\n this.otherDestinations.push(\n this.fb.group({\n destination: [dest.destination, [Validators.required, Validators.minLength(1)]],\n delay: [dest.delay, [Validators.required, Validators.min(0), Validators.max(60)]],\n })\n );\n }\n\n private filter(value: string): ForwardDestination[] {\n const searchVal = value.toLowerCase();\n const filtered =\n value.length > 1\n ? this.allDestinations.filter((destination) => {\n return destination.description.toLowerCase().includes(searchVal);\n })\n : [];\n return filtered;\n }\n\n private enableCallForwardInputs(): void {\n // according to respective checkbox\n for (let i = 0; i < this.callForwardCheckboxes.length; i++) {\n if (this.ruleForm.get(this.callForwardCheckboxes[i])?.value) {\n const ctrl = this.ruleForm.get(this.callForwardInputs[i]);\n ctrl?.enable();\n ctrl?.addValidators([Validators.required, Validators.minLength(1)]);\n ctrl?.updateValueAndValidity();\n }\n }\n }\n\n private setControlsState(ctrls: string[], state: boolean): void {\n for (const ctrl of ctrls) {\n state ? this.ruleForm.get(ctrl)?.enable() : this.ruleForm.get(ctrl)?.disable();\n }\n }\n\n // set call forward destination control state according to its checkbox state\n protected setCallForwardInputsState(ctrlNames: string[], state: boolean): void {\n for (const ctrlName of ctrlNames) {\n const checkboxCtrl = this.ruleForm.get(ctrlName.replace('Destination', '') + 'Enabled');\n const inputCtrl = this.ruleForm.get(ctrlName);\n state && checkboxCtrl?.value ? inputCtrl?.enable() : inputCtrl?.disable();\n state && checkboxCtrl?.value\n ? inputCtrl?.addValidators([Validators.required, Validators.minLength(1)])\n : inputCtrl?.clearValidators();\n inputCtrl?.updateValueAndValidity();\n }\n }\n}\n\nenum AutocompleteSource {\n Always = 'always',\n OnActive = 'onActive',\n Busy = 'busy',\n NoAnswer = 'noAnswer',\n Offline = 'offline',\n}\n","\n
\n

\n chevron_left\n {{ pageTitle }}\n

\n\n \n
\n
\n {{ 'ANSWERING_RULES_PREFERENCES.ENABLE_RULE' | translate }}\n \n
\n
\n\n
\n
\n {{ 'ANSWERING_RULES_PREFERENCES.TIME_FRAME' | translate }}\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.ALL' | translate }}\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.PERSONAL' | translate }}\n \n \n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.SELECT_A_TIME_FRAME' | translate }}\n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.NEW_TIME_FRAME' | translate }}\n \n \n {{ tf.time_frame }}\n \n delete_outline\n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.DEFAULT' | translate }}\n \n \n \n \n \n
\n\n
\n
\n {{ 'ANSWERING_RULES_PREFERENCES.CALL_SCREENING' | translate }}\n \n
\n
\n {{ 'ANSWERING_RULES_PREFERENCES.CALL_SCREENING_DESC' | translate }}\n
\n
\n\n
\n
\n {{ 'ANSWERING_RULES_PREFERENCES.RINGING_BEHAVIOR' | translate }}\n
\n
\n {{ 'ANSWERING_RULES_PREFERENCES.RINGING_BEHAVIOR_DESC' | translate }}\n
\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.SELECT_RINGING_BEHAVIOR' | translate }}\n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.FORWARD_ALL_CALLS' | translate }}\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.DO_NOT_DISTURB' | translate }}\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.ONLY_PRIMARY_DESKPHONE' | translate }}\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.SIMULTANEOUS_RING' | translate }}\n \n \n \n\n \n
{{ 'ANSWERING_RULES_PREFERENCES.ONLY_PRIMARY_DESKPHONE_DESCRIPTION' | translate }}
\n \n {{ 'ANSWERING_RULES_PREFERENCES.START_TYPING_CONTACT_NAME' | translate }}\n \n \n \n {{ destination.description }}\n \n \n \n
\n\n \n
{{ 'ANSWERING_RULES_PREFERENCES.NO_PHONE_RING_DESCRIPTION' | translate }}
\n
\n\n \n
{{ 'ANSWERING_RULES_PREFERENCES.ONLY_PRIMARY_DESKPHONE_DESCRIPTION' | translate }}
\n
\n\n \n
{{ 'ANSWERING_RULES_PREFERENCES.SIMULTANEOUS_RING_DESCRIPTION' | translate }}
\n
\n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.INCLUDE_USERS_EXTENSION' | translate }}\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.RING_ALL_USERS_PHONES' | translate }}\n \n {{ 'ANSWERING_RULES_PREFERENCES.ANSWER_CONFIRMATION_OFFNET' | translate }}\n \n
\n
\n \n \n \n \n \n \n schedule\n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.SEC' | translate }}\n \n \n \n edit_outline\n \n \n delete_outline\n \n \n done_outline\n \n \n
\n \n
\n 0 }\">\n \n {{ 'ANSWERING_RULES_PREFERENCES.ADD_NUMBER_SIM_RING' | translate }}\n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.RING_DELAY' | translate }}\n \n \n 60\n }\"\n (click)=\"addSimRingDestination()\"\n >add_box\n
\n
\n \n \n\n \n
\n
{{ 'ANSWERING_RULES_PREFERENCES.CALL_FORWARDING' | translate }}
\n
{{ 'ANSWERING_RULES_PREFERENCES.FORWARD_ALL_CALLS' | translate }}
\n
\n
\n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.ACTIVE' | translate }}\n \n \n info_outline\n \n
\n \n \n \n \n {{ destination.description }}\n \n \n \n
\n \n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.WHEN_BUSY' | translate }}\n \n \n info_outline\n \n
\n \n \n \n \n {{ destination.description }}\n \n \n \n
\n
\n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.WHEN_UNANSWERED' | translate }}\n \n \n info_outline\n \n
\n \n \n \n \n {{ destination.description }}\n \n \n \n
\n
\n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.WHEN_OFFLINE' | translate }}\n \n \n info_outline\n \n
\n \n \n \n \n {{ destination.description }}\n \n \n \n
\n
\n \n \n \n \n \n\n\n
\n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.SAVE' | translate }}\n \n
\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { AfterViewInit, Component, EventEmitter, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { SnackbarService } from '@app/core/services/snack-bar.service';\nimport { ConfirmDialogComponent } from '@app/shared/components/confirm-dialog/confirm-dialog.component';\nimport { ButtonType } from '@app/shared/models/dialog-data';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { firstValueFrom } from 'rxjs';\n\nimport { AnsweringRule, TimeFrame, TimeFrameType } from '../../models/answering-rules.models';\nimport { AnsweringRulesService } from '../../services/answering-rules.service';\nimport { AddTimeFrameComponent } from './add-time-frame/add-time-frame.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-answering-rules',\n templateUrl: './answering-rules.component.html',\n styleUrls: ['./answering-rules.component.scss'],\n})\nexport class AnsweringRulesComponent implements AfterViewInit, OnInit {\n @Output() cancelChanges = new EventEmitter();\n\n @ViewChild('timeFrame') timeFrame: AddTimeFrameComponent;\n\n protected readonly AppFeature = AppFeature;\n\n protected loading = false;\n\n protected answeringRules: AnsweringRule[] = [];\n protected filteredTimeFrames: TimeFrame[] = [];\n protected filtered = false;\n\n protected ringDuration: FormControl;\n protected returnBusyIfOnCall: FormControl;\n protected autoAnswerIncomingCalls: FormControl;\n protected autoAnswerTime: FormControl;\n protected addingRule: boolean = false;\n protected actionRule: AnsweringRule | undefined;\n protected addingTimeFrame: boolean = false;\n protected actionTimeFrame: TimeFrame | undefined;\n protected timeFramesUsedByMe: string[] = [];\n\n protected reordered = false;\n\n protected rulesEditingDisabled = true;\n protected timeFramesEditingDisabled = true;\n\n constructor(\n protected answeringRulesService: AnsweringRulesService,\n protected appConfigService: AppConfigService,\n private dialog: MatDialog,\n private fb: FormBuilder,\n private snackBar: SnackbarService,\n private appTranslateService: AppTranslateService\n ) {\n this.ringDuration = this.fb.control('', [Validators.min(5), Validators.max(7200)]);\n this.autoAnswerIncomingCalls = this.fb.control(false);\n this.returnBusyIfOnCall = this.fb.control(false);\n this.autoAnswerTime = this.fb.control(4, [Validators.min(0), Validators.max(7200)]);\n\n this.answeringRulesService.fetchData();\n }\n\n ngOnInit(): void {\n this.rulesEditingDisabled = !this.appConfigService.features[AppFeature.ModifyAnsweringRules];\n this.timeFramesEditingDisabled = !this.appConfigService.features[AppFeature.ModifyTimeFrames];\n\n this.filtered = this.timeFramesEditingDisabled;\n\n this.answeringRulesService.answeringRules$.pipe(untilDestroyed(this)).subscribe((data) => {\n // creating copy of data so reordering rules doesn't change original data\n this.answeringRules = [...data];\n this.timeFramesUsedByMe = data.map((rule) => {\n return rule.timeFrame!;\n });\n });\n\n this.answeringRulesService.timeFrames$.pipe(untilDestroyed(this)).subscribe(() => {\n this.filterTimeFrames();\n });\n\n this.appConfigService.data$.pipe(untilDestroyed(this)).subscribe((config) => {\n this.autoAnswerIncomingCalls.setValue(\n config?.settings.preferences.answeringRules?.autoAnswerIncomingCalls ?? false\n );\n this.autoAnswerTime.setValue(config?.settings.preferences.answeringRules?.autoAnswerTime ?? 4);\n this.returnBusyIfOnCall.setValue(config?.settings.preferences.answeringRules?.returnBusy ?? false);\n });\n }\n\n ngAfterViewInit(): void {\n this.getRingDuration();\n }\n\n protected drop(event: CdkDragDrop): void {\n if (event.previousIndex !== event.currentIndex) {\n moveItemInArray(this.answeringRules, event.previousIndex, event.currentIndex);\n if (!this.reordered) {\n // show message only once\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.YOU_HAVE_REPRIORITIZED_YOUR_ANSWERING_RULES'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK'),\n {\n duration: 6000,\n }\n );\n }\n this.reordered = true;\n }\n }\n\n protected editRule(index: number): void {\n this.actionRule = this.answeringRules[index];\n this.addingRule = true;\n }\n\n protected confirmDeleteRule(index: number): void {\n const timeFrame = this.answeringRules[index].timeFrame!;\n this.dialog.open(ConfirmDialogComponent, {\n data: {\n description: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.ARE_YOU_WANT_DELETE_RULE', {\n timeFrame,\n }),\n buttons: [\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.CANCEL'),\n action: () => null,\n type: ButtonType.matFlatButton,\n },\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.DELETE_RULE'),\n action: async () => await this.deleteRule(timeFrame),\n type: ButtonType.matRaisedButton,\n default: true,\n color: 'primary',\n },\n ],\n },\n });\n }\n\n protected editOrCopyTimeFrame(index: number): void {\n this.actionTimeFrame = this.filteredTimeFrames[index];\n this.addingTimeFrame = true;\n }\n\n protected confirmDeleteTimeFrame(index: number): void {\n const timeFrame = this.filteredTimeFrames[index].time_frame;\n this.dialog.open(ConfirmDialogComponent, {\n data: {\n description: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.ARE_YOU_WANT_DELETE_TIME_FRAME', {\n timeFrame,\n }),\n buttons: [\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.CANCEL'),\n action: () => null,\n type: ButtonType.matFlatButton,\n },\n {\n label: this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.DELETE_TIME_FRAME'),\n action: async () => await this.deleteTimeFrame(timeFrame),\n type: ButtonType.matRaisedButton,\n default: true,\n color: 'primary',\n },\n ],\n },\n });\n }\n\n protected timeFrameDescription(timeFrame: TimeFrame): string {\n const type = this.answeringRulesService.timeFrameType(timeFrame);\n if (type === TimeFrameType.Always) {\n return this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.ALWAYS');\n } else if (type === TimeFrameType.DaysAndTimes) {\n return this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.DAYS_AND_TIMES');\n } else {\n return this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SPECIFIC_DATES');\n }\n }\n\n protected async onSave() {\n if (this.ringDuration.dirty) {\n await this.saveRingDuration();\n }\n if (this.autoAnswerIncomingCalls.dirty || this.autoAnswerTime.dirty || this.returnBusyIfOnCall.dirty) {\n await this.saveAutoAnswer();\n }\n if (this.reordered) {\n this.saveRulesOrder();\n }\n }\n\n protected onCancel(): void {\n // get original state before possible reordering\n // it could show wrong rules order after re-entering aswering rules panel without closing preferences window\n this.answeringRules = this.answeringRulesService.answeringRulesSubject.value;\n this.cancelChanges.emit();\n }\n\n protected onSubpanelCancel(): void {\n this.addingRule = false;\n this.actionRule = undefined;\n this.addingTimeFrame = false;\n this.actionTimeFrame = undefined;\n }\n\n protected deleteIconTooltipText(timeFrame: TimeFrame): string {\n if (timeFrame.owner === '*' && !this.answeringRulesService.isCurrentUserOfficeManager) {\n return this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.NO_PERMISSION_TO_DELETE');\n } else if (timeFrame.in_use) {\n return this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.TIME_FRAME_IN_USE');\n }\n\n return '';\n }\n\n protected filterTimeFrames(): void {\n this.filteredTimeFrames = this.answeringRulesService.filterTimeFrames(this.filtered);\n }\n\n private async getRingDuration() {\n try {\n const response = await firstValueFrom(this.answeringRulesService.getRingDuration());\n this.ringDuration.patchValue(response.duration);\n } catch (error) {\n console.error('Get ring duration error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.GET_RING_DURATION_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n }\n }\n\n private async saveRingDuration() {\n this.loading = true;\n try {\n await firstValueFrom(this.answeringRulesService.setRingDuration(this.ringDuration.value));\n this.ringDuration.markAsPristine();\n } catch (error) {\n console.error('Saving ring duration error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SAVE_RING_DURATION_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } finally {\n this.loading = false;\n }\n }\n\n private async saveAutoAnswer() {\n this.loading = true;\n try {\n await firstValueFrom(\n this.appConfigService.updatePreferences({\n answeringRules: {\n returnBusy: this.returnBusyIfOnCall.value,\n autoAnswerIncomingCalls: this.autoAnswerIncomingCalls.value,\n autoAnswerTime: this.autoAnswerTime.value,\n },\n })\n );\n this.autoAnswerIncomingCalls.markAsPristine();\n this.autoAnswerTime.markAsPristine();\n } catch (error) {\n console.error('Saving auto answering rules error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SAVE_AUTO_ANSWER_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } finally {\n this.loading = false;\n }\n }\n\n private async saveRulesOrder() {\n this.loading = true;\n try {\n await firstValueFrom(this.answeringRulesService.setPriority(this.getRulesOrderString()));\n this.reordered = false;\n } catch (error) {\n console.error('Saving answering rules order error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.SAVE_RULES_ORDER_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } finally {\n this.loading = false;\n }\n }\n\n private getRulesOrderString(): string {\n return this.answeringRules\n .map((rule) => {\n return rule.priority;\n })\n .join(',');\n }\n\n private async deleteRule(timeFrame: string) {\n try {\n await firstValueFrom(this.answeringRulesService.deleteRule(timeFrame));\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.RULE_DELETED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } catch (error) {\n console.warn('Delete answering rule error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.RULE_DELETE_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n }\n }\n\n private async deleteTimeFrame(timeFrame: string) {\n try {\n await firstValueFrom(this.answeringRulesService.deleteTimeFrame(timeFrame));\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.TIME_FRAME_DELETED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n } catch (error) {\n console.warn('Delete time frame error:', error);\n this.snackBar.open(\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.TIME_FRAME_DELETE_FAILED'),\n this.appTranslateService.instant('ANSWERING_RULES_PREFERENCES.OK')\n );\n }\n }\n}\n","\n \n
\n

{{ 'ANSWERING_RULES_PREFERENCES.ANSWERING_RULES' | translate }}

\n
\n
{{ 'ANSWERING_RULES_PREFERENCES.RING_OPTIONS' | translate }}
\n
\n
{{ 'ANSWERING_RULES_PREFERENCES.RING_FOR' | translate }}
\n \n \n 0\"\n [style]=\"'position: relative; left: ' + (-138 + 10 * delayInput.value.length) + 'px;'\"\n matTextSuffix>\n {{ 'ANSWERING_RULES_PREFERENCES.SECONDS' | translate }}\n \n {{ 'ANSWERING_RULES_PREFERENCES.VALID_RANGE_SECONDS' | translate }}\n \n
\n
\n
{{ 'ANSWERING_RULES_PREFERENCES.RETURN_BUSY_CALL' | translate }}
\n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.ALLOWS_USER_CONTROL_MULTIPLE_CALLS' | translate }}\n \n
\n
\n
\n
{{ 'ANSWERING_RULES_PREFERENCES.AUTO_ANSWER_INCOMING_CALLS' | translate }}
\n
\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.INCOMING_CALLS_AUTOMATICALLY_ANSWERED' | translate }}\n \n
\n
\n
\n
{{ 'ANSWERING_RULES_PREFERENCES.AUTO_ANSWER_TIME' | translate }}
\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.SECONDS' | translate }}\n {{ 'ANSWERING_RULES_PREFERENCES.INCOMING_CALLS_ANSWERED_IMMEDIATELY' | translate }}\n \n \n
\n
{{ 'ANSWERING_RULES_PREFERENCES.ANSWERING_RULES' | translate }}
\n \n {{ 'ANSWERING_RULES_PREFERENCES.WHEN_NO_ANSWERING_RULES' | translate }}\n \n \n \n \n \n \n \n \n \n \n
{{ 'ANSWERING_RULES_PREFERENCES.ADD_RULE' | translate }}
\n add_box\n \n
\n\n
\n
{{ 'ANSWERING_RULES_PREFERENCES.TIME_FRAMES' | translate }}
\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.ALL' | translate }}\n \n \n {{ 'ANSWERING_RULES_PREFERENCES.PERSONAL' | translate }}\n \n \n
\n \n \n \n \n
\n {{ 'ANSWERING_RULES_PREFERENCES.NAME' | translate }}\n {{ 'ANSWERING_RULES_PREFERENCES.DESCRIPTION' | translate }}\n {{ 'ANSWERING_RULES_PREFERENCES.OWNER' | translate }}\n
\n \n \n
{{ timeFrame.time_frame }}
\n
{{ timeFrameDescription(timeFrame) }}
\n
\n @if (timeFrame.owner === '*') {\n {{ 'ANSWERING_RULES_PREFERENCES.SHARED' | translate }}\n } @else {\n {{ 'ANSWERING_RULES_PREFERENCES.PERSONAL' | translate }}\n }\n
\n \n \n edit_outline\n \n \n content_copy\n \n \n delete_outline\n \n \n \n \n \n
{{ 'ANSWERING_RULES_PREFERENCES.ADD_TIME_FRAME' | translate }}
\n add_box\n \n
\n \n
\n \n {{ 'ANSWERING_RULES_PREFERENCES.CANCEL' | translate }}\n \n \n \n {{ 'ANSWERING_RULES_PREFERENCES.SAVE' | translate }}\n \n
\n
\n\n\n\n\n\n\n","import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { validatePhoneNumber } from '@app/shared/utils/phone.util';\nimport { firstValueFrom } from 'rxjs';\n\n@Component({\n selector: 'app-blocked-numbers',\n templateUrl: './blocked-numbers.component.html',\n styleUrls: ['./blocked-numbers.component.scss'],\n})\nexport class BlockedNumbersComponent implements OnInit, AfterViewInit {\n @ViewChild('container') container: ElementRef;\n @ViewChild('greyMask') greyMask?: ElementRef;\n\n protected editingDisabled = true;\n\n blockedNumbers: string[] = [];\n allowedNumbers: string[] = [];\n formGroup: FormGroup;\n\n constructor(\n private appConfigService: AppConfigService,\n private fb: FormBuilder\n ) {}\n\n async ngOnInit() {\n this.editingDisabled = !this.appConfigService.features[AppFeature.ModifyBlockedNumbers];\n\n this.createFormGroup();\n await this.getBlockedNumbers();\n await this.getAllowedNumbers();\n await this.getPreferences();\n }\n\n ngAfterViewInit(): void {\n if (this.editingDisabled) {\n // pass scroll events from grey mask to main container\n this.greyMask?.nativeElement.addEventListener('wheel', (event: WheelEvent) => {\n this.container.nativeElement.scrollBy(event.deltaX, event.deltaY);\n });\n\n // block mouse and keyboard events\n this.container.nativeElement.addEventListener('click', this.stopAndPreventDefault, true);\n this.container.nativeElement.addEventListener('keydown', (event: KeyboardEvent) => {\n if (event.key !== 'Escape') {\n this.stopAndPreventDefault(event);\n }\n });\n }\n }\n\n private stopAndPreventDefault(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n private createFormGroup() {\n this.formGroup = this.fb.group({\n blockedNumber: ['', [Validators.required, validatePhoneNumber]],\n allowedNumber: ['', [Validators.required, validatePhoneNumber]],\n blockAnonymous: [false],\n });\n }\n\n private async getBlockedNumbers() {\n const response = await firstValueFrom(this.appConfigService.getBlockedNumbers());\n this.blockedNumbers = response.numbers;\n }\n\n private async getAllowedNumbers() {\n const response = await firstValueFrom(this.appConfigService.getAllowedNumbers());\n this.allowedNumbers = response.numbers;\n }\n\n private async getPreferences() {\n const response = await firstValueFrom(this.appConfigService.getPreferences());\n this.formGroup.controls['blockAnonymous'].patchValue(response.blockAnonymous || false);\n }\n\n async addBlockedNumbers() {\n if (this.formGroup.controls['blockedNumber'].invalid) {\n return;\n }\n await firstValueFrom(this.appConfigService.setBlockedNumbers(this.formGroup.controls['blockedNumber'].value));\n this.blockedNumbers.push(this.formGroup.controls['blockedNumber'].value);\n this.formGroup.controls['blockedNumber'].patchValue('');\n this.formGroup.controls['blockedNumber'].setErrors(null);\n }\n\n async removeBlockedNumber(number: string) {\n await firstValueFrom(this.appConfigService.deleteBlockedNumbers(number));\n this.blockedNumbers = this.blockedNumbers.filter((item) => item !== number);\n }\n\n async addAllowedNumbers() {\n if (this.formGroup.controls['allowedNumber'].invalid) {\n return;\n }\n await firstValueFrom(this.appConfigService.setAllowedNumbers(this.formGroup.controls['allowedNumber'].value));\n this.allowedNumbers.push(this.formGroup.controls['allowedNumber'].value);\n this.formGroup.controls['allowedNumber'].patchValue('');\n this.formGroup.controls['allowedNumber'].setErrors(null);\n }\n\n async removeAllowedNumber(number: string) {\n await firstValueFrom(this.appConfigService.deleteAllowedNumbers(number));\n this.allowedNumbers = this.allowedNumbers.filter((item) => item !== number);\n }\n\n async onCheckChangeBlockAnonymous() {\n await firstValueFrom(\n this.appConfigService.updatePreferences({ blockAnonymous: this.formGroup.controls['blockAnonymous'].value })\n );\n }\n}\n","
\n \n
{{ 'BLOCKED_NUM_PREFERENCES.BLOCKED_NUMBERS' | translate }}
\n \n
{{ 'BLOCKED_NUM_PREFERENCES.ADD_A_NUMBER' | translate }}
\n
\n
\n \n {{ 'BLOCKED_NUM_PREFERENCES.ENTER_A_NUMBER' | translate }}\n \n \n \n add_box\n \n
\n \n
\n \n {{ number | phoneNumber }}\n \n \n delete_outline\n \n
\n
\n \n \n {{ 'BLOCKED_NUM_PREFERENCES.BLOCK_ANON' | translate }}\n \n
\n
{{ 'BLOCKED_NUM_PREFERENCES.ALLOWED_NUMBERS' | translate }}
\n \n
\n
\n \n {{ 'BLOCKED_NUM_PREFERENCES.ENTER_A_NUMBER' | translate }}\n \n \n \n add_box\n \n
\n \n
\n \n {{ number | phoneNumber }}\n \n \n delete_outline\n \n
\n
\n
\n \n \n
\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { VoicemailSettingPageType } from '@app/preferences/models/voicemail.model';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-settings-voicemail-change-pin',\n templateUrl: './voicemail-change-pin.component.html',\n styleUrls: ['../../voicemail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatIconModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatInputModule,\n TranslateModule,\n ],\n})\nexport class VoicemailChangePinComponent {\n @Output() selectedPageChanged = new EventEmitter();\n @Output() submitForm = new EventEmitter();\n\n protected pinForm: FormGroup;\n protected processing = false;\n protected isPinHide = true;\n private minPinLength = 4;\n private maxPinLength = 10;\n\n constructor(\n private formBuilder: FormBuilder,\n private appTranslateService: AppTranslateService\n ) {\n this.pinForm = formBuilder.group(\n {\n pin: new FormControl('', [\n Validators.required,\n Validators.minLength(this.minPinLength),\n Validators.maxLength(this.maxPinLength),\n ]),\n confirmPin: new FormControl('', [\n Validators.required,\n Validators.minLength(this.minPinLength),\n Validators.maxLength(this.maxPinLength),\n ]),\n },\n {\n validator: this.ConfirmedValidator('pin', 'confirmPin'),\n }\n );\n }\n\n protected getPinValidationMessage(): string {\n return this.appTranslateService.instant('VOICE_MAIL_PREFERENCES.PIN_VALIDATION', {\n min: this.minPinLength,\n max: this.maxPinLength,\n });\n }\n\n setSelectedPage(page: VoicemailSettingPageType) {\n this.selectedPageChanged.emit(page);\n }\n\n toggleIsPinHide() {\n this.isPinHide = !this.isPinHide;\n }\n\n ConfirmedValidator(controlName: string, matchingControlName: string): object {\n return (formGroup: FormGroup) => {\n const control = formGroup.controls[controlName];\n const matchingControl = formGroup.controls[matchingControlName];\n if (matchingControl.errors && !matchingControl.errors.confirmedValidator) {\n return;\n }\n if (control.value === matchingControl.value) {\n matchingControl.setErrors(null);\n } else {\n matchingControl.setErrors({ confirmedValidator: true });\n }\n };\n }\n\n save() {\n this.processing = true;\n if (this.pinForm.valid) {\n this.submitForm.emit(this.pinForm.controls['pin'].value);\n }\n }\n}\n","
\n \n
\n
\n \n chevron_left\n \n

{{ 'VOICE_MAIL_PREFERENCES.VOICEMAIL_PIN' | translate }}

\n
\n
\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.NEW_PIN' | translate }}\n \n \n {{ isPinHide ? 'visibility_off' : 'visibility' }}\n \n \n @if (\n (pinForm.controls.pin.value.length < 4 || pinForm.controls.pin.value.length > 10) &&\n (pinForm.controls.pin.dirty || pinForm.controls.pin.touched)\n ) {\n \n {{ getPinValidationMessage() }}\n \n }\n \n {{ 'VOICE_MAIL_PREFERENCES.CONFIRM_PIN' | translate }}\n \n \n {{ isPinHide ? 'visibility_off' : 'visibility' }}\n \n \n @if (\n pinForm.controls.confirmPin.errors?.confirmedValidator &&\n (pinForm.controls.confirmPin.dirty || pinForm.controls.confirmPin.touched)\n ) {\n \n {{ 'VOICE_MAIL_PREFERENCES.PINS_DO_NOT_MATCH' | translate }}\n \n }\n @if (\n (pinForm.controls.confirmPin.value.length < 4 || pinForm.controls.confirmPin.value.length > 10) &&\n (pinForm.controls.confirmPin.dirty || pinForm.controls.confirmPin.touched)\n ) {\n \n {{ getPinValidationMessage() }}\n \n }\n
\n
\n
\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.CANCEL' | translate }}\n \n \n @if (processing) {\n \n \n } @else {\n {{ 'VOICE_MAIL_PREFERENCES.SAVE' | translate }}\n }\n \n
\n \n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Contact } from '@app/contacts/models/contact';\nimport { AudioType } from '@app/preferences/models/audio-type.enum';\nimport {\n TTSLanguage,\n TTSVoice,\n VoicemailFileGreeting,\n VoicemailGreeting,\n VoicemailGreetingAudioItem,\n VoicemailRecordingMethodType,\n VoicemailSettingPageType,\n VoicemailTTSGreeting,\n} from '@app/preferences/models/voicemail.model';\nimport { Track } from '@app/shared/models/track.model';\n\n@Component({\n selector: 'app-settings-voicemail-manage-greeting',\n templateUrl: './voicemail-manage-greeting.component.html',\n styleUrls: ['../../voicemail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VoicemailManageGreetingComponent implements OnChanges {\n @ViewChild('file') fileInput: ElementRef;\n @Input() ttsLanguages: TTSLanguage[] = [];\n @Input() ttsVoices: TTSVoice[] = [];\n @Input() index: number | string;\n @Input() audioType: AudioType = AudioType.greeting;\n @Input() audioItem: VoicemailGreeting | undefined;\n @Input() isRecording: boolean = false;\n @Input() recordingSeconds: number = 10;\n @Input() recordedFile: File | null = null;\n @Input() recordingTrack: Track | undefined;\n @Input() playingAudioId: string | null;\n @Input() user: Contact | undefined;\n @Input() audio: VoicemailGreetingAudioItem | null;\n @Output() selectedPageChanged = new EventEmitter();\n @Output() selectedTTSLanguageChanged = new EventEmitter();\n @Output() saveClickedTTS = new EventEmitter();\n @Output() saveClickedFile = new EventEmitter();\n @Output() saveClickedRecord = new EventEmitter();\n @Output() recorderClicked = new EventEmitter();\n @Output() playPreviewTtsClicked = new EventEmitter<{\n voice: TTSVoice;\n text: string;\n }>();\n @Output() stopPreview = new EventEmitter();\n @Output() togglePlayRecordedFile = new EventEmitter();\n @Output() togglePlayAudio = new EventEmitter();\n @Output() deleteAudioClicked = new EventEmitter();\n\n recordingMethod: VoicemailRecordingMethodType = 'TextToSpeech';\n fileToUpload: File | undefined;\n greetingName: string = '';\n isValid: boolean;\n isProcessing: boolean;\n recorderIsDisabled: boolean = false;\n showRecorder: boolean = false;\n\n isLoadingVoices = true;\n selectedTTSLanguage: TTSLanguage | undefined = undefined;\n selectedTTSVoice: TTSVoice | undefined = undefined;\n ttsScript: string = 'Hello, {firstname} {lastname} is unavailable. Please leave a message.';\n\n protected readonly AudioType = AudioType;\n protected readonly Number = Number;\n\n constructor(private changeDetector: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['audioItem'] && this.audioItem) {\n this.greetingName = this.audioItem.name;\n this.recordingMethod = this.audioItem.recordingMethod;\n if (this.recordingMethod === 'TextToSpeech') {\n this.selectedTTSLanguage = this.ttsLanguages.find((lang) => lang.id === this.audioItem?.language);\n this.ttsScript = this.audioItem.message;\n }\n }\n if (changes['ttsVoices'] && this.ttsVoices.length > 0 && this.recordingMethod === 'TextToSpeech') {\n this.selectedTTSVoice =\n this.audioItem && this.audioItem.voice?.length > 0\n ? this.ttsVoices.find((voice) => voice.id === this.audioItem?.voice)\n : this.ttsVoices[0];\n this.isLoadingVoices = false;\n }\n if (\n changes['ttsLanguages'] &&\n changes['ttsLanguages'].currentValue.length > 0 &&\n this.recordingMethod === 'TextToSpeech'\n ) {\n const preferredLanguage = this.ttsLanguages.find((lang) => lang.id.includes(navigator.language));\n this.selectedTTSLanguage =\n this.audioItem && this.audioItem.language.length > 0\n ? this.ttsLanguages.find((lang) => lang.id === this.audioItem?.language)\n : preferredLanguage || this.ttsLanguages[0];\n this.selectedTTSLanguageChanged.emit(this.selectedTTSLanguage);\n }\n if (changes['isRecording']) {\n this.recorderIsDisabled = false;\n }\n if (changes['recordingTrack']) {\n this.changeDetector.detectChanges();\n }\n if (changes['user'] && !this.audioItem && this.user && this.audioType === AudioType.greeting) {\n this.ttsScript = `Hello, ${this.user.firstName} ${this.user.lastName} is unavailable. Please leave a message.`;\n }\n if (\n changes['audioType'] &&\n (!this.audioItem || !(this.audioItem.message?.length > 0)) &&\n this.audioType === AudioType.name\n ) {\n this.ttsScript = ``;\n }\n this.validate();\n }\n\n setSelectedPage(page: VoicemailSettingPageType) {\n this.selectedPageChanged.emit(page);\n }\n\n onFileSelect(event) {\n this.fileToUpload = event.target.files[0];\n this.validate();\n }\n\n onTtsLanguageChanged(event) {\n this.validate();\n this.isLoadingVoices = true;\n this.selectedTTSLanguageChanged.emit(event);\n }\n\n validate() {\n switch (this.recordingMethod) {\n case 'TextToSpeech': {\n this.validateTextToSpeech();\n break;\n }\n case 'Upload': {\n this.validateUpload();\n break;\n }\n }\n }\n\n validateTextToSpeech() {\n this.isValid =\n this.greetingName.length > 0 &&\n this.ttsScript.length > 0 &&\n this.selectedTTSVoice !== undefined &&\n this.selectedTTSLanguage !== undefined;\n }\n\n validateUpload() {\n this.isValid = this.greetingName.length > 0 && (this.fileToUpload !== undefined || this.recordedFile !== null);\n }\n\n handleSaveClicked() {\n if (this.recordingMethod === 'TextToSpeech') {\n if (this.selectedTTSVoice && this.selectedTTSLanguage) {\n this.isProcessing = true;\n this.saveClickedTTS.emit({\n description: this.greetingName,\n voice_id: this.selectedTTSVoice.id,\n source_type: 'tts',\n tts_script: this.ttsScript,\n voice_language: this.selectedTTSLanguage.id,\n });\n }\n } else if (this.recordingMethod === 'Upload' && this.fileToUpload) {\n this.isProcessing = true;\n this.saveClickedFile.emit({\n description: this.greetingName,\n file: this.fileToUpload,\n name: this.fileToUpload.name,\n index: this.index,\n });\n } else if (this.recordingMethod === 'Upload' && this.recordedFile) {\n this.isProcessing = true;\n this.saveClickedRecord.emit({\n description: this.greetingName,\n file: this.recordedFile,\n name: this.recordedFile.name,\n index: this.index,\n });\n }\n }\n\n deleteRecordedFile() {\n this.recordingSeconds = 0;\n this.recordingTrack = undefined;\n this.recordedFile = null;\n this.validate();\n }\n\n deleteAudioToEdit() {\n this.deleteAudioClicked.emit();\n }\n\n recordClickHandler() {\n this.recorderIsDisabled = true;\n this.recorderClicked.emit(this.audioType);\n }\n\n onRecordedFilePlayClicked() {\n this.togglePlayRecordedFile.emit();\n }\n\n playTtsPreview() {\n if (this.playingAudioId === 'voice') {\n this.stopPreview.emit();\n } else if (this.selectedTTSVoice) {\n this.playPreviewTtsClicked.emit({ voice: this.selectedTTSVoice, text: this.ttsScript });\n }\n }\n\n onRecordingMethodChanged() {\n if (this.recordingMethod === 'TextToSpeech' && !this.selectedTTSLanguage && this.ttsLanguages.length > 0) {\n this.selectedTTSLanguage = this.ttsLanguages[0];\n this.onTtsLanguageChanged(this.selectedTTSLanguage);\n }\n this.validate();\n }\n\n handleClickOnShowRecorder() {\n this.showRecorder = true;\n }\n\n handleClickOnUpload() {\n this.showRecorder = false;\n this.fileInput.nativeElement.click();\n }\n}\n","
\n
\n
\n \n chevron_left\n \n

\n {{ 'VOICE_MAIL_PREFERENCES.MANAGE' | translate }}\n {{\n (audioType === AudioType.greeting\n ? 'VOICE_MAIL_PREFERENCES.GREETING'\n : 'VOICE_MAIL_PREFERENCES.RECORDED_NAME'\n ) | translate\n }}\n

\n
\n
\n \n {{\n (audioType === 'greeting'\n ? 'VOICE_MAIL_PREFERENCES.ENTER_GREETING_NAME'\n : 'VOICE_MAIL_PREFERENCES.ENTER_NAME'\n ) | translate\n }}\n \n \n
\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.RECORDING_METHOD' | translate }}\n \n
\n \n {{\n 'VOICE_MAIL_PREFERENCES.TEXT_TO_SPEECH' | translate\n }}\n {{\n 'VOICE_MAIL_PREFERENCES.UPLOAD_OR_RECORD' | translate\n }}\n \n
\n
\n \n
\n {{ 'VOICE_MAIL_PREFERENCES.MESSAGE' | translate }}\n
\n \n \n \n
\n
\n
\n {{ 'VOICE_MAIL_PREFERENCES.LANGUAGE' | translate }}\n
\n \n
\n \n \n {{ language.name }} ({{ language.country }})\n \n \n
\n \n
\n
\n
\n {{ 'VOICE_MAIL_PREFERENCES.VOICE' | translate }}\n
\n \n \n
\n \n
\n \n \n {{ voice.name }} ({{ voice.type }} {{ voice.subType }})\n \n \n
\n \n \n \n {{ playingAudioId === 'voice' ? 'pause' : 'play_arrow' }}\n \n \n
\n
\n \n \n \n
\n \n {{ 'VOICE_MAIL_PREFERENCES.UPLOAD_A_FILE' | translate }}\n \n {{ 'VOICE_MAIL_PREFERENCES.OR' | translate }}\n \n {{ 'VOICE_MAIL_PREFERENCES.RECORD_NEW' | translate }}\n {{\n (audioType === AudioType.name ? 'VOICE_MAIL_PREFERENCES.NAME' : 'VOICE_MAIL_PREFERENCES.GREETING')\n | translate\n }}\n \n
\n
\n \n \n \n {{ 'VOICE_MAIL_PREFERENCES.FILE_NAME' | translate }}\n \n \n
\n \n upload\n {{ 'VOICE_MAIL_PREFERENCES.SELECT_A_DIFFERENT_FILE' | translate }}\n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n \n
{{ Number(recordingSeconds) | secondsToMinutes }}
\n
\n \n
\n \n \n \n
\n \n {{ playingAudioId === 'recorded' ? 'pause' : 'play_arrow' }}\n \n \n
{{ Number(recordingSeconds) | secondsToMinutes }}
\n
\n \n
\n
\n \n delete_outline\n \n
\n
\n \n \n \n
\n
\n \n \n {{ playingAudioId === audio.index ? 'pause' : 'play_arrow' }}\n \n \n
{{ Number(recordingSeconds) | secondsToMinutes }}
\n
\n \n
\n
\n \n delete_outline\n \n
\n
\n
\n
\n \n
\n \n {{ 'VOICE_MAIL_PREFERENCES.CANCEL' | translate }}\n \n \n \n {{ 'VOICE_MAIL_PREFERENCES.SAVE' | translate }}\n \n \n \n \n \n \n
\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Contact, ContactGrouping, ContactSort, ContactType } from '@app/contacts/models/contact';\nimport { ContactService } from '@app/contacts/services/contact.service';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AudioType } from '@app/preferences/models/audio-type.enum';\nimport {\n VoicemailGreetingAudioItem,\n VoicemailSettingPageType,\n VoicemailSettingsModel,\n} from '@app/preferences/models/voicemail.model';\n\n@Component({\n selector: 'app-settings-voicemail-main-page',\n templateUrl: './voicemail-main-page.component.html',\n styleUrls: ['../../voicemail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VoicemailMainPageComponent {\n @Input() settings: VoicemailSettingsModel;\n @Input() greetings: VoicemailGreetingAudioItem[];\n @Input() recordedName: VoicemailGreetingAudioItem | undefined = undefined;\n @Input() playingAudioId: string | null = null;\n @Input() set contacts(contacts: Contact[]) {\n this._contacts = contacts;\n this.filterContacts();\n }\n @Output() playClicked = new EventEmitter();\n @Output() stopClicked = new EventEmitter();\n @Output() selectedPageChanged = new EventEmitter();\n @Output() saveSettings = new EventEmitter();\n @Output() cancelClick = new EventEmitter();\n @Output() addNewGreetingClicked = new EventEmitter();\n @Output() manageRecorderNameClicked = new EventEmitter();\n @Output() greetingDownloadClicked = new EventEmitter();\n @Output() greetingDeleteClicked = new EventEmitter();\n @Output() greetingEditClicked = new EventEmitter();\n\n newExtension: string = '';\n isSaveButtonEnabled = false;\n processing = false;\n filteredContacts: Contact[] = [];\n _contacts: Contact[] = [];\n protected readonly Number = Number;\n\n protected readonly AppFeature = AppFeature;\n\n constructor(\n protected configService: AppConfigService,\n private contactService: ContactService\n ) {}\n\n toggleEnabled() {\n this.settings.enabled = !this.settings?.enabled;\n this.setSettingsChanged();\n }\n\n toggleAnnounceReceivedTime() {\n this.settings.announceReceivedTime = !this.settings.announceReceivedTime;\n this.setSettingsChanged();\n }\n\n toggleAnnounceIncomingCallId() {\n this.settings.announceIncomingCallId = !this.settings.announceIncomingCallId;\n this.setSettingsChanged();\n }\n\n toggleConfirmDeletion() {\n this.settings.confirmDeletion = !this.settings.confirmDeletion;\n this.setSettingsChanged();\n }\n\n toggleEmailWhenMailBoxIsFull() {\n this.settings.unifiedMessaging.emailWhenMailBoxIsFull = !this.settings.unifiedMessaging.emailWhenMailBoxIsFull;\n this.setSettingsChanged();\n }\n\n toggleEmailOnMissCall() {\n this.settings.unifiedMessaging.emailOnMissCall = !this.settings.unifiedMessaging.emailOnMissCall;\n this.setSettingsChanged();\n }\n\n addNewExtension() {\n if (this.newExtension.length > 0) {\n if (!this.settings.copyToExtensions.includes(this.newExtension)) {\n this.settings.copyToExtensions.push(this.newExtension);\n }\n this.newExtension = '';\n this.setSettingsChanged();\n }\n }\n\n deleteExtension(extension: string) {\n this.settings.copyToExtensions = this.settings.copyToExtensions.filter((ext) => ext !== extension);\n this.setSettingsChanged();\n }\n\n setSelectedPage(page: VoicemailSettingPageType) {\n this.selectedPageChanged.emit(page);\n }\n\n setSettingsChanged() {\n if (this.settings) {\n this.isSaveButtonEnabled = true;\n }\n }\n\n handleClickOnSave() {\n this.processing = true;\n this.saveSettings.emit(this.settings);\n }\n\n handleClickOnDelete(audio: VoicemailGreetingAudioItem, isName = false) {\n audio.type = isName ? 'name' : 'greeting';\n this.greetingDeleteClicked.emit(audio);\n }\n\n handleClickOnEdit(audio: VoicemailGreetingAudioItem, isName = false) {\n audio.type = isName ? 'name' : 'greeting';\n this.greetingEditClicked.emit(audio);\n }\n\n handleClickOnManageRecording() {\n this.manageRecorderNameClicked.emit();\n }\n\n greetingDownloadClickHandler(audio: VoicemailGreetingAudioItem, isName = false) {\n audio.type = isName ? 'name' : 'greeting';\n this.greetingDownloadClicked.emit(audio);\n }\n\n playClickHandler(audio: VoicemailGreetingAudioItem, isName = false) {\n if (this.playingAudioId === audio.index || (this.playingAudioId === AudioType.name && isName)) {\n this.stopClicked.emit();\n } else {\n audio.type = isName ? 'name' : 'greeting';\n this.playClicked.emit(audio);\n }\n }\n\n filterContacts() {\n let filtered = this.contactService.filterSortAndGroupContacts(\n { contactType: ContactType.Company },\n ContactSort.FirstName,\n ContactGrouping.Name,\n this._contacts\n ).contacts;\n\n if (this.newExtension.length > 0) {\n filtered = filtered.filter((c) => this.contactService.isContactMatch(c, this.newExtension));\n }\n\n this.filteredContacts = filtered;\n }\n}\n","
\n
\n

{{ 'VOICE_MAIL_PREFERENCES.VOICEMAIL' | translate }}

\n \n
\n \n
\n
\n \n
\n {{ 'VOICE_MAIL_PREFERENCES.ENABLE_VOICEMAIL' | translate }}\n
\n
\n
\n \n
\n {{ 'VOICE_MAIL_PREFERENCES.ANNOUNCE_VOICEMAIL_RECEIVED' | translate }}\n
\n
\n
\n \n
\n {{ 'VOICE_MAIL_PREFERENCES.ANNOUNCE_INCOMING_CALL' | translate }}\n
\n
\n
\n \n
\n {{ 'VOICE_MAIL_PREFERENCES.CONFIRM_VOICEMAIL_DELETION' | translate }}\n
\n
\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.OPERATOR_FORWARD' | translate }}\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.ENTER_OPERATOR_EXTENSION' | translate }}\n \n \n
\n
\n
\n {{ 'VOICE_MAIL_PREFERENCES.COPY_TO_EXTENSIONS' | translate }}\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.ENTER_NAME_OR_EXTENSION' | translate }}\n \n \n \n \n
\n \n
{{contact.fullName}}
\n
\n \n
\n
\n \n \n add_box\n \n
\n \n \n \n \n \n \n close_box\n \n
\n \n
\n
\n {{ 'VOICE_MAIL_PREFERENCES.VOICEMAIL_GREETING' | translate }}\n \n add\n {{ 'VOICE_MAIL_PREFERENCES.ADD_NEW_GREETING' | translate }}\n \n
\n
\n
\n
\n
{{ 'VOICE_MAIL_PREFERENCES.NAME' | translate }}
\n
{{ 'VOICE_MAIL_PREFERENCES.DURATION' | translate }}
\n
\n
\n 0; else noGreeting\">\n \n \n
\n \n \n \n {{ playingAudioId === greeting.index ? 'pause' : 'play_arrow' }}\n \n \n
\n
{{ greeting.description }}
\n
{{ Number(greeting.duration) | secondsToMinutes }}
\n
\n \n download\n \n \n delete_outline\n \n \n edit_outline\n \n
\n
\n \n \n \n
\n
\n \n play_arrow\n \n \n
\n
{{ 'VOICE_MAIL_PREFERENCES.NOT_SET' | translate }}
\n
\n
\n
\n
\n \n
\n
\n {{ 'VOICE_MAIL_PREFERENCES.RECORDED_NAME' | translate }}\n \n {{ 'VOICE_MAIL_PREFERENCES.MANAGE_RECORDED_NAME' | translate }}\n chevron_right\n \n
\n
\n
\n
\n
{{ 'VOICE_MAIL_PREFERENCES.NAME' | translate }}
\n
\n
\n
\n \n
\n \n {{ playingAudioId === 'name' ? 'pause' : 'play_arrow' }}\n \n \n
\n
{{ settings.recordedNames.name }}
\n
\n
\n \n download\n \n \n delete_outline\n \n \n edit_outline\n \n
\n
\n \n
\n
\n \n play_arrow\n \n \n
\n
{{ 'VOICE_MAIL_PREFERENCES.NOT_SET' | translate }}
\n
\n
\n
\n
\n \n \n
\n {{ 'VOICE_MAIL_PREFERENCES.UNIFIED_MESSAGING' | translate }}\n
\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.EMAIL_NOTIFICATION' | translate }}\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.NONE' | translate }}\n {{ 'VOICE_MAIL_PREFERENCES.NOTIFICATION_ONLY' | translate }}\n \n {{ 'VOICE_MAIL_PREFERENCES.SEND_HYPERLINK' | translate }}\n {{ 'VOICE_MAIL_PREFERENCES.SEND_ATTACHMENT_NEW' | translate }}\n {{ 'VOICE_MAIL_PREFERENCES.SEND_ATTACHMENT_SAVED' | translate }}\n {{ 'VOICE_MAIL_PREFERENCES.SEND_ATTACHMENT_TRASH' | translate }}\n \n \n
\n \n \n {{ 'VOICE_MAIL_PREFERENCES.SEND_EMAIL_WHEN_FULL' | translate }}\n \n \n {{ 'VOICE_MAIL_PREFERENCES.SEND_EMAIL_AFTER_MISSED_CALL' | translate }}\n \n \n {{ 'VOICE_MAIL_PREFERENCES.CHANGE_VOICEMAIL_PIN' | translate }}\n chevron_right\n \n
\n
\n \n \n
\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.CHANGE_VOICEMAIL_PIN' | translate }}\n chevron_right\n \n
\n
\n
\n
\n
\n \n {{ 'VOICE_MAIL_PREFERENCES.CANCEL' | translate }}\n \n \n {{ 'VOICE_MAIL_PREFERENCES.SAVE' | translate }}\n \n \n \n \n
\n \n\n","import { AfterViewInit, Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Contact } from '@app/contacts/models/contact';\nimport { ContactService } from '@app/contacts/services/contact.service';\nimport { AppFeature } from '@app/core/models/config.models';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { SnackbarService } from '@app/core/services/snack-bar.service';\nimport { AudioType } from '@app/preferences/models/audio-type.enum';\nimport {\n TTSLanguage,\n TTSVoice,\n VoicemailFileGreeting,\n VoicemailGreeting,\n VoicemailGreetingAudioItem,\n VoicemailSettingPageType,\n VoicemailSettingsModel,\n VoicemailTTSGreeting,\n} from '@app/preferences/models/voicemail.model';\nimport { VoicemailSettingsFacadeService } from '@app/preferences/services/voicemail-settings-facade.service';\nimport { ConfirmDialogComponent } from '@app/shared/components/confirm-dialog/confirm-dialog.component';\nimport { ButtonType } from '@app/shared/models/dialog-data';\nimport { Track } from '@app/shared/models/track.model';\nimport { AudioUtil, microphonePermission } from '@app/shared/utils/audio.util';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { delay } from 'rxjs';\nimport { getWaveBlob } from 'webm-to-wav-converter';\n\n@Component({\n selector: 'app-voicemail',\n templateUrl: './voicemail.component.html',\n styleUrls: ['./voicemail.component.scss'],\n})\n@UntilDestroy()\nexport class VoicemailComponent implements OnInit, AfterViewInit {\n @ViewChild('scrollArea') scrollArea: ElementRef;\n @ViewChild('greyMask') greyMask?: ElementRef;\n\n @Output() voicemailSettingsSaved = new EventEmitter();\n\n selectedPage: VoicemailSettingPageType = 'Main';\n voicemailSettings?: VoicemailSettingsModel;\n ttsLanguages: TTSLanguage[] = [];\n voicesOfSelectedLanguage: TTSVoice[] = [];\n greetings: VoicemailGreetingAudioItem[] = [];\n recordedName: VoicemailGreetingAudioItem | undefined = undefined;\n indexToEdit: number | string = -1;\n editAudioType: AudioType = AudioType.greeting;\n itemToEdit: VoicemailGreeting | undefined = undefined;\n audioToEdit: VoicemailGreetingAudioItem | null = null;\n playingAudio: AudioUtil | undefined;\n playingAudioId: string | null = null;\n recorder: MediaRecorder;\n stream: MediaStream | null = null;\n track: Track | undefined = { title: '', link: '' };\n isLoading = true;\n currentUser: Contact | undefined;\n recordingSeconds: number = 10;\n recordedFile: File | null = null;\n AudioType = AudioType;\n isRecording: boolean = false;\n recordingAudio: AudioUtil = new Audio() as AudioUtil;\n recordingIntervalId: NodeJS.Timeout;\n\n protected editingDisabled = true;\n\n constructor(\n private facade: VoicemailSettingsFacadeService,\n private dialog: MatDialog,\n private snackbarService: SnackbarService,\n private appConfigService: AppConfigService,\n protected contactService: ContactService\n ) {}\n\n ngOnInit() {\n this.editingDisabled = !this.appConfigService.features[AppFeature.ModifyVoicemail];\n this.isLoading = true;\n this.facade\n .getVoicemailSettings$()\n .pipe(untilDestroyed(this))\n .subscribe((settings: VoicemailSettingsModel | undefined) => {\n this.isLoading = false;\n this.voicemailSettings = settings;\n });\n this.facade.getVoicemailSettings();\n this.facade\n .getVoicemailSettingsSaved$()\n .pipe(untilDestroyed(this))\n .subscribe((success) => {\n if (success) {\n this.voicemailSettingsSaved.emit();\n }\n });\n this.facade\n .getVoicemailPinUpdated$()\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.setSelectedPage('Main');\n });\n this.facade\n .getTTSLanguages$()\n .pipe(untilDestroyed(this))\n .subscribe((ttsLanguages: TTSLanguage[]) => {\n this.ttsLanguages = ttsLanguages;\n });\n this.facade\n .getTTSVoices$()\n .pipe(untilDestroyed(this))\n .subscribe((voices) => {\n this.voicesOfSelectedLanguage = voices;\n });\n this.facade\n .getAudioUploaded$()\n .pipe(untilDestroyed(this), delay(4500))\n .subscribe(() => {\n this.setSelectedPage('Main');\n this.voicemailSettings = undefined;\n this.facade.getVoicemailSettings();\n });\n this.facade\n .getGreetingList$()\n .pipe(untilDestroyed(this))\n .subscribe((greetings) => {\n this.greetings = greetings;\n });\n this.facade\n .getRecordedName$()\n .pipe(untilDestroyed(this))\n .subscribe((recordedName) => {\n this.recordedName = recordedName;\n });\n this.facade\n .getPlayingAudio$()\n .pipe(untilDestroyed(this))\n .subscribe((audio) => {\n this.playingAudio = audio;\n if (!this.playingAudio) {\n this.playingAudioId = null;\n this.recordingSeconds = 0;\n clearInterval(this.recordingIntervalId);\n }\n });\n this.facade\n .getCurrentUser$()\n .pipe(untilDestroyed(this))\n .subscribe((user) => {\n this.currentUser = user;\n });\n this.facade.getTTSLanguages();\n }\n\n ngAfterViewInit(): void {\n if (this.editingDisabled) {\n // pass scroll events from grey mask to main container\n this.greyMask?.nativeElement.addEventListener('wheel', (event: WheelEvent) => {\n this.scrollArea.nativeElement.scrollBy(event.deltaX, event.deltaY);\n });\n\n // block mouse and keyboard events except Escape key and click on Cancel button\n this.scrollArea.nativeElement.addEventListener(\n 'click',\n (event) => {\n if (event.target.parentElement.id !== 'cancel-button') {\n this.stopAndPreventDefault(event);\n }\n },\n true\n );\n this.scrollArea.nativeElement.addEventListener('keydown', (event: KeyboardEvent) => {\n if (event.key !== 'Escape') {\n this.stopAndPreventDefault(event);\n }\n });\n }\n }\n\n private stopAndPreventDefault(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n setSelectedPage(page: VoicemailSettingPageType) {\n this.selectedPage = page;\n this.stopAudio();\n if (this.selectedPage === 'Main') {\n this.itemToEdit = undefined;\n this.audioToEdit = null;\n this.recordingSeconds = 0;\n this.recordingAudio = new Audio() as AudioUtil;\n }\n this.scrollArea.nativeElement.scrollTop = 0;\n }\n\n goToManageGreetingPage(audioType: AudioType) {\n this.editAudioType = audioType;\n if (this.itemToEdit) {\n this.indexToEdit = audioType === AudioType.name ? 0 : Number(this.itemToEdit.index);\n } else {\n if (this.editAudioType === AudioType.name) {\n this.indexToEdit = 0;\n } else {\n this.indexToEdit =\n this.greetings.length > 0\n ? Number(Math.max(...this.greetings.map((greeting) => Number(greeting.index)))) + 1\n : 1;\n }\n }\n this.track = undefined;\n this.recordedFile = null;\n this.setSelectedPage('ManageGreeting');\n }\n\n updatePin(pin: string) {\n this.facade.updatePin(pin);\n }\n\n uploadTTS(greeting: VoicemailTTSGreeting) {\n this.facade.uploadTTS(greeting, this.indexToEdit, this.editAudioType);\n }\n\n uploadAudioFile(greeting: VoicemailFileGreeting) {\n this.facade.uploadAudioFile(greeting, this.editAudioType);\n }\n\n downloadAudioFile(greeting: VoicemailGreetingAudioItem) {\n this.facade.downloadAudioFile(\n greeting.index,\n greeting.type === 'greeting' ? AudioType.greeting : AudioType.name,\n greeting.description\n );\n }\n\n async toggleRecording(audioType: AudioType) {\n if (this.isRecording) {\n this.stopInputSound();\n } else {\n this.stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const { source, destination } = await this.setupAudioContextAndNodes(this.stream);\n await this.setupAndStartRecorder(destination, audioType === AudioType.greeting ? 20_000 : 10_000);\n source.connect(destination);\n }\n }\n\n async setupAndStartRecorder(destination: MediaStreamAudioDestinationNode, timeout: number) {\n if (await microphonePermission.check()) {\n this.recordingSeconds = 0;\n this.recorder = new MediaRecorder(destination.stream);\n this.recordingIntervalId = setInterval(() => this.recordingSeconds++, 1000);\n const chunks: Blob[] = [];\n this.isRecording = true;\n this.recorder.ondataavailable = (event) => {\n chunks.push(event.data);\n };\n this.recorder.onstop = async () => {\n clearInterval(this.recordingIntervalId);\n this.recordingAudio.pause();\n const audioBlob = new Blob(chunks, { type: 'audio/webm' });\n try {\n const wavBlob = await getWaveBlob(audioBlob, false);\n this.recordedFile = new File([wavBlob], 'UploadedGreeting.wav', { type: 'audio/wav' });\n this.isRecording = false;\n } catch {\n this.snackbarService.open('Error in audio record!');\n this.isRecording = false;\n }\n\n this.recordingAudio.src = URL.createObjectURL(audioBlob);\n this.track = {\n link: this.recordingAudio.src,\n title: 'RecordedGreeting.wav',\n duration: this.recordingSeconds,\n };\n this.recordingSeconds = 0;\n };\n\n this.recorder.start();\n\n setTimeout(() => {\n this.stopInputSound();\n }, timeout);\n }\n }\n\n private async setupAudioContextAndNodes(audio: MediaStream | HTMLAudioElement) {\n const audioContext = new AudioContext();\n const source =\n audio instanceof HTMLAudioElement\n ? audioContext.createMediaElementSource(audio)\n : audioContext.createMediaStreamSource(audio);\n const destination = audioContext.createMediaStreamDestination();\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n source.connect(analyser);\n return { source, destination, analyser };\n }\n\n saveSettings(settings: VoicemailSettingsModel): void {\n if (!this.editingDisabled) {\n this.facade.saveVoicemailSettings(settings);\n }\n }\n\n getVoicesOfLanguage(language: TTSLanguage): void {\n this.facade.getTTSVoiceOfLanguage(language.id);\n }\n\n onAudioDeleteClicked(audioItem: VoicemailGreetingAudioItem): void {\n if (audioItem.type === 'greeting') {\n if (this.voicemailSettings?.confirmDeletion) {\n this.confirmDeleteGreeting(audioItem);\n } else {\n this.deleteGreeting(audioItem);\n }\n } else {\n this.deleteRecordedName();\n }\n }\n\n onGreetingEditClicked(greetingAudioItem: VoicemailGreetingAudioItem): void {\n this.audioToEdit = greetingAudioItem;\n this.itemToEdit = this.voicemailSettings?.greetings.find(\n (greeting) => greeting.index === greetingAudioItem.index.toString()\n );\n this.goToManageGreetingPage(AudioType.greeting);\n }\n\n onManageRecorderNameClicked(): void {\n if (this.recordedName) {\n this.audioToEdit = this.recordedName;\n this.itemToEdit = this.voicemailSettings?.recordedNames;\n }\n this.goToManageGreetingPage(AudioType.name);\n }\n\n confirmDeleteGreeting(toBeDeleted: VoicemailGreetingAudioItem): void {\n this.dialog.open(ConfirmDialogComponent, {\n data: {\n title: 'Delete Voicemail Greeting',\n description: 'Are you sure you want to delete this greeting?',\n buttons: [\n {\n label: 'Cancel',\n color: 'primary',\n action: () => null,\n type: ButtonType.matStrokedButton,\n },\n {\n label: 'Delete',\n color: 'warn',\n action: () => this.deleteGreeting(toBeDeleted),\n type: ButtonType.matRaisedButton,\n default: true,\n },\n ],\n },\n });\n }\n\n deleteGreeting(greetingAudioItem: VoicemailGreetingAudioItem): void {\n this.facade.deleteGreetingAudioItem(greetingAudioItem);\n }\n\n deleteRecordedName(): void {\n this.facade.deleteRecordedNameAudioItem();\n }\n\n async playAudio(audio: VoicemailGreetingAudioItem | null) {\n if (audio === null) {\n return;\n }\n this.playingAudioId = audio.type === 'greeting' ? audio.index : 'name';\n const audioUtil: AudioUtil = new Audio(audio.mediaUrl) as AudioUtil;\n await this.facade.playAudio(audioUtil);\n }\n\n stopAudio(): void {\n this.facade.stopAudio();\n this.recordingSeconds = 0;\n clearInterval(this.recordingIntervalId);\n }\n\n playTtsPreview(data: { voice: TTSVoice; text: string }): void {\n this.playingAudioId = 'voice';\n this.facade.previewTts(data.voice, data.text);\n }\n\n async playRecordedFile() {\n if (this.track && this.playingAudioId != 'recorded') {\n const audioUtil: AudioUtil = new Audio(this.track.link) as AudioUtil;\n await this.facade.playAudio(audioUtil);\n this.recordingSeconds = 0;\n this.recordingIntervalId = setInterval(() => this.recordingSeconds++, 1000);\n this.playingAudioId = 'recorded';\n } else {\n this.playingAudioId = null;\n this.recordingSeconds = 0;\n clearInterval(this.recordingIntervalId);\n this.facade.stopAudio();\n }\n }\n\n stopInputSound() {\n this.recordingAudio.pause();\n if (this.isRecording) {\n this.recorder.stop();\n }\n if (this.stream) {\n for (const track of this.stream.getTracks()) {\n track.stop();\n }\n this.stream = null;\n }\n }\n\n async playAudioToEdit() {\n if (this.audioToEdit && this.playingAudioId != this.audioToEdit.index) {\n const audioUtil: AudioUtil = new Audio(this.audioToEdit.mediaUrl) as AudioUtil;\n await this.facade.playAudio(audioUtil);\n this.recordingSeconds = 0;\n this.recordingIntervalId = setInterval(() => this.recordingSeconds++, 1000);\n this.playingAudioId = this.audioToEdit.index;\n } else {\n this.playingAudioId = null;\n this.recordingSeconds = 0;\n clearInterval(this.recordingIntervalId);\n this.facade.stopAudio();\n }\n }\n}\n","
\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n \n
\n","import { Component, ElementRef, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { ContactType } from '@app/contacts/models/contact';\nimport { ContactService } from '@app/contacts/services/contact.service';\nimport { SnackBarType } from '@app/core/models/snack-bar-data.model';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { SnackbarService } from '@app/core/services/snack-bar.service';\nimport { firstValueFrom } from 'rxjs';\n\n@Component({\n selector: 'app-import-contacts',\n templateUrl: './import-contacts.component.html',\n styleUrls: ['./import-contacts.component.scss'],\n})\nexport class ImportContactsComponent {\n contactFile: File = new File([], '');\n importContactFormGroup: FormGroup;\n allowedFiles: string[] = ['.csv'];\n @ViewChild('fileInput') fileInput: ElementRef;\n loading: boolean = false;\n protected readonly ContactType = ContactType;\n\n constructor(\n private dialogRef: MatDialogRef,\n private fb: FormBuilder,\n protected appConfigService: AppConfigService,\n private contactService: ContactService,\n private snackbar: SnackbarService,\n private translate: AppTranslateService\n ) {\n this.importContactFormGroup = this.fb.group({\n file: [null, Validators.required],\n type: [ContactType.Personal, Validators.required],\n merge: [1, Validators.required],\n });\n }\n\n close(): void {\n this.dialogRef.close();\n }\n\n openFileSelector(): void {\n this.fileInput.nativeElement.click();\n }\n\n removeFaxFile(): void {\n this.contactFile = new File([], '');\n this.importContactFormGroup.controls['file'].reset();\n }\n\n addFile(event: Event): void {\n const target = event.target as HTMLInputElement;\n if (target.files) {\n this.contactFile = target.files[0];\n this.importContactFormGroup.controls['file'].patchValue(this.contactFile);\n }\n target.value = '';\n }\n\n async submit() {\n this.loading = true;\n if (this.contactFile.type !== 'text/csv') {\n this.snackbar.open(this.translate.instant('CONTACT_PREFERENCES.IF_EXPORT_DESC'), '', {\n duration: 5000,\n panelClass: SnackBarType.ERROR,\n });\n this.loading = false;\n return;\n }\n const formData = new FormData();\n formData.append('file', this.contactFile);\n formData.append('type', this.importContactFormGroup.value.type);\n formData.append('source', 'ucws');\n formData.append('merge', this.importContactFormGroup.value.merge);\n try {\n const response = await firstValueFrom(this.contactService.importContacts(formData));\n if (response) {\n this.snackbar.open(\n this.translate.instant('CONTACT_PREFERENCES.CONTACTS_IMPORT_SUCCESSFUL'),\n this.translate.instant('CONTACT_PREFERENCES.OK')\n );\n this.loading = false;\n this.dialogRef.close();\n }\n } catch {\n this.snackbar.open(this.translate.instant('CONTACT_PREFERENCES.CONTACTS_IMPORT_NOT_SUCCESSFUL'), '', {\n duration: 5000,\n panelClass: SnackBarType.ERROR,\n });\n this.loading = false;\n }\n }\n}\n","\n close\n \n

{{ 'CONTACT_PREFERENCES.IMPORT_CONTACTS' | translate }}

\n
\n
\n \n {{ 'CONTACT_PREFERENCES.FILE_NAME' | translate }}\n \n \n \n delete_outline\n \n
\n
\n
\n \n {{ 'CONTACT_PREFERENCES.SELECT_A_DIFFERENT_FILE' | translate }}\n file_upload_outline\n
\n \n \n \n {{ 'CONTACT_PREFERENCES.ADD_TO_CONTACT_LIST' | translate }}\n
\n \n {{ ContactType.Shared | contactTypeLabel }}\n {{ ContactType.Personal | contactTypeLabel }}\n \n
\n \n \n {{ 'CONTACT_PREFERENCES.CONFLICT_RESOLUTION' | translate }}\n
\n \n {{ 'CONTACT_PREFERENCES.MERGE' | translate }}\n {{ 'CONTACT_PREFERENCES.DUPLICATE' | translate }}\n \n
\n \n
\n \n \n {{ 'CONTACT_PREFERENCES.CANCEL' | translate }}\n \n \n \n {{ 'CONTACT_PREFERENCES.SAVE' | translate }}\n \n
\n\n","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormControl } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ContactType } from '@app/contacts/models/contact';\nimport { ContactService } from '@app/contacts/services/contact.service';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { AppTranslateService } from '@app/core/services/app-translate.service';\nimport { SnackbarService } from '@app/core/services/snack-bar.service';\nimport { ImportContactsComponent } from '@app/preferences/components/contacts/import-contacts/import-contacts.component';\nimport { CallingSettings } from '@app/preferences/models/settings.models';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { saveAs } from 'file-saver-es';\nimport { firstValueFrom } from 'rxjs';\n\n@UntilDestroy()\n@Component({\n selector: 'app-contacts',\n templateUrl: './contacts.component.html',\n styleUrls: ['./contacts.component.scss'],\n})\nexport class ContactsComponent implements OnInit {\n protected selectedContactOption: ContactType = ContactType.Personal;\n protected readonly ContactType = ContactType;\n public contactMatching: FormControl;\n protected contactMatchingLoading = false;\n private callingConfig: CallingSettings;\n\n constructor(\n private contactService: ContactService,\n protected appConfigService: AppConfigService,\n private snackBar: SnackbarService,\n private dialog: MatDialog,\n private fb: FormBuilder,\n private configService: AppConfigService,\n private translate: AppTranslateService\n ) {\n this.contactMatching = this.fb.control(true);\n }\n\n ngOnInit(): void {\n this.configService.data$.pipe(untilDestroyed(this)).subscribe((config) => {\n if (config && config.settings?.preferences) {\n this.callingConfig = config.settings.preferences.calling || {};\n this.contactMatching.setValue(!config.settings.preferences.calling?.disableContactMatching);\n }\n });\n }\n\n async exportContacts() {\n const response = await firstValueFrom(this.contactService.exportContacts(this.selectedContactOption));\n if (response) {\n saveAs(new Blob([response], { type: 'application/octet-stream' }), 'contacts.csv');\n this.snackBar.open(\n this.translate.instant('CONTACT_PREFERENCES.CONTACTS_HAVE_BEEN_DOWNLOADED'),\n this.translate.instant('CONTACT_PREFERENCES.OK')\n );\n }\n }\n\n handleClickOnImportContact() {\n this.dialog.open(ImportContactsComponent);\n }\n\n protected async onChangeContactMatching() {\n this.contactMatchingLoading = true;\n await firstValueFrom(\n this.configService.updatePreferences({\n calling: {\n ...this.callingConfig,\n disableContactMatching: !this.contactMatching.value,\n },\n })\n );\n this.contactMatchingLoading = false;\n }\n}\n","
\n
\n

{{ 'CONTACT_PREFERENCES.CONTACTS' | translate }}

\n \n
\n
\n \n \n
\n {{ 'CONTACT_PREFERENCES.ENABLE_CONTACT_MATCHING' | translate }}\n
\n
\n \n {{ 'CONTACT_PREFERENCES.CONTACT_MATCHING_TOOLTIP' | translate }}\n \n \n
\n
{{ 'CONTACT_PREFERENCES.EXPORT_CONTACTS' | translate }}
\n \n {{ 'CONTACT_PREFERENCES.CONTACTS_TO_EXPORT' | translate }}\n
\n \n {{ ContactType.Shared | contactTypeLabel }}\n \n {{ ContactType.Personal | contactTypeLabel }}\n \n
\n \n
\n \n {{ 'CONTACT_PREFERENCES.EXPORT' | translate }}\n \n
\n
{{ 'CONTACT_PREFERENCES.IMPORT_CONTACTS' | translate }}
\n

\n {{ 'CONTACT_PREFERENCES.IMPORT_CONTACTS_DESC' | translate }}\n \n

\n \n {{ 'CONTACT_PREFERENCES.SELECT_A_FILE' | translate }}\n upload\n \n
\n
\n","import { SwUpdate, VersionEvent } from '@angular/service-worker';\nimport { environment } from '@environment/environment';\n\ninterface VersionEventAppData {\n minVersion: string;\n}\n\nexport async function checkUpdate(swUpdate: SwUpdate) {\n if (!swUpdate.isEnabled) {\n return;\n }\n\n /**\n * Subscribe to verison updates and then call `checkForUpdate` manually. Calling manually will ensures the check happens at\n * launch. While the check will return a boolean indicating the presence of an update, it does not have the `appData` payload\n * we need to determine if the update should be optional or required.\n *\n * Manually calling checkForUpdate is necessary instead of only subscribing to `versionUpdates` (how it was done previously)\n * since the time it takes for that event to be emitted is outside the bounds of what we want. With this approach, the app's manifest file\n * is downloaded immediately (as part of the check) and triggers a version update.\n */\n swUpdate.versionUpdates.subscribe((data: VersionEvent) => {\n console.log(`update: version update: ${data.type}`);\n if (data.type === 'VERSION_READY') {\n console.log(`update: version ready: ${data.type}`);\n\n // If the hashes are the same, don't prompt the user to update.\n if (data.currentVersion.hash === data.latestVersion.hash) {\n return;\n }\n\n // If there's no appData, only an optional update is needed\n const latestAppData = data.latestVersion.appData as VersionEventAppData;\n if (!latestAppData) {\n promptOptionalUpdate();\n return;\n }\n\n // If the min version is greater than the current version, force the user to update. Otherwise\n // the update is optional\n const forceUpdateNeeded = compareSemver(latestAppData.minVersion, environment.awsCommitId) > 0;\n forceUpdateNeeded ? promptForceUpdate() : promptOptionalUpdate();\n }\n });\n\n const result = await swUpdate.checkForUpdate();\n console.log('update: check for update result', result);\n}\n\nfunction promptOptionalUpdate() {\n if (confirm('New version available. Load New Version?')) {\n window.location.reload();\n } else {\n updateRejected = true;\n }\n}\n\nfunction promptForceUpdate() {\n alert(\n 'A critical update is available. You must update to continue using this application. Note: This is a quick process but updating will end all active calls and refresh the app.'\n );\n window.location.reload();\n}\n\n/**\n * Returns -1 if version1 < version2, 0 if equal, 1 if version1 > version2\n */\nexport function compareSemver(version1: string, version2: string): number {\n const parseVersion = (version: string) => {\n const [mainVersion] = version.split('-');\n const [major, minor, patch] = mainVersion.split('.').map(Number);\n return [major || 0, minor || 0, patch || 0];\n };\n\n const [major1, minor1, patch1] = parseVersion(version1);\n const [major2, minor2, patch2] = parseVersion(version2);\n\n if (major1 !== major2) {\n return major1 > major2 ? 1 : -1;\n }\n\n if (minor1 !== minor2) {\n return minor1 > minor2 ? 1 : -1;\n }\n\n if (patch1 !== patch2) {\n return patch1 > patch2 ? 1 : -1;\n }\n\n return 0;\n}\n\nexport let updateRejected = false;\n","/**\n * @license Angular v18.2.13\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport * as i0 from '@angular/core';\nimport { Injectable, InjectionToken, NgZone, ApplicationRef, makeEnvironmentProviders, PLATFORM_ID, APP_INITIALIZER, Injector, NgModule } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { defer, throwError, fromEvent, of, concat, Subject, NEVER, merge, from } from 'rxjs';\nimport { map, filter, switchMap, publish, take, tap, delay } from 'rxjs/operators';\nconst ERR_SW_NOT_SUPPORTED = 'Service workers are disabled or not supported by this browser';\nfunction errorObservable(message) {\n return defer(() => throwError(new Error(message)));\n}\n/**\n * @publicApi\n */\nclass NgswCommChannel {\n constructor(serviceWorker) {\n this.serviceWorker = serviceWorker;\n if (!serviceWorker) {\n this.worker = this.events = this.registration = errorObservable(ERR_SW_NOT_SUPPORTED);\n } else {\n const controllerChangeEvents = fromEvent(serviceWorker, 'controllerchange');\n const controllerChanges = controllerChangeEvents.pipe(map(() => serviceWorker.controller));\n const currentController = defer(() => of(serviceWorker.controller));\n const controllerWithChanges = concat(currentController, controllerChanges);\n this.worker = controllerWithChanges.pipe(filter(c => !!c));\n this.registration = this.worker.pipe(switchMap(() => serviceWorker.getRegistration()));\n const rawEvents = fromEvent(serviceWorker, 'message');\n const rawEventPayload = rawEvents.pipe(map(event => event.data));\n const eventsUnconnected = rawEventPayload.pipe(filter(event => event && event.type));\n const events = eventsUnconnected.pipe(publish());\n events.connect();\n this.events = events;\n }\n }\n postMessage(action, payload) {\n return this.worker.pipe(take(1), tap(sw => {\n sw.postMessage({\n action,\n ...payload\n });\n })).toPromise().then(() => undefined);\n }\n postMessageWithOperation(type, payload, operationNonce) {\n const waitForOperationCompleted = this.waitForOperationCompleted(operationNonce);\n const postMessage = this.postMessage(type, payload);\n return Promise.all([postMessage, waitForOperationCompleted]).then(([, result]) => result);\n }\n generateNonce() {\n return Math.round(Math.random() * 10000000);\n }\n eventsOfType(type) {\n let filterFn;\n if (typeof type === 'string') {\n filterFn = event => event.type === type;\n } else {\n filterFn = event => type.includes(event.type);\n }\n return this.events.pipe(filter(filterFn));\n }\n nextEventOfType(type) {\n return this.eventsOfType(type).pipe(take(1));\n }\n waitForOperationCompleted(nonce) {\n return this.eventsOfType('OPERATION_COMPLETED').pipe(filter(event => event.nonce === nonce), take(1), map(event => {\n if (event.result !== undefined) {\n return event.result;\n }\n throw new Error(event.error);\n })).toPromise();\n }\n get isEnabled() {\n return !!this.serviceWorker;\n }\n}\n\n/**\n * Subscribe and listen to\n * [Web Push\n * Notifications](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices) through\n * Angular Service Worker.\n *\n * @usageNotes\n *\n * You can inject a `SwPush` instance into any component or service\n * as a dependency.\n *\n * \n *\n * To subscribe, call `SwPush.requestSubscription()`, which asks the user for permission.\n * The call returns a `Promise` with a new\n * [`PushSubscription`](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\n * instance.\n *\n * \n *\n * A request is rejected if the user denies permission, or if the browser\n * blocks or does not support the Push API or ServiceWorkers.\n * Check `SwPush.isEnabled` to confirm status.\n *\n * Invoke Push Notifications by pushing a message with the following payload.\n *\n * ```ts\n * {\n * \"notification\": {\n * \"actions\": NotificationAction[],\n * \"badge\": USVString,\n * \"body\": DOMString,\n * \"data\": any,\n * \"dir\": \"auto\"|\"ltr\"|\"rtl\",\n * \"icon\": USVString,\n * \"image\": USVString,\n * \"lang\": DOMString,\n * \"renotify\": boolean,\n * \"requireInteraction\": boolean,\n * \"silent\": boolean,\n * \"tag\": DOMString,\n * \"timestamp\": DOMTimeStamp,\n * \"title\": DOMString,\n * \"vibrate\": number[]\n * }\n * }\n * ```\n *\n * Only `title` is required. See `Notification`\n * [instance\n * properties](https://developer.mozilla.org/en-US/docs/Web/API/Notification#Instance_properties).\n *\n * While the subscription is active, Service Worker listens for\n * [PushEvent](https://developer.mozilla.org/en-US/docs/Web/API/PushEvent)\n * occurrences and creates\n * [Notification](https://developer.mozilla.org/en-US/docs/Web/API/Notification)\n * instances in response.\n *\n * Unsubscribe using `SwPush.unsubscribe()`.\n *\n * An application can subscribe to `SwPush.notificationClicks` observable to be notified when a user\n * clicks on a notification. For example:\n *\n * \n *\n * You can read more on handling notification clicks in the [Service worker notifications\n * guide](ecosystem/service-workers/push-notifications).\n *\n * @see [Push Notifications](https://developers.google.com/web/fundamentals/codelabs/push-notifications/)\n * @see [Angular Push Notifications](https://blog.angular-university.io/angular-push-notifications/)\n * @see [MDN: Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)\n * @see [MDN: Notifications API](https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API)\n * @see [MDN: Web Push API Notifications best practices](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices)\n *\n * @publicApi\n */\nlet SwPush = /*#__PURE__*/(() => {\n class SwPush {\n /**\n * True if the Service Worker is enabled (supported by the browser and enabled via\n * `ServiceWorkerModule`).\n */\n get isEnabled() {\n return this.sw.isEnabled;\n }\n constructor(sw) {\n this.sw = sw;\n this.pushManager = null;\n this.subscriptionChanges = new Subject();\n if (!sw.isEnabled) {\n this.messages = NEVER;\n this.notificationClicks = NEVER;\n this.subscription = NEVER;\n return;\n }\n this.messages = this.sw.eventsOfType('PUSH').pipe(map(message => message.data));\n this.notificationClicks = this.sw.eventsOfType('NOTIFICATION_CLICK').pipe(map(message => message.data));\n this.pushManager = this.sw.registration.pipe(map(registration => registration.pushManager));\n const workerDrivenSubscriptions = this.pushManager.pipe(switchMap(pm => pm.getSubscription()));\n this.subscription = merge(workerDrivenSubscriptions, this.subscriptionChanges);\n }\n /**\n * Subscribes to Web Push Notifications,\n * after requesting and receiving user permission.\n *\n * @param options An object containing the `serverPublicKey` string.\n * @returns A Promise that resolves to the new subscription object.\n */\n requestSubscription(options) {\n if (!this.sw.isEnabled || this.pushManager === null) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const pushOptions = {\n userVisibleOnly: true\n };\n let key = this.decodeBase64(options.serverPublicKey.replace(/_/g, '/').replace(/-/g, '+'));\n let applicationServerKey = new Uint8Array(new ArrayBuffer(key.length));\n for (let i = 0; i < key.length; i++) {\n applicationServerKey[i] = key.charCodeAt(i);\n }\n pushOptions.applicationServerKey = applicationServerKey;\n return this.pushManager.pipe(switchMap(pm => pm.subscribe(pushOptions)), take(1)).toPromise().then(sub => {\n this.subscriptionChanges.next(sub);\n return sub;\n });\n }\n /**\n * Unsubscribes from Service Worker push notifications.\n *\n * @returns A Promise that is resolved when the operation succeeds, or is rejected if there is no\n * active subscription or the unsubscribe operation fails.\n */\n unsubscribe() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const doUnsubscribe = sub => {\n if (sub === null) {\n throw new Error('Not subscribed to push notifications.');\n }\n return sub.unsubscribe().then(success => {\n if (!success) {\n throw new Error('Unsubscribe failed!');\n }\n this.subscriptionChanges.next(null);\n });\n };\n return this.subscription.pipe(take(1), switchMap(doUnsubscribe)).toPromise();\n }\n decodeBase64(input) {\n return atob(input);\n }\n static {\n this.ɵfac = function SwPush_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SwPush)(i0.ɵɵinject(NgswCommChannel));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SwPush,\n factory: SwPush.ɵfac\n });\n }\n }\n return SwPush;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Subscribe to update notifications from the Service Worker, trigger update\n * checks, and forcibly activate updates.\n *\n * @see {@link ecosystem/service-workers/communications Service worker communication guide}\n *\n * @publicApi\n */\nlet SwUpdate = /*#__PURE__*/(() => {\n class SwUpdate {\n /**\n * True if the Service Worker is enabled (supported by the browser and enabled via\n * `ServiceWorkerModule`).\n */\n get isEnabled() {\n return this.sw.isEnabled;\n }\n constructor(sw) {\n this.sw = sw;\n if (!sw.isEnabled) {\n this.versionUpdates = NEVER;\n this.unrecoverable = NEVER;\n return;\n }\n this.versionUpdates = this.sw.eventsOfType(['VERSION_DETECTED', 'VERSION_INSTALLATION_FAILED', 'VERSION_READY', 'NO_NEW_VERSION_DETECTED']);\n this.unrecoverable = this.sw.eventsOfType('UNRECOVERABLE_STATE');\n }\n /**\n * Checks for an update and waits until the new version is downloaded from the server and ready\n * for activation.\n *\n * @returns a promise that\n * - resolves to `true` if a new version was found and is ready to be activated.\n * - resolves to `false` if no new version was found\n * - rejects if any error occurs\n */\n checkForUpdate() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const nonce = this.sw.generateNonce();\n return this.sw.postMessageWithOperation('CHECK_FOR_UPDATES', {\n nonce\n }, nonce);\n }\n /**\n * Updates the current client (i.e. browser tab) to the latest version that is ready for\n * activation.\n *\n * In most cases, you should not use this method and instead should update a client by reloading\n * the page.\n *\n *
\n *\n * Updating a client without reloading can easily result in a broken application due to a version\n * mismatch between the application shell and other page resources,\n * such as lazy-loaded chunks, whose filenames may change between\n * versions.\n *\n * Only use this method, if you are certain it is safe for your specific use case.\n *\n *
\n *\n * @returns a promise that\n * - resolves to `true` if an update was activated successfully\n * - resolves to `false` if no update was available (for example, the client was already on the\n * latest version).\n * - rejects if any error occurs\n */\n activateUpdate() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n const nonce = this.sw.generateNonce();\n return this.sw.postMessageWithOperation('ACTIVATE_UPDATE', {\n nonce\n }, nonce);\n }\n static {\n this.ɵfac = function SwUpdate_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || SwUpdate)(i0.ɵɵinject(NgswCommChannel));\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SwUpdate,\n factory: SwUpdate.ɵfac\n });\n }\n }\n return SwUpdate;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\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.dev/license\n */\nconst SCRIPT = /*#__PURE__*/new InjectionToken(ngDevMode ? 'NGSW_REGISTER_SCRIPT' : '');\nfunction ngswAppInitializer(injector, script, options, platformId) {\n return () => {\n if (!(isPlatformBrowser(platformId) && 'serviceWorker' in navigator && options.enabled !== false)) {\n return;\n }\n const ngZone = injector.get(NgZone);\n const appRef = injector.get(ApplicationRef);\n // Set up the `controllerchange` event listener outside of\n // the Angular zone to avoid unnecessary change detections,\n // as this event has no impact on view updates.\n ngZone.runOutsideAngular(() => {\n // Wait for service worker controller changes, and fire an INITIALIZE action when a new SW\n // becomes active. This allows the SW to initialize itself even if there is no application\n // traffic.\n const sw = navigator.serviceWorker;\n const onControllerChange = () => sw.controller?.postMessage({\n action: 'INITIALIZE'\n });\n sw.addEventListener('controllerchange', onControllerChange);\n appRef.onDestroy(() => {\n sw.removeEventListener('controllerchange', onControllerChange);\n });\n });\n let readyToRegister$;\n if (typeof options.registrationStrategy === 'function') {\n readyToRegister$ = options.registrationStrategy();\n } else {\n const [strategy, ...args] = (options.registrationStrategy || 'registerWhenStable:30000').split(':');\n switch (strategy) {\n case 'registerImmediately':\n readyToRegister$ = of(null);\n break;\n case 'registerWithDelay':\n readyToRegister$ = delayWithTimeout(+args[0] || 0);\n break;\n case 'registerWhenStable':\n const whenStable$ = from(injector.get(ApplicationRef).whenStable());\n readyToRegister$ = !args[0] ? whenStable$ : merge(whenStable$, delayWithTimeout(+args[0]));\n break;\n default:\n // Unknown strategy.\n throw new Error(`Unknown ServiceWorker registration strategy: ${options.registrationStrategy}`);\n }\n }\n // Don't return anything to avoid blocking the application until the SW is registered.\n // Also, run outside the Angular zone to avoid preventing the app from stabilizing (especially\n // given that some registration strategies wait for the app to stabilize).\n // Catch and log the error if SW registration fails to avoid uncaught rejection warning.\n ngZone.runOutsideAngular(() => readyToRegister$.pipe(take(1)).subscribe(() => navigator.serviceWorker.register(script, {\n scope: options.scope\n }).catch(err => console.error('Service worker registration failed with:', err))));\n };\n}\nfunction delayWithTimeout(timeout) {\n return of(null).pipe(delay(timeout));\n}\nfunction ngswCommChannelFactory(opts, platformId) {\n return new NgswCommChannel(isPlatformBrowser(platformId) && opts.enabled !== false ? navigator.serviceWorker : undefined);\n}\n/**\n * Token that can be used to provide options for `ServiceWorkerModule` outside of\n * `ServiceWorkerModule.register()`.\n *\n * You can use this token to define a provider that generates the registration options at runtime,\n * for example via a function call:\n *\n * {@example service-worker/registration-options/module.ts region=\"registration-options\"\n * header=\"app.module.ts\"}\n *\n * @publicApi\n */\nclass SwRegistrationOptions {}\n/**\n * @publicApi\n *\n * Sets up providers to register the given Angular Service Worker script.\n *\n * If `enabled` is set to `false` in the given options, the module will behave as if service\n * workers are not supported by the browser, and the service worker will not be registered.\n *\n * Example usage:\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideServiceWorker('ngsw-worker.js')\n * ],\n * });\n * ```\n */\nfunction provideServiceWorker(script, options = {}) {\n return makeEnvironmentProviders([SwPush, SwUpdate, {\n provide: SCRIPT,\n useValue: script\n }, {\n provide: SwRegistrationOptions,\n useValue: options\n }, {\n provide: NgswCommChannel,\n useFactory: ngswCommChannelFactory,\n deps: [SwRegistrationOptions, PLATFORM_ID]\n }, {\n provide: APP_INITIALIZER,\n useFactory: ngswAppInitializer,\n deps: [Injector, SCRIPT, SwRegistrationOptions, PLATFORM_ID],\n multi: true\n }]);\n}\n\n/**\n * @publicApi\n */\nlet ServiceWorkerModule = /*#__PURE__*/(() => {\n class ServiceWorkerModule {\n /**\n * Register the given Angular Service Worker script.\n *\n * If `enabled` is set to `false` in the given options, the module will behave as if service\n * workers are not supported by the browser, and the service worker will not be registered.\n */\n static register(script, options = {}) {\n return {\n ngModule: ServiceWorkerModule,\n providers: [provideServiceWorker(script, options)]\n };\n }\n static {\n this.ɵfac = function ServiceWorkerModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || ServiceWorkerModule)();\n };\n }\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: ServiceWorkerModule\n });\n }\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [SwPush, SwUpdate]\n });\n }\n }\n return ServiceWorkerModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n\n// This file is not used to build this module. It is only used during editing\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ServiceWorkerModule, SwPush, SwRegistrationOptions, SwUpdate, provideServiceWorker };\n","import { DIALOG_DATA } from '@angular/cdk/dialog';\nimport { AfterViewInit, Component, Inject, OnInit, Optional, QueryList, ViewChildren } from '@angular/core';\nimport { SwUpdate } from '@angular/service-worker';\nimport { Contact } from '@app/contacts/models/contact';\nimport { ContactService } from '@app/contacts/services/contact.service';\nimport { AppConfigService } from '@app/core/services/app-config.service';\nimport { VoicemailSettingsApiService } from '@app/preferences/services/voicemail-settings-api.service';\nimport { VoicemailSettingsFacadeService } from '@app/preferences/services/voicemail-settings-facade.service';\nimport { VoicemailSettingsStateService } from '@app/preferences/services/voicemail-settings-state.service';\nimport { checkUpdate, updateRejected } from '@app/shared/utils/update.util';\nimport { environment } from '@environment/environment';\nimport { delay } from 'rxjs';\n\nimport { SettingType } from '../../models/settings.models';\nimport { SettingsPage } from '../../models/settings-page';\n\n@Component({\n selector: 'app-preference-layout',\n templateUrl: './preference-layout.component.html',\n styleUrls: ['./preference-layout.component.scss'],\n providers: [VoicemailSettingsFacadeService, VoicemailSettingsApiService, VoicemailSettingsStateService],\n})\nexport class PreferenceLayoutComponent implements OnInit, AfterViewInit {\n @ViewChildren('page') pages: QueryList;\n currentSelect: string = SettingType.Profile;\n currentPage?: SettingsPage;\n profile?: Contact;\n readonly SettingType = SettingType;\n debugVersion?: string;\n protected readonly updateRejected = updateRejected;\n\n constructor(\n private contactService: ContactService,\n private appConfigService: AppConfigService,\n @Optional() @Inject(DIALOG_DATA) public data: SettingType | null,\n private swUpdate: SwUpdate\n ) {\n this.debugVersion = environment.awsCommitId;\n }\n\n ngOnInit(): void {\n this.contactService.currentUser$.subscribe((contact) => {\n this.profile = contact;\n });\n }\n\n ngAfterViewInit() {\n // Since currentPage is used with `ngIf` in our template and it starts with a value of `undefined`,\n // delay this observable to the next cycle of the run loop to allow for the view change detection\n // to stabilize and avoid the \"Expression has changed after it was checked\" error in development mode.\n // See https://blog.angular-university.io/angular-debugging/ for more info.\n this.pages.changes.pipe(delay(0)).subscribe(() => {\n // due to ngIf, each time just one page is visible on the screen, that's why we obtain it via `first`\n this.currentPage = this.pages.first;\n });\n\n if (this.data) {\n this.currentSelect = this.data;\n }\n }\n\n iterableList(): string[] {\n return Object.values(SettingType);\n }\n\n async save(page: SettingsPage) {\n await page.save();\n this.currentSelect = SettingType.Profile;\n }\n\n async onUpdate() {\n if (updateRejected) {\n // the reason why we don't call checkUpdate is swUpdate.checkForUpdate() will return false if the user rejects\n // the update at the first time\n if (confirm('New version available. Load New Version?')) {\n window.location.reload();\n }\n } else {\n await checkUpdate(this.swUpdate);\n }\n }\n}\n","
\n
\n
    \n \n
    {{ 'PREF_NAV.' + item.replaceAll(' ', '_').toUpperCase() | translate }}
    \n \n
\n \n
\n {{ 'PREF_NAV.VERSION' | translate }}: \n {{ debugVersion }} \n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ 'CONTACT_PREFERENCES.CANCEL' | translate }}\n \n \n \n {{ 'CONTACT_PREFERENCES.SAVE' | translate }}\n \n \n \n \n\n"],"mappings":"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","names":["require_wavBlobUtil","__commonJSMin","exports","module","_writeStringToArray","aString","targetArray","offset","_writeInt16ToArray","aNumber","_writeInt32ToArray","_floatBits","f","buf","_writeAudioBufferToArray","audioBuffer","bitDepth","index","channel","length","channels","channelData","sample","_getAudioBuffer","blobData","contextOptions","__async","blob","url","arrayBuffer","getWaveBlob","as32BitFloat","frameLength","numberOfChannels","sampleRate","bitsPerSample","bytesPerSample","byteRate","blockAlign","wavDataByteLength","totalLength","waveFileData","subChunk1Size","subChunk2Size","chunkSize","require_downloadUtil","__commonJSMin","exports","module","getWaveBlob","downloadWav","blobData","as32BitFloat","filename","contextOptions","__async","blob","anchorElement","require_WavRecorder","__commonJSMin","exports","module","getWaveBlob","downloadWav","WavRecorder","__async","constraints","mediaTrackConstraints","e","err","track","filename","as32Bit","contextOptions","require_webm_to_wav_converter","__commonJSMin","exports","module","_c0","CdkStep_ng_template_0_Template","rf","ctx","ɵɵprojection","CdkStepHeader","_elementRef","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","ɵɵdefineDirective","CdkStepLabel","template","TemplateRef","nextId","STEP_STATE","STEPPER_GLOBAL_OPTIONS","InjectionToken","CdkStep","value","_stepper","stepperOptions","EventEmitter","form","__ngFactoryType__","ɵɵdirectiveInject","forwardRef","CdkStepper","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","CdkStepLabel","ControlContainer","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵviewQuery","TemplateRef","booleanAttribute","ɵɵInputTransformsFeature","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","_c0","ɵɵprojectionDef","ɵɵtemplate","CdkStep_ng_template_0_Template","index","step","_dir","_changeDetectorRef","_elementRef","Subject","QueryList","nextId","startWith","takeUntil","steps","headers","a","b","FocusKeyManager","of","direction","i","position","state","isCurrentStep","newIndex","stepsArray","event","hasModifier","hasModifierKey","keyCode","manager","control","stepperElement","focusedElement","_getFocusedElementPierceShadowDom","Directionality","ChangeDetectorRef","ElementRef","ɵɵdefineDirective","CdkStepHeader","numberAttribute","CdkStepperModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","BidiModule","MatStepHeader_Conditional_3_Template","rf","ctx","ɵɵelementContainer","ctx_r0","ɵɵnextContext","ɵɵproperty","MatStepHeader_Conditional_4_Case_0_Template","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","MatStepHeader_Conditional_4_Case_1_Conditional_0_Template","MatStepHeader_Conditional_4_Case_1_Conditional_1_Template","MatStepHeader_Conditional_4_Case_1_Template","ɵɵtemplate","ɵɵconditional","MatStepHeader_Conditional_4_Template","tmp_1_0","MatStepHeader_Conditional_6_Template","MatStepHeader_Conditional_7_Template","MatStepHeader_Conditional_8_Template","MatStepHeader_Conditional_9_Template","_c0","MatStep_ng_template_0_ng_template_1_Template","MatStep_ng_template_0_Template","ɵɵprojection","_c1","a0","a1","_c2","_c3","MatStepper_Conditional_0_Template","MatStepper_Case_1_For_3_Conditional_1_Template","ɵɵelement","MatStepper_Case_1_For_3_Template","step_r1","ɵ$index_8_r2","ɵ$count_8_r3","stepTemplate_r4","ɵɵreference","ɵɵpureFunction2","MatStepper_Case_1_For_6_Template","_r5","ɵɵgetCurrentView","ɵɵlistener","$event","ɵɵrestoreView","ctx_r5","ɵɵresetView","step_r7","ɵ$index_16_r8","ɵɵclassProp","ɵɵpureFunction1","ɵɵattribute","MatStepper_Case_1_Template","ɵɵrepeaterCreate","ɵɵrepeaterTrackByIdentity","ɵɵrepeater","MatStepper_Case_2_For_1_Template","_r9","step_r10","ɵ$index_22_r11","ɵ$count_22_r12","MatStepper_Case_2_Template","MatStepper_ng_template_3_Template","_r13","step_r14","i_r15","MatStepLabel","CdkStepLabel","ɵMatStepLabel_BaseFactory","__ngFactoryType__","ɵɵgetInheritedFactory","ɵɵdefineDirective","ɵɵInheritDefinitionFeature","MatStepperIntl","Subject","ɵɵdefineInjectable","MAT_STEPPER_INTL_PROVIDER_FACTORY","parentIntl","MAT_STEPPER_INTL_PROVIDER","Optional","SkipSelf","MatStepHeader","CdkStepHeader","_intl","_focusMonitor","_elementRef","changeDetectorRef","origin","options","state","ɵɵdirectiveInject","FocusMonitor","ElementRef","ChangeDetectorRef","ɵɵdefineComponent","ɵɵclassMap","ɵɵStandaloneFeature","tmp_8_0","ɵɵclassMapInterpolate1","MatRipple","NgTemplateOutlet","MatIcon","DEFAULT_HORIZONTAL_ANIMATION_DURATION","DEFAULT_VERTICAL_ANIMATION_DURATION","matStepperAnimations","trigger","style","transition","group","animate","query","animateChild","MatStepperIcon","templateRef","TemplateRef","MatStepContent","_template","MatStep","CdkStep","stepper","_errorStateMatcher","_viewContainerRef","stepperOptions","Subscription","switchMap","map","event","startWith","isSelected","TemplatePortal","control","form","originalErrorState","customErrorState","forwardRef","MatStepper","ErrorStateMatcher","ViewContainerRef","STEPPER_GLOBAL_OPTIONS","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵProvidersFeature","ɵɵprojectionDef","CdkPortalOutlet","CdkStepper","value","dir","elementRef","QueryList","EventEmitter","inject","Platform","nodeName","name","takeUntil","index","step","Directionality","ɵɵviewQuery","ɵɵtemplateRefExtractor","tmp_2_0","MatStepperModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MAT_STEPPER_INTL_PROVIDER","ErrorStateMatcher","MatCommonModule","CommonModule","PortalModule","CdkStepperModule","MatIconModule","MatRippleModule","MatStepper","MatStepHeader","deepCloneNode","node","clone","descendantsWithId","nodeName","i","transferCanvasData","transferInputData","transferData","selector","callback","descendantElements","cloneElements","cloneUniqueId","source","context","getMutableClientRect","element","rect","isInsideClientRect","clientRect","x","y","top","bottom","left","right","adjustDomRect","domRect","isPointerNearDomRect","threshold","pointerX","pointerY","width","height","xThreshold","yThreshold","ParentPositionTracker","_document","elements","event","target","_getEventTarget","cachedPosition","scrollPosition","newTop","newLeft","viewportScrollPosition","topDifference","leftDifference","position","getRootNode","viewRef","rootNodes","wrapper","extendStyles","dest","importantProperties","key","value","toggleNativeDragInteractions","enable","userSelect","toggleVisibility","combineTransforms","transform","initialTransform","matchElementSize","sourceRect","getTransform","parseCssTimeUnitsToMs","multiplier","getTransformTransitionDurationInMs","computedStyle","transitionedProperties","parseCssPropertyValue","property","prop","propertyIndex","rawDurations","rawDelays","name","part","PreviewRef","_rootElement","_direction","_initialDomRect","_previewTemplate","_previewClass","_pickupPositionOnPage","_initialTransform","_zIndex","parent","supportsPopover","className","handler","previewConfig","previewClass","previewTemplate","preview","rootRect","passiveEventListenerOptions","normalizePassiveListenerOptions","activeEventListenerOptions","activeCapturingEventOptions$1","MOUSE_EVENT_IGNORE_TIME","dragImportantProperties","DragRef","handle","_config","_ngZone","_viewportRuler","_dragDropRegistry","signal","Subject","Subscription","targetHandle","pointerPosition","distanceX","distanceY","isDelayElapsed","container","constrainedPointerPosition","offset","activeTransform","handles","coerceElement","disabledHandles","template","rootElement","boundaryElement","direction","shadowDomSelectStart","isTouchEvent","shadowRoot","dropContainer","placeholder","anchor","referenceElement","isDragging","isTouchSequence","isAuxiliaryMouseButton","isSyntheticEvent","isFakeEvent","isFakeTouchstartFromScreenReader","isFakeMousedownFromScreenReader","rootStyles","scrollEvent","currentIndex","distance","isPointerOverContainer","rawX","rawY","newContainer","placeholderRect","duration","resolve","timeout","placeholderConfig","placeholderTemplate","elementRect","handleElement","referenceRect","point","svgMatrix","svgPoint","dropContainerLock","pickupX","pickupY","boundaryRect","previewWidth","previewHeight","minY","maxY","minX","maxX","clamp$1","pointerPositionOnPage","delta","positionSinceLastChange","changeX","changeY","shouldEnable","scale","styles","currentPosition","pickupPosition","leftOverflow","rightOverflow","topOverflow","bottomOverflow","scrollDifference","_getShadowRoot","initialParent","previewContainer","documentRef","min","max","moveItemInArray","array","fromIndex","toIndex","from","clamp","to","transferArrayItem","currentArray","targetArray","targetIndex","clamp","value","max","SingleAxisSortStrategy","_dragDropRegistry","items","item","pointerX","pointerY","pointerDelta","siblings","newIndex","isHorizontal","currentIndex","currentItem","siblingAtNewPosition","currentPosition","newPosition","delta","itemOffset","siblingOffset","oldOrder","moveItemInArray","sibling","index","isDraggedItem","offset","elementToOffset","transformAmount","combineTransforms","adjustDomRect","isInsideClientRect","activeDraggables","placeholder","newPositionReference","element","predicate","rootElement","initialTransform","p","topDifference","leftDifference","clientRect","drag","container","elementToMeasure","getMutableClientRect","a","b","immediateSibling","start","end","itemPositions","lastItemRect","firstItemRect","direction","MixedSortStrategy","_document","childNodes","node","previousSwap","toSwapWith","previousIndex","current","overlapElement","newOverlapElement","enterIndex","targetItem","root","nextSibling","elementAtPoint","_getShadowRoot","minDistance","minIndex","i","x","y","distance","DROP_PROXIMITY_THRESHOLD","SCROLL_PROXIMITY_THRESHOLD","AutoScrollVerticalDirection","AutoScrollHorizontalDirection","DropListRef","_ngZone","_viewportRuler","Subject","Subscription","interval","animationFrameScheduler","takeUntil","scrollStep","coercedElement","coerceElement","ParentPositionTracker","previousContainer","isPointerOverContainer","dropPoint","event","previousItems","connectedTo","orientation","strategy","elements","oldContainerIndex","newContainerIndex","isPointerNearDomRect","result","scrollNode","verticalScrollDirection","horizontalScrollDirection","position","getElementScrollDirections","width","height","domRect","getVerticalScrollDirection","getHorizontalScrollDirection","styles","elementFromPoint","activeSiblings","scrollDifference","shadowRoot","draggedItems","top","bottom","yThreshold","left","right","xThreshold","computedVertical","computedHorizontal","scrollTop","scrollLeft","activeCapturingEventOptions","normalizePassiveListenerOptions","activeApps","_ResetsLoader","__ngFactoryType__","ɵɵdefineComponent","ɵɵStandaloneFeature","rf","ctx","DragDropRegistry","inject","ApplicationRef","EnvironmentInjector","signal","drop","instances","isTouchEvent","e","config","name","streams","Observable","observer","callback","merge","instance","componentRef","createComponent","ɵɵinject","NgZone","DOCUMENT","ɵɵdefineInjectable","DEFAULT_CONFIG","DragDrop","DragRef","ViewportRuler","CDK_DRAG_PARENT","InjectionToken","CDK_DRAG_HANDLE","InjectionToken","CDK_DRAG_CONFIG","InjectionToken","DRAG_HOST_CLASS","CDK_DROP_LIST","CdkDrag","value","element","dropContainer","_document","_ngZone","_viewContainerRef","config","_dir","dragDrop","_changeDetectorRef","_selfHandle","_parentDrag","Subject","BehaviorSubject","EventEmitter","Observable","observer","subscription","map","movedEvent","inject","Injector","takeUntil","afterNextRender","changes","rootSelectorChange","positionChange","index","handle","handles","preview","placeholder","rootElement","boundary","coerceElement","ref","dir","dragStartDelay","coerceNumberProperty","take","parent","drag","startEvent","releaseEvent","endEvent","enterEvent","exitEvent","dropEvent","lockAxis","constrainPosition","previewClass","boundaryElement","draggingDisabled","rootElementSelector","previewContainer","tap","handleElements","switchMap","merge","item","startWith","handleInstance","dragRef","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","DOCUMENT","NgZone","ViewContainerRef","Directionality","DragDrop","ChangeDetectorRef","CDK_DRAG_HANDLE","CDK_DRAG_PARENT","ɵɵdefineDirective","rf","ctx","ɵɵclassProp","booleanAttribute","numberAttribute","ɵɵProvidersFeature","ɵɵInputTransformsFeature","ɵɵNgOnChangesFeature","CDK_DROP_LIST_GROUP","CdkDropListGroup","_uniqueIdCounter","CdkDropList","_scrollDispatcher","_group","drop","a","b","siblings","coerceArray","correspondingDropList","list","scrollableParents","scrollable","container","event","sortingDisabled","listAutoScrollDisabled","listOrientation","ScrollDispatcher","ɵɵattribute","DragDropModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","DragDrop","CdkScrollableModule","ɵɵelement","ɵɵproperty","UploadMusicDialogComponent","constructor","dialogReference","appConfigService","currentFile","completeEvent","EventEmitter","fileId","fileName","songDescription","files","loadingFiles","ngOnInit","Id","openFileSelector","fileInput","nativeElement","click","addFile","event","target","Array","from","map","file","name","join","value","onSubmit","__async","fileType","type","data","description","format","uploadAudioFile","AudioType","moh","pollForUploadCompletion","emit","close","attempts","interval","count","getAudioFiles","find","c","index","Number","Promise","resolve","setTimeout","ɵɵdirectiveInject","DialogRef","AppConfigService","DIALOG_DATA","selectors","viewQuery","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵtwoWayListener","$event","i0","ɵɵrestoreView","_r1","ɵɵtwoWayBindingSet","ɵɵresetView","ɵɵlistener","ɵɵtemplate","UploadMusicDialogComponent_mat_spinner_25_Template","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind1","ɵɵtwoWayProperty","ɵɵtextInterpolate1","ɵɵstyleProp","import_webm_to_wav_converter","SettingsPage","constructor","disabled","loading","MusicOnHoldService","constructor","appConfigService","blobData","Map","downloadAudioFile","id","type","downloadWavFile","then","response","saveAs","ɵɵinject","AppConfigService","factory","ɵfac","providedIn","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵlistener","ɵɵrestoreView","_r5","item_r6","ɵɵnextContext","$implicit","ctx_r2","ɵɵresetView","playSelectedAudioFile","mediaUrl","index","_r7","pauseSelectedAudioFile","ɵɵtextInterpolate","description","ɵɵtwoWayListener","$event","_r8","i0","ɵɵtwoWayBindingSet","descriptionEdit","saveDescriptionChange","cancelDescriptionChange","ɵɵtwoWayProperty","ɵɵpropertyInterpolate","ɵɵtemplate","MusicOnHoldComponent_Conditional_28_For_15_Conditional_5_Template","MusicOnHoldComponent_Conditional_28_For_15_Conditional_6_Template","MusicOnHoldComponent_Conditional_28_For_15_Conditional_8_Template","MusicOnHoldComponent_Conditional_28_For_15_Conditional_9_Template","_r4","downloadAudioFile","editDescription","deleteAudioFile","ɵɵconditional","playingIndex","edit","Number","duration","size","ɵɵelement","_r2","drop","ɵɵrepeaterCreate","MusicOnHoldComponent_Conditional_28_For_15_Template","_forTrack0","ɵɵproperty","mohFiles","ɵɵrepeater","item_r11","id","ɵɵtextInterpolate2","name","country","item_r12","type","_r10","mohSettings","greetingMessage","disabled","greetingChanged","onLanguageChanged","value","greetingLanguage","MusicOnHoldComponent_Conditional_44_Conditional_15_For_16_Template","_forTrack1","onVoiceChanged","greetingVoice","MusicOnHoldComponent_Conditional_44_Conditional_15_For_25_Template","languages","voiceOptions","_r13","greetingIndex","track","_r14","showUploadOptions","_r15","uploadGreetingFileName","selectGreetingFile","addFile","ɵɵstyleProp","MusicOnHoldComponent_Conditional_44_Conditional_16_Conditional_1_Template","MusicOnHoldComponent_Conditional_44_Conditional_16_Conditional_2_Template","MusicOnHoldComponent_Conditional_44_Conditional_16_Conditional_3_Template","MusicOnHoldComponent_Conditional_44_Conditional_16_Conditional_4_Template","showUploadAudioPlayer","microphoneAccessDenied","_r17","startInputSound","_r18","stopInputSound","MusicOnHoldComponent_Conditional_44_Conditional_17_Conditional_0_Conditional_3_Template","MusicOnHoldComponent_Conditional_44_Conditional_17_Conditional_0_Conditional_4_Template","_r16","recordingSeconds","isRecording","_r19","onRecordedFilePlayClicked","deleteRecording","playingAudioId","MusicOnHoldComponent_Conditional_44_Conditional_17_Conditional_0_Template","MusicOnHoldComponent_Conditional_44_Conditional_17_Conditional_1_Template","recordedFile","_r9","greetingType","onGreetingChange","MusicOnHoldComponent_Conditional_44_Conditional_15_Template","MusicOnHoldComponent_Conditional_44_Conditional_16_Template","MusicOnHoldComponent_Conditional_44_Conditional_17_Template","MusicOnHoldComponent","SettingsPage","constructor","musicOnHoldService","appConfigService","settingsService","dialog","appTranslateService","toggleEvent","EventEmitter","enableMoh","randomizeMoh","AudioType","enablePlayIntroductoryGreeting","files","inputSound","Audio","stream","showGreetingAudioPlayer","title","link","recordingFound","recorderTimeout","undefined","remoteAudioElement","playingAudio","BehaviorSubject","editingDisabled","ngOnInit","__async","features","AppFeature","ModifyMusicOnHold","settings","Promise","all","getTextToSpeechLanguages","getLocalMohSettings","getAudioFiles","setupMohSettings","length","greetingFiles","error","console","message","ngAfterViewInit","greyMask","nativeElement","addEventListener","event","container","scrollBy","deltaX","deltaY","stopAndPreventDefault","key","stopPropagation","preventDefault","getTextToSpeechVoices","greeting","find","c","src","File","load","allFiles","filter","sort","a","b","forEach","file","changed","log","language","toggleMusicOnHoldSettings","toggleRandomizeMusicOnHold","updateMusicOnHoldSettings","setLocalMohSettings","data","updateAudioFiles","option","save","newIndex","ttsSettings","instant","voice_id","voice_language","tts_script","source_type","addAudioFile","moh","fileType","format","uploadAudioFile","newIndexOrder","map","some","reorderMohFiles","reorderAudioFiles","toString","generateIndex","validateIndex","duplicateValues","togglePlayIntroGreeting","setDefaultLanguage","openFileUploadDialog","highestIndex","reverse","emit","open","UploadMusicDialogComponent","Name","Id","hasBackdrop","panelClass","autoFocus","afterClosed","pipe","untilDestroyed","subscribe","item","window","navigator","fileInput","click","target","Array","from","join","url","playAudio","catch","pause","microphonePermission","check","mediaDevices","getUserMedia","audio","source","destination","setupAudioContextAndNodes","setupAndStartRecorder","connect","recorder","stop","getTracks","audioContext","AudioContext","HTMLAudioElement","createMediaElementSource","createMediaStreamSource","createMediaStreamDestination","analyser","createAnalyser","fftSize","MediaRecorder","recordingIntervalId","setInterval","chunks","ondataavailable","push","onstop","audioBlob","Blob","wavBlob","getWaveBlob","URL","createObjectURL","clearInterval","start","setTimeout","evt","previousContainer","moveItemInArray","previousIndex","currentIndex","i","transferArrayItem","audioUtil","stopAudio","setPlayingAudio","getValue","next","ɵɵdirectiveInject","MusicOnHoldService","AppConfigService","SettingsService","MatDialog","AppTranslateService","selectors","viewQuery","rf","ctx","AudioPlayerComponent","_r1","MusicOnHoldComponent_Conditional_27_Template","MusicOnHoldComponent_Conditional_28_Template","MusicOnHoldComponent_Conditional_44_Template","MusicOnHoldComponent_Conditional_45_Template","CommonModule","ReactiveFormsModule","DefaultValueAccessor","NgControlStatus","MaxLengthValidator","MatFormFieldModule","MatFormField","MatLabel","MatIconModule","MatIcon","MatButtonModule","MatButton","MatIconButton","MatMiniFabButton","MatInputModule","MatInput","TranslateModule","TranslatePipe","MatSlideToggleModule","MatSlideToggle","MatDividerModule","MatDivider","MatTooltipModule","MatTooltip","DragDropModule","CdkDropList","CdkDropListGroup","CdkDrag","FormsModule","NgModel","SecondsToMinutesPipe","MatRadioModule","MatRadioGroup","MatRadioButton","MatSelectModule","MatSelect","MatOption","MatSliderModule","MatSlider","MatSliderThumb","styles","__decorate","UntilDestroy","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","peaky","ɵɵtext","ɵɵelementEnd","_r3","_r4","_r5","_r6","_r7","ChangePasswordComponent","constructor","fb","type","passwordChange","EventEmitter","cancelChanges","passwordForm","group","currentPassword","Validators","required","newPassword","minLength","patternValidator","hasNumber","hasCapitalCase","hasSmallCase","confirmPassword","validators","match","field","controls","changePassword","valid","emit","value","close","controlName","checkControlName","control","get","checkControl","errors","setErrors","matching","regex","error","test","ɵɵdirectiveInject","FormBuilder","selectors","outputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵtemplate","ChangePasswordComponent_Conditional_42_Template","ChangePasswordComponent_Conditional_43_Template","ChangePasswordComponent_Conditional_50_Template","ChangePasswordComponent_Conditional_51_Template","ChangePasswordComponent_mat_icon_58_Template","ChangePasswordComponent_mat_icon_59_Template","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵproperty","ɵɵpureFunction1","_c0","hasError","ɵɵtextInterpolate","length","ɵɵpropertyInterpolate","ɵɵconditional","invalid","dirty","pristine","CommonModule","NgClass","NgIf","ReactiveFormsModule","ɵNgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","FormGroupDirective","FormControlName","MatFormFieldModule","MatFormField","MatLabel","MatIconModule","MatIcon","MatButtonModule","MatButton","MatInputModule","MatInput","TranslateModule","TranslatePipe","styles","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind1","ctx_r2","profile","company","title","ɵɵtextInterpolate1","email_r4","value","type","DID_r5","phone_r6","ɵɵtemplate","ProfileComponent_ng_template_0_div_0_div_37_span_4_Template","ProfileComponent_ng_template_0_div_0_div_37_ng_template_5_Template","ɵɵtemplateRefExtractor","number","ɵɵproperty","ExtensionTypes","SMS","PbxSms","noneSMS_r7","ɵɵtextInterpolate4","address_r8","addressLine1","city","state","postalCode","ɵɵlistener","ɵɵrestoreView","_r9","ɵɵnextContext","file_r10","ɵɵreference","ɵɵresetView","click","getCoin","fullName","ɵɵelement","_r12","avatar","ɵɵsanitizeUrl","_r13","removeAvatar","ProfileComponent_ng_template_0_div_0_ng_template_45_mat_spinner_0_Template","ProfileComponent_ng_template_0_div_0_ng_template_45_div_1_Template","_r11","ProfileComponent_ng_template_0_div_0_ng_template_45_button_5_Template","avatarLoading","startsWith","defaultAvatarsBaseUrl","_r2","edit","ProfileComponent_ng_template_0_div_0_div_18_Template","ProfileComponent_ng_template_0_div_0_div_19_Template","ProfileComponent_ng_template_0_div_0_div_24_Template","ProfileComponent_ng_template_0_div_0_div_36_Template","ProfileComponent_ng_template_0_div_0_div_37_Template","ProfileComponent_ng_template_0_div_0_div_42_Template","ProfileComponent_ng_template_0_div_0_ng_template_44_Template","ProfileComponent_ng_template_0_div_0_ng_template_45_Template","$event","fileChangeEvent","emails","ext","DIDNumbers","tels","addresses","showAvatarBlock_r14","ɵɵpropertyInterpolate","lang_r15","key","name","ProfileComponent_ng_template_0_div_0_Template","ɵɵtwoWayListener","_r1","i0","ɵɵtwoWayBindingSet","selectedHourFormat","onHourFormatChange","onUILanguageChanged","ɵɵrepeaterCreate","ProfileComponent_ng_template_0_For_33_Template","_forTrack0","isChangingPassword","ɵɵtwoWayProperty","localTimezone","appTranslateService","selectedLanguage","ɵɵrepeater","availableLanguages","_r16","onEditCanceled","onDataSubmitted","editProfileLoading","_r17","image","save","imageChangedEvent","_r18","onPasswordChange","onPasswordChangeCanceled","ProfileComponent","constructor","snackBar","contactService","userService","configService","AppTranslateService","ngOnInit","Intl","DateTimeFormat","resolvedOptions","timeZone","data$","subscribe","config","settings","preferences","hourFormat","getDIDs","event","resultImage","saveProfilePhoto","base64ToFile","id","pipe","untilDestroyed","catchError","error","onFailedProfileEdit","onSuccessProfileEdit","firstName","lastName","__async","updateLanguage","String","changePassword","open","charAt","toUpperCase","result","update","contact","response","currentUserSubject","next","formData","FormData","append","uploadContactAvatar","throwError","firstValueFrom","updatePreferences","timezone","ɵɵdirectiveInject","SnackbarService","ContactService","UserService","AppConfigService","selectors","viewQuery","rf","ctx","ProfileComponent_ng_template_0_Template","ProfileComponent_ng_template_1_Template","ProfileComponent_ng_template_2_Template","ProfileComponent_app_change_password_3_Template","__decorate","UntilDestroy","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","closeClick","emit","ɵɵtext","ɵɵelementEnd","ɵɵproperty","closeTooltip","customIcon","ɵɵadvance","ɵɵtextInterpolate1","icon","_r3","action_r4","$implicit","handleActionClick","tooltip","text","_r5","ɵɵtemplate","BannerComponent_div_0_ng_template_8_span_0_Template","BannerComponent_div_0_ng_template_8_ng_template_1_Template","ɵɵtemplateRefExtractor","withoutTooltip_r6","BannerComponent_div_0_button_2_Template","BannerComponent_div_0_mat_icon_4_Template","BannerComponent_div_0_ng_template_8_Template","ɵɵclassMap","type","undefined","observers","length","ɵɵtextInterpolate","actionsTransformed","BannerComponent","constructor","actions","actionClick","EventEmitter","map","action","selectors","inputs","open","outputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","BannerComponent_div_0_Template","MatIconModule","MatIcon","CommonModule","NgForOf","NgIf","MatTooltipModule","MatTooltip","styles","data","animation","trigger","transition","style","opacity","height","animate","AUTO_STYLE","ProtocolHandlerService","localStorageKey","constructor","storage","isRegistered","protocol","get","includes","registerProtocolHandler","scheme","url","navigator","registeredProtocolHandlers","length","set","push","ɵɵinject","LocalStorageService","factory","ɵfac","providedIn","RegisterTelHandlerDialogComponent","constructor","protocolHandlerService","data","dialog","protocolUrl","open","ConfirmDialogComponent","title","description","buttons","label","action","type","ButtonType","matButton","color","emitRegister","matRaisedButton","afterClosed","pipe","untilDestroyed","subscribe","closeAll","registerProtocolHandler","ɵɵdirectiveInject","ProtocolHandlerService","MAT_DIALOG_DATA","MatDialog","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","template","rf","ctx","__decorate","UntilDestroy","PwaService","constructor","_pwaInstalled","BehaviorSubject","pwaInstalled$","asObservable","listenForInstallPrompt","window","addEventListener","e","preventDefault","next","_promptEvent","promptInstall","Promise","resolve","reject","prompt","userChoice","then","choiceResult","outcome","factory","ɵfac","providedIn","RegisterTelHandlerComponent","protocolUrl","dismissLocalStorageKey","constructor","pwaService","dialog","protocolHandlerService","storage","appTranslateService","open","pwaInstalled","ngOnInit","get","RegisterTelHandlerComponent_1","pwaInstalled$","pipe","untilDestroyed","subscribe","isRegistered","handleActionClick","action","__async","instant","window","promptInstall","RegisterTelHandlerDialogComponent","data","disableClose","registerTelHandler","dismiss","set","registerProtocolHandler","error","console","log","ɵɵdirectiveInject","PwaService","MatDialog","ProtocolHandlerService","LocalStorageService","AppTranslateService","selectors","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵlistener","$event","ɵɵelementEnd","ɵɵproperty","ɵɵpipeBind2","ɵɵpureFunction1","_c0","ɵɵpipeBind1","ɵɵpureFunction2","_c2","_c1","__decorate","UntilDestroy","nextId$1","CDK_ACCORDION","InjectionToken","CdkAccordion","Subject","changes","__ngFactoryType__","ɵɵdefineDirective","booleanAttribute","ɵɵProvidersFeature","ɵɵInputTransformsFeature","ɵɵNgOnChangesFeature","nextId","CdkAccordionItem","expanded","accordionId","accordion","_changeDetectorRef","_expansionDispatcher","Subscription","EventEmitter","id","ɵɵdirectiveInject","ChangeDetectorRef","UniqueSelectionDispatcher","CdkAccordionModule","ɵɵdefineNgModule","ɵɵdefineInjector","_c0","_c1","_c2","MatExpansionPanel_ng_template_5_Template","rf","ctx","_c3","_c4","MatExpansionPanelHeader_Conditional_4_Template","ɵɵelementStart","ɵɵnamespaceSVG","ɵɵelement","ɵɵelementEnd","ctx_r0","ɵɵnextContext","ɵɵproperty","MAT_ACCORDION","InjectionToken","EXPANSION_PANEL_ANIMATION_TIMING","matExpansionAnimations","trigger","state","style","transition","animate","MAT_EXPANSION_PANEL","MatExpansionPanelContent","_template","_expansionPanel","__ngFactoryType__","ɵɵdirectiveInject","TemplateRef","ɵɵdefineDirective","uniqueId","MAT_EXPANSION_PANEL_DEFAULT_OPTIONS","MatExpansionPanel","CdkAccordionItem","value","accordion","_changeDetectorRef","_uniqueSelectionDispatcher","_viewContainerRef","_document","_animationMode","defaultOptions","EventEmitter","Subject","startWith","filter","take","TemplatePortal","changes","focusedElement","bodyElement","event","isInitialAnimation","ChangeDetectorRef","UniqueSelectionDispatcher","ViewContainerRef","DOCUMENT","ANIMATION_MODULE_TYPE","ɵɵdefineComponent","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵviewQuery","ɵɵclassProp","booleanAttribute","ɵɵProvidersFeature","ɵɵInputTransformsFeature","ɵɵInheritDefinitionFeature","ɵɵNgOnChangesFeature","ɵɵStandaloneFeature","_r1","ɵɵgetCurrentView","ɵɵprojectionDef","ɵɵprojection","ɵɵlistener","$event","ɵɵrestoreView","ɵɵresetView","ɵɵtemplate","ɵɵadvance","ɵɵattribute","CdkPortalOutlet","MatExpansionPanelHeader","panel","_element","_focusMonitor","_changeDetectorRef","defaultOptions","_animationMode","tabIndex","Subscription","accordionHideToggleChange","filter","changes","EMPTY","merge","isExpanded","event","hasModifierKey","origin","options","__ngFactoryType__","ɵɵdirectiveInject","MatExpansionPanel","ElementRef","FocusMonitor","ChangeDetectorRef","MAT_EXPANSION_PANEL_DEFAULT_OPTIONS","ANIMATION_MODULE_TYPE","ɵɵinjectAttribute","ɵɵdefineComponent","rf","ctx","ɵɵlistener","$event","ɵɵattribute","ɵɵstyleProp","ɵɵclassProp","value","numberAttribute","ɵɵInputTransformsFeature","ɵɵStandaloneFeature","_c4","ɵɵprojectionDef","_c3","ɵɵelementStart","ɵɵprojection","ɵɵelementEnd","ɵɵtemplate","MatExpansionPanelHeader_Conditional_4_Template","ɵɵadvance","ɵɵconditional","matExpansionAnimations","MatExpansionPanelDescription","ɵɵdefineDirective","MatExpansionPanelTitle","MatAccordion","CdkAccordion","QueryList","startWith","headers","header","FocusKeyManager","ɵMatAccordion_BaseFactory","ɵɵgetInheritedFactory","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","booleanAttribute","ɵɵProvidersFeature","MAT_ACCORDION","ɵɵInheritDefinitionFeature","MatExpansionModule","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","CdkAccordionModule","PortalModule","InitialsPipe","transform","value","trim","split","map","word","toUpperCase","join","pure","standalone","ɵɵelement","ɵɵproperty","ctx_r0","integration","favicon","ɵɵsanitizeUrl","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind1","display_name","IntegrationFaviconComponent","constructor","input","required","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","IntegrationFaviconComponent_Conditional_1_Template","IntegrationFaviconComponent_Conditional_2_Template","ɵɵconditional","CommonModule","InitialsPipe","styles","ɵɵelementStart","ɵɵtext","ɵɵlistener","$event","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","ɵɵresetView","integrationAutoPopChanged","ɵɵelementEnd","integrationAutoDialChanged","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵproperty","integration","auto_pop","auto_dial","IntegrationSettingsItemComponent","constructor","integrationChanged","EventEmitter","isOverlayOpen","integrationEnableChanged","event","enabled","target","checked","emit","selectors","inputs","outputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelement","i0","_r1","ɵɵtemplate","IntegrationSettingsItemComponent_ng_template_17_Template","ɵɵtextInterpolate","display_name","id","ɵɵpureFunction1","_c1","ɵɵpureFunction0","_c0","trigger_r4","CdkConnectedOverlay","CdkOverlayOrigin","IntegrationFaviconComponent","MatIcon","TranslateModule","TranslatePipe","styles","changeDetection","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","ctx_r1","lambdaOutput","errorMessage","ɵɵelementContainer","ɵɵtemplate","LambdaOutputDetailsComponent_Conditional_5_For_1_ng_container_0_Template","ɵɵproperty","keyValueTemplate_r4","ɵɵpureFunction2","_c1","item_r3","key","value","ɵɵrepeaterCreate","LambdaOutputDetailsComponent_Conditional_5_For_1_Template","ɵɵrepeaterTrackByIndex","ɵɵrepeater","ɵɵpipeBind1","callObj","key_r5","value_r6","LambdaOutputDetailsComponent","constructor","input","required","downloadFileBtnClicked","output","selectors","inputs","outputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","LambdaOutputDetailsComponent_Conditional_1_Template","LambdaOutputDetailsComponent_ng_container_3_Template","LambdaOutputDetailsComponent_Conditional_5_Template","ɵɵlistener","i0","ɵɵrestoreView","_r1","ɵɵresetView","emit","LambdaOutputDetailsComponent_ng_template_9_Template","ɵɵtemplateRefExtractor","ɵɵconditional","ɵɵpureFunction1","_c0","ɵɵpipeBind2","createdAt","ɵɵtextInterpolate1","KeyValuePipe","DatePipe","NgTemplateOutlet","MatIcon","TranslateModule","TranslatePipe","styles","CallEventTypes","LaunchAutoPopType","LambdaStorageService","constructor","db","LambdaLogDB","insert","log","__async","logs","add","__spreadValues","count","oldestLog","orderBy","first","id","delete","liveQuery","filter","dexieObservable","collection","reverse","item","toArray","from","drop","resetDatabase","factory","ɵfac","providedIn","Dexie","DB_NAME","TABLE_NAME","version","stores","transaction","clear","LambdaService","constructor","lambdaStorageService","LOG_FILE_PREFIX","LOG_FILE_EXTENSION","logs$","liveQuery","callLambdaFunction","integrationTitle","lambda","callObj","__async","lambdaOutputLogs","globalThis","customLog","logType","args","result","argument","JSON","stringify","toString","push","output","replaceConsoleCalls","lambdaResult","runLambda","logLambdaCall","errorMessage","undefined","createdAt","Date","now","logs","error","getLambdaCallErrorMessage","eval","console","err","SyntaxError","Error","message","downloadLogFile","model","_fileModel","fileName","getLogFileName","content","insert","methods","forEach","method","regex","RegExp","replace","date","ɵɵinject","LambdaStorageService","factory","ɵfac","providedIn","IntegrationsService","ApiService","integrations","integrationsSubject","value","constructor","httpClient","lambdaService","wsService","appConfigService","configService","electronService","BehaviorSubject","undefined","isLoadingSubject","integrations$","asObservable","nonAutoWebPopIntegrations$","pipe","map","getNonAutoWebPopIntegrations","isLoading$","init","setUpWebPopListeners","features$","untilDestroyed","subscribe","features","isRunningInElectron","AppFeature","WebPopIntegration","refreshData","openIncomingCallAutoWebPops","event","launchAutoPopType","__async","callObject","createWebPopCallObj","to","caller_id","caller_name","orig_callid","CallDirection","incoming","time_start","integrationsToOpen","filter","i","launch_scenarios","onIncomingCall","socket","on","CallEventTypes","CallRang","LaunchAutoPopType","ON_RING","CallAnswered","aor","provision","data","nsUid","ON_ANSWER","CallStarted","outgoing","openOutgoingCallAutoWebPops","of","next","get","tap","finalize","putIntegration","integration","body","enabled","auto_pop","auto_dial","firstValueFrom","post","id","method","updatedIntegrations","__spreadValues","openWebPopForIntegration","call","webPopCall","Call","createWebPopCallWithSIPCall","url","getIntegrationUrl","send","ElectronChannel","OpenLink","window","open","callObj","outgoingIntegrations","getAutoWebPopIntegrations","Promise","all","incomingIntegrations","customer_id","variables","lambda","callLambdaFunction","display_name","lambdaResult","createIntegrationUrl","integrationUrl","launch_url","integrationParams","$CALLER_ID_10_DIGIT","getProcessedNationalNumber","phone_number","$PHONE_NUMBER","$CALLER_ID","caller_ID","$CALL_ID","call_ID","$DATE_TIME","date_time","Date","toISOString","$DIALED_NUMBER_10_DIGIT","dialed_number","$DIALED_NUMBER","$CALL_DIRECTION","call_direction","$CUSTOMER_ID","key","Object","entries","replaceAll","error","console","direction","warn","session","remoteIdentity","uri","user","replace","remoteUriUser","remoteDisplayName","origCallId","createdTimestamp","phoneNumber","callerId","callerName","dialedNumber","callId","callDirection","dateTime","caller_ID_10_digit","dialed_number_10_digit","autoPopsInDirection","tel","result","getNationalNumberOrDefault","getLastCharacters","str","charCount","trim","slice","normalizePhoneNumber","ɵɵinject","HttpClient","LambdaService","WsService","AppConfigService","ElectronService","factory","ɵfac","providedIn","__decorate","UntilDestroy","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵlistener","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","ɵɵresetView","handleAppStoreUrlClick","AppStoreUrls","macAppStore","microsoftStore","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind1","ɵɵtextInterpolate1","ɵɵproperty","ɵɵpropertyInterpolate","$event","_r4","handleIntegrationUpdated","integration_r5","log_r7","_r6","$implicit","handleDownloadLogClick","integrationTitle","ɵɵpipeBind2","createdAt","ɵɵrepeaterCreate","IntegrationsComponent_Conditional_27_Conditional_11_Conditional_3_Conditional_8_For_2_Template","_forTrack1","ɵɵrepeater","logs_r8","IntegrationsComponent_Conditional_27_Conditional_11_Conditional_3_For_1_Template","_forTrack0","ɵɵdeclareLet","ɵɵtemplate","IntegrationsComponent_Conditional_27_Conditional_11_Conditional_3_Conditional_8_Template","IntegrationsComponent_Conditional_27_Conditional_11_Conditional_3_Conditional_9_Template","integrations_r9","ɵɵstoreLet","lambdaService","logs$","ɵɵpureFunction0","_c0","ɵɵconditional","logs_r10","length","IntegrationsComponent_Conditional_27_Conditional_11_Conditional_3_Template","integrationsService","integrations$","integrations_r11","IntegrationsComponent_Conditional_27_Conditional_10_Template","IntegrationsComponent_Conditional_27_Conditional_11_Template","isLoading_r12","IntegrationsComponent","constructor","pwaService","appConfigService","protocolHandlerService","electronService","dialog","panelOpenState","signal","isRunningInElectron","environment","app","macOS","appStore","windows","AppFeature","installConnectUCPwa","__async","promptInstall","open","RegisterTelHandlerDialogComponent","data","protocolUrl","RegisterTelHandlerComponent","disableClose","registerTelHandler","registerProtocolHandler","error","console","url","window","integration","putIntegration","log","downloadFile","JSON","stringify","ɵɵdirectiveInject","PwaService","AppConfigService","ProtocolHandlerService","ElectronService","IntegrationsService","LambdaService","MatDialog","selectors","decls","vars","consts","template","rf","ctx","i0","_r1","IntegrationsComponent_Conditional_26_Template","IntegrationsComponent_Conditional_27_Template","isPwaInstalled_r13","isRegistered","features","WebPopIntegration","__decorate","UntilDestroy","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","option_r4","ringtone","ɵɵadvance","ɵɵtextInterpolate1","title","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","onCheckChange","$event","i_r3","index","onRingtoneChanged","value","ɵɵtemplate","NotificationComponent_div_2_mat_option_20_Template","item_r5","$implicit","play","soundSelect","ɵɵtextInterpolate","notificationItems","ɵɵpipeBind2","ɵɵpureFunction1","_c0","getItemName","ɵɵpipeBind1","selectOptions","NotificationComponent","SettingsPage","constructor","formBuilder","settingsService","notificationService","configService","removedTypes","formGroup","group","formItems","array","ngOnInit","features","AppFeature","Chat","push","NotificationType","GroupMeetingStarted","MeetingJoined","Fax","IncomingFax","Object","values","notificationItemMap","filter","item","includes","forEach","_item","createItem","get","enableSound","notificationSound","enableNotification","showNotification","enableForegroundNotification","showInForeground","save","__async","controls","firstValueFrom","updateNotificationSettings","disabled","option","patchValue","select","e","stopPropagation","audioUtil","pause","Audio","playAudio","ngOnDestroy","toLowerCase","ɵɵdirectiveInject","FormBuilder","SettingsService","NotificationService","AppConfigService","selectors","ɵɵInheritDefinitionFeature","decls","vars","consts","template","rf","ctx","NotificationComponent_div_2_Template","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","device_r4","deviceId","ɵɵadvance","ɵɵtextInterpolate","label","ɵɵlistener","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","ɵɵresetView","disabled","ɵɵtemplate","AudioComponent_mat_select_29_mat_option_1_Template","ɵɵpipeBind1","settingsService","outputDevices$","device_r6","ɵɵtextInterpolate1","_r5","AudioComponent_select_30_option_1_Template","device_r8","_r7","AudioComponent_mat_select_47_mat_option_1_Template","device_r10","_r9","AudioComponent_select_48_option_1_Template","device_r12","_r11","AudioComponent_mat_select_55_mat_option_1_Template","inputDevices$","device_r14","_r13","AudioComponent_select_56_option_1_Template","_r15","testInputSound","_r16","stopInputTest","ɵɵtextInterpolate2","isRecording","counter","ɵɵelement","ɵɵpureFunction1","_c4","i_r17","currentMicrophoneVolume","_r18","ctx_r18","device_r20","$implicit","type_r21","type","testOutputDevice","_r22","stopOutputTest","i_r23","currentSpeakerVolume","activeTest","AudioComponent_ng_template_65_button_1_Template","AudioComponent_ng_template_65_button_2_Template","AudioComponent_ng_template_65_span_5_Template","AudioComponent_ng_template_65_p_6_Template","isSetSinkIdSupported","ɵɵpureFunction0","_c3","constructor","AudioComponent","SettingsPage","microphoneDevice","audioForm","get","value","speakerDevice","notificationSoundVolume","ringingSoundVolume","notificationSpeakerDevice","appConfigService","formBuilder","ringtoneIncomingCall","notificationSound","audioElement","Audio","inputSound","canceled","stream","audioContext","AudioContext","audioSource","displayedInPopupWindow","createFormGroup","getDefaultAudioSettings","ngOnInit","audioSettings$","pipe","untilDestroyed","subscribe","settings","__async","quietRinging","audioReplaceNullsWithDefaults","scanDevices","outputDevices","length","controls","disable","audioSettings","group","enableDualRinging","microphonePermission","check","scanForAudioDevices","setDefaultDevices","error","console","inputDevices","defaultMicrophoneDevice","isDefaultMicrophoneAvailable","some","device","patchValue","defaultSpeakerDevice","isDefaultSpeakerAvailable","isDefaultNotificationSpeakerAvailable","setupAudioContextAndNodes","audio","HTMLAudioElement","createMediaElementSource","createMediaStreamSource","destination","createMediaStreamDestination","analyser","createAnalyser","fftSize","prototype","isOutputDevice","setSinkId","sanitizeAudioContextSinkId","connect","drawAudioMeter","updateVolumeCallback","bufferLength","frequencyBinCount","dataArray","Uint8Array","drawMeter","requestAnimationFrame","getByteFrequencyData","average","reduce","a","b","percentage","Math","min","volume","floor","setupAndStartRecorder","recorder","MediaRecorder","chunks","intervalId","setInterval","ondataavailable","event","push","data","onstop","clearInterval","audioBlob","Blob","src","URL","createObjectURL","playAudio","start","setTimeout","navigator","mediaDevices","getUserMedia","log","loop","soundVolume","undefined","pause","stop","track","getTracks","onChange","save","loading","firstValueFrom","saveAudioSettings","finalize","ngOnDestroy","ɵɵdirectiveInject","SettingsService","AppConfigService","FormBuilder","selectors","inputs","features","ɵɵInheritDefinitionFeature","decls","vars","consts","template","rf","ctx","i0","_r1","AudioComponent_mat_select_29_Template","AudioComponent_select_30_Template","AudioComponent_ng_template_31_Template","AudioComponent_mat_checkbox_32_Template","AudioComponent_mat_select_47_Template","AudioComponent_select_48_Template","AudioComponent_ng_template_49_Template","AudioComponent_mat_select_55_Template","AudioComponent_select_56_Template","AudioComponent_button_59_Template","AudioComponent_button_60_Template","AudioComponent_p_61_Template","AudioComponent_span_64_Template","AudioComponent_ng_template_65_Template","ɵɵtemplateRefExtractor","_c0","testSound_r24","_c1","_c2","__decorate","UntilDestroy","import_amazon_chime_sdk_js","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","item_r4","ɵɵadvance","ɵɵtextInterpolate1","label","ɵɵtwoWayListener","$event","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","i0","ɵɵtwoWayBindingSet","selectedCamera","ɵɵresetView","ɵɵlistener","onCameraChanged","value","ɵɵtemplate","VideoComponent_mat_form_field_11_mat_option_5_Template","ɵɵtextInterpolate","ɵɵpipeBind1","activeCameraList","length","ɵɵtwoWayProperty","VideoComponent","SettingsPage","mirrorLocalVideo","form","controls","cameraDevice","deviceId","setValue","blurBackground","constructor","settingsService","formBuilder","chimeMeetingService","appConfigService","appTranslateService","componentDestroyed","createFormGroup","videoSettings","ngOnInit","videoSettings$","subscribe","settings","__async","scanDevices","tryStartCameraStream","group","cameraOn","navigator","mediaDevices","enumerateDevices","filter","camera","kind","find","selectFirstCamera","startCameraStream","error","alert","logger","ConsoleLogger","LogLevel","INFO","deviceController","DefaultDeviceController","inputDevice","getUserMedia","video","undefined","Error","instant","transformDevice","getVideoTransformDevice","mediaStream","startVideoInput","stopCameraStream","bindStreamToVideoElement","stream","currentMediaStream","videoElement","webcam","nativeElement","srcObject","muted","autoplay","playsInline","track","getTracks","stop","stopVideoInput","disabled","save","loading","firstValueFrom","saveVideoSettings","pipe","finalize","onFormChange","onBackgroundStatusChange","event","isChecked","checked","ngOnDestroy","ɵɵdirectiveInject","SettingsService","FormBuilder","ChimeMeetingService","AppConfigService","AppTranslateService","selectors","viewQuery","rf","ctx","_r1","ɵɵelement","VideoComponent_mat_form_field_11_Template","ɵɵpureFunction2","_c1","AnsweringRuleType","TimeFrameType","AnsweringRulesService","BaseStateService","constructor","httpClient","contactService","appConfigService","path","baseUrl","environment","gateway","answeringRulesLoadingSubject","BehaviorSubject","answeringRulesLoading$","asObservable","timeFramesLoadingSubject","timeFramesLoading$","answeringRulesSubject","answeringRules$","timeFramesSubject","timeFrames$","forwardDestinationsSubject","forwardDestinations$","activeRuleNameSubject","activeRuleName$","isCurrentUserOfficeManager","currentUser$","subscribe","currentUser","scope","includes","fetchData","getDestinationsAndRules","getTimeFrames","getRingDuration","get","setRingDuration","duration","post","method","createRule","timeFrame","rule","pipe","tap","getAnsweringRules","updateInUseState","updateRule","withLoadingObserver","deleteRule","delete","getActiveRule","data","next","time_frame","addTimeFrame","name","inUse","upsertTimeFrame","updateTimeFrame","action","timeFrameData","shared","features","AppFeature","ModifyTimeFrames","time_range_data","upsertLocalTimeFrame","deleteTimeFrame","deleteLocalTimeFrame","setPriority","rulesOrder","priority","timeFrameInUse","answeringRuleType","answeringRule","doNotDisturb","AnsweringRuleType","DoNotDisturb","simRing","enabled","SimultaneousRing","forwardAlways","ForwardAllCalls","OnlyPrimaryDeskphone","timeFrameType","some","tf","date_from","date_to","days","TimeFrameType","Always","length","match","String","raw","DaysAndTimes","SpecificDates","filterTimeFrames","filterPersonal","value","filter","owner","fwdDestDescriptionToValueString","description","dest","find","item","fwdDestValueToDescriptionString","catchError","error","finalize","sortTimeFrames","getAnsweringRulesAPI","getActiveRuleInternal","console","warn","of","__async","firstValueFrom","setAnsweringRules","rulesResponse","rules","map","timeframe","callScreening","destination","destString","forwardOnActive","forwardBusy","forwardNoAnswer","forwardOffline","usersExtension","allDevices","confirmOffnet","otherDestinations","getForwardDestinations","forkJoin","destinations","filtered","undefined","numberPipe","PhoneNumberPipe","contactDestinations","source","flatMap","contact","tels","tel","number","transform","fullName","timeFrames","response","foundTf","in_use","inuse","updatedTimeFrames","newTimeFrame","ext","personal","sortArray","sort","a","b","localeCompare","ɵɵinject","HttpClient","ContactService","AppConfigService","factory","ɵfac","providedIn","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelementContainerStart","ɵɵtemplate","AnsweringRuleComponent_ng_container_6_div_1_Template","ɵɵadvance","ɵɵproperty","ctx_r1","answeringRule","enabled","activeRule_r1","timeFrame","ɵɵtextInterpolate1","forwardAlways","destination","ɵɵlistener","ɵɵrestoreView","_r3","ɵɵnextContext","ɵɵresetView","deleteRule","AnsweringRuleComponent","constructor","answeringRuleService","appConfigService","snackBar","appTranslateService","edit","EventEmitter","delete","AppFeature","disabled","editable","ngOnInit","features","ModifyAnsweringRules","simRing","otherDestinations","sort","a","b","delay","ruleType","answeringRuleType","AnsweringRuleType","DoNotDisturb","ruleTypeString","instant","ForwardAllCalls","SimultaneousRing","OnlyPrimaryDeskphone","stateChanged","event","updateState","checked","editRule","emit","newState","__async","rule","__spreadValues","priority","firstValueFrom","updateRule","open","error","console","ɵɵdirectiveInject","AnsweringRulesService","AppConfigService","SnackbarService","AppTranslateService","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","AnsweringRuleComponent_ng_container_6_Template","AnsweringRuleComponent_div_10_Template","AnsweringRuleComponent_mat_icon_14_Template","$event","ɵɵpipeBind1","activeRuleName$","ɵɵpureFunction2","_c0","import_moment","ɵɵelementContainerStart","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","ɵɵresetView","onCancelEvent","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵelement","j_r7","_r6","index","i_r5","removeDaysAndTimesRange","copyTimesOpen","addDaysAndTimesRange","ɵɵproperty","ɵɵpureFunction1","_c1","dayCtrl_r8","valid","copyTimes_r9","ɵɵtemplate","AddTimeFrameComponent_ng_container_27_div_2_div_3_div_1_Template","daysAndTimesRanges","controls","$event","_r4","onDayOfWeekChange","AddTimeFrameComponent_ng_container_27_div_2_div_3_Template","daysOfWeek","tmp_12_0","ctrl_r10","get","value","AddTimeFrameComponent_ng_container_27_div_2_Template","daysAndTimes","_r15","addSpecificDatesRange","specificDates","invalid","_r16","i_r13","removeSpecificDatesRange","_r11","fromPicker_r12","ɵɵreference","open","fromDateSelected","toPicker_r14","AddTimeFrameComponent_ng_container_28_div_6_mat_icon_27_Template","AddTimeFrameComponent_ng_container_28_div_6_mat_icon_28_Template","ɵɵtextInterpolate","tmp_16_0","ctrl_r17","tmp_20_0","errors","maxTimeError","toTimeError","AddTimeFrameComponent_ng_container_28_div_6_Template","_r18","timeFrame","in_use","confirmDeleteTimeFrame","AddTimeFrameComponent_ng_container_29_div_1_Template","_r19","onSaveEvent","AddTimeFrameComponent_ng_container_30_mat_spinner_6_Template","AddTimeFrameComponent_ng_container_30_span_7_Template","form","pristine","saving","i0","_r20","stopPropagation","ɵɵtwoWayListener","i_r21","ɵɵtwoWayBindingSet","copyTimesModel","copyTimesInitiator","item_r22","ɵɵtwoWayProperty","AddTimeFrameComponent","selectedOption","constructor","answeringRuleService","fb","snackBar","dialog","appTranslateService","standalone","invalidChange","EventEmitter","save","cancelChanges","TimeFrameType","instant","copyTimesSelectedRangeIndex","lastOrderIndex","group","name","Validators","required","minLength","Always","array","addValidators","daysAndTimesValidator","i","push","checked","ranges","ngOnInit","tfType","timeFrameType","patchValue","SpecificDates","addControl","range","time_range_data","Number","order","fromDate","date_from","fromTime","tod_from","toDate","date_to","toTime","tod_to","addMinutes","maxTimeValidator","DaysAndTimes","trData","at","days","timeFrom","timeTo","owner","isCurrentUserOfficeManager","undefined","disable","time_frame","statusChanges","subscribe","status","emit","updateValueAndValidity","getTimeFrameData","getFormData","onSelectionChange","removeControl","length","event","dayOfWeek","clear","validators","toTimeValidator","idx","removeAt","markAsDirty","ConfirmDialogComponent","data","description","buttons","label","action","type","ButtonType","matFlatButton","__async","deleteTimeFrame","matRaisedButton","default","color","title","saveTimeFrame","timeRangeIdx","copyMenuClosed","clearCopyTimesModel","copyTimesClick","ctrl","insertTimeRange","setValue","markAsTouched","firstValueFrom","updateTimeFrame","addTimeFrame","error","console","message","includes","timeString","amount","moment","add","format","daysAndTimesData","specificDatesData","alwaysData","invert","j","rangeCtrl","String","from","removeEmptyRanges","isBefore","insert","someChecked","noneCheckedError","control","fromTimeCtrl","toTimeCtrl","fromDateCtrl","toDateCtrl","hours","minutes","isSameOrBefore","setErrors","hasError","ɵɵdirectiveInject","AnsweringRulesService","FormBuilder","SnackbarService","MatDialog","AppTranslateService","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","AddTimeFrameComponent_ng_container_1_Template","_r1","AddTimeFrameComponent_ng_container_27_Template","AddTimeFrameComponent_ng_container_28_Template","AddTimeFrameComponent_ng_container_29_Template","AddTimeFrameComponent_ng_container_30_Template","AddTimeFrameComponent_ng_container_36_Template","_c0","tmp_19_0","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","ɵɵresetView","filterTimeFrames","ɵɵtext","ɵɵelementEnd","ɵɵproperty","filterCtrl","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵstyleMap","$event","tf_r5","_r4","$implicit","deleteTimeFrame","time_frame","timeFramesUsedByMe","includes","ɵɵpureFunction1","_c5","in_use","owner","answeringRulesService","isCurrentUserOfficeManager","ɵɵtwoWayListener","_r6","i0","ɵɵtwoWayBindingSet","invalidTimeFrame","ɵɵtwoWayProperty","destination_r8","description","ɵɵelementContainerStart","_r7","onInputFieldFocus","AutocompleteSource","Always","ɵɵtemplate","AddAnsweringRuleComponent_ng_container_63_mat_option_12_Template","ɵɵtextInterpolate","ɵɵpropertyInterpolate","autoAlways_r9","filteredDestinations","trackByValue","ɵɵelement","i_r12","_r11","index","editSimRingDestination","deleteSimRingDestination","editSimRingDestinationDone","_c7","editSimRingDestIndex","delayInput_r13","value","length","ɵɵpureFunction2","_c8","otherDestinations","at","invalid","AddAnsweringRuleComponent_ng_container_66_div_17_Template","_r10","addSimRingDestination","controls","_c6","simRingDestination_r14","simRingDelay_r15","Number","destination_r17","destination_r19","_r18","setCallForwardInputsState","checked","Busy","AddAnsweringRuleComponent_ng_container_67_div_23_mat_option_13_Template","autoBusy_r20","destination_r21","destination_r22","_r16","OnActive","AddAnsweringRuleComponent_ng_container_67_mat_option_22_Template","AddAnsweringRuleComponent_ng_container_67_div_23_Template","NoAnswer","AddAnsweringRuleComponent_ng_container_67_mat_option_37_Template","Offline","AddAnsweringRuleComponent_ng_container_67_mat_option_51_Template","autoActive_r23","behaviourSelection_r26","AnsweringRuleType","SimultaneousRing","autoNoAnswer_r24","autoOffline_r25","AddAnsweringRuleComponent","ruleForm","get","alwaysDestinationCtrl","ruleType","constructor","fb","appConfigService","cdr","snackBar","dialog","appTranslateService","saveRule","EventEmitter","cancelChanges","AppFeature","saving","filteredTimeFrames","autocompleteChange$","Subject","newTimeFrameOptionString","defaultRule","editingDisabled","callForwardCheckboxes","callForwardInputs","group","Validators","required","enabled","timeFrame","doNotDisturb","callScreening","forwardAlwaysEnabled","forwardAlwaysDestination","forwardOnActiveEnabled","forwardOnActiveDestination","forwardBusyEnabled","forwardBusyDestination","forwardNoAnswerEnabled","forwardNoAnswerDestination","forwardOfflineEnabled","forwardOfflineDestination","simRingEnabled","simRingUsersExtension","simRingAllDevices","simRingConfirmOffnet","simRingOtherDestinations","array","control","features","ModifyTimeFrames","timeFrames$","pipe","untilDestroyed","subscribe","forwardDestinations$","destinations","allDestinations","ngOnInit","ModifyAnsweringRules","setControlsState","answeringRule","pageTitle","answeringRuleType","patchValue","setRuleType","forwardAlways","destination","forwardOnActive","forwardBusy","forwardNoAnswer","forwardOffline","simRing","usersExtension","allDevices","confirmOffnet","dest","addDestination","disable","enableCallForwardInputs","ngAfterViewInit","greyMask","nativeElement","addEventListener","event","container","scrollBy","deltaX","deltaY","stopAndPreventDefault","key","stopPropagation","preventDefault","saveEvent","__async","rule","getRuleData","timeFrameData","getTimeFrameData","firstValueFrom","addTimeFrame","time_range_data","createRule","error","console","message","open","instant","updateRule","cancelEvent","emit","behaviourSelectionChange","confirmTimeFrameDelete","removeAt","simRingDestination","delay","simRingDelay","markAsDirty","source","next","ctrl","valueChanges","takeUntil","filter","startWith","map","close","formData","getRawValue","fwdDestDescriptionToValueString","ConfirmDialogComponent","data","buttons","label","action","type","ButtonType","matFlatButton","deleteTimeFrameSnack","matRaisedButton","default","color","markDirty","detectChanges","DoNotDisturb","setDNDMode","ForwardAllCalls","setForwardAllMode","OnlyPrimaryDeskphone","setOnlyPrimaryPhoneMode","setSimRingMode","baseFormState","destInput","markAsUntouched","clearValidators","clear","updateValueAndValidity","enable","addValidators","minLength","push","min","max","searchVal","toLowerCase","i","ctrls","state","ctrlNames","ctrlName","checkboxCtrl","replace","inputCtrl","ɵɵdirectiveInject","FormBuilder","AnsweringRulesService","AppConfigService","ChangeDetectorRef","SnackbarService","MatDialog","AppTranslateService","selectors","viewQuery","rf","ctx","_r1","AddAnsweringRuleComponent_mat_radio_group_17_Template","AddAnsweringRuleComponent_mat_label_19_Template","AddAnsweringRuleComponent_mat_option_26_Template","AddAnsweringRuleComponent_mat_option_27_Template","AddAnsweringRuleComponent_app_add_timeframe_28_Template","AddAnsweringRuleComponent_ng_container_63_Template","AddAnsweringRuleComponent_ng_container_64_Template","AddAnsweringRuleComponent_ng_container_65_Template","AddAnsweringRuleComponent_ng_container_66_Template","AddAnsweringRuleComponent_ng_container_67_Template","AddAnsweringRuleComponent_div_68_Template","AddAnsweringRuleComponent_mat_spinner_74_Template","AddAnsweringRuleComponent_span_75_Template","undefined","timeFrameSelect_r27","pristine","__decorate","UntilDestroy","AutocompleteSource","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵstyleMap","delayInput_r2","value","length","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵelement","ɵɵlistener","i_r6","ɵɵrestoreView","_r5","index","ctx_r3","ɵɵnextContext","ɵɵresetView","editRule","confirmDeleteRule","ɵɵproperty","rule_r7","_r8","addingRule","ɵɵtextInterpolate","ɵɵelementContainerStart","$event","_r3","drop","ɵɵtemplate","AnsweringRulesComponent_ng_container_0_ng_container_58_app_answering_rule_2_Template","AnsweringRulesComponent_ng_container_0_ng_container_58_div_3_Template","answeringRules","appConfigService","features","AppFeature","ModifyAnsweringRules","_r11","i_r12","editOrCopyTimeFrame","_r13","AnsweringRulesComponent_ng_container_0_ng_container_73_div_11_div_1_Conditional_6_Template","AnsweringRulesComponent_ng_container_0_ng_container_73_div_11_div_1_Conditional_7_Template","AnsweringRulesComponent_ng_container_0_ng_container_73_div_11_div_1_mat_icon_9_Template","AnsweringRulesComponent_ng_container_0_ng_container_73_div_11_div_1_mat_icon_10_Template","ctx_r13","_r10","timeFrame_r15","$implicit","in_use","owner","answeringRulesService","isCurrentUserOfficeManager","confirmDeleteTimeFrame","time_frame","timeFrameDescription","ɵɵconditional","ɵɵpureFunction1","_c2","timeFramesEditingDisabled","deleteIconTooltipText","AnsweringRulesComponent_ng_container_0_ng_container_73_div_11_div_1_Template","filteredTimeFrames","AnsweringRulesComponent_ng_container_0_ng_container_73_div_11_Template","_r9","addingTimeFrame","timeFramesLoading$","AnsweringRulesComponent_ng_container_0_span_16_Template","AnsweringRulesComponent_ng_container_0_div_54_Template","AnsweringRulesComponent_ng_container_0_div_56_Template","AnsweringRulesComponent_ng_container_0_ng_container_58_Template","ɵɵtwoWayListener","_r1","i0","ɵɵtwoWayBindingSet","filtered","filterTimeFrames","AnsweringRulesComponent_ng_container_0_div_71_Template","AnsweringRulesComponent_ng_container_0_ng_container_73_Template","onCancel","onSave","AnsweringRulesComponent_ng_container_0_mat_spinner_80_Template","AnsweringRulesComponent_ng_container_0_span_81_Template","ɵɵpureFunction0","_c1","ringDuration","returnBusyIfOnCall","autoAnswerIncomingCalls","autoAnswerTime","delayInputAnswer_r16","answeringRulesLoading$","ɵɵtwoWayProperty","reordered","pristine","invalid","loading","_r17","onSubpanelCancel","actionRule","timeFramesUsedByMe","_r18","actionTimeFrame","AnsweringRulesComponent","constructor","dialog","fb","snackBar","appTranslateService","cancelChanges","EventEmitter","rulesEditingDisabled","control","Validators","min","max","fetchData","ngOnInit","ModifyTimeFrames","answeringRules$","pipe","untilDestroyed","subscribe","data","map","rule","timeFrame","timeFrames$","data$","config","setValue","settings","preferences","returnBusy","ngAfterViewInit","getRingDuration","event","previousIndex","currentIndex","moveItemInArray","open","instant","duration","ConfirmDialogComponent","description","buttons","label","action","type","ButtonType","matFlatButton","__async","deleteRule","matRaisedButton","default","color","deleteTimeFrame","timeFrameType","TimeFrameType","Always","DaysAndTimes","dirty","saveRingDuration","saveAutoAnswer","saveRulesOrder","answeringRulesSubject","emit","undefined","response","firstValueFrom","patchValue","error","console","setRingDuration","markAsPristine","updatePreferences","setPriority","getRulesOrderString","priority","join","warn","ɵɵdirectiveInject","AnsweringRulesService","AppConfigService","MatDialog","FormBuilder","SnackbarService","AppTranslateService","selectors","viewQuery","rf","ctx","AnsweringRulesComponent_ng_container_0_Template","AnsweringRulesComponent_app_add_answering_rule_1_Template","AnsweringRulesComponent_app_add_timeframe_2_Template","__decorate","UntilDestroy","ɵɵelementContainerStart","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵlistener","number_r3","ɵɵrestoreView","_r2","$implicit","ctx_r3","ɵɵnextContext","ɵɵresetView","removeBlockedNumber","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","number_r6","_r5","removeAllowedNumber","ɵɵelement","BlockedNumbersComponent","constructor","appConfigService","fb","editingDisabled","blockedNumbers","allowedNumbers","ngOnInit","__async","features","AppFeature","ModifyBlockedNumbers","createFormGroup","getBlockedNumbers","getAllowedNumbers","getPreferences","ngAfterViewInit","greyMask","nativeElement","addEventListener","event","container","scrollBy","deltaX","deltaY","stopAndPreventDefault","key","stopPropagation","preventDefault","formGroup","group","blockedNumber","Validators","required","validatePhoneNumber","allowedNumber","blockAnonymous","response","firstValueFrom","numbers","controls","patchValue","addBlockedNumbers","invalid","setBlockedNumbers","value","push","setErrors","number","deleteBlockedNumbers","filter","item","addAllowedNumbers","setAllowedNumbers","deleteAllowedNumbers","onCheckChangeBlockAnonymous","updatePreferences","ɵɵdirectiveInject","AppConfigService","FormBuilder","selectors","viewQuery","rf","ctx","i0","_r1","ɵɵtemplate","BlockedNumbersComponent_ng_container_20_Template","BlockedNumbersComponent_ng_container_38_Template","BlockedNumbersComponent_div_39_Template","ɵɵproperty","ɵɵtextInterpolate","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ctx_r0","getPinValidationMessage","ɵɵpipeBind1","ɵɵelement","ɵɵtextInterpolate","VoicemailChangePinComponent","constructor","formBuilder","appTranslateService","selectedPageChanged","EventEmitter","submitForm","processing","isPinHide","minPinLength","maxPinLength","pinForm","group","pin","FormControl","Validators","required","minLength","maxLength","confirmPin","validator","ConfirmedValidator","instant","min","max","setSelectedPage","page","emit","toggleIsPinHide","controlName","matchingControlName","formGroup","control","controls","matchingControl","errors","confirmedValidator","value","setErrors","save","valid","ɵɵdirectiveInject","FormBuilder","AppTranslateService","selectors","outputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵlistener","ɵɵtemplate","VoicemailChangePinComponent_Conditional_19_Template","VoicemailChangePinComponent_Conditional_27_Template","VoicemailChangePinComponent_Conditional_28_Template","VoicemailChangePinComponent_Conditional_34_Template","VoicemailChangePinComponent_Conditional_35_Template","ɵɵproperty","ɵɵconditional","length","dirty","touched","CommonModule","ReactiveFormsModule","ɵNgNoValidate","DefaultValueAccessor","NgControlStatus","NgControlStatusGroup","FormGroupDirective","FormControlName","MatFormFieldModule","MatFormField","MatLabel","MatError","MatSuffix","MatIconModule","MatIcon","MatButtonModule","MatButton","MatIconButton","MatProgressSpinnerModule","MatProgressSpinner","MatInputModule","MatInput","TranslateModule","TranslatePipe","styles","changeDetection","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","language_r4","ɵɵadvance","ɵɵtextInterpolate2","name","country","ɵɵelement","voice_r5","ɵɵtextInterpolate3","type","subType","ɵɵelementContainerStart","ɵɵtwoWayListener","$event","ɵɵrestoreView","_r2","ctx_r2","ɵɵnextContext","i0","ɵɵtwoWayBindingSet","ttsScript","ɵɵresetView","ɵɵlistener","validate","selectedTTSLanguage","onTtsLanguageChanged","ɵɵtemplate","VoicemailManageGreetingComponent_ng_container_28_mat_option_17_Template","VoicemailManageGreetingComponent_ng_container_28_div_23_Template","selectedTTSVoice","VoicemailManageGreetingComponent_ng_container_28_mat_option_27_Template","playTtsPreview","ɵɵtextInterpolate","ɵɵpipeBind1","ɵɵtwoWayProperty","ttsLanguages","isLoadingVoices","ttsVoices","ɵɵtextInterpolate1","playingAudioId","_r7","handleClickOnUpload","handleClickOnShowRecorder","isRecording","audioType","AudioType","_r8","file_r9","ɵɵreference","click","fileToUpload","VoicemailManageGreetingComponent_ng_container_29_ng_container_1_Template","_r6","onFileSelect","VoicemailManageGreetingComponent_ng_container_29_ng_container_4_Template","audio","recordedFile","undefined","_r11","recordClickHandler","_r12","VoicemailManageGreetingComponent_ng_container_30_div_1_div_1_Template","VoicemailManageGreetingComponent_ng_container_30_div_1_div_4_Template","VoicemailManageGreetingComponent_ng_container_30_div_1_div_5_Template","_r10","recordingSeconds","recorderIsDisabled","Number","_r13","onRecordedFilePlayClicked","deleteRecordedFile","recordingTrack","duration","VoicemailManageGreetingComponent_ng_container_30_div_1_Template","VoicemailManageGreetingComponent_ng_container_30_div_2_Template","_r14","togglePlayAudio","emit","deleteAudioToEdit","index","_r15","handleSaveClicked","VoicemailManageGreetingComponent","constructor","changeDetector","greeting","selectedPageChanged","EventEmitter","selectedTTSLanguageChanged","saveClickedTTS","saveClickedFile","saveClickedRecord","recorderClicked","playPreviewTtsClicked","stopPreview","togglePlayRecordedFile","deleteAudioClicked","recordingMethod","greetingName","showRecorder","ngOnChanges","changes","audioItem","find","lang","id","language","message","length","voice","currentValue","preferredLanguage","includes","navigator","detectChanges","user","firstName","lastName","setSelectedPage","page","event","target","files","validateTextToSpeech","validateUpload","isValid","isProcessing","description","voice_id","source_type","tts_script","voice_language","file","text","onRecordingMethodChanged","fileInput","nativeElement","ɵɵdirectiveInject","ChangeDetectorRef","selectors","viewQuery","rf","ctx","_r1","VoicemailManageGreetingComponent_ng_container_28_Template","VoicemailManageGreetingComponent_ng_container_29_Template","VoicemailManageGreetingComponent_ng_container_30_Template","VoicemailManageGreetingComponent_ng_container_31_Template","VoicemailManageGreetingComponent_span_37_Template","VoicemailManageGreetingComponent_ng_template_38_Template","ɵɵtemplateRefExtractor","spinner_r16","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵtwoWayListener","$event","ɵɵrestoreView","_r3","ctx_r1","ɵɵnextContext","i0","ɵɵtwoWayBindingSet","settings","operatorForward","ɵɵresetView","ɵɵlistener","setSettingsChanged","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind1","ɵɵtwoWayProperty","ɵɵelement","ɵɵproperty","contact_r4","ext","fullName","extension_r6","_r5","$implicit","deleteExtension","greeting_r9","_r8","playClickHandler","greetingDownloadClickHandler","handleClickOnDelete","handleClickOnEdit","index","toString","ɵɵtextInterpolate1","playingAudioId","description","Number","duration","ɵɵelementContainerStart","_r7","selectedGreeting","ɵɵtemplate","VoicemailMainPageComponent_ng_container_6_ng_container_66_div_2_Template","greetings","_r10","recordedName","handleClickOnManageRecording","recordedNames","name","_r11","unifiedMessaging","emailNotification","VoicemailMainPageComponent_ng_container_6_div_91_ng_container_18_Template","toggleEmailWhenMailBoxIsFull","toggleEmailOnMissCall","setSelectedPage","configService","features","AppFeature","Hipaa","emailWhenMailBoxIsFull","emailOnMissCall","_r12","_r1","toggleEnabled","toggleAnnounceReceivedTime","toggleAnnounceIncomingCallId","toggleConfirmDeletion","VoicemailMainPageComponent_ng_container_6_div_26_Template","newExtension","filterContacts","VoicemailMainPageComponent_ng_container_6_mat_option_40_Template","addNewExtension","VoicemailMainPageComponent_ng_container_6_div_44_Template","addNewGreetingClicked","emit","VoicemailMainPageComponent_ng_container_6_ng_container_66_Template","VoicemailMainPageComponent_ng_container_6_ng_template_67_Template","ɵɵtemplateRefExtractor","VoicemailMainPageComponent_ng_container_6_div_88_Template","VoicemailMainPageComponent_ng_container_6_ng_template_89_Template","VoicemailMainPageComponent_ng_container_6_div_91_Template","VoicemailMainPageComponent_ng_container_6_ng_template_92_Template","cancelClick","handleClickOnSave","VoicemailMainPageComponent_ng_container_6_span_99_Template","VoicemailMainPageComponent_ng_container_6_ng_template_100_Template","enabled","announceReceivedTime","announceIncomingCallId","confirmDeletion","residential","auto_r13","filteredContacts","length","copyToExtensions","noGreeting_r14","NoRecorderName_r15","noUnifiedMessaging_r16","isSaveButtonEnabled","processing","spinner_r17","VoicemailMainPageComponent","contacts","_contacts","constructor","contactService","undefined","playClicked","EventEmitter","stopClicked","selectedPageChanged","saveSettings","manageRecorderNameClicked","greetingDownloadClicked","greetingDeleteClicked","greetingEditClicked","includes","push","extension","filter","page","audio","isName","type","AudioType","filtered","filterSortAndGroupContacts","contactType","ContactType","Company","ContactSort","FirstName","ContactGrouping","Name","c","isContactMatch","ɵɵdirectiveInject","AppConfigService","ContactService","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","VoicemailMainPageComponent_ng_container_6_Template","import_webm_to_wav_converter","ɵɵelementStart","ɵɵlistener","$event","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","playAudio","stopAudio","saveSettings","voicemailSettingsSaved","emit","setSelectedPage","goToManageGreetingPage","AudioType","greeting","onManageRecorderNameClicked","onGreetingEditClicked","downloadAudioFile","onAudioDeleteClicked","ɵɵelementEnd","ɵɵproperty","voicemailSettings","greetings","recordedName","playingAudioId","tmp_8_0","ɵɵpipeBind1","contactService","data$","undefined","ɵɵpureFunction0","_c2","_r3","playTtsPreview","getVoicesOfLanguage","uploadTTS","uploadAudioFile","toggleRecording","audioToEdit","playRecordedFile","playAudioToEdit","itemToEdit","editAudioType","ttsLanguages","voicesOfSelectedLanguage","indexToEdit","isRecording","recordingSeconds","recordedFile","track","currentUser","_r4","updatePin","ɵɵelementContainerStart","ɵɵtemplate","VoicemailComponent_ng_container_3_app_settings_voicemail_main_page_1_Template","VoicemailComponent_ng_container_3_app_settings_voicemail_manage_greeting_2_Template","VoicemailComponent_ng_container_3_app_settings_voicemail_change_pin_3_Template","ɵɵadvance","ɵɵelement","VoicemailComponent","constructor","facade","dialog","snackbarService","appConfigService","EventEmitter","selectedPage","stream","title","link","isLoading","recordingAudio","Audio","editingDisabled","ngOnInit","features","AppFeature","ModifyVoicemail","getVoicemailSettings$","pipe","untilDestroyed","subscribe","settings","getVoicemailSettings","getVoicemailSettingsSaved$","success","getVoicemailPinUpdated$","getTTSLanguages$","getTTSVoices$","voices","getAudioUploaded$","delay","getGreetingList$","getRecordedName$","getPlayingAudio$","audio","playingAudio","clearInterval","recordingIntervalId","getCurrentUser$","user","getTTSLanguages","ngAfterViewInit","greyMask","nativeElement","addEventListener","event","scrollArea","scrollBy","deltaX","deltaY","target","parentElement","id","stopAndPreventDefault","key","stopPropagation","preventDefault","page","scrollTop","audioType","name","Number","index","length","Math","max","map","pin","type","description","__async","stopInputSound","navigator","mediaDevices","getUserMedia","source","destination","setupAudioContextAndNodes","setupAndStartRecorder","connect","timeout","microphonePermission","check","recorder","MediaRecorder","setInterval","chunks","ondataavailable","push","data","onstop","pause","audioBlob","Blob","wavBlob","getWaveBlob","File","open","src","URL","createObjectURL","duration","start","setTimeout","audioContext","AudioContext","HTMLAudioElement","createMediaElementSource","createMediaStreamSource","createMediaStreamDestination","analyser","createAnalyser","fftSize","saveVoicemailSettings","language","getTTSVoiceOfLanguage","audioItem","confirmDeletion","confirmDeleteGreeting","deleteGreeting","deleteRecordedName","greetingAudioItem","find","toString","recordedNames","toBeDeleted","ConfirmDialogComponent","buttons","label","color","action","ButtonType","matStrokedButton","matRaisedButton","default","deleteGreetingAudioItem","deleteRecordedNameAudioItem","audioUtil","mediaUrl","previewTts","voice","text","stop","getTracks","ɵɵdirectiveInject","VoicemailSettingsFacadeService","MatDialog","SnackbarService","AppConfigService","ContactService","selectors","viewQuery","rf","ctx","VoicemailComponent_ng_container_3_Template","VoicemailComponent_ng_template_4_Template","ɵɵtemplateRefExtractor","VoicemailComponent_div_6_Template","spinner_r5","__decorate","UntilDestroy","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ctx_r1","ContactType","Shared","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind1","ɵɵelement","ImportContactsComponent","constructor","dialogRef","fb","appConfigService","contactService","snackbar","translate","contactFile","File","allowedFiles","loading","importContactFormGroup","group","file","Validators","required","type","Personal","merge","close","openFileSelector","fileInput","nativeElement","click","removeFaxFile","controls","reset","addFile","event","target","files","patchValue","value","submit","__async","open","instant","duration","panelClass","SnackBarType","ERROR","formData","FormData","append","firstValueFrom","importContacts","ɵɵdirectiveInject","MatDialogRef","FormBuilder","AppConfigService","ContactService","SnackbarService","AppTranslateService","selectors","viewQuery","rf","ctx","ɵɵlistener","i0","ɵɵrestoreView","_r1","ɵɵresetView","$event","ɵɵtemplate","ImportContactsComponent_mat_option_30_Template","ImportContactsComponent_mat_spinner_53_Template","ImportContactsComponent_span_54_Template","ɵɵpropertyInterpolate","name","ɵɵtextInterpolate1","ɵɵstyleProp","join","hasOfficeManagerRole$","ɵɵpureFunction1","_c1","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ctx_r0","ContactType","Shared","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ContactsComponent","constructor","contactService","appConfigService","snackBar","dialog","fb","configService","translate","selectedContactOption","Personal","contactMatchingLoading","contactMatching","control","ngOnInit","data$","pipe","untilDestroyed","subscribe","config","settings","preferences","callingConfig","calling","setValue","disableContactMatching","exportContacts","__async","response","firstValueFrom","saveAs","Blob","type","open","instant","handleClickOnImportContact","ImportContactsComponent","onChangeContactMatching","updatePreferences","__spreadProps","__spreadValues","value","ɵɵdirectiveInject","ContactService","AppConfigService","SnackbarService","MatDialog","FormBuilder","AppTranslateService","selectors","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵlistener","ɵɵtwoWayListener","$event","i0","ɵɵtwoWayBindingSet","ɵɵtemplate","ContactsComponent_mat_option_25_Template","ɵɵtextInterpolate","ɵɵtwoWayProperty","hasOfficeManagerRole$","__decorate","UntilDestroy","checkUpdate","swUpdate","__async","isEnabled","versionUpdates","subscribe","data","console","log","type","currentVersion","hash","latestVersion","latestAppData","appData","promptOptionalUpdate","compareSemver","minVersion","environment","awsCommitId","promptForceUpdate","result","checkForUpdate","confirm","window","location","reload","updateRejected","alert","version1","version2","parseVersion","version","mainVersion","split","major","minor","patch","map","Number","major1","minor1","patch1","major2","minor2","patch2","ERR_SW_NOT_SUPPORTED","errorObservable","message","defer","throwError","NgswCommChannel","serviceWorker","controllerChanges","fromEvent","map","currentController","of","controllerWithChanges","concat","filter","c","switchMap","events","event","publish","action","payload","take","tap","sw","__spreadValues","type","operationNonce","waitForOperationCompleted","postMessage","result","filterFn","nonce","SwPush","Subject","NEVER","registration","workerDrivenSubscriptions","pm","merge","options","pushOptions","key","applicationServerKey","i","sub","doUnsubscribe","success","input","__ngFactoryType__","ɵɵinject","ɵɵdefineInjectable","SwUpdate","SCRIPT","InjectionToken","ngswAppInitializer","injector","script","platformId","isPlatformBrowser","ngZone","NgZone","appRef","ApplicationRef","onControllerChange","readyToRegister$","strategy","args","delayWithTimeout","whenStable$","from","err","timeout","delay","ngswCommChannelFactory","opts","SwRegistrationOptions","provideServiceWorker","makeEnvironmentProviders","PLATFORM_ID","APP_INITIALIZER","Injector","ServiceWorkerModule","ɵɵdefineNgModule","ɵɵdefineInjector","ɵɵelementStart","ɵɵlistener","item_r2","ɵɵrestoreView","_r1","$implicit","ctx_r2","ɵɵnextContext","ɵɵresetView","currentSelect","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ɵɵpureFunction1","_c1","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind1","replaceAll","toUpperCase","ɵɵelement","_r4","onUpdate","ɵɵtemplate","PreferenceLayoutComponent_div_4_div_8_Template","ɵɵtextInterpolate1","debugVersion","updateRejected","profile","_r5","SettingType","Profile","_r6","_r7","save","currentPage","PreferenceLayoutComponent_ng_container_16_div_1_mat_spinner_5_Template","PreferenceLayoutComponent_ng_container_16_div_1_span_6_Template","disabled","loading","ɵɵelementContainerStart","PreferenceLayoutComponent_ng_container_16_div_1_Template","PreferenceLayoutComponent","constructor","contactService","appConfigService","data","swUpdate","environment","awsCommitId","ngOnInit","currentUser$","subscribe","contact","ngAfterViewInit","pages","changes","pipe","delay","first","iterableList","Object","values","page","__async","confirm","window","location","reload","checkUpdate","ɵɵdirectiveInject","ContactService","AppConfigService","DIALOG_DATA","SwUpdate","selectors","viewQuery","rf","ctx","VoicemailSettingsFacadeService","VoicemailSettingsApiService","VoicemailSettingsStateService","decls","vars","consts","template","PreferenceLayoutComponent_li_3_Template","PreferenceLayoutComponent_div_4_Template","PreferenceLayoutComponent_app_profile_6_Template","PreferenceLayoutComponent_app_audio_7_Template","PreferenceLayoutComponent_app_notification_8_Template","PreferenceLayoutComponent_app_contacts_9_Template","PreferenceLayoutComponent_app_video_10_Template","PreferenceLayoutComponent_app_answering_rules_11_Template","PreferenceLayoutComponent_app_blocked_numbers_12_Template","PreferenceLayoutComponent_app_music_on_hold_13_Template","PreferenceLayoutComponent_app_integrations_14_Template","PreferenceLayoutComponent_app_voicemail_15_Template","PreferenceLayoutComponent_ng_container_16_Template","Audio","Notifications","Contacts","Video","AnsweringRules","BlockedNumbers","MusicOnHold","Integrations","Voicemail"],"x_google_ignoreList":[0,1,2,3,4,5,6,24,25,71]}