{"version":3,"file":"fields.modern.js","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/fields/button_toggle_controller.js","../../javascript/controllers/fields/cloudinary_image_controller.js","../../javascript/controllers/fields/color_picker_controller.js","../../javascript/controllers/fields/date_controller.js","../../javascript/controllers/fields/file_field_controller.js","../../javascript/controllers/fields/password_controller.js","../../javascript/controllers/fields/phone_controller.js","../../javascript/controllers/fields/super_select_controller.js","../../javascript/controllers/index.js","../../javascript/trix_editor.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n    return context.keys()\n        .map((key) => definitionForModuleWithContextAndKey(context, key))\n        .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n    const identifier = identifierForContextKey(key);\n    if (identifier) {\n        return definitionForModuleAndIdentifier(context(key), identifier);\n    }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n    const controllerConstructor = module.default;\n    if (typeof controllerConstructor == \"function\") {\n        return { identifier, controllerConstructor };\n    }\n}\nfunction identifierForContextKey(key) {\n    const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n    if (logicalName) {\n        return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n    }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"shadowField\" ]\n\n  clickShadowField(event) {\n    // we have to stop safari from doing what we originally expected.\n    event.preventDefault();\n\n    // then we need to manually click the hidden checkbox or radio button ourselves.\n    this.shadowFieldTarget.click()\n  }\n}","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"uploadButton\", \"hiddenField\", \"thumbnail\" ]\n  static values = { \n    signaturesUrl: String,\n    height: Number,\n    width: Number,\n    cloudName: String,\n    apiKey: String,\n    googleApiKey: String,\n    urlFormat: String,\n    sources: String,\n    searchByRights: Boolean\n  }\n  static classes = [ \"thumbnailShown\" ]\n\n  pickImageAndUpload(event) {\n    // don't submit the form.\n    event.preventDefault()\n\n    // prepare the list of default sources a user can upload an image from.\n    var defaultSources = ['local', 'url', 'camera']\n    if (this.hasGoogleApiKeyValue) {\n      defaultSources.push('image_search')\n    }\n\n    // configure cloudinary's uploader's options.\n    // many of these are configurable at the point where the `shared/fields/cloudinary_image` partial is included.\n    var options = {\n      cloud_name: this.cloudNameValue,\n      apiKey: this.apiKeyValue,\n      upload_preset: this.uploadPresetValue,\n      upload_signature: this.getCloudinarySignature.bind(this),\n      multiple: false,\n      sources: this.hasSourcesValue ? this.sourcesValue.split(',') : defaultSources,\n      search_by_rights: this.hasSearchByRightsValue && this.searchByRightsValue === false ? false : true // default to true.\n    }\n    \n    if (this.hasGoogleApiKeyValue) {\n      options['google_api_key'] = this.googleApiKeyValue\n    }\n    \n    // open cloudinary's upload widget.\n    cloudinary.openUploadWidget(options, this.handleWidgetResponse.bind(this))\n  }\n  \n  clearImage(event) {\n    // don't submit the form.\n    event.preventDefault()\n\n    // clear the cloudinary id.\n    this.hiddenFieldTarget.value = null\n    \n    // remove any existing image from the button.\n    this.removeThumbnail()\n  }\n  \n  getCloudinarySignature(callback, paramsToSign) {\n    $.ajax({\n      url: this.signaturesUrlValue,\n      type: \"GET\",\n      dataType: \"text\",\n      data: {data: paramsToSign},\n      complete: function() { console.log(\"complete\") },\n      success: function(signature, textStatus, xhr) { callback(signature) },\n      error: function(xhr, status, error) { console.log(xhr, status, error) }\n    })\n  }\n  \n  handleWidgetResponse(error, response) {\n    // after the user has successfully uploaded a single file ..\n    if (!error && response && response.event === \"success\") { \n      const data = response.info\n      \n      // update the cloudinary id field in the form.\n      this.hiddenFieldTarget.value = data.public_id\n\n      // remove any existing image.\n      this.removeThumbnail()\n\n      // generate a new image preview url.\n      this.addThumbnail(this.urlFormatValue.replace('CLOUDINARY_ID', data.public_id))\n    }\n  }\n  \n  addThumbnail(url) {\n    var $imageElement = $(`<img src=\"${url}\" width=\"${this.widthValue}\" height=\"${this.heightValue}\" data-${this.identifier}-target=\"thumbnail\" />`)\n    $(this.uploadButtonTarget).prepend($imageElement)\n\n    // mark the image as present.\n    this.uploadButtonTarget.classList.add(this.thumbnailShownClass)\n  }\n  \n  removeThumbnail() {\n    if (!this.hasThumbnailTarget) { return }\n    this.uploadButtonTarget.removeChild(this.thumbnailTarget)\n    this.uploadButtonTarget.classList.remove(this.thumbnailShownClass)\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport '@simonwep/pickr/dist/themes/monolith.min.css'\n\nimport Pickr from '@simonwep/pickr';\n\nexport default class extends Controller {\n  static targets = [ \"colorPickerValue\", \"colorField\", \"colorInput\", \"userSelectedColor\", \"colorOptions\" ];\n  static values = { initialColor: String }\n\n  connect() {\n    this.initPluginInstance()\n    this.colorOptions = $(this.colorOptionsTarget).find('button').map(function (_, button) { return $(button).attr('data-color'); }).get()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  pickColor(event) {\n    event.preventDefault();\n\n    const targetEl = event.target;\n    const color = targetEl.dataset.color;\n\n    $(this.colorInputTarget).val(color);\n    $(this.colorPickerValueTarget).val(color);\n    $(this.userSelectedColorTarget).data('color', color);\n    $('.button-color').removeClass('ring-2 ring-offset-2');\n\n    this.pickr.setColor(color);\n\n    targetEl.classList.add('ring-2', 'ring-offset-2');\n  }\n\n  pickRandomColor(event) {\n    event.preventDefault();\n\n    const r = Math.floor(Math.random() * 256);\n    const g = Math.floor(Math.random() * 256);\n    const b = Math.floor(Math.random() * 256);\n\n    this.pickr.setColor(`rgb ${r} ${g} ${b}`);\n    const hexColor = this.pickr.getColor().toHEXA().toString();\n    this.pickr.setColor(hexColor);\n\n    this.showUserSelectedColor(hexColor);\n  }\n\n  showUserSelectedColor(color) {\n    $(this.colorInputTarget).val(color);\n    $(this.colorPickerValueTarget).val(color);\n\n    $('.button-color').removeClass('ring-2 ring-offset-2');\n\n    $(this.userSelectedColorTarget)\n      .addClass('ring-2')\n      .addClass('ring-offset-2')\n      .css('background-color', color)\n      .css('--tw-ring-color', color)\n      .attr('data-color', color)\n      .show();\n  }\n\n  unpickColor(event) {\n    event.preventDefault();\n    $(this.colorPickerValueTarget).val('');\n    $(this.colorInputTarget).val('');\n    $(this.userSelectedColorTarget).hide();\n    $('.button-color').removeClass('ring-2 ring-offset-2');\n  }\n\n  togglePickr(event) {\n    event.preventDefault();\n  }\n\n  initPluginInstance() {\n    this.pickr = Pickr.create({\n      el: '.btn-pickr',\n      theme: 'monolith',\n      useAsButton: true,\n      default: this.initialColorValue || '#1E90FF',\n      components: {\n        // Main components\n        preview: true,\n        hue: true,\n\n        // Input / output Options\n        interaction: {\n          input: true,\n          save: true,\n        },\n      }\n    });\n\n    this.pickr.on('save', (color, _instance) => {\n      const hexaColor = color.toHEXA().toString()\n      if (!this.colorOptions.includes(hexaColor)) {\n        this.showUserSelectedColor(hexaColor);\n      }\n      this.pickr.hide();\n    });\n\n    const that = this\n\n    $('input[type=\"text\"].pcr-result').on('keydown', function (e) {\n      if (e.key === 'Enter') {\n        that.pickr.applyColor(false)\n      }\n    })\n  }\n\n  teardownPluginInstance() {\n    this.pickr.destroy()\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nrequire(\"daterangepicker/daterangepicker.css\");\n\n// requires jQuery, moment, might want to consider a vanilla JS alternative\nimport 'daterangepicker';\n\nexport default class extends Controller {\n  static targets = [ \"field\", \"clearButton\", \"currentTimeZoneWrapper\", \"timeZoneButtons\", \"timeZoneSelectWrapper\", \"timeZoneField\" ]\n  static values = {\n    includeTime: Boolean,\n    defaultTimeZones: Array,\n    cancelButtonLabel: { type: String, default: \"Cancel\" },\n    applyButtonLabel: { type: String, default: \"Apply\" }\n  }\n\n  connect() {\n    this.initPluginInstance()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  clearDate(event) {\n    // don't submit the form, unless it originated from the cancel/clear button\n    event.preventDefault()\n\n    $(this.fieldTarget).val('')\n  }\n\n  applyDateToField(event, picker) {\n    const format = this.includeTimeValue ? 'MM/DD/YYYY h:mm A' : 'MM/DD/YYYY'\n    $(this.fieldTarget).val(picker.startDate.format(format))\n  }\n\n  showTimeZoneButtons(event) {\n    // don't follow the anchor\n    event.preventDefault()\n\n    $(this.currentTimeZoneWrapperTarget).toggleClass('hidden')\n    $(this.timeZoneButtonsTarget).toggleClass('hidden')\n  }\n\n  showTimeZoneSelectWrapper(event) {\n    // don't follow the anchor\n    event.preventDefault()\n\n    $(this.timeZoneButtonsTarget).toggleClass('hidden')\n\n    if (this.hasTimeZoneSelectWrapperTarget) {\n      $(this.timeZoneSelectWrapperTarget).toggleClass('hidden')\n    }\n  }\n\n  resetTimeZoneUI(e) {\n    e && e.preventDefault()\n\n    $(this.currentTimeZoneWrapperTarget).removeClass('hidden')\n    $(this.timeZoneButtonsTarget).addClass('hidden')\n\n    if (this.hasTimeZoneSelectWrapperTarget) {\n      $(this.timeZoneSelectWrapperTarget).addClass('hidden')\n    }\n  }\n\n  setTimeZone(event) {\n    // don't follow the anchor\n    event.preventDefault()\n\n    const currentTimeZoneEl = this.currentTimeZoneWrapperTarget.querySelector('a')\n    const {value} = event.target.dataset\n\n    $(this.timeZoneFieldTarget).val(value)\n    $(currentTimeZoneEl).text(value)\n\n    $('.time-zone-button').removeClass('button').addClass('button-alternative')\n    $(event.target).removeClass('button-alternative').addClass('button')\n\n    this.resetTimeZoneUI()\n  }\n\n  initPluginInstance() {\n    $(this.fieldTarget).daterangepicker({\n      singleDatePicker: true,\n      timePicker: this.includeTimeValue,\n      timePickerIncrement: 5,\n      autoUpdateInput: false,\n      locale: {\n        cancelLabel: this.cancelButtonLabelValue,\n        applyLabel: this.applyButtonLabelValue,\n        format: this.includeTimeValue ? 'MM/DD/YYYY h:mm A' : 'MM/DD/YYYY'\n      }\n    })\n\n    $(this.fieldTarget).on('apply.daterangepicker', this.applyDateToField.bind(this))\n    $(this.fieldTarget).on('cancel.daterangepicker', this.clearDate.bind(this))\n\n    this.pluginMainEl = this.fieldTarget\n    this.plugin = $(this.pluginMainEl).data('daterangepicker') // weird\n\n    // Init time zone select\n    if (this.includeTimeValue && this.hasTimeZoneSelectWrapperTarget) {\n      this.timeZoneSelect = this.timeZoneSelectWrapperTarget.querySelector('select.select2')\n\n      $(this.timeZoneSelect).select2({\n        width: 'style'\n      })\n\n      const self = this\n\n      $(this.timeZoneSelect).on('change.select2', function(event) {\n        const currentTimeZoneEl = self.currentTimeZoneWrapperTarget.querySelector('a')\n        const {value} = event.target\n\n        $(self.timeZoneFieldTarget).val(value)\n        $(currentTimeZoneEl).text(value)\n\n        const selectedOptionTimeZoneButton = $('.selected-option-time-zone-button')\n\n        if (self.defaultTimeZonesValue.includes(value)) {\n          $('.time-zone-button').removeClass('button').addClass('button-alternative')\n          selectedOptionTimeZoneButton.addClass('hidden').attr('hidden', true)\n          $(`a[data-value=\"${value}\"`).removeClass('button-alternative').addClass('button')\n        } else {\n          // deselect any selected button\n          $('.time-zone-button').removeClass('button').addClass('button-alternative')\n\n          selectedOptionTimeZoneButton.text(value)\n          selectedOptionTimeZoneButton.attr('data-value', value).removeAttr('hidden')\n          selectedOptionTimeZoneButton.removeClass(['hidden', 'button-alternative']).addClass('button')\n        }\n\n        self.resetTimeZoneUI()\n      })\n    }\n  }\n\n  teardownPluginInstance() {\n    if (this.plugin === undefined) { return }\n\n    $(this.pluginMainEl).off('apply.daterangepicker')\n    $(this.pluginMainEl).off('cancel.daterangepicker')\n\n    // revert to original markup, remove any event listeners\n    this.plugin.remove()\n\n    if (this.includeTimeValue) {\n      $(this.timeZoneSelect).select2('destroy');\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static targets = [\n    \"fileField\",\n    \"removeFileFlag\",\n    \"downloadFileButton\",\n    \"removeFileButton\",\n    \"selectFileButton\",\n    \"progressBar\",\n  ];\n\n  connect() {\n    // Add upload event listeners\n    const initializeListener = document.addEventListener(\n      \"direct-upload:initialize\",\n      (event) => {\n        this.selectFileButtonTarget.classList.add(\"hidden\");\n        this.progressBarTarget.innerText = \"0%\";\n        this.progressBarTarget.style.width = \"0%\";\n        this.progressBarTarget.setAttribute(\"aria-valuenow\", 0);\n        this.progressBarTarget.parentNode.classList.remove(\"hidden\");\n      }\n    );\n\n    const progressListener = document.addEventListener(\n      \"direct-upload:progress\",\n      (event) => {\n        const { progress } = event.detail;\n        const width = `${progress.toFixed(1)}%`;\n\n        this.progressBarTarget.innerText = width;\n        this.progressBarTarget.setAttribute(\"aria-valuenow\", progress);\n        this.progressBarTarget.style.width = width;\n      }\n    );\n\n    const errorListener = document.addEventListener(\n      \"direct-upload:error\",\n      (event) => {\n        event.preventDefault();\n\n        const { error } = event.detail;\n        this.progressBarTarget.innerText = error;\n      }\n    );\n\n    this.uploadListeners = {\n      \"direct-upload:initialize\": initializeListener,\n      \"direct-upload:progress\": progressListener,\n      \"direct-upload:error\": errorListener,\n    };\n  }\n\n  disconnect() {\n    // Teardown event listeners\n    for (const event in this.uploadListeners) {\n      document.removeEventListener(event, this.uploadListeners[event]);\n    }\n  }\n\n  uploadFile() {\n    this.fileFieldTarget.click();\n  }\n\n  removeFile() {\n    if (this.hasDownloadFileButtonTarget) {\n      this.downloadFileButtonTarget.classList.add(\"hidden\");\n    }\n\n    this.removeFileButtonTarget.classList.add(\"hidden\");\n    this.removeFileFlagTarget.value = true;\n  }\n\n  handleFileSelected() {\n    const statusText = this.selectFileButtonTarget.querySelector(\"span\");\n    const icon = this.selectFileButtonTarget.querySelector(\"i\");\n\n    if (this.hasDownloadFileButtonTarget) {\n      this.downloadFileButtonTarget.remove();\n    }\n\n    statusText.innerText = \"Select Another File\";\n    icon.classList.remove(\"ti-upload\");\n    icon.classList.add(\"ti-check\");\n  }\n}\n","import { Controller } from \"stimulus\";\nimport zxcvbn from \"zxcvbn\";\n\nexport default class extends Controller {\n  static targets = [\"strengthIndicator\"];\n\n  estimateStrength(e) {\n    const result = zxcvbn(e.target.value);\n\n    if (result.feedback && result.feedback.warning.length > 0) {\n      this.strengthIndicatorTarget.innerText = `${result.feedback.warning}.`;\n      this.strengthIndicatorTarget.classList.remove(\"hidden\");\n    } else {\n      this.strengthIndicatorTarget.classList.add(\"hidden\");\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nrequire(\"intl-tel-input/build/css/intlTelInput.css\");\nimport intlTelInput from 'intl-tel-input';\n\nexport default class extends Controller {\n  static targets = [ \"field\" ]\n\n  connect() {\n    this.initPluginInstance()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  initPluginInstance() {\n    let options = {\n      hiddenInput: this.fieldTarget.dataset.method,\n      customContainer: \"w-full\"\n    }\n\n    // TODO: add instructions on how to copy this asset into the application's assets path and write the meta tag into the head (via the engine?)\n    const utilsScriptPath = metaContent(\"intl_tel_input_utils_path\")\n    if (utilsScriptPath) {\n      options['utilsScript'] = utilsScriptPath\n    }\n\n    this.plugin = intlTelInput(this.fieldTarget, options);\n  }\n\n  teardownPluginInstance() {\n    if (this.plugin === undefined) { return }\n\n    // revert to original markup, remove any event listeners\n    this.plugin.destroy()\n  }\n}\n\nfunction metaContent (name) {\n  const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n  return element && element.content\n}","import { Controller } from \"@hotwired/stimulus\"\nrequire(\"select2/dist/css/select2.min.css\");\nimport select2 from \"select2\";\n\nexport default class extends Controller {\n  static targets = [ \"select\" ]\n  static values = {\n    acceptsNew: Boolean,\n    enableSearch: Boolean,\n    searchUrl: String,\n  }\n  \n  // will be reissued as native dom events name prepended with '$' e.g. '$change', '$select2:closing', etc\n  static jQueryEventsToReissue = [ \"change\", \"select2:closing\", \"select2:close\", \"select2:opening\", \"select2:open\", \"select2:selecting\", \"select2:select\", \"select2:unselecting\", \"select2:unselect\", \"select2:clearing\", \"select2:clear\" ]\n  \n\n  initialize() {\n    this.dispatchNativeEvent = this.dispatchNativeEvent.bind(this)\n    if (this.isSelect2LoadedOnWindowJquery) {\n      select2(window.$)\n    }\n  }\n\n  get isSelect2LoadedOnWindowJquery() {\n    return (window.$ !== undefined && window.$.select2 === undefined)\n  }\n\n  connect() {\n    if (this.isSelect2LoadedOnWindowJquery) {\n      this.initPluginInstance()\n    }\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  cleanupBeforeInit() {\n    $(this.element).find('.select2-container--default').remove()\n  }\n\n  initPluginInstance() {\n    let options = {};\n\n    if (!this.enableSearchValue) {\n      options.minimumResultsForSearch = -1;\n    }\n\n    options.tags = this.acceptsNewValue\n\n    if (this.searchUrlValue) {\n      options.ajax = {\n        url: this.searchUrlValue,\n        dataType: 'json',\n        // We enable pagination by default here\n        data: function(params) {\n          var query = {\n            search: params.term,\n            page: params.page || 1\n          }\n          return query\n        }\n        // Any additional params go here...\n      }\n    }\n\n    options.templateResult = this.formatState;\n    options.templateSelection = this.formatState;\n    options.width = 'style';\n\n    this.cleanupBeforeInit() // in case improperly torn down\n    this.pluginMainEl = this.selectTarget // required because this.selectTarget is unavailable on disconnect()\n    $(this.pluginMainEl).select2(options);\n\n    this.initReissuePluginEventsAsNativeEvents()\n  }\n\n  teardownPluginInstance() {\n    if (this.pluginMainEl === undefined) { return }\n\n    // ensure there are no orphaned event handlers\n    this.teardownPluginEventsAsNativeEvents()\n    \n    // revert to original markup, remove any event listeners\n    $(this.pluginMainEl).select2('destroy');\n  }\n\n  initReissuePluginEventsAsNativeEvents() {\n    this.constructor.jQueryEventsToReissue.forEach((eventName) => {\n      $(this.pluginMainEl).on(eventName, this.dispatchNativeEvent)\n    })\n  }\n  \n  teardownPluginEventsAsNativeEvents() {\n    this.constructor.jQueryEventsToReissue.forEach((eventName) => {\n      $(this.pluginMainEl).off(eventName)\n    })\n  }\n  \n  dispatchNativeEvent(event) {\n    const nativeEventName = '$' + event.type // e.g. '$change.select2'\n    this.element.dispatchEvent(new CustomEvent(nativeEventName, { detail: { event: event }, bubbles: true, cancelable: false }))\n  }\n\n  // https://stackoverflow.com/questions/29290389/select2-add-image-icon-to-option-dynamically\n  formatState(opt) {\n    var imageUrl = $(opt.element).attr('data-image');\n    var imageHtml = \"\";\n    if (imageUrl) {\n      imageHtml = '<img src=\"' + imageUrl + '\" /> ';\n    }\n    return $('<span>' + imageHtml + sanitizeHTML(opt.text) + '</span>');\n  }\n}\n\n// https://portswigger.net/web-security/cross-site-scripting/preventing\nfunction sanitizeHTML(str) {\n  return str.replace(/[^\\w. ]/gi, function (c) {\n    return '&#' + c.charCodeAt(0) + ';';\n  });\n};\n","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport ButtonToggleController from './fields/button_toggle_controller'\nimport CloudinaryImageController from './fields/cloudinary_image_controller'\nimport ColorPickerController from './fields/color_picker_controller'\nimport DateController from './fields/date_controller'\nimport FileFieldController from './fields/file_field_controller'\nimport PasswordController from './fields/password_controller'\nimport PhoneController from './fields/phone_controller'\nimport SuperSelectController from './fields/super_select_controller'\n\nexport const controllerDefinitions = [\n  [ButtonToggleController, 'fields/button_toggle_controller.js'],\n  [CloudinaryImageController, 'fields/cloudinary_image_controller.js'],\n  [ColorPickerController, 'fields/color_picker_controller.js'],\n  [DateController, 'fields/date_controller.js'],\n  [FileFieldController, 'fields/file_field_controller.js'],\n  [PasswordController, 'fields/password_controller.js'],\n  [PhoneController, 'fields/phone_controller.js'],\n  [SuperSelectController, 'fields/super_select_controller.js'],\n].map(function(d) {\n  const key = d[1]\n  const controller = d[0]\n  return {\n    identifier: identifierForContextKey(key),\n    controllerConstructor: controller\n  }\n})\n\nexport {\n  ButtonToggleController,\n  CloudinaryImageController,\n  ColorPickerController,\n  DateController,\n  FileFieldController,\n  PasswordController,\n  PhoneController,\n  SuperSelectController,\n}","import Tribute from 'tributejs'\nrequire(\"trix/dist/trix.css\");\n\nrequire(\"trix\")\nrequire(\"@rails/actiontext\")\n\n// only show the editor tool bar when the user is editing the field.\n// inspired by https://github.com/basecamp/trix/issues/343 and `app/assets/stylesheets/account/fields/trix_editor.scss`\n\nexport function trixEditor() {\n  document.addEventListener('trix-initialize', function() {\n    addEventListener(\"trix-focus\", updateTrixToolbarVisability);\n    addEventListener(\"trix-blur\", updateTrixToolbarVisability);\n    updateTrixToolbarVisability();\n    initializeTribute();\n  })\n}\n\nfunction updateTrixToolbarVisability() {\n  document.querySelectorAll(\"trix-editor\").forEach((editorElement, index) => {\n    var toolbarElement = editorElement.toolbarElement;\n    if (editorElement == document.activeElement) {\n      toolbarElement.classList.add('visible');\n    } else {\n      // don't hide the toolbar if we've unfocused to focus on the link dialog.\n      if (!toolbarElement.contains(document.activeElement)) {\n        toolbarElement.classList.remove('visible');\n      }\n    }\n  })\n}\n\nfunction initializeTribute() {\n  document.querySelectorAll(\"trix-editor\").forEach((el, index) => {\n    var editor = el.editor;\n    \n    var mentionConfig = {\n      trigger: '@',\n      values: JSON.parse(editor.element.dataset.mentions),\n      selectTemplate: function (item) {\n        item = item.original;\n        return '<a href=\"' + item.protocol + '://' + item.model + '/' + item.id + '\">' + item.label + '</a>';\n      },\n      menuItemTemplate: function (item) {\n        return '<img src=\"' + item.original.photo + '\" /> ' + item.string;\n      },\n      requireLeadingSpace: true,\n      replaceTextSuffix: ''\n    }\n  \n    var topicConfig = {\n      trigger: '#',\n      values: JSON.parse(editor.element.dataset.topics),\n      selectTemplate: function (item) {\n        item = item.original;\n        return '<a href=\"' + item.protocol + '://' + item.model + '/' + item.id + '\">' + item.label + '</a>';\n      },\n      menuItemTemplate: function (item) {\n        return '<img src=\"' + item.original.photo + '\" /> ' + item.string;\n      },\n      requireLeadingSpace: true,\n      replaceTextSuffix: ''\n    }\n  \n    var tribute = new Tribute({\n      collection: [topicConfig, mentionConfig],\n    });\n  \n    tribute.attach(el);\n  })\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","Controller","clickShadowField","event","preventDefault","this","shadowFieldTarget","click","targets","pickImageAndUpload","defaultSources","hasGoogleApiKeyValue","push","options","cloud_name","cloudNameValue","apiKey","apiKeyValue","upload_preset","uploadPresetValue","upload_signature","getCloudinarySignature","bind","multiple","sources","hasSourcesValue","sourcesValue","split","search_by_rights","hasSearchByRightsValue","searchByRightsValue","googleApiKeyValue","cloudinary","openUploadWidget","handleWidgetResponse","clearImage","hiddenFieldTarget","value","removeThumbnail","callback","paramsToSign","$","ajax","url","signaturesUrlValue","type","dataType","data","complete","console","log","success","signature","textStatus","xhr","error","status","response","info","public_id","addThumbnail","urlFormatValue","$imageElement","widthValue","heightValue","identifier","uploadButtonTarget","prepend","classList","add","thumbnailShownClass","hasThumbnailTarget","removeChild","thumbnailTarget","remove","values","signaturesUrl","String","height","Number","width","cloudName","googleApiKey","urlFormat","searchByRights","Boolean","classes","connect","initPluginInstance","colorOptions","colorOptionsTarget","find","map","_","button","attr","get","disconnect","teardownPluginInstance","pickColor","targetEl","target","color","dataset","colorInputTarget","val","colorPickerValueTarget","userSelectedColorTarget","removeClass","pickr","setColor","pickRandomColor","r","Math","floor","random","g","b","hexColor","getColor","toHEXA","toString","showUserSelectedColor","addClass","css","show","unpickColor","hide","togglePickr","Pickr","create","el","theme","useAsButton","default","initialColorValue","components","preview","hue","interaction","input","save","on","_instance","hexaColor","includes","that","e","applyColor","destroy","initialColor","require","clearDate","fieldTarget","applyDateToField","picker","format","includeTimeValue","startDate","showTimeZoneButtons","currentTimeZoneWrapperTarget","toggleClass","timeZoneButtonsTarget","showTimeZoneSelectWrapper","hasTimeZoneSelectWrapperTarget","timeZoneSelectWrapperTarget","resetTimeZoneUI","setTimeZone","currentTimeZoneEl","querySelector","timeZoneFieldTarget","text","daterangepicker","singleDatePicker","timePicker","timePickerIncrement","autoUpdateInput","locale","cancelLabel","cancelButtonLabelValue","applyLabel","applyButtonLabelValue","pluginMainEl","plugin","timeZoneSelect","select2","self","selectedOptionTimeZoneButton","defaultTimeZonesValue","removeAttr","undefined","off","includeTime","defaultTimeZones","Array","cancelButtonLabel","applyButtonLabel","initializeListener","document","addEventListener","selectFileButtonTarget","progressBarTarget","innerText","style","setAttribute","parentNode","progressListener","progress","detail","toFixed","errorListener","uploadListeners","removeEventListener","uploadFile","fileFieldTarget","removeFile","hasDownloadFileButtonTarget","downloadFileButtonTarget","removeFileButtonTarget","removeFileFlagTarget","handleFileSelected","statusText","icon","estimateStrength","result","zxcvbn","feedback","warning","length","strengthIndicatorTarget","hiddenInput","method","customContainer","utilsScriptPath","name","element","head","content","metaContent","intlTelInput","initialize","dispatchNativeEvent","isSelect2LoadedOnWindowJquery","window","cleanupBeforeInit","enableSearchValue","minimumResultsForSearch","tags","acceptsNewValue","searchUrlValue","params","search","term","page","templateResult","formatState","templateSelection","selectTarget","initReissuePluginEventsAsNativeEvents","teardownPluginEventsAsNativeEvents","constructor","jQueryEventsToReissue","forEach","eventName","dispatchEvent","CustomEvent","bubbles","cancelable","opt","imageUrl","imageHtml","c","charCodeAt","acceptsNew","enableSearch","searchUrl","controllerDefinitions","ButtonToggleController","CloudinaryImageController","ColorPickerController","DateController","FileFieldController","PasswordController","PhoneController","SuperSelectController","d","controller","controllerConstructor","trixEditor","updateTrixToolbarVisability","querySelectorAll","index","editor","mentionConfig","trigger","JSON","parse","mentions","selectTemplate","item","original","protocol","model","id","label","menuItemTemplate","photo","string","requireLeadingSpace","replaceTextSuffix","topicConfig","topics","Tribute","collection","attach","editorElement","toolbarElement","activeElement","contains"],"mappings":"gQAqBA,SAASA,EAAwBC,GAC7B,MAAMC,GAAeD,EAAIE,MAAM,2CAA6C,IAAI,GAChF,GAAID,EACA,OAAOA,EAAYE,QAAQ,KAAM,KAAKA,QAAQ,MAAO,sBCtBhCC,EAG3BC,iBAAiBC,GAEfA,EAAMC,iBAGNC,KAAKC,kBAAkBC,WAPlBC,QAAU,CAAE,+BCDQP,EAe3BQ,mBAAmBN,GAEjBA,EAAMC,iBAGN,IAAIM,EAAiB,CAAC,QAAS,MAAO,UAClCL,KAAKM,sBACPD,EAAeE,KAAK,gBAKtB,IAAIC,EAAU,CACZC,WAAYT,KAAKU,eACjBC,OAAQX,KAAKY,YACbC,cAAeb,KAAKc,kBACpBC,iBAAkBf,KAAKgB,uBAAuBC,KAAKjB,MACnDkB,UAAU,EACVC,QAASnB,KAAKoB,gBAAkBpB,KAAKqB,aAAaC,MAAM,KAAOjB,EAC/DkB,kBAAkBvB,KAAKwB,yBAAuD,IAA7BxB,KAAKyB,qBAGpDzB,KAAKM,uBACPE,EAAO,eAAqBR,KAAK0B,mBAInCC,WAAWC,iBAAiBpB,EAASR,KAAK6B,qBAAqBZ,KAAKjB,OAGtE8B,WAAWhC,GAETA,EAAMC,iBAGNC,KAAK+B,kBAAkBC,MAAQ,KAG/BhC,KAAKiC,kBAGPjB,uBAAuBkB,EAAUC,GAC/BC,EAAEC,KAAK,CACLC,IAAKtC,KAAKuC,mBACVC,KAAM,MACNC,SAAU,OACVC,KAAM,CAACA,KAAMP,GACbQ,SAAU,WAAaC,QAAQC,IAAI,aACnCC,QAAS,SAASC,EAAWC,EAAYC,GAAOf,EAASa,IACzDG,MAAO,SAASD,EAAKE,EAAQD,GAASN,QAAQC,IAAII,EAAKE,EAAQD,MAInErB,qBAAqBqB,EAAOE,GAE1B,IAAKF,GAASE,GAA+B,YAAnBA,EAAStD,MAAqB,CACtD,MAAM4C,EAAOU,EAASC,KAGtBrD,KAAK+B,kBAAkBC,MAAQU,EAAKY,UAGpCtD,KAAKiC,kBAGLjC,KAAKuD,aAAavD,KAAKwD,eAAe7D,QAAQ,gBAAiB+C,EAAKY,aAIxEC,aAAajB,GACX,IAAImB,EAAgBrB,EAAG,aAAYE,aAAetC,KAAK0D,uBAAuB1D,KAAK2D,qBAAqB3D,KAAK4D,oCAC7GxB,EAAEpC,KAAK6D,oBAAoBC,QAAQL,GAGnCzD,KAAK6D,mBAAmBE,UAAUC,IAAIhE,KAAKiE,qBAG7ChC,kBACOjC,KAAKkE,qBACVlE,KAAK6D,mBAAmBM,YAAYnE,KAAKoE,iBACzCpE,KAAK6D,mBAAmBE,UAAUM,OAAOrE,KAAKiE,yBA9FzC9D,QAAU,CAAE,eAAgB,cAAe,eAC3CmE,OAAS,CACdC,cAAeC,OACfC,OAAQC,OACRC,MAAOD,OACPE,UAAWJ,OACX7D,OAAQ6D,OACRK,aAAcL,OACdM,UAAWN,OACXrD,QAASqD,OACTO,eAAgBC,WAEXC,QAAU,CAAE,kCCVQrF,EAI3BsF,UACElF,KAAKmF,qBACLnF,KAAKoF,aAAehD,EAAEpC,KAAKqF,oBAAoBC,KAAK,UAAUC,IAAI,SAAUC,EAAGC,GAAU,OAAOrD,EAAEqD,GAAQC,KAAK,gBAAkBC,MAGnIC,aACE5F,KAAK6F,yBAGPC,UAAUhG,GACRA,EAAMC,iBAEN,MAAMgG,EAAWjG,EAAMkG,OACjBC,EAAQF,EAASG,QAAQD,MAE/B7D,EAAEpC,KAAKmG,kBAAkBC,IAAIH,GAC7B7D,EAAEpC,KAAKqG,wBAAwBD,IAAIH,GACnC7D,EAAEpC,KAAKsG,yBAAyB5D,KAAK,QAASuD,GAC9C7D,EAAE,iBAAiBmE,YAAY,wBAE/BvG,KAAKwG,MAAMC,SAASR,GAEpBF,EAAShC,UAAUC,IAAI,SAAU,iBAGnC0C,gBAAgB5G,GACdA,EAAMC,iBAEN,MAAM4G,EAAIC,KAAKC,MAAsB,IAAhBD,KAAKE,UACpBC,EAAIH,KAAKC,MAAsB,IAAhBD,KAAKE,UACpBE,EAAIJ,KAAKC,MAAsB,IAAhBD,KAAKE,UAE1B9G,KAAKwG,MAAMC,SAAU,OAAME,KAAKI,KAAKC,KACrC,MAAMC,EAAWjH,KAAKwG,MAAMU,WAAWC,SAASC,WAChDpH,KAAKwG,MAAMC,SAASQ,GAEpBjH,KAAKqH,sBAAsBJ,GAG7BI,sBAAsBpB,GACpB7D,EAAEpC,KAAKmG,kBAAkBC,IAAIH,GAC7B7D,EAAEpC,KAAKqG,wBAAwBD,IAAIH,GAEnC7D,EAAE,iBAAiBmE,YAAY,wBAE/BnE,EAAEpC,KAAKsG,yBACJgB,SAAS,UACTA,SAAS,iBACTC,IAAI,mBAAoBtB,GACxBsB,IAAI,kBAAmBtB,GACvBP,KAAK,aAAcO,GACnBuB,OAGLC,YAAY3H,GACVA,EAAMC,iBACNqC,EAAEpC,KAAKqG,wBAAwBD,IAAI,IACnChE,EAAEpC,KAAKmG,kBAAkBC,IAAI,IAC7BhE,EAAEpC,KAAKsG,yBAAyBoB,OAChCtF,EAAE,iBAAiBmE,YAAY,wBAGjCoB,YAAY7H,GACVA,EAAMC,iBAGRoF,qBACEnF,KAAKwG,MAAQoB,EAAMC,OAAO,CACxBC,GAAI,aACJC,MAAO,WACPC,aAAa,EACbC,QAASjI,KAAKkI,mBAAqB,UACnCC,WAAY,CAEVC,SAAS,EACTC,KAAK,EAGLC,YAAa,CACXC,OAAO,EACPC,MAAM,MAKZxI,KAAKwG,MAAMiC,GAAG,OAAQ,CAACxC,EAAOyC,KAC5B,MAAMC,EAAY1C,EAAMkB,SAASC,WAC5BpH,KAAKoF,aAAawD,SAASD,IAC9B3I,KAAKqH,sBAAsBsB,GAE7B3I,KAAKwG,MAAMkB,SAGb,MAAMmB,EAAO7I,KAEboC,EAAE,iCAAiCqG,GAAG,UAAW,SAAUK,GAC3C,UAAVA,EAAEtJ,KACJqJ,EAAKrC,MAAMuC,YAAW,KAK5BlD,yBACE7F,KAAKwG,MAAMwC,aA1GN7I,QAAU,CAAE,mBAAoB,aAAc,aAAc,oBAAqB,kBACjFmE,OAAS,CAAE2E,aAAczE,QCNlC0E,QAAQ,uDAKqBtJ,EAS3BsF,UACElF,KAAKmF,qBAGPS,aACE5F,KAAK6F,yBAGPsD,UAAUrJ,GAERA,EAAMC,iBAENqC,EAAEpC,KAAKoJ,aAAahD,IAAI,IAG1BiD,iBAAiBvJ,EAAOwJ,GACtB,MAAMC,EAASvJ,KAAKwJ,iBAAmB,oBAAsB,aAC7DpH,EAAEpC,KAAKoJ,aAAahD,IAAIkD,EAAOG,UAAUF,OAAOA,IAGlDG,oBAAoB5J,GAElBA,EAAMC,iBAENqC,EAAEpC,KAAK2J,8BAA8BC,YAAY,UACjDxH,EAAEpC,KAAK6J,uBAAuBD,YAAY,UAG5CE,0BAA0BhK,GAExBA,EAAMC,iBAENqC,EAAEpC,KAAK6J,uBAAuBD,YAAY,UAEtC5J,KAAK+J,gCACP3H,EAAEpC,KAAKgK,6BAA6BJ,YAAY,UAIpDK,gBAAgBnB,GACdA,GAAKA,EAAE/I,iBAEPqC,EAAEpC,KAAK2J,8BAA8BpD,YAAY,UACjDnE,EAAEpC,KAAK6J,uBAAuBvC,SAAS,UAEnCtH,KAAK+J,gCACP3H,EAAEpC,KAAKgK,6BAA6B1C,SAAS,UAIjD4C,YAAYpK,GAEVA,EAAMC,iBAEN,MAAMoK,EAAoBnK,KAAK2J,6BAA6BS,cAAc,MACpEpI,MAACA,GAASlC,EAAMkG,OAAOE,QAE7B9D,EAAEpC,KAAKqK,qBAAqBjE,IAAIpE,GAChCI,EAAE+H,GAAmBG,KAAKtI,GAE1BI,EAAE,qBAAqBmE,YAAY,UAAUe,SAAS,sBACtDlF,EAAEtC,EAAMkG,QAAQO,YAAY,sBAAsBe,SAAS,UAE3DtH,KAAKiK,kBAGP9E,qBAoBE,GAnBA/C,EAAEpC,KAAKoJ,aAAamB,gBAAgB,CAClCC,kBAAkB,EAClBC,WAAYzK,KAAKwJ,iBACjBkB,oBAAqB,EACrBC,iBAAiB,EACjBC,OAAQ,CACNC,YAAa7K,KAAK8K,uBAClBC,WAAY/K,KAAKgL,sBACjBzB,OAAQvJ,KAAKwJ,iBAAmB,oBAAsB,gBAI1DpH,EAAEpC,KAAKoJ,aAAaX,GAAG,wBAAyBzI,KAAKqJ,iBAAiBpI,KAAKjB,OAC3EoC,EAAEpC,KAAKoJ,aAAaX,GAAG,yBAA0BzI,KAAKmJ,UAAUlI,KAAKjB,OAErEA,KAAKiL,aAAejL,KAAKoJ,YACzBpJ,KAAKkL,OAAS9I,EAAEpC,KAAKiL,cAAcvI,KAAK,mBAGpC1C,KAAKwJ,kBAAoBxJ,KAAK+J,+BAAgC,CAChE/J,KAAKmL,eAAiBnL,KAAKgK,4BAA4BI,cAAc,kBAErEhI,EAAEpC,KAAKmL,gBAAgBC,QAAQ,CAC7BzG,MAAO,UAGT,MAAM0G,EAAOrL,KAEboC,EAAEpC,KAAKmL,gBAAgB1C,GAAG,iBAAkB,SAAS3I,GACnD,MAAMqK,EAAoBkB,EAAK1B,6BAA6BS,cAAc,MACpEpI,MAACA,GAASlC,EAAMkG,OAEtB5D,EAAEiJ,EAAKhB,qBAAqBjE,IAAIpE,GAChCI,EAAE+H,GAAmBG,KAAKtI,GAE1B,MAAMsJ,EAA+BlJ,EAAE,qCAEnCiJ,EAAKE,sBAAsB3C,SAAS5G,IACtCI,EAAE,qBAAqBmE,YAAY,UAAUe,SAAS,sBACtDgE,EAA6BhE,SAAS,UAAU5B,KAAK,UAAU,GAC/DtD,EAAG,iBAAgBJ,MAAUuE,YAAY,sBAAsBe,SAAS,YAGxElF,EAAE,qBAAqBmE,YAAY,UAAUe,SAAS,sBAEtDgE,EAA6BhB,KAAKtI,GAClCsJ,EAA6B5F,KAAK,aAAc1D,GAAOwJ,WAAW,UAClEF,EAA6B/E,YAAY,CAAC,SAAU,uBAAuBe,SAAS,WAGtF+D,EAAKpB,qBAKXpE,8BACsB4F,IAAhBzL,KAAKkL,SAET9I,EAAEpC,KAAKiL,cAAcS,IAAI,yBACzBtJ,EAAEpC,KAAKiL,cAAcS,IAAI,0BAGzB1L,KAAKkL,OAAO7G,SAERrE,KAAKwJ,kBACPpH,EAAEpC,KAAKmL,gBAAgBC,QAAQ,eA5I5BjL,QAAU,CAAE,QAAS,cAAe,yBAA0B,kBAAmB,wBAAyB,mBAC1GmE,OAAS,CACdqH,YAAa3G,QACb4G,iBAAkBC,MAClBC,kBAAmB,CAAEtJ,KAAMgC,OAAQyD,QAAS,UAC5C8D,iBAAkB,CAAEvJ,KAAMgC,OAAQyD,QAAS,0BCVlBrI,EAU3BsF,UAEE,MAAM8G,EAAqBC,SAASC,iBAClC,2BACCpM,IACCE,KAAKmM,uBAAuBpI,UAAUC,IAAI,UAC1ChE,KAAKoM,kBAAkBC,UAAY,KACnCrM,KAAKoM,kBAAkBE,MAAM3H,MAAQ,KACrC3E,KAAKoM,kBAAkBG,aAAa,gBAAiB,GACrDvM,KAAKoM,kBAAkBI,WAAWzI,UAAUM,OAAO,YAIjDoI,EAAmBR,SAASC,iBAChC,yBACCpM,IACC,MAAM4M,SAAEA,GAAa5M,EAAM6M,OACrBhI,EAAS,GAAE+H,EAASE,QAAQ,MAElC5M,KAAKoM,kBAAkBC,UAAY1H,EACnC3E,KAAKoM,kBAAkBG,aAAa,gBAAiBG,GACrD1M,KAAKoM,kBAAkBE,MAAM3H,MAAQA,IAInCkI,EAAgBZ,SAASC,iBAC7B,sBACCpM,IACCA,EAAMC,iBAEN,MAAMmD,MAAEA,GAAUpD,EAAM6M,OACxB3M,KAAKoM,kBAAkBC,UAAYnJ,IAIvClD,KAAK8M,gBAAkB,CACrB,2BAA4Bd,EAC5B,yBAA0BS,EAC1B,sBAAuBI,GAI3BjH,aAEE,IAAK,MAAM9F,UAAcgN,gBACvBb,SAASc,oBAAoBjN,EAAOE,KAAK8M,gBAAgBhN,IAI7DkN,aACEhN,KAAKiN,gBAAgB/M,QAGvBgN,aACMlN,KAAKmN,6BACPnN,KAAKoN,yBAAyBrJ,UAAUC,IAAI,UAG9ChE,KAAKqN,uBAAuBtJ,UAAUC,IAAI,UAC1ChE,KAAKsN,qBAAqBtL,OAAQ,EAGpCuL,qBACE,MAAMC,EAAaxN,KAAKmM,uBAAuB/B,cAAc,QACvDqD,EAAOzN,KAAKmM,uBAAuB/B,cAAc,KAEnDpK,KAAKmN,6BACPnN,KAAKoN,yBAAyB/I,SAGhCmJ,EAAWnB,UAAY,sBACvBoB,EAAK1J,UAAUM,OAAO,aACtBoJ,EAAK1J,UAAUC,IAAI,eAjFd7D,QAAU,CACf,YACA,iBACA,qBACA,mBACA,mBACA,+BCNyBP,EAG3B8N,iBAAiB5E,GACf,MAAM6E,EAASC,EAAO9E,EAAE9C,OAAOhE,OAE3B2L,EAAOE,UAAYF,EAAOE,SAASC,QAAQC,OAAS,GACtD/N,KAAKgO,wBAAwB3B,UAAa,GAAEsB,EAAOE,SAASC,WAC5D9N,KAAKgO,wBAAwBjK,UAAUM,OAAO,WAE9CrE,KAAKgO,wBAAwBjK,UAAUC,IAAI,aATxC7D,QAAU,CAAC,qBCHpB+I,QAAQ,6DAGqBtJ,EAG3BsF,UACElF,KAAKmF,qBAGPS,aACE5F,KAAK6F,yBAGPV,qBACE,IAAI3E,EAAU,CACZyN,YAAajO,KAAKoJ,YAAYlD,QAAQgI,OACtCC,gBAAiB,UAInB,MAAMC,EAgBV,SAAsBC,GACpB,MAAMC,EAAUrC,SAASsC,KAAKnE,cAAe,0CAC7C,OAAOkE,GAAWA,EAAQE,QAlBAC,GACpBL,IACF5N,EAAO,YAAkB4N,GAG3BpO,KAAKkL,OAASwD,EAAa1O,KAAKoJ,YAAa5I,GAG/CqF,8BACsB4F,IAAhBzL,KAAKkL,QAGTlL,KAAKkL,OAAOlC,aA7BP7I,QAAU,CAAE,SCJrB+I,QAAQ,oDAGqBtJ,EAY3B+O,aACE3O,KAAK4O,oBAAsB5O,KAAK4O,oBAAoB3N,KAAKjB,MACrDA,KAAK6O,+BACPzD,EAAQ0D,OAAO1M,GAIfyM,oCACF,YAAqBpD,IAAbqD,OAAO1M,QAAwCqJ,IAArBqD,OAAO1M,EAAEgJ,QAG7ClG,UACMlF,KAAK6O,+BACP7O,KAAKmF,qBAITS,aACE5F,KAAK6F,yBAGPkJ,oBACE3M,EAAEpC,KAAKsO,SAAShJ,KAAK,+BAA+BjB,SAGtDc,qBACE,IAAI3E,EAAU,GAETR,KAAKgP,oBACRxO,EAAQyO,yBAA2B,GAGrCzO,EAAQ0O,KAAOlP,KAAKmP,gBAEhBnP,KAAKoP,iBACP5O,EAAQ6B,KAAO,CACbC,IAAKtC,KAAKoP,eACV3M,SAAU,OAEVC,KAAM,SAAS2M,GAKb,MAJY,CACVC,OAAQD,EAAOE,KACfC,KAAMH,EAAOG,MAAQ,MAQ7BhP,EAAQiP,eAAiBzP,KAAK0P,YAC9BlP,EAAQmP,kBAAoB3P,KAAK0P,YACjClP,EAAQmE,MAAQ,QAEhB3E,KAAK+O,oBACL/O,KAAKiL,aAAejL,KAAK4P,aACzBxN,EAAEpC,KAAKiL,cAAcG,QAAQ5K,GAE7BR,KAAK6P,wCAGPhK,8BAC4B4F,IAAtBzL,KAAKiL,eAGTjL,KAAK8P,qCAGL1N,EAAEpC,KAAKiL,cAAcG,QAAQ,YAG/ByE,wCACE7P,KAAK+P,YAAYC,sBAAsBC,QAASC,IAC9C9N,EAAEpC,KAAKiL,cAAcxC,GAAGyH,EAAWlQ,KAAK4O,uBAI5CkB,qCACE9P,KAAK+P,YAAYC,sBAAsBC,QAASC,IAC9C9N,EAAEpC,KAAKiL,cAAcS,IAAIwE,KAI7BtB,oBAAoB9O,GAElBE,KAAKsO,QAAQ6B,cAAc,IAAIC,YADP,IAAMtQ,EAAM0C,KACwB,CAAEmK,OAAQ,CAAE7M,MAAOA,GAASuQ,SAAS,EAAMC,YAAY,KAIrHZ,YAAYa,GACV,IAAIC,EAAWpO,EAAEmO,EAAIjC,SAAS5I,KAAK,cAC/B+K,EAAY,GAIhB,OAHID,IACFC,EAAY,aAAeD,EAAW,SAEjCpO,EAAE,SAAWqO,EAAyBF,EAAIjG,KAMxC3K,QAAQ,YAAa,SAAU+Q,GACxC,MAAO,KAAOA,EAAEC,WAAW,GAAK,MAPyB,cA1GpDxQ,QAAU,CAAE,YACZmE,OAAS,CACdsM,WAAY5L,QACZ6L,aAAc7L,QACd8L,UAAWtM,UAINwL,sBAAwB,CAAE,SAAU,kBAAmB,gBAAiB,kBAAmB,eAAgB,oBAAqB,iBAAkB,sBAAuB,mBAAoB,mBAAoB,iBCF7Me,MAAAA,EAAwB,CACnC,CAACC,EAAwB,sCACzB,CAACC,EAA2B,yCAC5B,CAACC,EAAuB,qCACxB,CAACC,EAAgB,6BACjB,CAACC,EAAqB,mCACtB,CAACC,EAAoB,iCACrB,CAACC,EAAiB,8BAClB,CAACC,EAAuB,sCACxBhM,IAAI,SAASiM,GACb,MACMC,EAAaD,EAAE,GACrB,MAAO,CACL5N,WAAYrE,EAHFiS,EAAE,IAIZE,sBAAuBD,cChBXE,IACd1F,SAASC,iBAAiB,kBAAmB,WAC3CA,iBAAiB,aAAc0F,GAC/B1F,iBAAiB,YAAa0F,GAC9BA,IAoBF3F,SAAS4F,iBAAiB,eAAe5B,QAAQ,CAACnI,EAAIgK,KACpD,IAAIC,EAASjK,EAAGiK,OAEZC,EAAgB,CAClBC,QAAS,IACT3N,OAAQ4N,KAAKC,MAAMJ,EAAOzD,QAAQpI,QAAQkM,UAC1CC,eAAgB,SAAUC,GAExB,MAAO,aADPA,EAAOA,EAAKC,UACcC,SAAW,MAAQF,EAAKG,MAAQ,IAAMH,EAAKI,GAAK,KAAOJ,EAAKK,MAAQ,QAEhGC,iBAAkB,SAAUN,GAC1B,MAAO,aAAeA,EAAKC,SAASM,MAAQ,QAAUP,EAAKQ,QAE7DC,qBAAqB,EACrBC,kBAAmB,IAGjBC,EAAc,CAChBhB,QAAS,IACT3N,OAAQ4N,KAAKC,MAAMJ,EAAOzD,QAAQpI,QAAQgN,QAC1Cb,eAAgB,SAAUC,GAExB,MAAO,aADPA,EAAOA,EAAKC,UACcC,SAAW,MAAQF,EAAKG,MAAQ,IAAMH,EAAKI,GAAK,KAAOJ,EAAKK,MAAQ,QAEhGC,iBAAkB,SAAUN,GAC1B,MAAO,aAAeA,EAAKC,SAASM,MAAQ,QAAUP,EAAKQ,QAE7DC,qBAAqB,EACrBC,kBAAmB,IAGP,IAAIG,EAAQ,CACxBC,WAAY,CAACH,EAAajB,KAGpBqB,OAAOvL,OAlDnB,SAAS8J,IACP3F,SAAS4F,iBAAiB,eAAe5B,QAAQ,CAACqD,EAAexB,KAC/D,IAAIyB,EAAiBD,EAAcC,eAC/BD,GAAiBrH,SAASuH,cAC5BD,EAAexP,UAAUC,IAAI,WAGxBuP,EAAeE,SAASxH,SAASuH,gBACpCD,EAAexP,UAAUM,OAAO,aAzBxC6E,QAAQ,sBAERA,QAAQ,QACRA,QAAQ"}