{"version":3,"file":"laserfiche-lf-ui-components-lf-user-feedback.mjs","sources":["../../../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/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/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/lf-user-feedback-types.ts","../../../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/lf-user-feedback.component.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 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  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\n            ? 'Empower Environment - ' + hosting_context\n            : '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 (\n      _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 (\n      _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.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { ChangeDetectorRef, Component, EventEmitter, Output, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AppLocalizationService, LfLoaderComponent } from '@laserfiche/lf-ui-components/internal-shared';\n\n/** @internal */\n@Component({\n  selector: 'lf-feedback-image-upload',\n  templateUrl: './feedback-image-upload.component.html',\n  styleUrls: ['./feedback-image-upload.component.css', '../user-feedback-dialog/user-feedback-dialog.component.css'],\n  standalone: true,\n  imports: [CommonModule, LfLoaderComponent],\n})\nexport class FeedbackImageUploadComponent {\n  private localizationService = inject(AppLocalizationService);\n  private ref = inject(ChangeDetectorRef);\n\n  @Output() imageUploadError: EventEmitter<string> = new EventEmitter<string>();\n  @Output() feedbackImageBase64: EventEmitter<string | undefined> = new EventEmitter<string | undefined>();\n\n  showLoader: boolean = false;\n  imageUploaded?: { name: string; rawBase64: string };\n  acceptedImageTypes: string = '.jpg,.jpeg,.png,.gif,.webp';\n  private acceptedImageFormats: string = 'JPEG, PNG, GIF, WebP';\n  private supportedImageTypeArray: string[] = this.acceptedImageTypes\n    .split(',')\n    .map((imgType) => imgType.replace('.', 'image/'));\n  private megabyteLimit = 3;\n  private imageSizeLimitBytes: number = this.megabyteLimit * 1024 * 1024;\n\n  localizedStrings: Record<string, string> = {};\n\n  constructor() {\n    const lfKeys = ['OR', 'DRAG_DROP_FILE', 'REMOVE', 'BROWSE', 'OPTIONAL', 'UNKNOWN_ERROR'];\n    for (const key of lfKeys) {\n      this.localizationService.getStringLaserficheObservable(key).subscribe((v) => {\n        this.localizedStrings[key] = v as string;\n      });\n    }\n    this.localizationService.getStringComponentsObservable('ATTACH_IMAGE').subscribe((v) => {\n      this.localizedStrings['ATTACH_IMAGE'] = v as string;\n    });\n  }\n\n  async dropHandler(ev: DragEvent): Promise<void> {\n    let file: File | undefined;\n    let numFiles = 0;\n    ev.preventDefault();\n\n    if (ev?.dataTransfer?.items) {\n      numFiles = ev.dataTransfer.items.length;\n      const item = ev.dataTransfer.items[0];\n      if (item.kind === 'file') {\n        file = item.getAsFile() ?? undefined;\n      }\n    } else {\n      numFiles = ev.dataTransfer?.files.length ?? 0;\n      file = ev.dataTransfer?.files.item(0) ?? undefined;\n    }\n\n    if (numFiles > 1) {\n      this.imageUploadError.emit(\n        this.localizationService.getResourceStringComponents('IMAGE_NOT_ATTACHED') +\n          ' ' +\n          this.localizationService.getResourceStringComponents('PLEASE_ATTACH_ONLY_ONE_IMAGE')\n      );\n    } else {\n      await this.tryReadAndValidateImageAsync(file);\n    }\n  }\n\n  dragOverHandler(ev: DragEvent) {\n    ev.preventDefault();\n  }\n\n  private async tryReadAndValidateImageAsync(image: File | undefined): Promise<boolean> {\n    try {\n      this.showLoader = true;\n      this.ref.detectChanges();\n      await this.uploadImageOrThrow(image);\n    } catch (error: any) {\n      this.handleImageUploadError(error);\n    } finally {\n      this.showLoader = false;\n      this.ref.detectChanges();\n      return !!this.imageUploaded;\n    }\n  }\n\n  private async uploadImageOrThrow(image: File | undefined): Promise<void> {\n    this.checkImageForErrors(image);\n    const encodingData = await this.getBase64Async(image as File);\n    this.feedbackImageBase64.emit(encodingData);\n    this.imageUploaded = {\n      name: (image as File).name,\n      rawBase64: encodingData,\n    };\n    this.ref.detectChanges();\n  }\n\n  private checkImageForErrors(image: File | undefined): void {\n    if (!image) {\n      throw new Error('image does not exist');\n    }\n    const isImageSupported = this.supportedImageTypeArray.includes(image.type);\n    if (!isImageSupported) {\n      throw new ImageUploadError(ImageUploadErrorType.UnsupportedFormat);\n    }\n    if (image.size > this.imageSizeLimitBytes) {\n      throw new ImageUploadError(ImageUploadErrorType.TooLarge);\n    }\n  }\n\n  private handleImageUploadError(error: any): void {\n    const errorMessage = this.getImageUploadErrorMessage(error);\n    this.imageUploadError.emit(\n      this.localizationService.getResourceStringComponents('IMAGE_NOT_ATTACHED') + ' ' + errorMessage\n    );\n    this.feedbackImageBase64.emit(undefined);\n    this.imageUploaded = undefined;\n    this.ref.detectChanges();\n  }\n\n  private getImageUploadErrorMessage(error: any): string {\n    if (error.name === ImageUploadError_name) {\n      switch ((<ImageUploadError>error).imageUploadErrorType) {\n        case ImageUploadErrorType.TooLarge:\n          return this.localizationService.getResourceStringComponents('IMAGE_EXCEEDS_MAX_FILE_SIZE_0', [\n            `${this.megabyteLimit} MB`,\n          ]);\n        case ImageUploadErrorType.UnsupportedFormat:\n          return (\n            this.localizationService.getResourceStringComponents('IMAGE_CORRUPTED_UNRECOGNIZED_FORMAT') +\n            ' ' +\n            this.localizationService.getResourceStringComponents('ACCEPTED_FORMATS_ARE_0', [this.acceptedImageFormats])\n          );\n        default:\n          return error.message ?? this.localizedStrings.UNKNOWN_ERROR;\n      }\n    } else {\n      return error.message ?? this.localizedStrings.UNKNOWN_ERROR;\n    }\n  }\n\n  onInputClickArea(fileInput: HTMLInputElement): void {\n    fileInput.click();\n  }\n\n  async onFileSelectedAsync(event: Event): Promise<void> {\n    const file = (event.target as HTMLInputElement)?.files?.item(0) ?? undefined;\n    const isFileAttached = await this.tryReadAndValidateImageAsync(file);\n    if (!isFileAttached) {\n      (event.target as HTMLInputElement).files = null;\n      (event.target as HTMLInputElement).value = '';\n    }\n  }\n\n  private async getBase64Async(file: File): Promise<string> {\n    return new Promise((resolve, reject) => {\n      var reader = new FileReader();\n\n      reader.onload = () => {\n        const imgBase64: string = reader.result as string;\n        var image = document.createElement('img');\n        image.onload = () => {\n          resolve(imgBase64);\n        };\n        image.onerror = (error) => {\n          console.warn(error);\n          reject(new ImageUploadError(ImageUploadErrorType.UnsupportedFormat));\n        };\n        image.src = imgBase64;\n      };\n      reader.onerror = (error: any) => {\n        console.warn(error);\n        reject(new ImageUploadError(ImageUploadErrorType.UnsupportedFormat));\n      };\n      reader.readAsDataURL(file);\n    });\n  }\n\n  removeImage(fileInput?: HTMLInputElement): void {\n    this.imageUploaded = undefined;\n    this.feedbackImageBase64.emit(undefined);\n    if (fileInput) {\n      fileInput.value = '';\n    }\n  }\n}\n\n/** @internal */\nenum ImageUploadErrorType {\n  TooLarge,\n  UnsupportedFormat,\n}\n\n/** @internal */\nconst ImageUploadError_name = 'ImageUploadError';\n/** @internal */\nclass ImageUploadError extends Error {\n  name = ImageUploadError_name;\n  constructor(\n    public imageUploadErrorType: ImageUploadErrorType,\n    message?: string\n  ) {\n    super(message ?? imageUploadErrorType.toString());\n  }\n}\n","<!--Copyright (c) Laserfiche.\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\n\n<label for=\"image-upload\" class=\"lf-text-label\"\n  >{{ localizedStrings.ATTACH_IMAGE }} ({{ localizedStrings.OPTIONAL }})</label\n>\n<div (drop)=\"dropHandler($event)\" (dragover)=\"dragOverHandler($event)\">\n  <div id=\"image-upload\" class=\"file-drop-zone\" [hidden]=\"showLoader || imageUploaded\">\n    <input\n      id=\"browseFileInput\"\n      type=\"file\"\n      [accept]=\"acceptedImageTypes\"\n      tabindex=\"-1\"\n      title=\"\"\n      (change)=\"onFileSelectedAsync($event)\"\n      #uploadFile\n    />\n    <div id=\"file-upload-area\">\n      <span id=\"upload-icon\" class=\"material-icons\"> file_upload </span>\n      <label for=\"uploadFile\">\n        <button class=\"sec-button lf-button\" (click)=\"onInputClickArea(uploadFile)\">\n          {{ localizedStrings.BROWSE }}\n        </button>\n      </label>\n      <div class=\"file-upload-sub-text lf-text-body\">{{ localizedStrings.OR }}</div>\n      <div class=\"file-upload-sub-text lf-text-body\">{{ localizedStrings.DRAG_DROP_FILE }}</div>\n    </div>\n  </div>\n  <div class=\"picked-file-zone\" [hidden]=\"!(showLoader || imageUploaded)\">\n    <div class=\"selected-file-info\" [hidden]=\"!imageUploaded\">\n      <div class=\"image-preview\">\n        <img [src]=\"imageUploaded?.rawBase64\" style=\"max-width: 100%; max-height: 100%; object-fit: contain\" />\n      </div>\n      <div id=\"uploaded-file-name\" class=\"lf-text-body\" title=\"{{ imageUploaded?.name }}\">\n        {{ imageUploaded?.name }}\n      </div>\n      <button class=\"lf-close-button\" title=\"{{ localizedStrings.REMOVE }}\" (click)=\"removeImage(uploadFile)\">\n        <span class=\"material-icons-outlined\"> close </span>\n      </button>\n    </div>\n    <div class=\"loader-wrapper\" [hidden]=\"!!imageUploaded\">\n      <lf-loader-component></lf-loader-component>\n    </div>\n  </div>\n</div>\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { Component, Input, Output, EventEmitter, AfterViewInit, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport {\n  AppLocalizationService,\n  LfMessageToastTypes,\n  LfToastMessage,\n  LfToastMessageComponent,\n} from '@laserfiche/lf-ui-components/internal-shared';\nimport { FeedbackImageUploadComponent } from '../feedback-image-upload/feedback-image-upload.component';\n\n/** @internal */\n@Component({\n  selector: 'lf-feedback-submission',\n  templateUrl: './feedback-submission.component.html',\n  styleUrls: ['./feedback-submission.component.css', '../user-feedback-dialog/user-feedback-dialog.component.css'],\n  standalone: true,\n  imports: [CommonModule, FormsModule, MatCheckboxModule, LfToastMessageComponent, FeedbackImageUploadComponent],\n})\nexport class FeedbackSubmissionComponent {\n  private localizationService = inject(AppLocalizationService);\n\n  @Input() isFeedback?: boolean;\n  @Output() feedbackTextChanged: EventEmitter<string> = new EventEmitter<string>();\n\n  toastMessages: LfToastMessage[] = [];\n\n  readonly maxFeedbackLength: number = 2048;\n  feedbackLength: number = 0;\n  feedbackEmailCheckbox: boolean = false;\n  feedbackImageBase64: string | undefined;\n\n  localizedStrings = {\n    FOUND_SOMETHING_LIKE_DISLIKE_LET_US_KNOW: this.localizationService.getStringComponentsObservable(\n      'FOUND_SOMETHING_LIKE_DISLIKE_LET_US_KNOW'\n    ),\n    DO_YOU_HAVE_IDEA_NEW_FEATURE_IMPROVEMENT_LOOK_FORWARD_TO_HEARING:\n      this.localizationService.getStringComponentsObservable(\n        'DO_YOU_HAVE_IDEA_NEW_FEATURE_IMPROVEMENT_LOOK_FORWARD_TO_HEARING'\n      ),\n    TELL_US_ABOUT_EXPERIENCE: this.localizationService.getStringComponentsObservable('TELL_US_ABOUT_EXPERIENCE'),\n    PLEASE_DO_NOT_INCLUDE_CONFIDENTIAL_OR_PERSONAL_INFO_IN_FEEDBACK:\n      this.localizationService.getStringComponentsObservable(\n        'PLEASE_DO_NOT_INCLUDE_CONFIDENTIAL_OR_PERSONAL_INFO_IN_FEEDBACK'\n      ),\n    YOU_MAY_CONTACT_ME_ABOUT_FEEDBACK: this.localizationService.getStringComponentsObservable(\n      'YOU_MAY_CONTACT_ME_ABOUT_FEEDBACK'\n    ),\n    TELL_US_ABOUT_IDEA: this.localizationService.getStringComponentsObservable('TELL_US_ABOUT_IDEA'),\n    REQUIRED: this.localizationService.getStringLaserficheObservable('REQUIRED'),\n  };\n\n  onFeedbackImageBase64(imageBase64: string | undefined) {\n    this.feedbackImageBase64 = imageBase64;\n  }\n\n  feedbackTextBoxChange(event: Event) {\n    const feedbackText = (event.target as HTMLTextAreaElement).value;\n    this.feedbackLength = feedbackText.length;\n    this.feedbackTextChanged.emit(feedbackText);\n  }\n\n  onImageUploadError(errMsg: string) {\n    const errorToastMsg: LfToastMessage = {\n      message: errMsg,\n      type: LfMessageToastTypes.Warning,\n      noIcon: false,\n      hideMessage: false,\n    };\n    this.toastMessages = [errorToastMsg];\n  }\n}\n","<!--Copyright (c) Laserfiche.\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\n\n<div class=\"user-feedback-content-container lf-dialog-content\">\n  <lf-toast-message id=\"messages\" [messages]=\"toastMessages\"></lf-toast-message>\n  <div class=\"lf-text-body lf-user-feedback-description\">\n    {{\n      isFeedback\n        ? (localizedStrings.FOUND_SOMETHING_LIKE_DISLIKE_LET_US_KNOW | async)\n        : (localizedStrings.DO_YOU_HAVE_IDEA_NEW_FEATURE_IMPROVEMENT_LOOK_FORWARD_TO_HEARING | async)\n    }}\n  </div>\n  <label for=\"feedback-suggestion-textbox\" class=\"lf-text-label\"\n    >{{\n      isFeedback ? (localizedStrings.TELL_US_ABOUT_EXPERIENCE | async) : (localizedStrings.TELL_US_ABOUT_IDEA | async)\n    }}\n    ({{ localizedStrings.REQUIRED | async }})</label\n  >\n  <textarea\n    id=\"feedback-suggestion-textbox\"\n    rows=\"10\"\n    [attr.maxlength]=\"maxFeedbackLength\"\n    (input)=\"feedbackTextBoxChange($event)\"\n    class=\"lf-textarea lf-text-placeholder lf-text-body feedback-suggestion-textbox\"\n    [placeholder]=\"localizedStrings.PLEASE_DO_NOT_INCLUDE_CONFIDENTIAL_OR_PERSONAL_INFO_IN_FEEDBACK | async\"\n  ></textarea>\n  <div class=\"lf-text-body character-count\">\n    <span>{{ feedbackLength }}</span>\n    <span> / </span>\n    <span>{{ maxFeedbackLength }}</span>\n  </div>\n  <lf-feedback-image-upload\n    id=\"image-upload-block\"\n    (feedbackImageBase64)=\"onFeedbackImageBase64($event)\"\n    (imageUploadError)=\"onImageUploadError($event)\"\n  ></lf-feedback-image-upload>\n  <div class=\"email-checkbox-container\">\n    <mat-checkbox\n      color=\"primary\"\n      class=\"lf-user-feedback-checkbox lf-checkbox\"\n      [disableRipple]=\"true\"\n      ngDefaultControl\n      [(ngModel)]=\"feedbackEmailCheckbox\"\n    >\n      {{ localizedStrings.YOU_MAY_CONTACT_ME_ABOUT_FEEDBACK | async }}\n    </mat-checkbox>\n  </div>\n</div>\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { Component, EventEmitter, Output, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AppLocalizationService } from '@laserfiche/lf-ui-components/internal-shared';\n\n/** @internal */\n@Component({\n  selector: 'lf-feedback-suggestion-selection',\n  templateUrl: './feedback-suggestion-selection.component.html',\n  styleUrls: [\n    './feedback-suggestion-selection.component.css',\n    '../user-feedback-dialog/user-feedback-dialog.component.css',\n  ],\n  standalone: true,\n  imports: [CommonModule],\n})\nexport class FeedbackSuggestionSelectionComponent {\n  private localizationService = inject(AppLocalizationService);\n\n  @Output() feedbackClicked: EventEmitter<void> = new EventEmitter<void>();\n  @Output() suggestionClicked: EventEmitter<void> = new EventEmitter<void>();\n\n  localizedStrings = {\n    YOUR_FEEDBACK_SUGGESTION_HELP_IMPROVE_PRODUCT: this.localizationService.getStringComponentsObservable(\n      'YOUR_FEEDBACK_SUGGESTION_HELP_IMPROVE_PRODUCT'\n    ),\n    TECHNICAL_ISSUES_CONTACT_ADMIN_OR_SP: this.localizationService.getStringComponentsObservable(\n      'TECHNICAL_ISSUES_CONTACT_ADMIN_OR_SP'\n    ),\n    I_HAVE_FEEDBACK: this.localizationService.getStringComponentsObservable('I_HAVE_FEEDBACK'),\n    I_HAVE_SUGGESTION: this.localizationService.getStringComponentsObservable('I_HAVE_SUGGESTION'),\n  };\n\n  onClickFeedback() {\n    this.feedbackClicked.emit();\n  }\n\n  onClickSuggestion() {\n    this.suggestionClicked.emit();\n  }\n}\n","<!--Copyright (c) Laserfiche.\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\n\n<div class=\"lf-text-body lf-user-feedback-description\">\n  {{ localizedStrings.YOUR_FEEDBACK_SUGGESTION_HELP_IMPROVE_PRODUCT | async }}\n</div>\n<div class=\"lf-text-body lf-user-feedback-description\">\n  {{ localizedStrings.TECHNICAL_ISSUES_CONTACT_ADMIN_OR_SP | async }}\n</div>\n<button\n  id=\"lf-user-feedback-feedback-mode-button\"\n  class=\"lf-button feedback-suggestion-button\"\n  (click)=\"onClickFeedback()\"\n>\n  {{ localizedStrings.I_HAVE_FEEDBACK | async }}\n</button>\n<button\n  id=\"lf-user-feedback-suggestion-mode-button\"\n  class=\"lf-button feedback-suggestion-button\"\n  (click)=\"onClickSuggestion()\"\n>\n  {{ localizedStrings.I_HAVE_SUGGESTION | async }}\n</button>\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\n/** @internal */\nexport enum UserFeedbackTrackingEventType {\n  Feedback = 'Feedback',\n  Suggestion = 'Suggestion',\n}\n\n/** @internal */\nexport interface UserFeedbackDialogData {\n  userFeedbackTrackingEventType: UserFeedbackTrackingEventType;\n  feedbackText: string;\n  canContact: boolean;\n  feedbackImageBase64?: string;\n}\n\n/**\n * @internal\n * Contains required and custom properties to be tracked.\n * Custom properties are snake_case because camelCase and PascalCase are not respected when sending to tracking service\n */\n\nexport interface IUserTrackingEvent {\n  /**\n   * required property by Product Intelligence\n   */\n  eventName: UserFeedbackTrackingEventType;\n  /**\n   * required property by Product Intelligence\n   */\n  module: string;\n  /**\n   * required property by Product Intelligence\n   */\n  accountId: string;\n  /**\n   * required property by Product Intelligence\n   */\n  userId: string;\n}\n\n/** @internal */\nexport interface UserFeedbackUserTrackingEvent extends IUserTrackingEvent {\n  hosting_module: string;\n  hosting_context: string;\n  is_willing_to_be_contacted: boolean;\n  message: string;\n  email_address: string;\n  image?: string;\n  attachment_entry_id: string;\n}\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { LocalizedString } from '@angular/compiler';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  HostListener,\n  OnDestroy,\n  Output,\n  ViewChild,\n  inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { AppLocalizationService, GeneralDialogLayoutComponent } from '@laserfiche/lf-ui-components/internal-shared';\nimport { map, Observable, Subscription } from 'rxjs';\nimport { FeedbackSubmissionComponent } from '../feedback-submission/feedback-submission.component';\nimport { FeedbackSuggestionSelectionComponent } from '../feedback-suggestion-selection/feedback-suggestion-selection.component';\nimport { UserFeedbackDialogData, UserFeedbackTrackingEventType } from '../lf-user-feedback-types';\n\n/** @internal */\nexport enum FeedbackDialogState {\n  FIRST_PANE,\n  FEEDBACK,\n  SUGGESTION,\n  THANK_YOU,\n  ERROR,\n}\n\n/**\n * @internal\n */\n@Component({\n  selector: 'lf-user-feedback-dialog-component',\n  templateUrl: './user-feedback-dialog.component.html',\n  styleUrls: ['./user-feedback-dialog.component.css'],\n  standalone: true,\n  imports: [\n    CommonModule,\n    GeneralDialogLayoutComponent,\n    FeedbackSubmissionComponent,\n    FeedbackSuggestionSelectionComponent,\n  ],\n})\nexport class UserFeedbackDialogComponent implements AfterViewInit, OnDestroy {\n  dialogRef = inject<MatDialogRef<UserFeedbackDialogComponent>>(MatDialogRef);\n  private ref = inject(ChangeDetectorRef);\n  private localizationService = inject(AppLocalizationService);\n\n  @Output() submitFeedback: EventEmitter<UserFeedbackDialogData> = new EventEmitter();\n  @ViewChild(FeedbackSubmissionComponent) feedbackSubmission?: FeedbackSubmissionComponent;\n\n  private dialogState: FeedbackDialogState = FeedbackDialogState.FIRST_PANE;\n  private feedbackText: string | undefined;\n  private allSubscriptions: Subscription = new Subscription();\n  isSubmitDisabled: boolean = true;\n\n  get isFirstPane(): boolean {\n    return this.dialogState === FeedbackDialogState.FIRST_PANE;\n  }\n  get isFeedback(): boolean {\n    return this.dialogState === FeedbackDialogState.FEEDBACK;\n  }\n  get isSuggestion(): boolean {\n    return this.dialogState === FeedbackDialogState.SUGGESTION;\n  }\n  get isThankYou(): boolean {\n    return this.dialogState === FeedbackDialogState.THANK_YOU;\n  }\n  get isError(): boolean {\n    return this.dialogState === FeedbackDialogState.ERROR;\n  }\n\n  localizedStrings = {\n    SUGGESTION: this.localizationService.getStringLaserficheObservable('SUGGESTION'),\n    FEEDBACK: this.localizationService.getStringLaserficheObservable('FEEDBACK'),\n    CLOSE: this.localizationService.getStringLaserficheObservable('CLOSE'),\n    THANK_YOU_FOR_SUBMISSION: this.localizationService.getStringLaserficheObservable('THANK_YOU_FOR_SUBMISSION'),\n    IF_YOUD_LIKE_TO_JOIN_OUR_CUSTOMER_PANEL: this.localizationService\n      .getStringComponentsObservable('IF_YOUD_LIKE_TO_JOIN_OUR_CUSTOMER_PANEL')\n      .pipe(\n        map((value: string) => {\n          return `${value} `;\n        })\n      ),\n    PLEASE_CLICK_HERE: this.localizationService.getStringComponentsObservable('PLEASE_CLICK_HERE'),\n    SOMETHING_WENT_WRONG_PLEASE_TRY_AGAIN_LATER: this.localizationService.getStringLaserficheObservable(\n      'SOMETHING_WENT_WRONG_PLEASE_TRY_AGAIN_LATER'\n    ),\n    SUBMIT: this.localizationService.getStringLaserficheObservable('SUBMIT'),\n    CANCEL: this.localizationService.getStringLaserficheObservable('CANCEL'),\n  };\n\n  USER_FEEDBACK_TITLE: Observable<string> = this.localizedStrings.FEEDBACK;\n\n  ngAfterViewInit() {\n    const elem = document.getElementById('lf-user-feedback-feedback-mode-button');\n    elem?.focus();\n  }\n\n  ngOnDestroy(): void {\n    this.allSubscriptions.unsubscribe();\n  }\n\n  setError(): void {\n    this.dialogState = FeedbackDialogState.ERROR;\n  }\n\n  onClickFeedback(): void {\n    this.dialogState = FeedbackDialogState.FEEDBACK;\n    this.USER_FEEDBACK_TITLE = this.localizedStrings.FEEDBACK;\n    this.ref.detectChanges();\n    setTimeout(() => {\n      document.getElementById('feedback-suggestion-textbox')?.focus();\n    });\n  }\n\n  onClickSuggestion(): void {\n    this.dialogState = FeedbackDialogState.SUGGESTION;\n    this.USER_FEEDBACK_TITLE = this.localizedStrings.SUGGESTION;\n    this.ref.detectChanges();\n    setTimeout(() => {\n      document.getElementById('feedback-suggestion-textbox')?.focus();\n    });\n  }\n\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscKey(event: Event) {\n    this.dialogRef.close();\n  }\n\n  onFeedbackTextChanged(text: string): void {\n    this.feedbackText = text;\n    this.isSubmitDisabled = this.isEmptyOrWhitespace(text);\n    this.ref.detectChanges();\n  }\n\n  async onClickSubmitAsync(): Promise<void> {\n    try {\n      const dialogData = this.getFeedbackDialogData();\n      this.submitFeedback.emit(dialogData);\n      if (!this.isError) {\n        this.dialogState = FeedbackDialogState.THANK_YOU;\n      }\n    } catch (error: any) {\n      console.warn(error.message);\n      this.setError();\n    }\n  }\n\n  onCloseDialog(): void {\n    this.dialogRef.close();\n  }\n\n  private isEmptyOrWhitespace(value: string | undefined): boolean {\n    return !value || !(value.trim().length > 0);\n  }\n\n  private getFeedbackDialogData(): UserFeedbackDialogData {\n    if (!this.feedbackSubmission || !this.feedbackText) {\n      throw new Error('feedbackSubmission unexpectedly does not exist. Cannot submit');\n    }\n    let userFeedbackTrackingEventType: UserFeedbackTrackingEventType = UserFeedbackTrackingEventType.Feedback;\n    if (this.isSuggestion) {\n      userFeedbackTrackingEventType = UserFeedbackTrackingEventType.Suggestion;\n    }\n    const dialogData: UserFeedbackDialogData = {\n      canContact: this.feedbackSubmission.feedbackEmailCheckbox,\n      userFeedbackTrackingEventType,\n      feedbackText: this.feedbackText,\n      feedbackImageBase64: this.feedbackSubmission.feedbackImageBase64,\n    };\n    return dialogData;\n  }\n}\n","<!--Copyright (c) Laserfiche.\nLicensed under the MIT License. See LICENSE in the project root for license information.-->\n\n<lf-general-dialog-layout>\n  <span class=\"lf-dialog-title lf-popup-dialog-title dialog-header\">{{ USER_FEEDBACK_TITLE | async }}</span>\n  <button class=\"dialog-header lf-close-button\" [title]=\"localizedStrings.CLOSE | async\" (click)=\"onCloseDialog()\">\n    <span class=\"material-icons-outlined\"> close </span>\n  </button>\n  @if (isFirstPane) {\n    <div class=\"dialog-content\">\n      <lf-feedback-suggestion-selection\n        (feedbackClicked)=\"onClickFeedback()\"\n        (suggestionClicked)=\"onClickSuggestion()\"\n      ></lf-feedback-suggestion-selection>\n    </div>\n  }\n  @if (isFeedback || isSuggestion) {\n    <div class=\"dialog-content\">\n      <lf-feedback-submission\n        [isFeedback]=\"isFeedback\"\n        (feedbackTextChanged)=\"onFeedbackTextChanged($event)\"\n      ></lf-feedback-submission>\n    </div>\n  }\n  @if (isThankYou) {\n    <div class=\"dialog-content\">\n      <div class=\"lf-text-body\">\n        {{ localizedStrings.THANK_YOU_FOR_SUBMISSION | async }}\n      </div>\n      <div class=\"lf-text-body\">\n        {{ localizedStrings.IF_YOUD_LIKE_TO_JOIN_OUR_CUSTOMER_PANEL | async }}\n        <a href=\"https://info.laserfiche.com/laserfiche-customer-panel-signup\" target=\"_blank\">{{\n          localizedStrings.PLEASE_CLICK_HERE | async\n        }}</a>\n      </div>\n    </div>\n  }\n  @if (isError) {\n    <div class=\"dialog-content\">\n      <p class=\"lf-text-body lf-user-feedback-thank-you\">\n        {{ localizedStrings.SOMETHING_WENT_WRONG_PLEASE_TRY_AGAIN_LATER | async }}\n      </p>\n    </div>\n  }\n  <div align=\"end\" class=\"dialog-footer\">\n    @if (isFeedback || isSuggestion) {\n      <button\n        id=\"lf-user-feedback-submit-feedback-button\"\n        class=\"lf-button primary-button dialog-button\"\n        [disabled]=\"isSubmitDisabled\"\n        (click)=\"onClickSubmitAsync()\"\n      >\n        {{ localizedStrings.SUBMIT | async }}\n      </button>\n    }\n    <button class=\"lf-button sec-button dialog-button\" (click)=\"onCloseDialog()\">\n      {{ isThankYou || isError ? (localizedStrings.CLOSE | async) : (localizedStrings.CANCEL | async) }}\n    </button>\n  </div>\n</lf-general-dialog-layout>\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nimport { Component, Input, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { AppLocalizationService } from '@laserfiche/lf-ui-components/internal-shared';\nimport { Observable } from 'rxjs';\nimport { LfAnalyticsService } from './lf-analytics.service';\nimport { UserFeedbackDialogData, UserFeedbackUserTrackingEvent } from './lf-user-feedback-types';\nimport { UserFeedbackDialogComponent } from './user-feedback-dialog/user-feedback-dialog.component';\n\n@Component({\n  selector: 'lf-user-feedback',\n  template: `<button id=\"lf-user-feedback-button\" [disabled]=\"disableFeedbackButton\" (click)=\"handleDialogAsync()\">\n    {{ feedbackText | async }}\n  </button>`,\n  styleUrls: ['./lf-user-feedback.component.css'],\n  standalone: true,\n  imports: [CommonModule],\n})\nexport class LfUserFeedbackComponent {\n  /**@internal */\n  dialog = inject(MatDialog);\n  /**@internal */\n  analyticsService = inject(LfAnalyticsService);\n  /**@internal */\n  private localizationService = inject(AppLocalizationService);\n\n  @Input() hosting_module: string = '';\n  @Input() hosting_context: string = '';\n  @Input() user_id: string = '';\n  @Input() account_id: string = '';\n\n  /** @internal */\n  feedbackText: Observable<string> = this.localizationService.getStringLaserficheObservable('FEEDBACK');\n\n  /** @internal */\n  protected dialogRef: MatDialogRef<UserFeedbackDialogComponent> | undefined;\n\n  /** @internal */\n  async handleDialogAsync(): Promise<void> {\n    if (!this.dialogRef) {\n      this.openDialog();\n      await this.closeDialogAsync();\n    }\n  }\n\n  /** @internal */\n  private async closeDialogAsync() {\n    await this.dialogRef!.afterClosed().toPromise();\n    this.dialogRef = undefined;\n  }\n\n  /** @internal */\n  get disableFeedbackButton(): boolean {\n    return !this.user_id || !this.account_id;\n  }\n\n  /** @internal */\n  private openDialog(): void {\n    try {\n      this.dialogRef = this.dialog.open(UserFeedbackDialogComponent, {\n        width: '448px',\n        data: {},\n        panelClass: 'lf-user-feedback-panel',\n        autoFocus: false,\n        disableClose: true,\n        backdropClass: 'lf-user-feedback-backdrop',\n      });\n      this.dialogRef.componentInstance.submitFeedback.subscribe((result: UserFeedbackDialogData | undefined) => {\n        if (result?.userFeedbackTrackingEventType) {\n          const eventTrackingData: UserFeedbackUserTrackingEvent = this.createEventTrackingData(result);\n          const trackSucceeded = this.analyticsService?.track(eventTrackingData);\n          if (!trackSucceeded) {\n            this.dialogRef?.componentInstance.setError();\n          }\n        }\n      });\n    } catch (error: any) {\n      console.error(`Could not open User Feedback dialog: ${error.message}`);\n    }\n  }\n\n  /** @internal */\n  private createEventTrackingData(dialogData: UserFeedbackDialogData): UserFeedbackUserTrackingEvent {\n    const data: UserFeedbackUserTrackingEvent = {\n      userId: this.user_id,\n      accountId: this.account_id,\n      module: 'UserFeedback', // Do not change or localize\n      eventName: dialogData.userFeedbackTrackingEventType,\n      hosting_module: this.hosting_module ?? 'UserFeedback',\n      hosting_context: this.hosting_context,\n      is_willing_to_be_contacted: dialogData.canContact,\n      message: dialogData.feedbackText,\n      email_address: '', // dummy empty value to satisfy the schema requirements\n      image: dialogData.feedbackImageBase64 ?? undefined,\n      attachment_entry_id: '', // dummy empty value\n    };\n    return data;\n  }\n}\n","// Copyright (c) Laserfiche.\n// Licensed under the MIT License. See LICENSE in the project root for license information.\n\nexport { LfUserFeedbackComponent } from './lf-user-feedback.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './lf-user-feedback-public-api';\n"],"names":["i3","i1"],"mappings":"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"}