{"version":3,"file":"laserfiche-lf-ui-components-lf-user-feedback.mjs","sources":["../../../projects/ui-components/lf-user-feedback/feedback-image-upload/feedback-image-upload.component.ts","../../../projects/ui-components/lf-user-feedback/feedback-image-upload/feedback-image-upload.component.html","../../../projects/ui-components/lf-user-feedback/feedback-submission/feedback-submission.component.ts","../../../projects/ui-components/lf-user-feedback/feedback-submission/feedback-submission.component.html","../../../projects/ui-components/lf-user-feedback/lf-user-feedback-types.ts","../../../projects/ui-components/lf-user-feedback/feedback-suggestion-selection/feedback-suggestion-selection.component.ts","../../../projects/ui-components/lf-user-feedback/feedback-suggestion-selection/feedback-suggestion-selection.component.html","../../../projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.ts","../../../projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.html","../../../projects/ui-components/lf-user-feedback/business-intelligence-analytics.ts","../../../projects/ui-components/lf-user-feedback/lf-analytics.service.ts","../../../projects/ui-components/lf-user-feedback/lf-user-feedback.component.ts","../../../projects/ui-components/lf-user-feedback/lf-user-feedback.module.ts","../../../projects/ui-components/lf-user-feedback/lf-user-feedback-public-api.ts","../../../projects/ui-components/lf-user-feedback/laserfiche-lf-ui-components-lf-user-feedback.ts"],"sourcesContent":["// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { Component, ElementRef, EventEmitter, Output, ViewChild } from '@angular/core';\r\nimport { AppLocalizationService } from '@laserfiche/lf-ui-components/internal-shared';\r\n\r\n/** @internal */\r\n@Component({\r\n  selector: 'lf-feedback-image-upload',\r\n  templateUrl: './feedback-image-upload.component.html',\r\n  styleUrls: ['./feedback-image-upload.component.css', '../user-feedback-dialog/user-feedback-dialog.component.css'],\r\n})\r\nexport class FeedbackImageUploadComponent {\r\n  @Output() imageUploadError: EventEmitter<string> = new EventEmitter<string>();\r\n  @Output() feedbackImageBase64: EventEmitter<string | undefined> = new EventEmitter<string | undefined>();\r\n\r\n  @ViewChild('uploadFile') inputFile?: ElementRef<HTMLInputElement>;\r\n  showLoader: boolean = false;\r\n  imageUploaded?: {name: string; rawBase64: string};\r\n  acceptedImageTypes: string = '.jpg,.jpeg,.png,.gif,.webp';\r\n  private acceptedImageFormats: string = 'JPEG, PNG, GIF, WebP';\r\n  private supportedImageTypeArray: string[] = this.acceptedImageTypes\r\n    .split(',')\r\n    .map((imgType) => imgType.replace('.', 'image/'));\r\n  private megabyteLimit = 3;\r\n  private imageSizeLimitBytes: number = this.megabyteLimit * 1024 * 1024;\r\n\r\n  localizedStrings = {\r\n    OR: this.localizationService.getStringLaserficheObservable('OR'),\r\n    ATTACH_IMAGE: this.localizationService.getStringComponentsObservable('ATTACH_IMAGE'),\r\n    DRAG_DROP_FILE: this.localizationService.getStringLaserficheObservable('DRAG_DROP_FILE'),\r\n    REMOVE: this.localizationService.getStringLaserficheObservable('REMOVE'),\r\n    BROWSE: this.localizationService.getStringLaserficheObservable('BROWSE'),\r\n    OPTIONAL: this.localizationService.getStringLaserficheObservable('OPTIONAL'),\r\n    UNKNOWN_ERROR: this.localizationService.getStringLaserficheObservable('UNKNOWN_ERROR'),\r\n  };\r\n\r\n  constructor(private localizationService: AppLocalizationService) {}\r\n\r\n  async dropHandler(ev: DragEvent): Promise<void> {\r\n    let file: File | undefined;\r\n    let numFiles = 0;\r\n    ev.preventDefault();\r\n\r\n    if (ev?.dataTransfer?.items) {\r\n      numFiles = ev.dataTransfer.items.length;\r\n      const item = ev.dataTransfer.items[0];\r\n      if (item.kind === 'file') {\r\n        file = item.getAsFile() ?? undefined;\r\n      }\r\n    } else {\r\n      numFiles = ev.dataTransfer?.files.length ?? 0;\r\n      file = ev.dataTransfer?.files.item(0) ?? undefined;\r\n    }\r\n\r\n    if (numFiles > 1) {\r\n      this.imageUploadError.emit(\r\n        this.localizationService.getResourceStringComponents('IMAGE_NOT_ATTACHED') +\r\n          ' ' +\r\n          this.localizationService.getResourceStringComponents('PLEASE_ATTACH_ONLY_ONE_IMAGE')\r\n      );\r\n    } else {\r\n      await this.tryReadAndValidateImageAsync(file);\r\n    }\r\n  }\r\n\r\n  dragOverHandler(ev: DragEvent) {\r\n    ev.preventDefault();\r\n  }\r\n\r\n  private async tryReadAndValidateImageAsync(image: File | undefined): Promise<boolean> {\r\n    try {\r\n      this.showLoader = true;\r\n      await this.uploadImageOrThrow(image);\r\n    } catch (error: any) {\r\n      this.handleImageUploadError(error);\r\n    } finally {\r\n      this.showLoader = false;\r\n      return !!this.imageUploaded;\r\n    }\r\n  }\r\n\r\n  private async uploadImageOrThrow(image: File | undefined): Promise<void> {\r\n    this.checkImageForErrors(image);\r\n    const encodingData = await this.getBase64Async(image as File);\r\n    this.feedbackImageBase64.emit(encodingData);\r\n    this.imageUploaded = {\r\n      name: (<File>image).name, rawBase64: encodingData\r\n    };\r\n  }\r\n\r\n  private checkImageForErrors(image: File | undefined): void {\r\n    if (!image) {\r\n      throw new Error(\"image does not exist\");\r\n    }\r\n    const isImageSupported = this.supportedImageTypeArray.includes(image.type);\r\n    if (!isImageSupported) {\r\n      throw new ImageUploadError(ImageUploadErrorType.UnsupportedFormat);\r\n    }\r\n    if (image.size > this.imageSizeLimitBytes){\r\n      throw new ImageUploadError(ImageUploadErrorType.TooLarge);\r\n    }\r\n  }\r\n\r\n  private handleImageUploadError(error: any): void {\r\n    const errorMessage = this.getImageUploadErrorMessage(error);\r\n    this.imageUploadError.emit(\r\n      this.localizationService.getResourceStringComponents('IMAGE_NOT_ATTACHED') + ' ' + errorMessage\r\n    );\r\n    this.feedbackImageBase64.emit(undefined);\r\n    this.imageUploaded = undefined;\r\n  }\r\n\r\n  private getImageUploadErrorMessage(error: any): string{\r\n    if (error.name === ImageUploadError_name) {\r\n      switch ((<ImageUploadError>error).imageUploadErrorType) {\r\n        case ImageUploadErrorType.TooLarge:\r\n          return this.localizationService.getResourceStringComponents('IMAGE_EXCEEDS_MAX_FILE_SIZE_0', [`${this.megabyteLimit} MB`]);\r\n        case ImageUploadErrorType.UnsupportedFormat:\r\n          return this.localizationService.getResourceStringComponents('IMAGE_CORRUPTED_UNRECOGNIZED_FORMAT') + ' ' + this.localizationService.getResourceStringComponents('ACCEPTED_FORMATS_ARE_0', [this.acceptedImageFormats,]);\r\n        default:\r\n          return error.message ?? this.localizedStrings.UNKNOWN_ERROR;\r\n      }\r\n    } else {\r\n      return error.message ?? this.localizedStrings.UNKNOWN_ERROR;\r\n    }\r\n  }\r\n\r\n  onInputClickArea(): void {\r\n    if (!this.inputFile) {\r\n      console.warn('Input Element unexpectedly does not exist.');\r\n      return;\r\n    }\r\n    this.inputFile.nativeElement.click();\r\n  }\r\n\r\n  async onFileSelectedAsync(event: InputEvent): Promise<void> {\r\n    const file = (event.target as HTMLInputElement)?.files?.item(0) ?? undefined;\r\n    const isFileAttached = await this.tryReadAndValidateImageAsync(file);\r\n    if (!isFileAttached) {\r\n      (event.target as HTMLInputElement).files = null;\r\n      (event.target as HTMLInputElement).value = '';\r\n    }\r\n  }\r\n\r\n  private async getBase64Async(file: File): Promise<string> {\r\n    return new Promise((resolve, reject) => {\r\n      var reader = new FileReader();\r\n\r\n      reader.onload = () => {\r\n        const imgBase64: string = reader.result as string;\r\n        var image = document.createElement('img');\r\n        image.onload = () => {\r\n          resolve(imgBase64);\r\n        };\r\n        image.onerror = (error) => {\r\n          console.warn(error);\r\n          reject(new ImageUploadError(ImageUploadErrorType.UnsupportedFormat));\r\n        };\r\n        image.src = imgBase64;\r\n      };\r\n      reader.onerror = (error: any) => {\r\n        console.warn(error);\r\n        reject(new ImageUploadError(ImageUploadErrorType.UnsupportedFormat));\r\n      };\r\n      reader.readAsDataURL(file);\r\n    });\r\n  }\r\n\r\n  removeImage(): void {\r\n    this.imageUploaded = undefined;\r\n    this.feedbackImageBase64.emit(undefined);\r\n  }\r\n}\r\n\r\n/** @internal */\r\nenum ImageUploadErrorType {\r\n  'TooLarge',\r\n  'UnsupportedFormat',\r\n}\r\n\r\n/** @internal */\r\nconst ImageUploadError_name = 'ImageUploadError';\r\n/** @internal */\r\nclass ImageUploadError extends Error {\r\n  name = ImageUploadError_name;\r\n  constructor(public imageUploadErrorType: ImageUploadErrorType, message?: string) {\r\n    super(message ?? imageUploadErrorType.toString());\r\n  }\r\n}\r\n","<!--Copyright (c) Laserfiche.\r\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\r\n\r\n<label for=\"image-upload\" class=\"lf-text-label\"\r\n  >{{ localizedStrings.ATTACH_IMAGE | async }} ({{ localizedStrings.OPTIONAL | async }})</label\r\n>\r\n<div (drop)=\"dropHandler($event)\" (dragover)=\"dragOverHandler($event)\">\r\n  <div id=\"image-upload\" class=\"file-drop-zone\" *ngIf=\"!(showLoader || imageUploaded); else showSelectedFile\">\r\n    <input\r\n      id=\"browseFileInput\"\r\n      type=\"file\"\r\n      [accept]=\"acceptedImageTypes\"\r\n      tabindex=\"-1\"\r\n      title=\"\"\r\n      (change)=\"onFileSelectedAsync($event)\"\r\n      #uploadFile\r\n    />\r\n\r\n    <div id=\"file-upload-area\">\r\n      <span id=\"upload-icon\" class=\"material-icons\"> file_upload </span>\r\n      <label for=\"uploadFile\">\r\n        <button class=\"sec-button lf-button\" (click)=\"onInputClickArea()\">{{ localizedStrings.BROWSE | async }}</button>\r\n      </label>\r\n      <div class=\"file-upload-sub-text lf-text-body\">{{ localizedStrings.OR | async }}</div>\r\n      <div class=\"file-upload-sub-text lf-text-body\">{{ localizedStrings.DRAG_DROP_FILE | async }}</div>\r\n    </div>\r\n  </div>\r\n  <ng-template #showSelectedFile>\r\n    <div class=\"picked-file-zone\">\r\n      <div *ngIf=\"imageUploaded; else displayLoader\" class=\"selected-file-info\">\r\n          <div class=\"image-preview\">\r\n            <img [src]=\"imageUploaded?.rawBase64\" style=\"max-width: 100%; max-height: 100%; object-fit: contain\" />\r\n          </div>\r\n          <div id=\"uploaded-file-name\" class=\"lf-text-body\" title=\"{{ imageUploaded?.name }}\">\r\n            {{ imageUploaded?.name }}\r\n          </div>\r\n          <button class=\"lf-close-button\" title=\"{{ localizedStrings.REMOVE | async }}\" (click)=\"removeImage()\">\r\n            <span class=\"material-icons-outlined\"> close </span>\r\n          </button>\r\n      </div>\r\n      <ng-template #displayLoader>\r\n        <div class=\"loader-wrapper\">\r\n          <lf-loader-component></lf-loader-component>\r\n        </div>\r\n      </ng-template>\r\n    </div>\r\n  </ng-template>\r\n</div>\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { Component, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\r\nimport { AppLocalizationService, LfMessageToastTypes, LfToastMessage } from '@laserfiche/lf-ui-components/internal-shared';\r\n\r\n/** @internal */\r\n@Component({\r\n  selector: 'lf-feedback-submission',\r\n  templateUrl: './feedback-submission.component.html',\r\n  styleUrls: ['./feedback-submission.component.css', '../user-feedback-dialog/user-feedback-dialog.component.css'],\r\n})\r\nexport class FeedbackSubmissionComponent {\r\n  @Input() isFeedback?: boolean;\r\n  @Output() feedbackTextChanged: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n  toastMessages: LfToastMessage[] = [];\r\n\r\n  readonly maxFeedbackLength: number = 2048;\r\n  feedbackLength: number = 0;\r\n  feedbackEmailCheckbox: boolean = false;\r\n  feedbackImageBase64: string | undefined;\r\n\r\n  localizedStrings = {\r\n    FOUND_SOMETHING_LIKE_DISLIKE_LET_US_KNOW: this.localizationService.getStringComponentsObservable(\r\n      'FOUND_SOMETHING_LIKE_DISLIKE_LET_US_KNOW'\r\n    ),\r\n    DO_YOU_HAVE_IDEA_NEW_FEATURE_IMPROVEMENT_LOOK_FORWARD_TO_HEARING:\r\n      this.localizationService.getStringComponentsObservable(\r\n        'DO_YOU_HAVE_IDEA_NEW_FEATURE_IMPROVEMENT_LOOK_FORWARD_TO_HEARING'\r\n      ),\r\n    TELL_US_ABOUT_EXPERIENCE: this.localizationService.getStringComponentsObservable('TELL_US_ABOUT_EXPERIENCE'),\r\n    PLEASE_DO_NOT_INCLUDE_CONFIDENTIAL_OR_PERSONAL_INFO_IN_FEEDBACK:\r\n      this.localizationService.getStringComponentsObservable(\r\n        'PLEASE_DO_NOT_INCLUDE_CONFIDENTIAL_OR_PERSONAL_INFO_IN_FEEDBACK'\r\n      ),\r\n    YOU_MAY_CONTACT_ME_ABOUT_FEEDBACK: this.localizationService.getStringComponentsObservable(\r\n      'YOU_MAY_CONTACT_ME_ABOUT_FEEDBACK'\r\n    ),\r\n    TELL_US_ABOUT_IDEA: this.localizationService.getStringComponentsObservable('TELL_US_ABOUT_IDEA'),\r\n    REQUIRED: this.localizationService.getStringLaserficheObservable('REQUIRED'),\r\n  };\r\n\r\n  constructor(private localizationService: AppLocalizationService) { }\r\n\r\n\r\n  onFeedbackImageBase64(imageBase64: string | undefined) {\r\n    this.feedbackImageBase64 = imageBase64;\r\n  }\r\n\r\n  feedbackTextBoxChange(event: InputEvent) {\r\n    const feedbackText = (event.target as HTMLTextAreaElement).value;\r\n    this.feedbackLength = feedbackText.length;\r\n    this.feedbackTextChanged.emit(feedbackText);\r\n  }\r\n\r\n  onImageUploadError(errMsg: string) {\r\n    const errorToastMsg: LfToastMessage = {\r\n      message: errMsg,\r\n      type: LfMessageToastTypes.Warning,\r\n      noIcon: false,\r\n      hideMessage: false,\r\n    };\r\n    this.toastMessages = [errorToastMsg];\r\n  }\r\n}\r\n","<!--Copyright (c) Laserfiche.\r\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\r\n\r\n<div class=\"user-feedback-content-container lf-dialog-content\">\r\n  <lf-toast-message id=\"messages\" [messages]=\"toastMessages\"></lf-toast-message>\r\n  <div class=\"lf-text-body lf-user-feedback-description\">\r\n    {{\r\n      isFeedback\r\n        ? (localizedStrings.FOUND_SOMETHING_LIKE_DISLIKE_LET_US_KNOW | async)\r\n        : (localizedStrings.DO_YOU_HAVE_IDEA_NEW_FEATURE_IMPROVEMENT_LOOK_FORWARD_TO_HEARING | async)\r\n    }}\r\n  </div>\r\n  <label for=\"feedback-suggestion-textbox\" class=\"lf-text-label\"\r\n    >{{\r\n      isFeedback ? (localizedStrings.TELL_US_ABOUT_EXPERIENCE | async) : (localizedStrings.TELL_US_ABOUT_IDEA | async)\r\n    }}\r\n    ({{ localizedStrings.REQUIRED | async }})</label\r\n  >\r\n  <textarea\r\n    id=\"feedback-suggestion-textbox\"\r\n    rows=\"10\"\r\n    [attr.maxlength]=\"maxFeedbackLength\"\r\n    (input)=\"feedbackTextBoxChange($event)\"\r\n    class=\"lf-textarea lf-text-placeholder lf-text-body feedback-suggestion-textbox\"\r\n    [placeholder]=\"localizedStrings.PLEASE_DO_NOT_INCLUDE_CONFIDENTIAL_OR_PERSONAL_INFO_IN_FEEDBACK | async\"\r\n  ></textarea>\r\n  <div class=\"lf-text-body character-count\">\r\n    <span>{{ feedbackLength }}</span>\r\n    <span> / </span>\r\n    <span>{{ maxFeedbackLength }}</span>\r\n  </div>\r\n  <lf-feedback-image-upload\r\n    id=\"image-upload-block\"\r\n    (feedbackImageBase64)=\"onFeedbackImageBase64($event)\"\r\n    (imageUploadError)=\"onImageUploadError($event)\"\r\n  ></lf-feedback-image-upload>\r\n  <div class=\"email-checkbox-container\">\r\n    <mat-checkbox\r\n      color=\"primary\"\r\n      class=\"lf-user-feedback-checkbox lf-checkbox\"\r\n      [disableRipple]=\"true\"\r\n      ngDefaultControl\r\n      [(ngModel)]=\"feedbackEmailCheckbox\"\r\n    >\r\n      {{ localizedStrings.YOU_MAY_CONTACT_ME_ABOUT_FEEDBACK | async }}\r\n    </mat-checkbox>\r\n  </div>\r\n</div>\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\n/** @internal */\r\nexport enum UserFeedbackTrackingEventType {\r\n  Feedback = 'Feedback',\r\n  Suggestion = 'Suggestion',\r\n}\r\n\r\n/** @internal */\r\nexport interface UserFeedbackDialogData {\r\n  userFeedbackTrackingEventType: UserFeedbackTrackingEventType;\r\n  feedbackText: string;\r\n  canContact: boolean;\r\n  feedbackImageBase64?: string;\r\n}\r\n\r\n/**\r\n * @internal\r\n * Contains required and custom properties to be tracked.\r\n * Custom properties are snake_case because camelCase and PascalCase are not respected when sending to tracking service\r\n */\r\n\r\nexport interface IUserTrackingEvent {\r\n  /**\r\n   * required property by Product Intelligence\r\n   */\r\n  eventName: UserFeedbackTrackingEventType;\r\n  /**\r\n   * required property by Product Intelligence\r\n   */\r\n  module: string;\r\n  /**\r\n   * required property by Product Intelligence\r\n   */\r\n  accountId: string;\r\n  /**\r\n   * required property by Product Intelligence\r\n   */\r\n  userId: string;\r\n}\r\n\r\n/** @internal */\r\nexport interface UserFeedbackUserTrackingEvent extends IUserTrackingEvent {\r\n  hosting_module: string;\r\n  hosting_context: string;\r\n  is_willing_to_be_contacted: boolean;\r\n  message: string;\r\n  email_address: string;\r\n  image?: string;\r\n  attachment_entry_id: string;\r\n}\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { Component, EventEmitter, Output } from '@angular/core';\r\nimport { AppLocalizationService } from '@laserfiche/lf-ui-components/internal-shared';\r\n\r\n/** @internal */\r\n@Component({\r\n  selector: 'lf-feedback-suggestion-selection',\r\n  templateUrl: './feedback-suggestion-selection.component.html',\r\n  styleUrls: ['./feedback-suggestion-selection.component.css', '../user-feedback-dialog/user-feedback-dialog.component.css']\r\n})\r\nexport class FeedbackSuggestionSelectionComponent {\r\n  @Output() feedbackClicked: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() suggestionClicked: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  localizedStrings = {\r\n    YOUR_FEEDBACK_SUGGESTION_HELP_IMPROVE_PRODUCT: this.localizationService.getStringComponentsObservable(\r\n      'YOUR_FEEDBACK_SUGGESTION_HELP_IMPROVE_PRODUCT'\r\n    ),\r\n    TECHNICAL_ISSUES_CONTACT_ADMIN_OR_SP: this.localizationService.getStringComponentsObservable(\r\n      'TECHNICAL_ISSUES_CONTACT_ADMIN_OR_SP'\r\n    ),\r\n    I_HAVE_FEEDBACK: this.localizationService.getStringComponentsObservable('I_HAVE_FEEDBACK'),\r\n    I_HAVE_SUGGESTION: this.localizationService.getStringComponentsObservable('I_HAVE_SUGGESTION'),\r\n  };\r\n\r\n  constructor(\r\n    private localizationService: AppLocalizationService\r\n  ) { }\r\n\r\n  onClickFeedback() {\r\n    this.feedbackClicked.emit();\r\n  }\r\n\r\n  onClickSuggestion() {\r\n    this.suggestionClicked.emit();\r\n  }\r\n}\r\n","<!--Copyright (c) Laserfiche.\r\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\r\n\r\n<div class=\"lf-text-body lf-user-feedback-description\">{{localizedStrings.YOUR_FEEDBACK_SUGGESTION_HELP_IMPROVE_PRODUCT | async}}</div>\r\n<div class=\"lf-text-body lf-user-feedback-description\">{{localizedStrings.TECHNICAL_ISSUES_CONTACT_ADMIN_OR_SP | async}}</div>\r\n<button id=\"lf-user-feedback-feedback-mode-button\" class=\"lf-button feedback-suggestion-button\"\r\n    (click)=\"onClickFeedback()\">{{localizedStrings.I_HAVE_FEEDBACK | async}}</button>\r\n<button id=\"lf-user-feedback-suggestion-mode-button\" class=\"lf-button feedback-suggestion-button\"\r\n    (click)=\"onClickSuggestion()\">{{localizedStrings.I_HAVE_SUGGESTION | async}}</button>\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { LocalizedString } from '@angular/compiler';\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  OnDestroy,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AppLocalizationService } from '@laserfiche/lf-ui-components/internal-shared';\r\nimport { debounceTime, map, Observable, Subscription } from 'rxjs';\r\nimport { FeedbackSubmissionComponent } from '../feedback-submission/feedback-submission.component';\r\nimport { UserFeedbackDialogData, UserFeedbackTrackingEventType } from '../lf-user-feedback-types';\r\n\r\n/** @internal */\r\nexport enum FeedbackDialogState {\r\n  FIRST_PANE,\r\n  FEEDBACK,\r\n  SUGGESTION,\r\n  THANK_YOU,\r\n  ERROR,\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\n@Component({\r\n  selector: 'lf-user-feedback-dialog-component',\r\n  templateUrl: './user-feedback-dialog.component.html',\r\n  styleUrls: ['./user-feedback-dialog.component.css'],\r\n})\r\nexport class UserFeedbackDialogComponent implements AfterViewInit, OnDestroy {\r\n  @Output() submitFeedback: EventEmitter<UserFeedbackDialogData> = new EventEmitter();\r\n  @ViewChild(FeedbackSubmissionComponent) feedbackSubmission?: FeedbackSubmissionComponent;\r\n\r\n  private dialogState: FeedbackDialogState = FeedbackDialogState.FIRST_PANE;\r\n  private feedbackText: string | undefined;\r\n  private allSubscriptions: Subscription = new Subscription();\r\n  isSubmitDisabled: boolean = true;\r\n\r\n  get isFirstPane(): boolean {\r\n    return this.dialogState === FeedbackDialogState.FIRST_PANE;\r\n  }\r\n  get isFeedback(): boolean {\r\n    return this.dialogState === FeedbackDialogState.FEEDBACK;\r\n  }\r\n  get isSuggestion(): boolean {\r\n    return this.dialogState === FeedbackDialogState.SUGGESTION;\r\n  }\r\n  get isThankYou(): boolean {\r\n    return this.dialogState === FeedbackDialogState.THANK_YOU;\r\n  }\r\n  get isError(): boolean {\r\n    return this.dialogState === FeedbackDialogState.ERROR;\r\n  }\r\n\r\n  localizedStrings = {\r\n    SUGGESTION: this.localizationService.getStringLaserficheObservable('SUGGESTION'),\r\n    FEEDBACK: this.localizationService.getStringLaserficheObservable('FEEDBACK'),\r\n    CLOSE: this.localizationService.getStringLaserficheObservable('CLOSE'),\r\n    THANK_YOU_FOR_SUBMISSION: this.localizationService.getStringLaserficheObservable('THANK_YOU_FOR_SUBMISSION'),\r\n    IF_YOUD_LIKE_TO_JOIN_OUR_CUSTOMER_PANEL: this.localizationService\r\n      .getStringComponentsObservable('IF_YOUD_LIKE_TO_JOIN_OUR_CUSTOMER_PANEL')\r\n      .pipe(\r\n        map((value: string) => {\r\n          return `${value} `;\r\n        })\r\n      ),\r\n    PLEASE_CLICK_HERE: this.localizationService.getStringComponentsObservable('PLEASE_CLICK_HERE'),\r\n    SOMETHING_WENT_WRONG_PLEASE_TRY_AGAIN_LATER: this.localizationService.getStringLaserficheObservable(\r\n      'SOMETHING_WENT_WRONG_PLEASE_TRY_AGAIN_LATER'\r\n    ),\r\n    SUBMIT: this.localizationService.getStringLaserficheObservable('SUBMIT'),\r\n    CANCEL: this.localizationService.getStringLaserficheObservable('CANCEL'),\r\n  };\r\n\r\n  USER_FEEDBACK_TITLE: Observable<string> = this.localizedStrings.FEEDBACK;\r\n\r\n  constructor(\r\n    public dialogRef: MatDialogRef<UserFeedbackDialogComponent>,\r\n    private ref: ChangeDetectorRef,\r\n    private localizationService: AppLocalizationService\r\n  ) {}\r\n\r\n  ngAfterViewInit() {\r\n    const elem = document.getElementById('lf-user-feedback-feedback-mode-button');\r\n    elem?.focus();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.allSubscriptions.unsubscribe();\r\n  }\r\n\r\n  setError(): void {\r\n    this.dialogState = FeedbackDialogState.ERROR;\r\n  }\r\n\r\n  onClickFeedback(): void {\r\n    this.dialogState = FeedbackDialogState.FEEDBACK;\r\n    this.USER_FEEDBACK_TITLE = this.localizedStrings.FEEDBACK;\r\n    setTimeout(() => document.getElementById('feedback-suggestion-textbox')?.focus());\r\n    this.onTextChanges();\r\n  }\r\n\r\n  onClickSuggestion(): void {\r\n    this.dialogState = FeedbackDialogState.SUGGESTION;\r\n    this.USER_FEEDBACK_TITLE = this.localizedStrings.SUGGESTION;\r\n    setTimeout(() => document.getElementById('feedback-suggestion-textbox')?.focus());\r\n    this.onTextChanges();\r\n  }\r\n\r\n  @HostListener('document:keydown.escape', ['$event'])\r\n  onEscKey(event: KeyboardEvent) {\r\n    this.dialogRef.close();\r\n  }\r\n\r\n  private onTextChanges(): void {\r\n    this.ref.detectChanges();\r\n    const feedbackTextSub = this.feedbackSubmission?.feedbackTextChanged\r\n      .asObservable()\r\n      .pipe(debounceTime(250))\r\n      .subscribe((text) => {\r\n        this.feedbackText = text;\r\n        this.isSubmitDisabled = this.isEmptyOrWhitespace(text);\r\n      });\r\n    this.allSubscriptions.add(feedbackTextSub);\r\n  }\r\n\r\n  async onClickSubmitAsync(): Promise<void> {\r\n    try {\r\n      const dialogData = this.getFeedbackDialogData();\r\n      this.submitFeedback.emit(dialogData);\r\n      if (!this.isError) {\r\n        this.dialogState = FeedbackDialogState.THANK_YOU;\r\n      }\r\n    } catch (error: any) {\r\n      console.warn(error.message);\r\n      this.setError();\r\n    }\r\n  }\r\n\r\n  onCloseDialog(): void {\r\n    this.dialogRef.close();\r\n  }\r\n\r\n  private isEmptyOrWhitespace(value: string | undefined): boolean {\r\n    return !value || !(value.trim().length > 0);\r\n  }\r\n\r\n  private getFeedbackDialogData(): UserFeedbackDialogData {\r\n    if (!this.feedbackSubmission || !this.feedbackText) {\r\n      throw new Error('feedbackSubmission unexpectedly does not exist. Cannot submit');\r\n    }\r\n    let userFeedbackTrackingEventType: UserFeedbackTrackingEventType = UserFeedbackTrackingEventType.Feedback;\r\n    if (this.isSuggestion) {\r\n      userFeedbackTrackingEventType = UserFeedbackTrackingEventType.Suggestion;\r\n    }\r\n    const dialogData: UserFeedbackDialogData = {\r\n      canContact: this.feedbackSubmission.feedbackEmailCheckbox,\r\n      userFeedbackTrackingEventType,\r\n      feedbackText: this.feedbackText,\r\n      feedbackImageBase64: this.feedbackSubmission.feedbackImageBase64,\r\n    };\r\n    return dialogData;\r\n  }\r\n}\r\n","<!--Copyright (c) Laserfiche.\r\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\r\n\r\n<lf-general-dialog-layout>\r\n  <span class=\"lf-dialog-title lf-popup-dialog-title dialog-header\">{{ USER_FEEDBACK_TITLE | async }}</span>\r\n  <button class=\"dialog-header lf-close-button\" [title]=\"localizedStrings.CLOSE | async\" (click)=\"onCloseDialog()\">\r\n    <span class=\"material-icons-outlined\"> close </span>\r\n  </button>\r\n  <div *ngIf=\"isFirstPane\" class=\"dialog-content\">\r\n    <lf-feedback-suggestion-selection\r\n      (feedbackClicked)=\"onClickFeedback()\"\r\n      (suggestionClicked)=\"onClickSuggestion()\"\r\n    ></lf-feedback-suggestion-selection>\r\n  </div>\r\n  <div *ngIf=\"isFeedback || isSuggestion\" class=\"dialog-content\">\r\n    <lf-feedback-submission [isFeedback]=\"isFeedback\"></lf-feedback-submission>\r\n  </div>\r\n  <div *ngIf=\"isThankYou\" class=\"dialog-content\">\r\n    <div class=\"lf-text-body\">\r\n      {{ localizedStrings.THANK_YOU_FOR_SUBMISSION | async }}\r\n    </div>\r\n    <div class=\"lf-text-body\">\r\n      {{ localizedStrings.IF_YOUD_LIKE_TO_JOIN_OUR_CUSTOMER_PANEL | async }}\r\n      <a href=\"https://info.laserfiche.com/laserfiche-customer-panel-signup\" target=\"_blank\">{{\r\n        localizedStrings.PLEASE_CLICK_HERE | async\r\n      }}</a>\r\n    </div>\r\n  </div>\r\n  <div *ngIf=\"isError\" class=\"dialog-content\">\r\n    <p class=\"lf-text-body lf-user-feedback-thank-you\">\r\n      {{ localizedStrings.SOMETHING_WENT_WRONG_PLEASE_TRY_AGAIN_LATER | async }}\r\n    </p>\r\n  </div>\r\n  <div align=\"end\" class=\"dialog-footer\">\r\n    <button\r\n      *ngIf=\"isFeedback || isSuggestion\"\r\n      id=\"lf-user-feedback-submit-feedback-button\"\r\n      class=\"lf-button primary-button dialog-button\"\r\n      [disabled]=\"isSubmitDisabled\"\r\n      (click)=\"onClickSubmitAsync()\"\r\n    >\r\n      {{ localizedStrings.SUBMIT | async }}\r\n    </button>\r\n    <button class=\"lf-button sec-button dialog-button\" (click)=\"onCloseDialog()\">\r\n      {{ isThankYou || isError ? (localizedStrings.CLOSE | async) : (localizedStrings.CANCEL | async) }}\r\n    </button>\r\n  </div>\r\n</lf-general-dialog-layout>\r\n","// Copyright Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nexport function init(environment: string) {\n  // Create a queue, but don't obliterate an existing one!\n  const analytics = ((window as any).analytics = (window as any).analytics || []);\n\n  // If the real analytics.js is already on the page return.\n  if (analytics.initialize) return;\n\n  // If the snippet was invoked already show an error.\n  if (analytics.invoked) {\n    if (window.console && console.error) {\n      console.error('Segment snippet included twice.');\n    }\n    return;\n  }\n\n  // Invoked flag, to make sure the snippet\n  // is never invoked twice.\n  analytics.invoked = true;\n\n  // A list of the methods in Analytics.js to stub.\n  analytics.methods = [\n    'trackSubmit',\n    'trackClick',\n    'trackLink',\n    'trackForm',\n    'pageview',\n    'identify',\n    'reset',\n    'group',\n    'track',\n    'ready',\n    'alias',\n    'debug',\n    'page',\n    'once',\n    'off',\n    'on',\n  ];\n\n  // Define a factory to create stubs. These are placeholders\n  // for methods in Analytics.js so that you never have to wait\n  // for it to load to actually record data. The `method` is\n  // stored as the first argument, so we can replay the data.\n  analytics.factory = function (method: any) {\n    return function () {\n      var args = Array.prototype.slice.call(arguments);\n      args.unshift(method);\n      analytics.push(args);\n      return analytics;\n    };\n  };\n\n  // For each of our methods, generate a queueing stub.\n  for (var i = 0; i < analytics.methods.length; i++) {\n    var key = analytics.methods[i];\n    analytics[key] = analytics.factory(key);\n  }\n\n  // Define a method to load Analytics.js from our CDN,\n  // and that will be sure to only ever load it once.\n  analytics.load = function (env: string, options: any) {\n    // Create an async script element based on your key.\n    var script = document.createElement('script');\n    script.type = 'text/javascript';\n    script.async = true;\n    script.src = 'https://lfxstatic.com/lib/LaserficheUsageTracking/latest/analytics.min.js';\n\n    // Insert our script next to the first script element.\n    var first = document.getElementsByTagName('script')[0];\n    first.parentNode?.insertBefore(script, first);\n    analytics._loadOptions = options;\n    analytics._environment = env;\n  };\n\n  // Add a version to keep track of what's in the wild.\n  analytics.SNIPPET_VERSION = '4.1.0';\n\n  // Load Analytics.js with your enivironment, which will automatically\n  // load the tools you've enabled for your account. Boosh!\n  analytics.load(environment);\n\n  // Make the first page call to load the integrations. If\n  // you'd like to manually name or tag the page, edit or\n  // move this call however you'd like.\n  analytics.page();\n}\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { Injectable } from '@angular/core';\nimport { init } from './business-intelligence-analytics';\nimport { IUserTrackingEvent, UserFeedbackUserTrackingEvent } from './lf-user-feedback-types';\n\n/** @internal */\n@Injectable({\n  providedIn: 'root'\n})\nexport class LfAnalyticsService {\n\n  private businessIntelligenceInitialized: boolean = false;\n  constructor() {}\n\n  track(event: IUserTrackingEvent): boolean {\n    try {\n      const businessIntelligenceInfo = this.getBusinessIntelligenceInfo(window.origin);\n      if (businessIntelligenceInfo && !this.businessIntelligenceInitialized) {\n        init(businessIntelligenceInfo.environment);\n        this.businessIntelligenceInitialized = true;\n      }\n      const analytics = this.getAnalytics(businessIntelligenceInfo);\n      if (analytics && event.accountId && event.module && event.userId) {\n        const isHostEmpower = this.isHostEmpower(window.origin);\n        if (isHostEmpower) {\n          const hosting_context = (event as UserFeedbackUserTrackingEvent).hosting_context;\n          (event as UserFeedbackUserTrackingEvent).hosting_context = hosting_context ? 'Empower Environment - ' + hosting_context : 'Empower Environment';\n        }\n        console.log(`track ${event.eventName}`);\n        const eventWithoutName: Partial<IUserTrackingEvent> = { ...event };\n        delete eventWithoutName.eventName;\n        analytics.track(event.eventName, eventWithoutName);\n        return true;\n      }\n      return false;\n    } catch (error) {\n      console.warn(`Analytics track error: ${error}`);\n      return false;\n    }\n  }\n\n  private getAnalytics(businessIntelligenceInfo: BusinessIntelligenceInfo | undefined): any {\n    if (!businessIntelligenceInfo) {\n      return undefined;\n    } else {\n      return (window as any).analytics;\n    }\n  }\n\n  private getBusinessIntelligenceInfo(url: string): BusinessIntelligenceInfo | undefined {\n    const _url = new URL(url.toLowerCase());\n    if (_url.host.includes('cloudtest.') || _url.host.includes('d3nunhg1m0ng5s.')) {\n      return { environment: 'test' };\n    } else if (this.isNotProductionUrl(_url)) {\n      return { environment: 'development' };\n    } else {\n      return { environment: 'production' };\n    }\n  }\n\n  private isNotProductionUrl(_url: URL) {\n    if (_url.host != 'app.laserfiche.com'\n      && _url.host != 'signin.laserfiche.com'\n      && _url.host != 'accounts.laserfiche.com'\n      && _url.host != 'app.laserfiche.ca'\n      && _url.host != 'signin.laserfiche.ca'\n      && _url.host != 'accounts.laserfiche.ca'\n      && _url.host != 'app.eu.laserfiche.com'\n      && _url.host != 'signin.eu.laserfiche.com'\n      && _url.host != 'accounts.eu.laserfiche.com'\n      && _url.host != 'lfxstatic.com'\n      && _url.host != 'app.clouddemo.laserfiche.com'\n      && _url.host != 'accounts.clouddemo.laserfiche.com'\n      && _url.host != 'signin.clouddemo.laserfiche.com'\n    ) {\n      return true; // not production\n    } else {\n      return false; // production\n    }\n  }\n\n  private isHostEmpower(url: string) {\n    const _url = new URL(url.toLowerCase());\n    if (_url.host == 'accounts.clouddemo.laserfiche.com'\n      || _url.host == 'signin.clouddemo.laserfiche.com'\n      || _url.host == 'app.clouddemo.laserfiche.com'\n    ) {\n      return true; // empower\n    } else {\n      return false; // not empower\n    }\n  }\n}\n\nexport interface BusinessIntelligenceInfo {\n  environment: string;\n}\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { AppLocalizationService } from '@laserfiche/lf-ui-components/internal-shared';\r\nimport { Observable } from 'rxjs';\r\nimport { LfAnalyticsService } from './lf-analytics.service';\r\nimport {\r\n  UserFeedbackDialogData,\r\n  UserFeedbackUserTrackingEvent,\r\n} from './lf-user-feedback-types';\r\nimport { UserFeedbackDialogComponent } from './user-feedback-dialog/user-feedback-dialog.component';\r\n\r\n@Component({\r\n  selector: 'lf-user-feedback-component',\r\n  template: `<button id=\"lf-user-feedback-button\" [disabled]=\"disableFeedbackButton\" (click)=\"handleDialogAsync()\">\r\n    {{ feedbackText | async }}\r\n  </button>`,\r\n  styleUrls: ['./lf-user-feedback.component.css'],\r\n})\r\nexport class LfUserFeedbackComponent {\r\n  @Input() hosting_module: string = '';\r\n  @Input() hosting_context: string = '';\r\n  @Input() user_id: string = '';\r\n  @Input() account_id: string = '';\r\n\r\n  /** @internal */\r\n  feedbackText: Observable<string> = this.localizationService.getStringLaserficheObservable('FEEDBACK');\r\n\r\n  /** @internal */\r\n  protected dialogRef: MatDialogRef<UserFeedbackDialogComponent> | undefined;\r\n\r\n  /** @internal */\r\n  constructor(\r\n    /** @internal */\r\n    public dialog: MatDialog,\r\n    /** @internal */\r\n    public analyticsService: LfAnalyticsService,\r\n    /** @internal */\r\n    private localizationService: AppLocalizationService\r\n  ) { }\r\n\r\n  /** @internal */\r\n  async handleDialogAsync(): Promise<void> {\r\n    if (!this.dialogRef) {\r\n      this.openDialog();\r\n      await this.closeDialogAsync();\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  private async closeDialogAsync() {\r\n    await this.dialogRef!.afterClosed().toPromise();\r\n    this.dialogRef = undefined;\r\n  }\r\n\r\n  /** @internal */\r\n  get disableFeedbackButton(): boolean {\r\n    return !this.user_id || !this.account_id;\r\n  }\r\n\r\n  /** @internal */\r\n  private openDialog(): void {\r\n    try {\r\n      this.dialogRef = this.dialog.open(UserFeedbackDialogComponent, {\r\n        width: '448px',\r\n        data: {},\r\n        panelClass: 'lf-user-feedback-panel',\r\n        autoFocus: false,\r\n        disableClose: true,\r\n        backdropClass: 'lf-user-feedback-backdrop'\r\n      });\r\n      this.dialogRef.componentInstance.submitFeedback.subscribe(\r\n        (result: UserFeedbackDialogData | undefined) => {\r\n          if (result?.userFeedbackTrackingEventType) {\r\n            const eventTrackingData: UserFeedbackUserTrackingEvent =\r\n              this.createEventTrackingData(result);\r\n            const trackSucceeded =\r\n              this.analyticsService?.track(eventTrackingData);\r\n            if (!trackSucceeded) {\r\n              this.dialogRef?.componentInstance.setError();\r\n            }\r\n          }\r\n        }\r\n      );\r\n    } catch (error: any) {\r\n      console.error(`Could not open User Feedback dialog: ${error.message}`);\r\n    }\r\n  }\r\n\r\n  /** @internal */\r\n  private createEventTrackingData(\r\n    dialogData: UserFeedbackDialogData\r\n  ): UserFeedbackUserTrackingEvent {\r\n    const data: UserFeedbackUserTrackingEvent = {\r\n      userId: this.user_id,\r\n      accountId: this.account_id,\r\n      module: 'UserFeedback', // Do not change or localize\r\n      eventName: dialogData.userFeedbackTrackingEventType,\r\n      hosting_module: this.hosting_module ?? 'UserFeedback',\r\n      hosting_context: this.hosting_context,\r\n      is_willing_to_be_contacted: dialogData.canContact,\r\n      message: dialogData.feedbackText,\r\n      email_address: '', // dummy empty value to satisfy the schema requirements\r\n      image: dialogData.feedbackImageBase64 ?? undefined,\r\n      attachment_entry_id: '', // dummy empty value\r\n    };\r\n    return data;\r\n  }\r\n}\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nimport { CUSTOM_ELEMENTS_SCHEMA, Injector, NgModule } from '@angular/core';\r\nimport { LfUserFeedbackComponent } from './lf-user-feedback.component';\r\nimport { UserFeedbackDialogComponent } from './user-feedback-dialog/user-feedback-dialog.component';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { createCustomElement } from '@angular/elements';\r\nimport { FeedbackSuggestionSelectionComponent } from './feedback-suggestion-selection/feedback-suggestion-selection.component';\r\nimport { FeedbackSubmissionComponent } from './feedback-submission/feedback-submission.component';\r\nimport { FeedbackImageUploadComponent } from './feedback-image-upload/feedback-image-upload.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { GeneralDialogLayoutModule, LfToastMessageModule, LfLoaderModule } from '@laserfiche/lf-ui-components/internal-shared';\r\n\r\n@NgModule({\r\n  declarations: [LfUserFeedbackComponent, UserFeedbackDialogComponent, FeedbackSuggestionSelectionComponent, FeedbackSubmissionComponent, FeedbackImageUploadComponent],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    MatDialogModule,\r\n    MatCheckboxModule,\r\n    MatIconModule,\r\n    GeneralDialogLayoutModule,\r\n    LfToastMessageModule,\r\n    LfLoaderModule,\r\n  ],\r\n  providers: [],\r\n  bootstrap: [LfUserFeedbackComponent],\r\n  exports: [LfUserFeedbackComponent],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class LfUserFeedbackModule {\r\n  /** @internal */\r\n  constructor(\r\n    /** @internal */ injector: Injector\r\n  ) {\r\n    const elementName: string = 'lf-user-feedback';\r\n    if (window.customElements && !customElements.get(elementName)) {\r\n      const newElement = createCustomElement(LfUserFeedbackComponent, { injector });\r\n      customElements.define(elementName, newElement);\r\n    }\r\n  }\r\n}\r\n","// Copyright (c) Laserfiche.\r\n// Licensed under the MIT License. See LICENSE in the project root for license information.\r\n\r\nexport * from './lf-user-feedback.component';\r\n\r\nexport * from './lf-user-feedback.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './lf-user-feedback-public-api';\n"],"names":["i2","i4.FeedbackImageUploadComponent","i5","i1","i3","i4.FeedbackSuggestionSelectionComponent","i5.FeedbackSubmissionComponent","i2.LfAnalyticsService","i4"],"mappings":"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"}