{"version":3,"sources":["webpack:///./ref/constants.js","webpack:///projects/commits/components/author_select.vue","webpack:///./projects/commits/components/author_select.vue?3dea","webpack:///./projects/commits/components/author_select.vue?d9f8","webpack:///./projects/commits/components/author_select.vue","webpack:///./projects/commits/store/actions.js","webpack:///./projects/commits/store/mutation_types.js","webpack:///./projects/commits/store/mutations.js","webpack:///./projects/commits/store/index.js","webpack:///./projects/commits/store/state.js","webpack:///./projects/commits/index.js","webpack:///./pages/projects/commits/show/index.js","webpack:///./commits.js","webpack:////build/source/vendor/assets/javascripts/jquery.endless-scroll.js","webpack:///./pager.js","webpack:///./ref/stores/mutation_types.js","webpack:///./ref/stores/actions.js","webpack:///./ref/stores/getters.js","webpack:///./ref/stores/mutations.js","webpack:///./ref/stores/index.js","webpack:///./ref/stores/state.js","webpack:///./lib/utils/http_status.js","webpack:///./loading_icon_for_legacy_js.js","webpack:///./ref/components/ambiguous_ref_modal.vue?5230","webpack:///ref/components/ambiguous_ref_modal.vue","webpack:///./ref/components/ambiguous_ref_modal.vue?b76c","webpack:///./ref/components/ambiguous_ref_modal.vue","webpack:///./ref/init_ambiguous_ref_modal.js","webpack:///./gpg_badges.js","webpack:///./ref/format_refs.js","webpack:///ref/components/ref_selector.vue","webpack:///./ref/components/ref_selector.vue?1e36","webpack:///./ref/components/ref_selector.vue?3221","webpack:///./ref/components/ref_selector.vue","webpack:///./render_vue_component_for_legacy_js.js","webpack:///./users_select/constants.js"],"names":["REF_TYPE_BRANCHES","REF_TYPE_TAGS","REF_TYPE_COMMITS","ALL_REF_TYPES","Object","freeze","BRANCH_REF_TYPE","TAG_REF_TYPE","TAG_REF_TYPE_ICON","BRANCH_REF_TYPE_ICON","REF_TYPE_PARAM_NAME","X_TOTAL_HEADER","SEARCH_DEBOUNCE_MS","DEFAULT_DEBOUNCE_AND_THROTTLE_MS","DEFAULT_I18N","defaultLabelText","__","dropdownHeader","searchPlaceholder","noResultsWithQuery","noResults","branchesErrorMessage","tagsErrorMessage","commitsErrorMessage","branches","tags","commits","noRefSelected","totalCountLabel","s__","tooltipMessage","name","components","GlAvatar","GlCollapsibleListbox","directives","GlTooltip","GlTooltipDirective","props","projectCommitsEl","type","HTMLDivElement","required","data","hasSearchParam","currentAuthor","searchTerm","searching","computed","mapState","dropdownText","dropdownItems","commitAuthorOptions","commitsAuthors","map","author","value","text","secondaryText","username","avatarUrl","avatar_url","options","textSrOnly","tooltipTitle","searchSummarySrText","n__","length","mounted","_this","fetchAuthors","params","queryToObject","window","location","search","searchParam","authorParam","commitsSearchInput","querySelector","setAttribute","dataset","toggle","addEventListener","_debounce","event","setSearchParam","target","methods","mapActions","selectAuthor","user","commitListElement","style","opacity","transition","visitUrl","commitsPath","searchAuthors","handleSearch","input","Boolean","_vm","this","_c","_self","rawName","ref","attrs","staticClass","on","scopedSlots","_u","key","fn","_v","_s","proxy","item","_e","model","callback","$$v","expression","setInitialData","commit","receiveAuthorsSuccess","authors","receiveAuthorsError","createAlert","message","dispatch","state","projectId","axios","get","joinPaths","gon","relative_url_root","project_id","states","ACTIVE_AND_BLOCKED_USER_STATES","then","catch","error","Sentry","assign","Vue","use","Vuex","Store","actions","mutations","el","constructor","limit","timer","$contentList","$","Pager","init","parseInt","prepareData","processCommits","bind","content","searchField","lastSearch","val","initSearch","clearTimeout","setTimeout","filterResults","_this2","form","Promise","resolve","commitsUrl","attr","serialize","addClass","serializeArray","reduce","acc","obj","html","removeClass","history","replaceState","page","document","title","processedData","$processedData","$commitsHeadersLast","find","last","lastShownDay","loadedShownDayFirst","filter","first","commitsCount","nextUntil","not","Number","localTimeAgo","commitsLimit","addShortcutsExtension","ShortcutsNavigation","GpgBadges","fetch","getElementById","store","render","h","AuthorSelectApp","_commitsPath$match","refType","treePath","commitsPathPrefix","match","generateRefDestinationUrl","selectedRef","selectedRefType","selectedRefURI","encodeURIComponent","selectedTreePath","encodeSaferUrl","commitsPathSuffix","useSymbolicRefNames","createElement","RefSelector","queryParams","sort","selected","matches","initCommitsRefSwitcher","initAmbiguousRefModal","endlessScroll","extend","bottomPixels","fireOnce","loader","insertAfter","resetCounter","ceaseFire","is_scrollable","firing","fired","fireSequence","apply","scroll","height","scrollTop","inner_wrap","wrapInner","after","remove","preload","disable","noop","successCallback","errorCallback","container","offset","getParameterByName","$container","$loading","getOld","initLoadMore","show","url","removeParams","append","count","isScrollable","hide","err","finally","$w","off","fireDelay","is","setEnabledRefTypes","refTypes","setParams","setUseSymbolicRefNames","setProjectId","setSelectedRef","query","dispatchIfRefTypeEnabled","action","enabledRefTypes","includes","searchBranches","Api","response","searchTags","searchCommits","getters","isQueryPossiblyASha","test","isLoading","requestCount","list","convertObjectPropsToCamelCase","b","undefined","default","protected","totalCount","headers","shortId","id","subtitle","_error$response","status","HTTP_STATUS_NOT_FOUND","createRefModule","namespaced","HTTP_STATUS_ABORTED","HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_NO_CONTENT","HTTP_STATUS_BAD_REQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_FORBIDDEN","HTTP_STATUS_CONFLICT","HTTP_STATUS_GONE","HTTP_STATUS_PAYLOAD_TOO_LARGE","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_TOO_MANY_REQUESTS","HTTP_STATUS_INTERNAL_SERVER_ERROR","successCodes","defaultValue","prop","_GlLoadingIcon$props$","GlLoadingIcon","loadingIconForLegacyJS","inline","color","size","classes","label","renderVueComponentForLegacyJS","class","i18n","description","sprintf","secondaryDescription","viewTagButton","viewBranchButton","tagRefType","branchRefType","GlModal","GlButton","GlSprintf","refName","String","$refs","ambiguousRefModal","navigate","URL","href","searchParams","set","toString","$options","isRefTypeSet","parseBoolean","ambiguous","AmbiguousRefModal","tag","badges","children","displayError","endpoint","reject","Error","signatures","forEach","signature","commit_sha","replaceWith","convertToListBoxItems","items","GlBadge","GlIcon","ProtectedBadge","inheritAttrs","disabled","Array","validator","_isArray","every","Set","translations","toggleButtonClass","lastQuery","mapGetters","listBoxItems","addToFinalResult","header","push","formatListBoxItems","extendedToggleButtonClass","isArray","footerSlotProps","errors","errorsList","formatErrors","selectedRefForDisplay","replace","buttonText","noResultsMessage","dropdownIcon","icon","watch","immediate","handler","beforeCreate","$store","createStore","created","debouncedSearch","$watch","storeSearch","onSearchBoxInput","searchQuery","trim","selectRef","$emit","totalCountText","component","_g","_b","$event","group","_t","_l","errorMessage","$attrs","$listeners","domProps","Component","vm","$mount","$forceUpdate","$el","cloneNode","$destroy","AJAX_USERS_SELECT_PARAMS_MAP","group_id","todo_filter","todo_state_filter","current_user","author_id"],"mappings":"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","file":"pages.projects.commits.show.146d08c3.chunk.js","sourcesContent":["import { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';\nimport { s__, __ } from '~/locale';\n\nexport const REF_TYPE_BRANCHES = 'REF_TYPE_BRANCHES';\nexport const REF_TYPE_TAGS = 'REF_TYPE_TAGS';\nexport const REF_TYPE_COMMITS = 'REF_TYPE_COMMITS';\nexport const ALL_REF_TYPES = Object.freeze([REF_TYPE_BRANCHES, REF_TYPE_TAGS, REF_TYPE_COMMITS]);\nexport const BRANCH_REF_TYPE = 'heads';\nexport const TAG_REF_TYPE = 'tags';\nexport const TAG_REF_TYPE_ICON = 'tag';\nexport const BRANCH_REF_TYPE_ICON = 'branch';\nexport const SEARCH_ICON = 'search';\nexport const REF_TYPE_PARAM_NAME = 'ref_type';\n\nexport const X_TOTAL_HEADER = 'x-total';\n\nexport const SEARCH_DEBOUNCE_MS = DEFAULT_DEBOUNCE_AND_THROTTLE_MS;\n\nexport const DEFAULT_I18N = Object.freeze({\n  defaultLabelText: __('default'),\n  dropdownHeader: __('Select Git revision'),\n  searchPlaceholder: __('Search by Git revision'),\n  noResultsWithQuery: __('No matching results for \"%{query}\"'),\n  noResults: __('No matching results'),\n  branchesErrorMessage: __('An error occurred while fetching branches. Retry the search.'),\n  tagsErrorMessage: __('An error occurred while fetching tags. Retry the search.'),\n  commitsErrorMessage: __('An error occurred while fetching commits. Retry the search.'),\n  branches: __('Branches'),\n  tags: __('Tags'),\n  commits: __('Commits'),\n  noRefSelected: __('No ref selected'),\n  totalCountLabel: s__('TotalRefCountIndicator|1000+'),\n});\n","<script>\nimport { GlAvatar, GlCollapsibleListbox, GlTooltipDirective } from '@gitlab/ui';\nimport { debounce } from 'lodash';\n// eslint-disable-next-line no-restricted-imports\nimport { mapActions, mapState } from 'vuex';\nimport { queryToObject, visitUrl } from '~/lib/utils/url_utility';\nimport { n__, __ } from '~/locale';\nimport { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';\n\nconst tooltipMessage = __('Searching by both author and message is currently not supported.');\n\nexport default {\n  name: 'AuthorSelect',\n  components: {\n    GlAvatar,\n    GlCollapsibleListbox,\n  },\n  directives: {\n    GlTooltip: GlTooltipDirective,\n  },\n  props: {\n    projectCommitsEl: {\n      type: HTMLDivElement,\n      required: true,\n    },\n  },\n  data() {\n    return {\n      hasSearchParam: false,\n      currentAuthor: '',\n      searchTerm: '',\n      searching: false,\n    };\n  },\n  computed: {\n    ...mapState(['commitsPath', 'commitsAuthors']),\n    dropdownText() {\n      return this.currentAuthor || __('Author');\n    },\n    dropdownItems() {\n      const commitAuthorOptions = this.commitsAuthors.map((author) => ({\n        value: author.name,\n        text: author.name,\n        secondaryText: author.username,\n        avatarUrl: author.avatar_url,\n      }));\n      if (this.searchTerm) return commitAuthorOptions;\n\n      const defaultOptions = {\n        text: '',\n        options: [{ text: __('Any Author'), value: '' }],\n        textSrOnly: true,\n      };\n      const authorOptionsGroup = {\n        text: 'authors',\n        options: commitAuthorOptions,\n        textSrOnly: true,\n      };\n      return [defaultOptions, authorOptionsGroup];\n    },\n    tooltipTitle() {\n      return this.hasSearchParam && tooltipMessage;\n    },\n    searchSummarySrText() {\n      return n__('%d author', '%d authors', this.commitsAuthors.length);\n    },\n  },\n  mounted() {\n    this.fetchAuthors();\n    const params = queryToObject(window.location.search);\n    const { search: searchParam, author: authorParam } = params;\n    const commitsSearchInput = this.projectCommitsEl.querySelector('#commits-search');\n\n    if (authorParam) {\n      commitsSearchInput.setAttribute('disabled', true);\n      commitsSearchInput.dataset.toggle = 'tooltip';\n      commitsSearchInput.setAttribute('title', tooltipMessage);\n      this.currentAuthor = authorParam;\n    }\n\n    if (searchParam) {\n      this.hasSearchParam = true;\n    }\n\n    commitsSearchInput.addEventListener(\n      'keyup',\n      debounce((event) => this.setSearchParam(event.target.value), 500), // keyup & time is to match effect of \"filter by commit message\"\n    );\n  },\n  methods: {\n    ...mapActions(['fetchAuthors']),\n    selectAuthor(user) {\n      // Follow up issue \"Remove usage of $.fadeIn from the codebase\"\n      // > https://gitlab.com/gitlab-org/gitlab/-/issues/214395\n\n      // Follow up issue \"Refactor commit list to a Vue Component\"\n      // To resolving mixing Vue + Vanilla JS\n      // > https://gitlab.com/gitlab-org/gitlab/-/issues/214010\n      const commitListElement = this.projectCommitsEl.querySelector('#commits-list');\n\n      // To mimick effect of \"filter by commit message\"\n      commitListElement.style.opacity = 0.5;\n      commitListElement.style.transition = 'opacity 200ms';\n\n      if (!user) {\n        return visitUrl(this.commitsPath);\n      }\n\n      return visitUrl(`${this.commitsPath}?author=${user}`);\n    },\n    searchAuthors: debounce(async function debouncedSearch() {\n      this.searching = true;\n      await this.fetchAuthors(this.searchTerm);\n      this.searching = false;\n    }, DEFAULT_DEBOUNCE_AND_THROTTLE_MS),\n    handleSearch(input) {\n      this.searchTerm = input;\n      this.searchAuthors();\n    },\n    setSearchParam(value) {\n      this.hasSearchParam = Boolean(value);\n    },\n  },\n};\n</script>\n\n<template>\n  <div ref=\"listboxContainer\" v-gl-tooltip :title=\"tooltipTitle\" :disabled=\"!hasSearchParam\">\n    <gl-collapsible-listbox\n      v-model=\"currentAuthor\"\n      block\n      is-check-centered\n      searchable\n      class=\"gl-mt-3 sm:gl-mt-0\"\n      :items=\"dropdownItems\"\n      :header-text=\"__('Search by author')\"\n      :toggle-text=\"dropdownText\"\n      :search-placeholder=\"__('Search')\"\n      :searching=\"searching\"\n      :disabled=\"hasSearchParam\"\n      @search=\"handleSearch\"\n      @select=\"selectAuthor\"\n    >\n      <template #search-summary-sr-only>\n        {{ searchSummarySrText }}\n      </template>\n      <template #list-item=\"{ item }\">\n        <span class=\"gl-flex gl-items-center\">\n          <gl-avatar\n            v-if=\"item.avatarUrl\"\n            class=\"gl-mr-3\"\n            :size=\"32\"\n            :entity-name=\"item.text\"\n            :src=\"item.avatarUrl\"\n            :alt=\"item.text\"\n          />\n          <span class=\"gl-flex gl-flex-col gl-overflow-hidden gl-hyphens-auto gl-break-words\">\n            {{ item.text }}\n            <span v-if=\"item.secondaryText\" class=\"gl-text-subtle\">\n              {{ item.secondaryText }}\n            </span>\n          </span>\n        </span>\n      </template>\n    </gl-collapsible-listbox>\n  </div>\n</template>\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./author_select.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./author_select.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./author_select.vue?vue&type=template&id=0f52a20e\"\nimport script from \"./author_select.vue?vue&type=script&lang=js\"\nexport * from \"./author_select.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip\"}],ref:\"listboxContainer\",attrs:{\"title\":_vm.tooltipTitle,\"disabled\":!_vm.hasSearchParam}},[_c('gl-collapsible-listbox',{staticClass:\"gl-mt-3 sm:gl-mt-0\",attrs:{\"block\":\"\",\"is-check-centered\":\"\",\"searchable\":\"\",\"items\":_vm.dropdownItems,\"header-text\":_vm.__('Search by author'),\"toggle-text\":_vm.dropdownText,\"search-placeholder\":_vm.__('Search'),\"searching\":_vm.searching,\"disabled\":_vm.hasSearchParam},on:{\"search\":_vm.handleSearch,\"select\":_vm.selectAuthor},scopedSlots:_vm._u([{key:\"search-summary-sr-only\",fn:function(){return [_vm._v(\"\\n      \"+_vm._s(_vm.searchSummarySrText)+\"\\n    \")]},proxy:true},{key:\"list-item\",fn:function({ item }){return [_c('span',{staticClass:\"gl-flex gl-items-center\"},[(item.avatarUrl)?_c('gl-avatar',{staticClass:\"gl-mr-3\",attrs:{\"size\":32,\"entity-name\":item.text,\"src\":item.avatarUrl,\"alt\":item.text}}):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"gl-flex gl-flex-col gl-overflow-hidden gl-hyphens-auto gl-break-words\"},[_vm._v(\"\\n          \"+_vm._s(item.text)+\"\\n          \"),(item.secondaryText)?_c('span',{staticClass:\"gl-text-subtle\"},[_vm._v(\"\\n            \"+_vm._s(item.secondaryText)+\"\\n          \")]):_vm._e()])],1)]}}]),model:{value:(_vm.currentAuthor),callback:function ($$v) {_vm.currentAuthor=$$v},expression:\"currentAuthor\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import * as Sentry from '~/sentry/sentry_browser_wrapper';\nimport { createAlert } from '~/alert';\nimport axios from '~/lib/utils/axios_utils';\nimport { joinPaths } from '~/lib/utils/url_utility';\nimport { __ } from '~/locale';\nimport { ACTIVE_AND_BLOCKED_USER_STATES } from '~/users_select/constants';\nimport * as types from './mutation_types';\n\nexport default {\n  setInitialData({ commit }, data) {\n    commit(types.SET_INITIAL_DATA, data);\n  },\n  receiveAuthorsSuccess({ commit }, authors) {\n    commit(types.COMMITS_AUTHORS, authors);\n  },\n  receiveAuthorsError() {\n    createAlert({\n      message: __('An error occurred fetching the project authors.'),\n    });\n  },\n  fetchAuthors({ dispatch, state }, author = null) {\n    const { projectId } = state;\n    return axios\n      .get(joinPaths(gon.relative_url_root || '', '/-/autocomplete/users.json'), {\n        params: {\n          project_id: projectId,\n          states: ACTIVE_AND_BLOCKED_USER_STATES,\n          search: author,\n        },\n      })\n      .then(({ data }) => dispatch('receiveAuthorsSuccess', data))\n      .catch((error) => {\n        Sentry.captureException(error);\n        dispatch('receiveAuthorsError');\n      });\n  },\n};\n","export const SET_INITIAL_DATA = 'SET_INITIAL_DATA';\nexport const COMMITS_AUTHORS = 'COMMITS_AUTHORS';\n","import * as types from './mutation_types';\n\nexport default {\n  [types.SET_INITIAL_DATA](state, data) {\n    Object.assign(state, data);\n  },\n  [types.COMMITS_AUTHORS](state, data) {\n    state.commitsAuthors = data;\n  },\n};\n","import Vue from 'vue';\n// eslint-disable-next-line no-restricted-imports\nimport Vuex from 'vuex';\nimport actions from './actions';\nimport mutations from './mutations';\nimport state from './state';\n\nVue.use(Vuex);\n\nexport const createStore = () => ({\n  actions,\n  mutations,\n  state: state(),\n});\n\nexport default new Vuex.Store(createStore());\n","export default () => ({\n  commitsPath: null,\n  projectId: null,\n  commitsAuthors: [],\n});\n","import Vue from 'vue';\n// eslint-disable-next-line no-restricted-imports\nimport Vuex from 'vuex';\nimport { encodeSaferUrl, joinPaths, visitUrl } from '~/lib/utils/url_utility';\nimport RefSelector from '~/ref/components/ref_selector.vue';\nimport AuthorSelectApp from './components/author_select.vue';\nimport store from './store';\n\nVue.use(Vuex);\n\nexport const mountCommits = (el) => {\n  if (!el) {\n    return null;\n  }\n\n  store.dispatch('setInitialData', el.dataset);\n\n  return new Vue({\n    el,\n    store,\n    render(h) {\n      return h(AuthorSelectApp, {\n        props: {\n          projectCommitsEl: document.querySelector('.js-project-commits-show'),\n        },\n      });\n    },\n  });\n};\n\nexport const initCommitsRefSwitcher = () => {\n  const el = document.getElementById('js-project-commits-ref-switcher');\n  const COMMITS_PATH_REGEX = /^(.*?)\\/-\\/commits/g;\n\n  if (!el) return false;\n\n  const { projectId, ref, commitsPath, refType, treePath } = el.dataset;\n  const commitsPathPrefix = commitsPath.match(COMMITS_PATH_REGEX)?.[0];\n\n  const generateRefDestinationUrl = (selectedRef, selectedRefType) => {\n    const selectedRefURI = selectedRef ? encodeURIComponent(selectedRef) : '';\n    const selectedTreePath = treePath ? encodeSaferUrl(treePath) : ''; // Do not escape '/'.\n    const commitsPathSuffix = selectedRefType ? `?ref_type=${selectedRefType}` : '';\n    return joinPaths(commitsPathPrefix, selectedRefURI, selectedTreePath) + commitsPathSuffix;\n  };\n  const useSymbolicRefNames = Boolean(refType);\n  return new Vue({\n    el,\n    render(createElement) {\n      return createElement(RefSelector, {\n        props: {\n          projectId,\n          queryParams: { sort: 'updated_desc' },\n          value: useSymbolicRefNames ? `refs/${refType}/${ref}` : ref,\n          useSymbolicRefNames,\n        },\n        on: {\n          input(selected) {\n            const matches = selected.match(/refs\\/(heads|tags)\\/(.+)/);\n            if (useSymbolicRefNames && matches) {\n              visitUrl(generateRefDestinationUrl(matches[2], matches[1]));\n            } else {\n              visitUrl(generateRefDestinationUrl(selected));\n            }\n          },\n        },\n      });\n    },\n  });\n};\n","import { addShortcutsExtension } from '~/behaviors/shortcuts';\nimport ShortcutsNavigation from '~/behaviors/shortcuts/shortcuts_navigation';\nimport CommitsList from '~/commits';\nimport GpgBadges from '~/gpg_badges';\nimport { mountCommits, initCommitsRefSwitcher } from '~/projects/commits';\nimport initAmbiguousRefModal from '~/ref/init_ambiguous_ref_modal';\n\nnew CommitsList(document.querySelector('.js-project-commits-show').dataset.commitsLimit); // eslint-disable-line no-new\naddShortcutsExtension(ShortcutsNavigation);\nGpgBadges.fetch();\nmountCommits(document.getElementById('js-author-dropdown'));\ninitCommitsRefSwitcher();\ninitAmbiguousRefModal();\n","import $ from 'jquery';\nimport { n__ } from '~/locale';\nimport axios from './lib/utils/axios_utils';\nimport { localTimeAgo } from './lib/utils/datetime_utility';\nimport Pager from './pager';\n\nexport default class CommitsList {\n  constructor(limit = 0) {\n    this.timer = null;\n\n    this.$contentList = $('.content_list');\n\n    Pager.init({ limit: parseInt(limit, 10), prepareData: this.processCommits.bind(this) });\n\n    this.content = $('#commits-list');\n    this.searchField = $('#commits-search');\n    this.lastSearch = this.searchField.val();\n    this.initSearch();\n  }\n\n  initSearch() {\n    this.timer = null;\n    this.searchField.on('keyup', () => {\n      clearTimeout(this.timer);\n      this.timer = setTimeout(this.filterResults.bind(this), 500);\n    });\n  }\n\n  filterResults() {\n    const form = $('.commits-search-form');\n    const search = this.searchField.val();\n    if (search === this.lastSearch) return Promise.resolve();\n    const commitsUrl = `${form.attr('action')}?${form.serialize()}`;\n    this.content.addClass('gl-opacity-5');\n    const params = form.serializeArray().reduce(\n      (acc, obj) =>\n        Object.assign(acc, {\n          [obj.name]: obj.value,\n        }),\n      {},\n    );\n\n    return axios\n      .get(form.attr('action'), {\n        params,\n      })\n      .then(({ data }) => {\n        this.lastSearch = search;\n        this.content.html(data.html);\n        this.content.removeClass('gl-opacity-5');\n\n        // Change url so if user reload a page - search results are saved\n        window.history.replaceState(\n          {\n            page: commitsUrl,\n          },\n          document.title,\n          commitsUrl,\n        );\n      })\n      .catch(() => {\n        this.content.removeClass('gl-opacity-5');\n        this.lastSearch = null;\n      });\n  }\n\n  // Prepare loaded data.\n  processCommits(data) {\n    let processedData = data;\n    const $processedData = $(processedData);\n    const $commitsHeadersLast = this.$contentList.find('li.js-commit-header').last();\n    const lastShownDay = $commitsHeadersLast.data('day');\n    const $loadedCommitsHeadersFirst = $processedData.filter('li.js-commit-header').first();\n    const loadedShownDayFirst = $loadedCommitsHeadersFirst.data('day');\n    let commitsCount;\n\n    // If commits headers show the same date,\n    // remove the last header and change the previous one.\n    if (lastShownDay === loadedShownDayFirst) {\n      // Last shown commits count under the last commits header.\n      commitsCount = $commitsHeadersLast.nextUntil('li.js-commit-header').find('li.commit').length;\n\n      // Remove duplicate of commits header.\n      processedData = $processedData.not(`li.js-commit-header[data-day='${loadedShownDayFirst}']`);\n\n      // Update commits count in the previous commits header.\n      commitsCount += Number(\n        $(processedData).nextUntil('li.js-commit-header').first().find('li.commit').length,\n      );\n\n      $commitsHeadersLast\n        .find('span.commits-count')\n        .text(n__('%d commit', '%d commits', commitsCount));\n    }\n\n    localTimeAgo($processedData.find('.js-timeago').get());\n\n    return processedData;\n  }\n}\n","/**\n * Endless Scroll plugin for jQuery\n *\n * v1.4.8\n *\n * Copyright (c) 2008 Fred Wu\n *\n * Dual licensed under the MIT and GPL licenses:\n *   http://www.opensource.org/licenses/mit-license.php\n *   http://www.gnu.org/licenses/gpl.html\n */\n\n/**\n * Usage:\n *\n * // using default options\n * $(document).endlessScroll();\n *\n * // using some custom options\n * $(document).endlessScroll({\n *   fireOnce: false,\n *   loader: \"<div class=\\\"loading\\\"><div>\",\n *   callback: function(){\n *     alert(\"test\");\n *   }\n * });\n *\n * Configuration options:\n *\n * bottomPixels  integer          the number of pixels from the bottom of the page that triggers the event\n * fireOnce      boolean          only fire once until the execution of the current event is completed\n * loader        string           the HTML to be displayed during loading\n * data          string|function  plain HTML data, can be either a string or a function that returns a string,\n *                                when passed as a function it accepts one argument: fire sequence (the number\n *                                of times the event triggered during the current page session)\n * insertAfter   string           jQuery selector syntax: where to put the loader as well as the plain HTML data\n * callback      function         callback function, accepts one argument: fire sequence (the number of times\n *                                the event triggered during the current page session)\n * resetCounter  function         resets the fire sequence counter if the function returns true, this function\n *                                could also perform hook actions since it is applied at the start of the event\n * ceaseFire     function         stops the event (no more endless scrolling) if the function returns true\n *\n * Usage tips:\n *\n * The plugin is more useful when used with the callback function, which can then make AJAX calls to retrieve content.\n * The fire sequence argument (for the callback function) is useful for 'pagination'-like features.\n */\n\nexport const setupEndlessScroll = ($) => {\n\n  $.fn.endlessScroll = function(options) {\n\n    var defaults = {\n      bottomPixels  : 50,\n      fireOnce      : true,\n      loader        : \"<br />Loading...<br />\",\n      data          : \"\",\n      insertAfter   : \"div:last\",\n      resetCounter  : function() { return false; },\n      callback      : function() { return true; },\n      ceaseFire     : function() { return false; }\n    };\n\n    var options       = $.extend({}, defaults, options),\n        data          = false,\n        firing        = true,\n        fired         = false,\n        fireSequence  = 0,\n        is_scrollable;\n\n    if (options.ceaseFire.apply(this) === true)\n      firing = false;\n\n    if (firing === true) {\n      $(this).scroll(function() {\n        if (options.ceaseFire.apply(this) === true) {\n          firing = false;\n          return; // Scroll will still get called, but nothing will happen\n        }\n\n        if (this == document || this == window) {\n          is_scrollable = $(document).height() - $(window).height() <= $(window).scrollTop() + options.bottomPixels;\n        } else {\n          // calculates the actual height of the scrolling container\n          var inner_wrap = $(\".endless_scroll_inner_wrap\", this);\n          if (inner_wrap.length == 0)\n            inner_wrap = $(this).wrapInner(\"<div class=\\\"endless_scroll_inner_wrap\\\" />\").find(\".endless_scroll_inner_wrap\");\n          is_scrollable = inner_wrap.length > 0 &&\n            (inner_wrap.height() - $(this).height() <= $(this).scrollTop() + options.bottomPixels);\n        }\n\n        if (is_scrollable && (options.fireOnce == false || (options.fireOnce == true && fired != true))) {\n          if (options.resetCounter.apply(this) === true) fireSequence = 0;\n\n          fired = true;\n          fireSequence++;\n\n          $(options.insertAfter).after(\"<div id=\\\"endless_scroll_loader\\\">\" + options.loader + \"</div>\");\n\n          data = typeof options.data == 'function' ? options.data.apply(this, [fireSequence]) : options.data;\n\n          if (data !== false) {\n            $(options.insertAfter).after(\"<div>\" + data + \"</div>\");\n\n            options.callback.apply(this, [fireSequence]);\n\n            fired = false;\n          }\n\n          $(\"#endless_scroll_loader\").remove();\n        }\n      });\n    }\n  };\n};\n","import $ from 'jquery';\nimport { setupEndlessScroll } from 'vendor/jquery.endless-scroll';\nimport axios from '~/lib/utils/axios_utils';\nimport { removeParams, getParameterByName } from '~/lib/utils/url_utility';\n\nsetupEndlessScroll($);\n\nconst ENDLESS_SCROLL_BOTTOM_PX = 400;\nconst ENDLESS_SCROLL_FIRE_DELAY_MS = 1000;\n\nexport default {\n  init({\n    limit = 0,\n    preload = false,\n    disable = false,\n    prepareData = $.noop,\n    successCallback = $.noop,\n    errorCallback = $.noop,\n    container = '',\n  } = {}) {\n    this.limit = limit;\n    this.offset = parseInt(getParameterByName('offset'), 10) || this.limit;\n    this.disable = disable;\n    this.prepareData = prepareData;\n    this.successCallback = successCallback;\n    this.errorCallback = errorCallback;\n    this.$container = $(container);\n    this.$loading = this.$container.length\n      ? this.$container.find('.loading').first()\n      : $('.loading').first();\n    if (preload) {\n      this.offset = 0;\n      this.getOld();\n    }\n    this.initLoadMore();\n  },\n\n  getOld() {\n    this.$loading.show();\n    const url = $('.content_list').data('href') || removeParams(['limit', 'offset']);\n\n    axios\n      .get(url, {\n        params: {\n          limit: this.limit,\n          offset: this.offset,\n        },\n      })\n      .then(({ data }) => {\n        this.append(data.count, this.prepareData(data.html));\n        this.successCallback();\n\n        // keep loading until we've filled the viewport height\n        if (!this.disable && !this.isScrollable()) {\n          this.getOld();\n        } else {\n          this.$loading.hide();\n        }\n      })\n      .catch((err) => this.errorCallback(err))\n      .finally(() => this.$loading.hide());\n  },\n\n  append(count, html) {\n    $('.content_list').append(html);\n    if (count > 0) {\n      this.offset += count;\n\n      if (count < this.limit) {\n        this.disable = true;\n      }\n    } else {\n      this.disable = true;\n    }\n  },\n\n  isScrollable() {\n    const $w = $(window);\n    return $(document).height() > $w.height() + $w.scrollTop() + ENDLESS_SCROLL_BOTTOM_PX;\n  },\n\n  initLoadMore() {\n    // eslint-disable-next-line @gitlab/no-global-event-off\n    $(document).off('scroll');\n    $(document).endlessScroll({\n      bottomPixels: ENDLESS_SCROLL_BOTTOM_PX,\n      fireDelay: ENDLESS_SCROLL_FIRE_DELAY_MS,\n      fireOnce: true,\n      ceaseFire: () => this.disable === true,\n      callback: () => {\n        if (this.$container.length && !this.$container.is(':visible')) {\n          return;\n        }\n\n        if (!this.$loading.is(':visible')) {\n          this.$loading.show();\n          this.getOld();\n        }\n      },\n    });\n  },\n};\n","export const SET_ENABLED_REF_TYPES = 'SET_ENABLED_REF_TYPES';\nexport const SET_USE_SYMBOLIC_REF_NAMES = 'SET_USE_SYMBOLIC_REF_NAMES';\nexport const SET_PARAMS = 'SET_PARAMS';\n\nexport const SET_PROJECT_ID = 'SET_PROJECT_ID';\nexport const SET_SELECTED_REF = 'SET_SELECTED_REF';\nexport const SET_QUERY = 'SET_QUERY';\n\nexport const REQUEST_START = 'REQUEST_START';\nexport const REQUEST_FINISH = 'REQUEST_FINISH';\n\nexport const RECEIVE_BRANCHES_SUCCESS = 'RECEIVE_BRANCHES_SUCCESS';\nexport const RECEIVE_BRANCHES_ERROR = 'RECEIVE_BRANCHES_ERROR';\n\nexport const RECEIVE_TAGS_SUCCESS = 'RECEIVE_TAGS_SUCCESS';\nexport const RECEIVE_TAGS_ERROR = 'RECEIVE_TAGS_ERROR';\n\nexport const RECEIVE_COMMITS_SUCCESS = 'RECEIVE_COMMITS_SUCCESS';\nexport const RECEIVE_COMMITS_ERROR = 'RECEIVE_COMMITS_ERROR';\nexport const RESET_COMMIT_MATCHES = 'RESET_COMMIT_MATCHES';\n","import Api from '~/api';\nimport { REF_TYPE_BRANCHES, REF_TYPE_TAGS, REF_TYPE_COMMITS } from '../constants';\nimport * as types from './mutation_types';\n\nexport const setEnabledRefTypes = ({ commit }, refTypes) =>\n  commit(types.SET_ENABLED_REF_TYPES, refTypes);\n\nexport const setParams = ({ commit }, params) => commit(types.SET_PARAMS, params);\n\nexport const setUseSymbolicRefNames = ({ commit }, useSymbolicRefNames) =>\n  commit(types.SET_USE_SYMBOLIC_REF_NAMES, useSymbolicRefNames);\n\nexport const setProjectId = ({ commit }, projectId) => commit(types.SET_PROJECT_ID, projectId);\n\nexport const setSelectedRef = ({ commit }, selectedRef) =>\n  commit(types.SET_SELECTED_REF, selectedRef);\n\nexport const search = ({ state, dispatch, commit }, query) => {\n  commit(types.SET_QUERY, query);\n\n  const dispatchIfRefTypeEnabled = (refType, action) => {\n    if (state.enabledRefTypes.includes(refType)) {\n      dispatch(action);\n    }\n  };\n  dispatchIfRefTypeEnabled(REF_TYPE_BRANCHES, 'searchBranches');\n  dispatchIfRefTypeEnabled(REF_TYPE_TAGS, 'searchTags');\n  dispatchIfRefTypeEnabled(REF_TYPE_COMMITS, 'searchCommits');\n};\n\nexport const searchBranches = ({ commit, state }) => {\n  commit(types.REQUEST_START);\n\n  Api.branches(state.projectId, state.query, state.params)\n    .then((response) => {\n      commit(types.RECEIVE_BRANCHES_SUCCESS, response);\n    })\n    .catch((error) => {\n      commit(types.RECEIVE_BRANCHES_ERROR, error);\n    })\n    .finally(() => {\n      commit(types.REQUEST_FINISH);\n    });\n};\n\nexport const searchTags = ({ commit, state }) => {\n  commit(types.REQUEST_START);\n\n  Api.tags(state.projectId, state.query)\n    .then((response) => {\n      commit(types.RECEIVE_TAGS_SUCCESS, response);\n    })\n    .catch((error) => {\n      commit(types.RECEIVE_TAGS_ERROR, error);\n    })\n    .finally(() => {\n      commit(types.REQUEST_FINISH);\n    });\n};\n\nexport const searchCommits = ({ commit, state, getters }) => {\n  // Only query the Commit API if the search query looks like a commit SHA\n  if (getters.isQueryPossiblyASha) {\n    commit(types.REQUEST_START);\n\n    Api.commit(state.projectId, state.query)\n      .then((response) => {\n        commit(types.RECEIVE_COMMITS_SUCCESS, response);\n      })\n      .catch((error) => {\n        commit(types.RECEIVE_COMMITS_ERROR, error);\n      })\n      .finally(() => {\n        commit(types.REQUEST_FINISH);\n      });\n  } else {\n    commit(types.RESET_COMMIT_MATCHES);\n  }\n};\n","/** Returns `true` if the query string looks like it could be a commit SHA */\nexport const isQueryPossiblyASha = ({ query }) => /^[0-9a-f]{4,40}$/i.test(query);\n\n/** Returns `true` if there is at least one in-progress request */\nexport const isLoading = ({ requestCount }) => requestCount > 0;\n","import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';\nimport { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';\nimport { X_TOTAL_HEADER } from '../constants';\nimport * as types from './mutation_types';\n\nexport default {\n  [types.SET_ENABLED_REF_TYPES](state, refTypes) {\n    state.enabledRefTypes = refTypes;\n  },\n  [types.SET_USE_SYMBOLIC_REF_NAMES](state, useSymbolicRefNames) {\n    state.useSymbolicRefNames = useSymbolicRefNames;\n  },\n  [types.SET_PARAMS](state, params) {\n    state.params = params;\n  },\n  [types.SET_PROJECT_ID](state, projectId) {\n    state.projectId = projectId;\n  },\n  [types.SET_SELECTED_REF](state, selectedRef) {\n    state.selectedRef = selectedRef;\n  },\n  [types.SET_QUERY](state, query) {\n    state.query = query;\n  },\n\n  [types.REQUEST_START](state) {\n    state.requestCount += 1;\n  },\n  [types.REQUEST_FINISH](state) {\n    state.requestCount -= 1;\n  },\n\n  [types.RECEIVE_BRANCHES_SUCCESS](state, response) {\n    state.matches.branches = {\n      list: convertObjectPropsToCamelCase(response.data).map((b) => ({\n        name: b.name,\n        value: state.useSymbolicRefNames ? `refs/heads/${b.name}` : undefined,\n        default: b.default,\n        protected: b.protected,\n      })),\n      totalCount: parseInt(response.headers[X_TOTAL_HEADER], 10),\n      error: null,\n    };\n  },\n  [types.RECEIVE_BRANCHES_ERROR](state, error) {\n    state.matches.branches = {\n      list: [],\n      totalCount: 0,\n      error,\n    };\n  },\n\n  [types.RECEIVE_TAGS_SUCCESS](state, response) {\n    state.matches.tags = {\n      list: convertObjectPropsToCamelCase(response.data).map((b) => ({\n        name: b.name,\n        value: state.useSymbolicRefNames ? `refs/tags/${b.name}` : undefined,\n        protected: b.protected,\n      })),\n      totalCount: parseInt(response.headers[X_TOTAL_HEADER], 10),\n      error: null,\n    };\n  },\n  [types.RECEIVE_TAGS_ERROR](state, error) {\n    state.matches.tags = {\n      list: [],\n      totalCount: 0,\n      error,\n    };\n  },\n\n  [types.RECEIVE_COMMITS_SUCCESS](state, response) {\n    const commit = convertObjectPropsToCamelCase(response.data);\n\n    state.matches.commits = {\n      list: [\n        {\n          name: commit.shortId,\n          value: commit.id,\n          subtitle: commit.title,\n        },\n      ],\n      totalCount: 1,\n      error: null,\n    };\n  },\n  [types.RECEIVE_COMMITS_ERROR](state, error) {\n    state.matches.commits = {\n      list: [],\n      totalCount: 0,\n\n      // 404's are expected when the search query doesn't match any commits\n      // and shouldn't be treated as an actual error\n      error: error.response?.status !== HTTP_STATUS_NOT_FOUND ? error : null,\n    };\n  },\n  [types.RESET_COMMIT_MATCHES](state) {\n    state.matches.commits = {\n      list: [],\n      totalCount: 0,\n      error: null,\n    };\n  },\n};\n","import Vue from 'vue';\n// eslint-disable-next-line no-restricted-imports\nimport Vuex from 'vuex';\nimport * as actions from './actions';\nimport * as getters from './getters';\nimport mutations from './mutations';\nimport createState from './state';\n\nVue.use(Vuex);\n\nexport default () =>\n  new Vuex.Store({\n    actions,\n    getters,\n    mutations,\n    state: createState(),\n  });\n\nexport const createRefModule = () => ({\n  namespaced: true,\n  actions,\n  getters,\n  mutations,\n  state: createState(),\n});\n","const createRefTypeState = () => ({\n  list: [],\n  totalCount: 0,\n  error: null,\n});\n\nexport default () => ({\n  enabledRefTypes: [],\n  projectId: null,\n\n  query: '',\n  matches: {\n    branches: createRefTypeState(),\n    tags: createRefTypeState(),\n    commits: createRefTypeState(),\n  },\n  selectedRef: null,\n  params: null,\n  requestCount: 0,\n});\n","export const HTTP_STATUS_ABORTED = 0;\nexport const HTTP_STATUS_OK = 200;\nexport const HTTP_STATUS_CREATED = 201;\nexport const HTTP_STATUS_ACCEPTED = 202;\nexport const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION = 203;\nexport const HTTP_STATUS_NO_CONTENT = 204;\nexport const HTTP_STATUS_RESET_CONTENT = 205;\nexport const HTTP_STATUS_PARTIAL_CONTENT = 206;\nexport const HTTP_STATUS_MULTI_STATUS = 207;\nexport const HTTP_STATUS_ALREADY_REPORTED = 208;\nexport const HTTP_STATUS_IM_USED = 226;\nexport const HTTP_STATUS_BAD_REQUEST = 400;\nexport const HTTP_STATUS_UNAUTHORIZED = 401;\nexport const HTTP_STATUS_FORBIDDEN = 403;\nexport const HTTP_STATUS_NOT_FOUND = 404;\nexport const HTTP_STATUS_METHOD_NOT_ALLOWED = 405;\nexport const HTTP_STATUS_CONFLICT = 409;\nexport const HTTP_STATUS_GONE = 410;\nexport const HTTP_STATUS_PAYLOAD_TOO_LARGE = 413;\nexport const HTTP_STATUS_IM_A_TEAPOT = 418;\nexport const HTTP_STATUS_UNPROCESSABLE_ENTITY = 422;\nexport const HTTP_STATUS_TOO_MANY_REQUESTS = 429;\nexport const HTTP_STATUS_INTERNAL_SERVER_ERROR = 500;\nexport const HTTP_STATUS_SERVICE_UNAVAILABLE = 503;\n\nexport const successCodes = [\n  HTTP_STATUS_OK,\n  HTTP_STATUS_CREATED,\n  HTTP_STATUS_ACCEPTED,\n  HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION,\n  HTTP_STATUS_NO_CONTENT,\n  HTTP_STATUS_RESET_CONTENT,\n  HTTP_STATUS_PARTIAL_CONTENT,\n  HTTP_STATUS_MULTI_STATUS,\n  HTTP_STATUS_ALREADY_REPORTED,\n  HTTP_STATUS_IM_USED,\n];\n","import { GlLoadingIcon } from '@gitlab/ui';\nimport { __ } from '~/locale';\nimport { renderVueComponentForLegacyJS } from './render_vue_component_for_legacy_js';\n\nconst defaultValue = (prop) => GlLoadingIcon.props[prop]?.default;\n\n/**\n * Returns a loading icon/spinner element.\n *\n * This should *only* be used in existing legacy areas of code where Vue is not\n * in use, as part of the migration strategy defined in\n * https://gitlab.com/groups/gitlab-org/-/epics/7626.\n *\n * @param {object} props - The props to configure the spinner.\n * @param {boolean} props.inline - Display the spinner inline; otherwise, as a block.\n * @param {string} props.color - The color of the spinner ('dark' or 'light')\n * @param {string} props.size - The size of the spinner ('sm', 'md', 'lg', 'xl')\n * @param {string[]} props.classes - Additional classes to apply to the element.\n * @param {string} props.label - The ARIA label to apply to the spinner.\n * @returns {HTMLElement}\n */\nexport const loadingIconForLegacyJS = ({\n  inline = defaultValue('inline'),\n  color = defaultValue('color'),\n  size = defaultValue('size'),\n  classes = [],\n  label = __('Loading'),\n} = {}) =>\n  renderVueComponentForLegacyJS(GlLoadingIcon, {\n    class: classes,\n    props: {\n      inline,\n      color,\n      size,\n      label,\n    },\n  });\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ambiguous_ref_modal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ambiguous_ref_modal.vue?vue&type=script&lang=js\"","<!-- eslint-disable vue/multi-word-component-names -->\n<script>\nimport { GlModal, GlButton, GlSprintf } from '@gitlab/ui';\nimport { sprintf, s__ } from '~/locale';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport { REF_TYPE_PARAM_NAME, TAG_REF_TYPE, BRANCH_REF_TYPE } from '../constants';\n\nexport default {\n  i18n: {\n    title: s__('AmbiguousRef|Which reference do you want to view?'),\n    description: sprintf(\n      s__('AmbiguousRef|There is a branch and a tag with the same name of %{ref}.'),\n    ),\n    secondaryDescription: s__('AmbiguousRef|Which reference would you like to view?'),\n    viewTagButton: s__('AmbiguousRef|View tag'),\n    viewBranchButton: s__('AmbiguousRef|View branch'),\n  },\n  tagRefType: TAG_REF_TYPE,\n  branchRefType: BRANCH_REF_TYPE,\n  components: {\n    GlModal,\n    GlButton,\n    GlSprintf,\n  },\n\n  props: {\n    refName: {\n      type: String,\n      required: true,\n    },\n  },\n  mounted() {\n    this.$refs.ambiguousRefModal.show();\n  },\n  methods: {\n    navigate(refType) {\n      const url = new URL(window.location.href);\n      url.searchParams.set(REF_TYPE_PARAM_NAME, refType);\n\n      visitUrl(url.toString());\n    },\n  },\n};\n</script>\n\n<template>\n  <gl-modal\n    ref=\"ambiguousRefModal\"\n    modal-id=\"ambiguous-ref\"\n    :title=\"$options.i18n.title\"\n    @primary=\"navigate\"\n  >\n    <p class=\"gl-mb-0\">\n      <gl-sprintf :message=\"$options.i18n.description\">\n        <template #ref\n          ><code>{{ refName }}</code></template\n        >\n      </gl-sprintf>\n    </p>\n\n    <p>\n      {{ $options.i18n.secondaryDescription }}\n    </p>\n\n    <template #modal-footer>\n      <gl-button\n        category=\"secondary\"\n        variant=\"confirm\"\n        data-testid=\"view-tag-btn\"\n        @click=\"() => navigate($options.tagRefType)\"\n        >{{ $options.i18n.viewTagButton }}</gl-button\n      >\n      <gl-button\n        category=\"secondary\"\n        variant=\"confirm\"\n        data-testid=\"view-branch-btn\"\n        @click=\"() => navigate($options.branchRefType)\"\n        >{{ $options.i18n.viewBranchButton }}</gl-button\n      >\n    </template>\n  </gl-modal>\n</template>\n","import { render, staticRenderFns } from \"./ambiguous_ref_modal.vue?vue&type=template&id=553f57e6\"\nimport script from \"./ambiguous_ref_modal.vue?vue&type=script&lang=js\"\nexport * from \"./ambiguous_ref_modal.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('gl-modal',{ref:\"ambiguousRefModal\",attrs:{\"modal-id\":\"ambiguous-ref\",\"title\":_vm.$options.i18n.title},on:{\"primary\":_vm.navigate},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('gl-button',{attrs:{\"category\":\"secondary\",\"variant\":\"confirm\",\"data-testid\":\"view-tag-btn\"},on:{\"click\":() => _vm.navigate(_vm.$options.tagRefType)}},[_vm._v(_vm._s(_vm.$options.i18n.viewTagButton))]),_vm._v(\" \"),_c('gl-button',{attrs:{\"category\":\"secondary\",\"variant\":\"confirm\",\"data-testid\":\"view-branch-btn\"},on:{\"click\":() => _vm.navigate(_vm.$options.branchRefType)}},[_vm._v(_vm._s(_vm.$options.i18n.viewBranchButton))])]},proxy:true}])},[_c('p',{staticClass:\"gl-mb-0\"},[_c('gl-sprintf',{attrs:{\"message\":_vm.$options.i18n.description},scopedSlots:_vm._u([{key:\"ref\",fn:function(){return [_c('code',[_vm._v(_vm._s(_vm.refName))])]},proxy:true}])})],1),_vm._v(\" \"),_c('p',[_vm._v(\"\\n    \"+_vm._s(_vm.$options.i18n.secondaryDescription)+\"\\n  \")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\nimport { parseBoolean } from '~/lib/utils/common_utils';\nimport { getParameterByName } from '~/lib/utils/url_utility';\nimport AmbiguousRefModal from './components/ambiguous_ref_modal.vue';\nimport { REF_TYPE_PARAM_NAME, TAG_REF_TYPE, BRANCH_REF_TYPE } from './constants';\n\nexport default (el = document.querySelector('#js-ambiguous-ref-modal')) => {\n  const refType = getParameterByName(REF_TYPE_PARAM_NAME);\n  const isRefTypeSet = refType === TAG_REF_TYPE || refType === BRANCH_REF_TYPE; // if ref_type is already set in the URL, we don't want to display the modal\n  if (!el || isRefTypeSet || !parseBoolean(el.dataset.ambiguous)) return false;\n\n  const { ref } = el.dataset;\n\n  return new Vue({\n    el,\n    render(createElement) {\n      return createElement(AmbiguousRefModal, { props: { refName: ref } });\n    },\n  });\n};\n","import $ from 'jquery';\nimport { createAlert } from '~/alert';\nimport axios from '~/lib/utils/axios_utils';\nimport { queryToObject } from '~/lib/utils/url_utility';\nimport { loadingIconForLegacyJS } from '~/loading_icon_for_legacy_js';\n\nimport { __ } from '~/locale';\n\nexport default class GpgBadges {\n  static fetch() {\n    const tag = $('.js-signature-container');\n    if (tag.length === 0) {\n      return Promise.resolve();\n    }\n\n    const badges = $('.js-loading-signature-badge');\n\n    badges.html(loadingIconForLegacyJS());\n    badges.children().attr('aria-label', __('Loading'));\n\n    const displayError = () =>\n      createAlert({\n        message: __('An error occurred while loading commit signatures'),\n      });\n\n    const endpoint = tag.data('signaturesPath');\n    if (!endpoint) {\n      displayError();\n      return Promise.reject(new Error(__('Missing commit signatures endpoint!')));\n    }\n\n    const params = queryToObject(tag.serialize());\n    return axios\n      .get(endpoint, { params })\n      .then(({ data }) => {\n        data.signatures.forEach((signature) => {\n          badges.filter(`[data-commit-sha=\"${signature.commit_sha}\"]`).replaceWith(signature.html);\n        });\n      })\n      .catch(displayError);\n  }\n}\n","import { DEFAULT_I18N } from './constants';\n\nfunction convertToListBoxItems(items) {\n  return items.map((item) => ({\n    text: item.name,\n    value: item.value || item.name,\n    protected: item.protected,\n    default: item.default,\n  }));\n}\n\n/**\n * Format multiple lists to array of group options for listbox\n * @param branches list of branches\n * @param tags list of tags\n * @param commits list of commits\n * @returns {*[]} array of group items with header and options\n */\nexport const formatListBoxItems = (branches, tags, commits) => {\n  const listBoxItems = [];\n\n  const addToFinalResult = (items, header) => {\n    if (items && items.length > 0) {\n      listBoxItems.push({\n        text: header,\n        options: convertToListBoxItems(items),\n      });\n    }\n  };\n\n  addToFinalResult(branches, DEFAULT_I18N.branches);\n  addToFinalResult(tags, DEFAULT_I18N.tags);\n  addToFinalResult(commits, DEFAULT_I18N.commits);\n\n  return listBoxItems;\n};\n\n/**\n * Check error existence and add to final array\n * @param branches list of branches\n * @param tags list of tags\n * @param commits list of commits\n * @returns {*[]} array of error messages\n */\nexport const formatErrors = (branches, tags, commits) => {\n  const errorsList = [];\n\n  if (branches && branches.error) {\n    errorsList.push(DEFAULT_I18N.branchesErrorMessage);\n  }\n\n  if (tags && tags.error) {\n    errorsList.push(DEFAULT_I18N.tagsErrorMessage);\n  }\n\n  if (commits && commits.error) {\n    errorsList.push(DEFAULT_I18N.commitsErrorMessage);\n  }\n\n  return errorsList;\n};\n","<script>\nimport { GlBadge, GlIcon, GlCollapsibleListbox } from '@gitlab/ui';\nimport { debounce, isArray } from 'lodash';\n// eslint-disable-next-line no-restricted-imports\nimport { mapActions, mapGetters, mapState } from 'vuex';\nimport { sprintf } from '~/locale';\nimport ProtectedBadge from '~/vue_shared/components/badges/protected_badge.vue';\nimport {\n  ALL_REF_TYPES,\n  SEARCH_DEBOUNCE_MS,\n  DEFAULT_I18N,\n  REF_TYPE_BRANCHES,\n  REF_TYPE_TAGS,\n  REF_TYPE_COMMITS,\n  TAG_REF_TYPE,\n  BRANCH_REF_TYPE,\n  TAG_REF_TYPE_ICON,\n  BRANCH_REF_TYPE_ICON,\n} from '../constants';\nimport createStore from '../stores';\nimport { formatListBoxItems, formatErrors } from '../format_refs';\n\nexport default {\n  name: 'RefSelector',\n  components: {\n    GlBadge,\n    GlIcon,\n    GlCollapsibleListbox,\n    ProtectedBadge,\n  },\n  inheritAttrs: false,\n  props: {\n    disabled: {\n      type: Boolean,\n      required: false,\n      default: false,\n    },\n    enabledRefTypes: {\n      type: Array,\n      required: false,\n      default: () => ALL_REF_TYPES,\n      validator: (val) =>\n        // It has to be an array\n        isArray(val) &&\n        // with at least one item\n        val.length > 0 &&\n        // and only \"REF_TYPE_BRANCHES\", \"REF_TYPE_TAGS\", and \"REF_TYPE_COMMITS\" are allowed\n        val.every((item) => ALL_REF_TYPES.includes(item)) &&\n        // and no duplicates are allowed\n        val.length === new Set(val).size,\n    },\n    value: {\n      type: String,\n      required: false,\n      default: '',\n    },\n    queryParams: {\n      type: Object,\n      required: false,\n      default: () => {},\n    },\n    projectId: {\n      type: String,\n      required: true,\n    },\n    translations: {\n      type: Object,\n      required: false,\n      default: () => ({}),\n    },\n    useSymbolicRefNames: {\n      type: Boolean,\n      required: false,\n      default: false,\n    },\n\n    /** The validation state of this component. */\n    state: {\n      type: Boolean,\n      required: false,\n      default: true,\n    },\n\n    /* Underlying form field name for scenarios where ref_selector\n     * is used as part of submitting an HTML form\n     */\n    name: {\n      type: String,\n      required: false,\n      default: '',\n    },\n    toggleButtonClass: {\n      type: [String, Object, Array],\n      required: false,\n      default: null,\n    },\n  },\n  data() {\n    return {\n      query: '',\n    };\n  },\n  computed: {\n    ...mapState({\n      matches: (state) => state.matches,\n      lastQuery: (state) => state.query,\n      selectedRef: (state) => state.selectedRef,\n      params: (state) => state.params,\n    }),\n    ...mapGetters(['isLoading', 'isQueryPossiblyASha']),\n    i18n() {\n      return {\n        ...DEFAULT_I18N,\n        ...this.translations,\n      };\n    },\n    listBoxItems() {\n      return formatListBoxItems(this.branches, this.tags, this.commits);\n    },\n    branches() {\n      return this.enabledRefTypes.includes(REF_TYPE_BRANCHES) ? this.matches.branches.list : [];\n    },\n    tags() {\n      return this.enabledRefTypes.includes(REF_TYPE_TAGS) ? this.matches.tags.list : [];\n    },\n    commits() {\n      return this.enabledRefTypes.includes(REF_TYPE_COMMITS) ? this.matches.commits.list : [];\n    },\n    extendedToggleButtonClass() {\n      const classes = [\n        {\n          '!gl-shadow-inner-1-red-500': !this.state,\n          'gl-font-monospace': Boolean(this.selectedRef),\n        },\n        'gl-mb-0',\n      ];\n\n      if (Array.isArray(this.toggleButtonClass)) {\n        classes.push(...this.toggleButtonClass);\n      } else {\n        classes.push(this.toggleButtonClass);\n      }\n\n      return classes;\n    },\n    footerSlotProps() {\n      return {\n        isLoading: this.isLoading,\n        matches: this.matches,\n        query: this.lastQuery,\n      };\n    },\n    errors() {\n      return formatErrors(this.matches.branches, this.matches.tags, this.matches.commits);\n    },\n    selectedRefForDisplay() {\n      if (this.useSymbolicRefNames && this.selectedRef) {\n        return this.selectedRef.replace(/^refs\\/(tags|heads)\\//, '');\n      }\n\n      return this.selectedRef;\n    },\n    buttonText() {\n      return this.selectedRefForDisplay || this.i18n.noRefSelected;\n    },\n    noResultsMessage() {\n      return this.lastQuery\n        ? sprintf(this.i18n.noResultsWithQuery, {\n            query: this.lastQuery,\n          })\n        : this.i18n.noResults;\n    },\n    dropdownIcon() {\n      let icon;\n\n      if (this.selectedRef.includes(`refs/${TAG_REF_TYPE}`)) {\n        icon = TAG_REF_TYPE_ICON;\n      } else if (this.selectedRef.includes(`refs/${BRANCH_REF_TYPE}`)) {\n        icon = BRANCH_REF_TYPE_ICON;\n      }\n\n      return icon;\n    },\n  },\n  watch: {\n    // Keep the Vuex store synchronized if the parent\n    // component updates the selected ref through v-model\n    value: {\n      immediate: true,\n      handler() {\n        if (this.value !== this.selectedRef) {\n          this.setSelectedRef(this.value);\n        }\n      },\n    },\n  },\n  beforeCreate() {\n    // Setting the store here instead of using\n    // the built in `store` component option because\n    // we need each new `RefSelector` instance to\n    // create a new Vuex store instance.\n    // See https://github.com/vuejs/vuex/issues/414#issue-184491718.\n    this.$store = createStore();\n  },\n  created() {\n    // This method is defined here instead of in `methods`\n    // because we need to access the .cancel() method\n    // lodash attaches to the function, which is\n    // made inaccessible by Vue.\n    this.debouncedSearch = debounce(this.search, SEARCH_DEBOUNCE_MS);\n\n    this.setProjectId(this.projectId);\n    this.setParams(this.queryParams);\n\n    this.$watch(\n      'enabledRefTypes',\n      () => {\n        this.setEnabledRefTypes(this.enabledRefTypes);\n        this.search();\n      },\n      { immediate: true },\n    );\n\n    this.$watch(\n      'useSymbolicRefNames',\n      () => this.setUseSymbolicRefNames(this.useSymbolicRefNames),\n      { immediate: true },\n    );\n  },\n  methods: {\n    ...mapActions([\n      'setEnabledRefTypes',\n      'setUseSymbolicRefNames',\n      'setParams',\n      'setProjectId',\n      'setSelectedRef',\n    ]),\n    ...mapActions({ storeSearch: 'search' }),\n    onSearchBoxInput(searchQuery = '') {\n      this.query = searchQuery?.trim();\n      this.debouncedSearch();\n    },\n    selectRef(ref) {\n      if (this.disabled) {\n        return;\n      }\n\n      this.setSelectedRef(ref);\n      this.$emit('input', this.selectedRef);\n    },\n    search() {\n      this.storeSearch(this.query);\n    },\n    totalCountText(count) {\n      return count > 999 ? this.i18n.totalCountLabel : `${count}`;\n    },\n  },\n};\n</script>\n\n<template>\n  <div>\n    <gl-collapsible-listbox\n      class=\"ref-selector gl-w-full\"\n      block\n      searchable\n      :selected=\"selectedRef\"\n      :header-text=\"i18n.dropdownHeader\"\n      :items=\"listBoxItems\"\n      :no-results-text=\"noResultsMessage\"\n      :searching=\"isLoading\"\n      :search-placeholder=\"i18n.searchPlaceholder\"\n      :toggle-class=\"extendedToggleButtonClass\"\n      :toggle-text=\"buttonText\"\n      :icon=\"dropdownIcon\"\n      :disabled=\"disabled\"\n      v-bind=\"$attrs\"\n      v-on=\"$listeners\"\n      @hidden=\"$emit('hide')\"\n      @search=\"onSearchBoxInput\"\n      @select=\"selectRef\"\n    >\n      <template #group-label=\"{ group }\">\n        {{ group.text }} <gl-badge>{{ totalCountText(group.options.length) }}</gl-badge>\n      </template>\n      <template #list-item=\"{ item }\">\n        {{ item.text }}\n        <gl-badge v-if=\"item.default\" variant=\"info\">{{ i18n.defaultLabelText }}</gl-badge>\n        <protected-badge v-if=\"item.protected\" />\n      </template>\n      <template #footer>\n        <slot name=\"footer\" v-bind=\"footerSlotProps\"></slot>\n        <div\n          v-for=\"errorMessage in errors\"\n          :key=\"errorMessage\"\n          data-testid=\"red-selector-error-list\"\n          class=\"gl-mx-4 gl-my-3 gl-flex gl-items-start gl-text-red-500\"\n        >\n          <gl-icon name=\"error\" class=\"gl-mr-2 gl-mt-2 gl-shrink-0\" />\n          <span>{{ errorMessage }}</span>\n        </div>\n      </template>\n    </gl-collapsible-listbox>\n    <input\n      v-if=\"name\"\n      data-testid=\"selected-ref-form-field\"\n      type=\"hidden\"\n      :value=\"selectedRef\"\n      :name=\"name\"\n    />\n  </div>\n</template>\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ref_selector.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ref_selector.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ref_selector.vue?vue&type=template&id=02d8f25e\"\nimport script from \"./ref_selector.vue?vue&type=script&lang=js\"\nexport * from \"./ref_selector.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('gl-collapsible-listbox',_vm._g(_vm._b({staticClass:\"ref-selector gl-w-full\",attrs:{\"block\":\"\",\"searchable\":\"\",\"selected\":_vm.selectedRef,\"header-text\":_vm.i18n.dropdownHeader,\"items\":_vm.listBoxItems,\"no-results-text\":_vm.noResultsMessage,\"searching\":_vm.isLoading,\"search-placeholder\":_vm.i18n.searchPlaceholder,\"toggle-class\":_vm.extendedToggleButtonClass,\"toggle-text\":_vm.buttonText,\"icon\":_vm.dropdownIcon,\"disabled\":_vm.disabled},on:{\"hidden\":function($event){return _vm.$emit('hide')},\"search\":_vm.onSearchBoxInput,\"select\":_vm.selectRef},scopedSlots:_vm._u([{key:\"group-label\",fn:function({ group }){return [_vm._v(\"\\n      \"+_vm._s(group.text)+\" \"),_c('gl-badge',[_vm._v(_vm._s(_vm.totalCountText(group.options.length)))])]}},{key:\"list-item\",fn:function({ item }){return [_vm._v(\"\\n      \"+_vm._s(item.text)+\"\\n      \"),(item.default)?_c('gl-badge',{attrs:{\"variant\":\"info\"}},[_vm._v(_vm._s(_vm.i18n.defaultLabelText))]):_vm._e(),_vm._v(\" \"),(item.protected)?_c('protected-badge'):_vm._e()]}},{key:\"footer\",fn:function(){return [_vm._t(\"footer\",null,null,_vm.footerSlotProps),_vm._v(\" \"),_vm._l((_vm.errors),function(errorMessage){return _c('div',{key:errorMessage,staticClass:\"gl-mx-4 gl-my-3 gl-flex gl-items-start gl-text-red-500\",attrs:{\"data-testid\":\"red-selector-error-list\"}},[_c('gl-icon',{staticClass:\"gl-mr-2 gl-mt-2 gl-shrink-0\",attrs:{\"name\":\"error\"}}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(errorMessage))])],1)})]},proxy:true}],null,true)},'gl-collapsible-listbox',_vm.$attrs,false),_vm.$listeners)),_vm._v(\" \"),(_vm.name)?_c('input',{attrs:{\"data-testid\":\"selected-ref-form-field\",\"type\":\"hidden\",\"name\":_vm.name},domProps:{\"value\":_vm.selectedRef}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\n\n/**\n * Returns the root element of the given Vue component.\n *\n * This should *only* be used in existing legacy areas of code where Vue is not\n * in use. For example, as part of the migration strategy defined in\n * https://gitlab.com/groups/gitlab-org/-/epics/7626.\n *\n * @param {Object} Component - The Vue component to render.\n * @param {Object} data - The data object to pass to the render function.\n * @param {string|Array} children - The children to render in the default slot\n *     of the component.\n * @returns {HTMLElement}\n */\nexport const renderVueComponentForLegacyJS = (Component, data, children) => {\n  const vm = new Vue({\n    render(h) {\n      return h(Component, data, children);\n    },\n  });\n\n  vm.$mount();\n\n  // Ensure it's rendered\n  vm.$forceUpdate();\n\n  const el = vm.$el.cloneNode(true);\n  vm.$destroy();\n\n  return el;\n};\n","export const AJAX_USERS_SELECT_PARAMS_MAP = {\n  project_id: 'projectId',\n  group_id: 'groupId',\n  todo_filter: 'todoFilter',\n  todo_state_filter: 'todoStateFilter',\n  current_user: 'showCurrentUser',\n  author_id: 'authorId',\n  states: 'states',\n};\n\nexport const ACTIVE_AND_BLOCKED_USER_STATES = ['active', 'blocked', 'ldap_blocked'];\n"],"sourceRoot":""}