{"version":3,"sources":["webpack:///./ref/constants.js","webpack:///./contributors/utils.js","webpack:///./contributors/components/contributor_area_chart.vue","webpack:///./contributors/components/contributor_area_chart.vue?596b","webpack:///contributors/components/contributor_area_chart.vue","webpack:///./contributors/components/contributor_area_chart.vue?bc43","webpack:///./contributors/components/individual_chart.vue?bfc5","webpack:///contributors/components/individual_chart.vue","webpack:///./contributors/constants.js","webpack:///./contributors/components/individual_chart.vue?e812","webpack:///./contributors/components/individual_chart.vue","webpack:///contributors/components/contributors.vue","webpack:///./contributors/components/contributors.vue?847f","webpack:///./contributors/components/contributors.vue?fea7","webpack:///./contributors/components/contributors.vue","webpack:///./contributors/services/contributors_service.js","webpack:///./contributors/stores/mutation_types.js","webpack:///./contributors/stores/actions.js","webpack:///./contributors/stores/getters.js","webpack:///./contributors/stores/mutations.js","webpack:///./contributors/stores/index.js","webpack:///./contributors/stores/state.js","webpack:///./contributors/index.js","webpack:///./pages/projects/graphs/show/index.js","webpack:////build/source/node_modules/lodash/_arrayIncludesWith.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:////build/source/node_modules/lodash/_createSet.js","webpack:///./lib/utils/http_status.js","webpack:////build/source/node_modules/lodash/uniq.js","webpack:////build/source/node_modules/lodash/_baseUniq.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"],"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__","xAxisLabelFormatter","val","date","Date","month","getUTCMonth","year","getUTCFullYear","getMonthNames","name","components","GlAreaChart","props","data","type","Array","required","option","height","Number","tooltipTitle","tooltipValue","computed","tooltipLabel","_this$option$yAxis","yAxis","methods","formatTooltipText","seriesData","dateTime","value","localeDateFormat","asDate","format","newDate","_vm","this","_c","_self","attrs","on","$event","$emit","scopedSlots","_u","key","fn","_v","_s","proxy","staticClass","INDIVIDUAL_CHART_HEIGHT","ContributorAreaChart","contributor","chartOptions","zoom","chart","hasZoom","startValue","endValue","_isNumber","commitCount","start","end","dates","filter","count","isInTimePeriod","map","reduce","acc","watch","syncChartZoom","onChartCreated","setOption","dataZoom","show","lazyUpdate","n__","email","$options","GRAPHS_PATH_REGEX","MASTER_CHART_HEIGHT","i18n","history","refSelectorTranslations","GlButton","GlLoadingIcon","IndividualChart","RefSelector","endpoint","String","branch","projectId","commitsPath","refTypes","masterChart","individualCharts","individualChartZoom","selectedBranch","mapState","mapGetters","masterChartData","_this","xAxisRange","forEach","parsedData","total","entries","masterChartOptions","getCommonChartOptions","grid","bottom","left","right","top","individualChartsData","_this2","keys","byAuthorEmail","author","sort","a","b","slice","individualChartOptions","max","individualChartYAxisMax","item","values","Math","firstContributionDate","lastContributionDate","length","getDatesInRange","toISODateFormat","charts","_uniq","mounted","fetchChartData","mapActions","isMasterChart","xAxis","axisLabel","formatter","showMaxLabel","showMinLabel","boundaryGap","splitNumber","minInterval","min","onMasterChartCreated","_this3","_debounce","getOption","visitBranch","selected","_this$endpoint$match","graphsPathPrefix","match","visitUrl","loading","showChart","model","callback","$$v","expression","_l","index","_e","axios","get","commit","service","then","res","catch","createAlert","message","state","Boolean","chartData","author_name","author_email","normalizedEmail","toLowerCase","authorData","assign","Vue","use","Vuex","createStore","defaultBranch","Store","actions","mutations","getters","el","document","querySelector","projectGraphPath","projectBranch","dataset","store","render","createElement","ContributorsGraphs","initContributorsGraphs","module","exports","array","comparator","setEnabledRefTypes","setParams","params","setUseSymbolicRefNames","useSymbolicRefNames","setProjectId","setSelectedRef","selectedRef","search","dispatch","query","dispatchIfRefTypeEnabled","refType","action","enabledRefTypes","includes","searchBranches","Api","response","error","finally","searchTags","searchCommits","isQueryPossiblyASha","test","isLoading","requestCount","matches","list","convertObjectPropsToCamelCase","undefined","default","protected","totalCount","parseInt","headers","shortId","id","subtitle","title","_error$response","status","HTTP_STATUS_NOT_FOUND","createRefModule","namespaced","Set","noop","setToArray","createSet","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","baseUniq","SetCache","arrayIncludes","arrayIncludesWith","cacheHas","iteratee","isCommon","result","seen","set","outer","seenIndex","push","convertToListBoxItems","items","text","GlBadge","GlIcon","GlCollapsibleListbox","ProtectedBadge","inheritAttrs","disabled","validator","_isArray","every","size","queryParams","translations","toggleButtonClass","lastQuery","listBoxItems","addToFinalResult","header","options","formatListBoxItems","extendedToggleButtonClass","classes","isArray","footerSlotProps","errors","errorsList","formatErrors","selectedRefForDisplay","replace","buttonText","noResultsMessage","sprintf","dropdownIcon","icon","immediate","handler","beforeCreate","$store","created","debouncedSearch","$watch","storeSearch","onSearchBoxInput","searchQuery","trim","selectRef","ref","totalCountText","component","_g","_b","group","_t","errorMessage","$attrs","$listeners","domProps"],"mappings":"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","file":"pages.projects.graphs.show.a2fa7618.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","import { getMonthNames } from '~/lib/utils/datetime_utility';\n\n/**\n * Converts provided string to date and returns formatted value as a year for date in January and month name for the rest\n * @param {String}\n * @returns {String}  - formatted value\n *\n * xAxisLabelFormatter('01-12-2019') will return '2019'\n * xAxisLabelFormatter('02-12-2019') will return 'Feb'\n * xAxisLabelFormatter('07-12-2019') will return 'Jul'\n */\nexport const xAxisLabelFormatter = (val) => {\n  const date = new Date(val);\n  const month = date.getUTCMonth();\n  const year = date.getUTCFullYear();\n  return month === 0 ? `${year}` : getMonthNames(true)[month];\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('gl-area-chart',{attrs:{\"responsive\":\"\",\"width\":\"auto\",\"data\":_vm.data,\"option\":_vm.option,\"height\":_vm.height,\"format-tooltip-text\":_vm.formatTooltipText},on:{\"created\":function($event){return _vm.$emit('created', $event)}},scopedSlots:_vm._u([{key:\"tooltip-title\",fn:function(){return [_c('div',{attrs:{\"data-testid\":\"tooltip-title\"}},[_vm._v(_vm._s(_vm.tooltipTitle))])]},proxy:true},{key:\"tooltip-content\",fn:function(){return [_c('div',{staticClass:\"gl-flex gl-justify-between gl-gap-6\"},[_c('span',{attrs:{\"data-testid\":\"tooltip-label\"}},[_vm._v(_vm._s(_vm.tooltipLabel))]),_vm._v(\" \"),_c('span',{attrs:{\"data-testid\":\"tooltip-value\"}},[_vm._v(_vm._s(_vm.tooltipValue))])])]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","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!./contributor_area_chart.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!./contributor_area_chart.vue?vue&type=script&lang=js\"","<script>\nimport { GlAreaChart } from '@gitlab/ui/dist/charts';\nimport { localeDateFormat, newDate } from '~/lib/utils/datetime_utility';\nimport { __ } from '~/locale';\n\nexport default {\n  name: 'ContributorAreaChart',\n  components: {\n    GlAreaChart,\n  },\n  props: {\n    data: {\n      type: Array,\n      required: true,\n    },\n    option: {\n      type: Object,\n      required: true,\n    },\n    height: {\n      type: Number,\n      required: true,\n    },\n  },\n  data() {\n    return {\n      tooltipTitle: '',\n      tooltipValue: [],\n    };\n  },\n  computed: {\n    tooltipLabel() {\n      return this.option.yAxis?.name || __('Value');\n    },\n  },\n  methods: {\n    formatTooltipText({ seriesData }) {\n      const [dateTime, value] = seriesData[0].data;\n      this.tooltipTitle = localeDateFormat.asDate.format(newDate(dateTime));\n      this.tooltipValue = value;\n    },\n  },\n};\n</script>\n\n<template>\n  <gl-area-chart\n    responsive\n    width=\"auto\"\n    :data=\"data\"\n    :option=\"option\"\n    :height=\"height\"\n    :format-tooltip-text=\"formatTooltipText\"\n    @created=\"$emit('created', $event)\"\n  >\n    <template #tooltip-title>\n      <div data-testid=\"tooltip-title\">{{ tooltipTitle }}</div>\n    </template>\n\n    <template #tooltip-content>\n      <div class=\"gl-flex gl-justify-between gl-gap-6\">\n        <span data-testid=\"tooltip-label\">{{ tooltipLabel }}</span>\n        <span data-testid=\"tooltip-value\">{{ tooltipValue }}</span>\n      </div>\n    </template>\n  </gl-area-chart>\n</template>\n","import { render, staticRenderFns } from \"./contributor_area_chart.vue?vue&type=template&id=731d6a04\"\nimport script from \"./contributor_area_chart.vue?vue&type=script&lang=js\"\nexport * from \"./contributor_area_chart.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","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!./individual_chart.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!./individual_chart.vue?vue&type=script&lang=js\"","<script>\nimport { isNumber } from 'lodash';\nimport { isInTimePeriod } from '~/lib/utils/datetime/date_calculation_utility';\nimport { INDIVIDUAL_CHART_HEIGHT } from '../constants';\nimport ContributorAreaChart from './contributor_area_chart.vue';\n\nexport default {\n  INDIVIDUAL_CHART_HEIGHT,\n  components: {\n    ContributorAreaChart,\n  },\n  props: {\n    contributor: {\n      type: Object,\n      required: true,\n    },\n    chartOptions: {\n      type: Object,\n      required: true,\n    },\n    zoom: {\n      type: Object,\n      required: true,\n    },\n  },\n  data() {\n    return {\n      chart: null,\n    };\n  },\n  computed: {\n    hasZoom() {\n      const { startValue, endValue } = this.zoom;\n      return isNumber(startValue) && isNumber(endValue);\n    },\n    commitCount() {\n      if (!this.hasZoom) return this.contributor.commits;\n\n      const start = new Date(this.zoom.startValue);\n      const end = new Date(this.zoom.endValue);\n\n      return this.contributor.dates[0].data\n        .filter(([date, count]) => count > 0 && isInTimePeriod(new Date(date), start, end))\n        .map(([, count]) => count)\n        .reduce((acc, count) => acc + count, 0);\n    },\n  },\n  watch: {\n    chart() {\n      this.syncChartZoom();\n    },\n    zoom() {\n      this.syncChartZoom();\n    },\n  },\n  methods: {\n    onChartCreated(chart) {\n      this.chart = chart;\n    },\n    syncChartZoom() {\n      if (!this.hasZoom || !this.chart) return;\n\n      const { startValue, endValue } = this.zoom;\n      this.chart.setOption(\n        { dataZoom: { startValue, endValue, show: false } },\n        { lazyUpdate: true },\n      );\n    },\n  },\n};\n</script>\n\n<template>\n  <div class=\"col-lg-6 col-12 gl-my-5\">\n    <h4 class=\"gl-mb-2 gl-mt-0\" data-testid=\"chart-header\">{{ contributor.name }}</h4>\n    <p class=\"gl-mb-3\" data-testid=\"commit-count\">\n      {{ n__('%d commit', '%d commits', commitCount) }} ({{ contributor.email }})\n    </p>\n    <contributor-area-chart\n      :data=\"contributor.dates\"\n      :option=\"chartOptions\"\n      :height=\"$options.INDIVIDUAL_CHART_HEIGHT\"\n      @created=\"onChartCreated\"\n    />\n  </div>\n</template>\n","export const MASTER_CHART_HEIGHT = 264;\nexport const INDIVIDUAL_CHART_HEIGHT = 216;\n","import { render, staticRenderFns } from \"./individual_chart.vue?vue&type=template&id=2316ceba\"\nimport script from \"./individual_chart.vue?vue&type=script&lang=js\"\nexport * from \"./individual_chart.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',{staticClass:\"col-lg-6 col-12 gl-my-5\"},[_c('h4',{staticClass:\"gl-mb-2 gl-mt-0\",attrs:{\"data-testid\":\"chart-header\"}},[_vm._v(_vm._s(_vm.contributor.name))]),_vm._v(\" \"),_c('p',{staticClass:\"gl-mb-3\",attrs:{\"data-testid\":\"commit-count\"}},[_vm._v(\"\\n    \"+_vm._s(_vm.n__('%d commit', '%d commits', _vm.commitCount))+\" (\"+_vm._s(_vm.contributor.email)+\")\\n  \")]),_vm._v(\" \"),_c('contributor-area-chart',{attrs:{\"data\":_vm.contributor.dates,\"option\":_vm.chartOptions,\"height\":_vm.$options.INDIVIDUAL_CHART_HEIGHT},on:{\"created\":_vm.onChartCreated}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- eslint-disable vue/multi-word-component-names -->\n<script>\nimport { GlButton, GlLoadingIcon } from '@gitlab/ui';\nimport { debounce, uniq } from 'lodash';\n// eslint-disable-next-line no-restricted-imports\nimport { mapActions, mapState, mapGetters } from 'vuex';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport { getDatesInRange, toISODateFormat } from '~/lib/utils/datetime_utility';\nimport { __ } from '~/locale';\nimport RefSelector from '~/ref/components/ref_selector.vue';\nimport { REF_TYPE_BRANCHES, REF_TYPE_TAGS } from '~/ref/constants';\nimport { xAxisLabelFormatter } from '../utils';\nimport { MASTER_CHART_HEIGHT } from '../constants';\nimport ContributorAreaChart from './contributor_area_chart.vue';\nimport IndividualChart from './individual_chart.vue';\n\nconst GRAPHS_PATH_REGEX = /^(.*?)\\/-\\/graphs/g;\n\nexport default {\n  MASTER_CHART_HEIGHT,\n  i18n: {\n    history: __('History'),\n    refSelectorTranslations: {\n      dropdownHeader: __('Switch branch/tag'),\n      searchPlaceholder: __('Search branches and tags'),\n    },\n  },\n  components: {\n    GlButton,\n    GlLoadingIcon,\n    ContributorAreaChart,\n    IndividualChart,\n    RefSelector,\n  },\n  props: {\n    endpoint: {\n      type: String,\n      required: true,\n    },\n    branch: {\n      type: String,\n      required: true,\n    },\n    projectId: {\n      type: String,\n      required: true,\n    },\n    commitsPath: {\n      type: String,\n      required: true,\n    },\n  },\n  refTypes: [REF_TYPE_BRANCHES, REF_TYPE_TAGS],\n  data() {\n    return {\n      masterChart: null,\n      individualCharts: [],\n      individualChartZoom: {},\n      selectedBranch: this.branch,\n    };\n  },\n  computed: {\n    ...mapState(['chartData', 'loading']),\n    ...mapGetters(['showChart', 'parsedData']),\n    masterChartData() {\n      const data = {};\n      this.xAxisRange.forEach((date) => {\n        data[date] = this.parsedData.total[date] || 0;\n      });\n      return [\n        {\n          name: __('Commits'),\n          data: Object.entries(data),\n        },\n      ];\n    },\n    masterChartOptions() {\n      return {\n        ...this.getCommonChartOptions(true),\n        yAxis: {\n          name: __('Number of commits'),\n        },\n        grid: {\n          bottom: 64,\n          left: 64,\n          right: 20,\n          top: 20,\n        },\n      };\n    },\n    individualChartsData() {\n      const maxNumberOfIndividualContributorsCharts = 100;\n\n      return Object.keys(this.parsedData.byAuthorEmail)\n        .map((email) => {\n          const author = this.parsedData.byAuthorEmail[email];\n          return {\n            name: author.name,\n            email,\n            commits: author.commits,\n            dates: [\n              {\n                name: __('Commits'),\n                data: this.xAxisRange.map((date) => [date, author.dates[date] || 0]),\n              },\n            ],\n          };\n        })\n        .sort((a, b) => b.commits - a.commits)\n        .slice(0, maxNumberOfIndividualContributorsCharts);\n    },\n    individualChartOptions() {\n      return {\n        ...this.getCommonChartOptions(false),\n        yAxis: {\n          name: __('Commits'),\n          max: this.individualChartYAxisMax,\n        },\n        grid: {\n          bottom: 27,\n          left: 64,\n          right: 20,\n          top: 8,\n        },\n      };\n    },\n    individualChartYAxisMax() {\n      return this.individualChartsData.reduce((acc, item) => {\n        const values = item.dates[0].data.map((value) => value[1]);\n        return Math.max(acc, ...values);\n      }, 0);\n    },\n    xAxisRange() {\n      const dates = Object.keys(this.parsedData.total).sort((a, b) => new Date(a) - new Date(b));\n\n      const firstContributionDate = new Date(dates[0]);\n      const lastContributionDate = new Date(dates[dates.length - 1]);\n\n      return getDatesInRange(firstContributionDate, lastContributionDate, toISODateFormat);\n    },\n    firstContributionDate() {\n      return this.xAxisRange[0];\n    },\n    lastContributionDate() {\n      return this.xAxisRange[this.xAxisRange.length - 1];\n    },\n    charts() {\n      return uniq(this.individualCharts);\n    },\n  },\n  mounted() {\n    this.fetchChartData(this.endpoint);\n  },\n  methods: {\n    ...mapActions(['fetchChartData']),\n    getCommonChartOptions(isMasterChart) {\n      return {\n        xAxis: {\n          type: 'time',\n          name: '',\n          data: this.xAxisRange,\n          axisLabel: {\n            formatter: xAxisLabelFormatter,\n            showMaxLabel: false,\n            showMinLabel: false,\n          },\n          boundaryGap: false,\n          splitNumber: isMasterChart ? 24 : 18,\n          // 28 days\n          minInterval: 28 * 86400 * 1000,\n          min: this.firstContributionDate,\n          max: this.lastContributionDate,\n        },\n      };\n    },\n    onMasterChartCreated(chart) {\n      this.masterChart = chart;\n      this.masterChart.setOption({\n        dataZoom: [{ type: 'slider' }],\n      });\n\n      this.masterChart.on(\n        'datazoom',\n        debounce(() => {\n          const [{ startValue, endValue }] = this.masterChart.getOption().dataZoom;\n          this.individualChartZoom = { startValue, endValue };\n        }, 200),\n      );\n    },\n    visitBranch(selected) {\n      const graphsPathPrefix = this.endpoint.match(GRAPHS_PATH_REGEX)?.[0];\n\n      visitUrl(`${graphsPathPrefix}/${selected}`);\n    },\n  },\n};\n</script>\n\n<template>\n  <div>\n    <div v-if=\"loading\" class=\"gl-pt-13 gl-text-center\">\n      <gl-loading-icon :inline=\"true\" size=\"xl\" data-testid=\"loading-app-icon\" />\n    </div>\n\n    <template v-else-if=\"showChart\">\n      <div class=\"gl-flex\">\n        <div class=\"gl-mr-3\">\n          <ref-selector\n            v-model=\"selectedBranch\"\n            :project-id=\"projectId\"\n            :enabled-ref-types=\"$options.refTypes\"\n            :translations=\"$options.i18n.refSelectorTranslations\"\n            @input=\"visitBranch\"\n          />\n        </div>\n        <gl-button :href=\"commitsPath\" data-testid=\"history-button\"\n          >{{ $options.i18n.history }}\n        </gl-button>\n      </div>\n\n      <h4 class=\"gl-mb-2 gl-mt-5\">\n        {{ __('Commits to') }} <code>{{ branch }}</code>\n      </h4>\n      <span>{{ __('Excluding merge commits. Limited to 6,000 commits.') }}</span>\n      <contributor-area-chart\n        class=\"gl-mb-5\"\n        :data=\"masterChartData\"\n        :option=\"masterChartOptions\"\n        :height=\"$options.MASTER_CHART_HEIGHT\"\n        @created=\"onMasterChartCreated\"\n      />\n\n      <div class=\"row\">\n        <individual-chart\n          v-for=\"(contributor, index) in individualChartsData\"\n          :key=\"index\"\n          :contributor=\"contributor\"\n          :chart-options=\"individualChartOptions\"\n          :zoom=\"individualChartZoom\"\n        />\n      </div>\n    </template>\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!./contributors.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!./contributors.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./contributors.vue?vue&type=template&id=17874264\"\nimport script from \"./contributors.vue?vue&type=script&lang=js\"\nexport * from \"./contributors.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',[(_vm.loading)?_c('div',{staticClass:\"gl-pt-13 gl-text-center\"},[_c('gl-loading-icon',{attrs:{\"inline\":true,\"size\":\"xl\",\"data-testid\":\"loading-app-icon\"}})],1):(_vm.showChart)?[_c('div',{staticClass:\"gl-flex\"},[_c('div',{staticClass:\"gl-mr-3\"},[_c('ref-selector',{attrs:{\"project-id\":_vm.projectId,\"enabled-ref-types\":_vm.$options.refTypes,\"translations\":_vm.$options.i18n.refSelectorTranslations},on:{\"input\":_vm.visitBranch},model:{value:(_vm.selectedBranch),callback:function ($$v) {_vm.selectedBranch=$$v},expression:\"selectedBranch\"}})],1),_vm._v(\" \"),_c('gl-button',{attrs:{\"href\":_vm.commitsPath,\"data-testid\":\"history-button\"}},[_vm._v(_vm._s(_vm.$options.i18n.history)+\"\\n      \")])],1),_vm._v(\" \"),_c('h4',{staticClass:\"gl-mb-2 gl-mt-5\"},[_vm._v(\"\\n      \"+_vm._s(_vm.__('Commits to'))+\" \"),_c('code',[_vm._v(_vm._s(_vm.branch))])]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.__('Excluding merge commits. Limited to 6,000 commits.')))]),_vm._v(\" \"),_c('contributor-area-chart',{staticClass:\"gl-mb-5\",attrs:{\"data\":_vm.masterChartData,\"option\":_vm.masterChartOptions,\"height\":_vm.$options.MASTER_CHART_HEIGHT},on:{\"created\":_vm.onMasterChartCreated}}),_vm._v(\" \"),_c('div',{staticClass:\"row\"},_vm._l((_vm.individualChartsData),function(contributor,index){return _c('individual-chart',{key:index,attrs:{\"contributor\":contributor,\"chart-options\":_vm.individualChartOptions,\"zoom\":_vm.individualChartZoom}})}),1)]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import axios from '~/lib/utils/axios_utils';\n\nexport default {\n  fetchChartData(endpoint) {\n    return axios.get(endpoint);\n  },\n};\n","export const SET_CHART_DATA = 'SET_CHART_DATA';\nexport const SET_LOADING_STATE = 'SET_LOADING_STATE';\nexport const SET_ACTIVE_BRANCH = 'SET_ACTIVE_BRANCH';\n","import { createAlert } from '~/alert';\nimport { __ } from '~/locale';\nimport service from '../services/contributors_service';\nimport * as types from './mutation_types';\n\nexport const fetchChartData = ({ commit }, endpoint) => {\n  commit(types.SET_LOADING_STATE, true);\n\n  return service\n    .fetchChartData(endpoint)\n    .then((res) => res.data)\n    .then((data) => {\n      commit(types.SET_CHART_DATA, data);\n      commit(types.SET_LOADING_STATE, false);\n    })\n    .catch(() =>\n      createAlert({\n        message: __('An error occurred while loading chart data'),\n      }),\n    );\n};\n","export const showChart = (state) => Boolean(!state.loading && state.chartData);\n\nexport const parsedData = (state) => {\n  const byAuthorEmail = {};\n  const total = {};\n\n  state.chartData.forEach(({ date, author_name: name, author_email: email }) => {\n    total[date] = total[date] ? total[date] + 1 : 1;\n\n    const normalizedEmail = email.toLowerCase();\n    const authorData = byAuthorEmail[normalizedEmail];\n\n    if (!authorData) {\n      byAuthorEmail[normalizedEmail] = {\n        name,\n        commits: 1,\n        dates: {\n          [date]: 1,\n        },\n      };\n    } else {\n      authorData.commits += 1;\n      authorData.dates[date] = authorData.dates[date] ? authorData.dates[date] + 1 : 1;\n    }\n  });\n\n  return {\n    total,\n    byAuthorEmail,\n  };\n};\n","import * as types from './mutation_types';\n\nexport default {\n  [types.SET_LOADING_STATE](state, value) {\n    state.loading = value;\n  },\n  [types.SET_CHART_DATA](state, chartData) {\n    Object.assign(state, {\n      chartData,\n    });\n  },\n  [types.SET_ACTIVE_BRANCH](state, branch) {\n    Object.assign(state, {\n      branch,\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 state from './state';\n\nVue.use(Vuex);\n\nexport const createStore = (defaultBranch) =>\n  new Vuex.Store({\n    actions,\n    mutations,\n    getters,\n    state: state(defaultBranch),\n  });\n\nexport default createStore;\n","export default (branch) => ({\n  loading: false,\n  chartData: null,\n  branch,\n});\n","import Vue from 'vue';\nimport ContributorsGraphs from './components/contributors.vue';\nimport { createStore } from './stores';\n\nexport default () => {\n  const el = document.querySelector('.js-contributors-graph');\n\n  if (!el) return null;\n\n  const { projectGraphPath, projectBranch, defaultBranch, projectId, commitsPath } = el.dataset;\n  const store = createStore(defaultBranch);\n\n  return new Vue({\n    el,\n    store,\n    render(createElement) {\n      return createElement(ContributorsGraphs, {\n        props: {\n          endpoint: projectGraphPath,\n          branch: projectBranch,\n          projectId,\n          commitsPath,\n        },\n      });\n    },\n  });\n};\n","import initContributorsGraphs from '~/contributors';\n\ninitContributorsGraphs();\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arrayIncludesWith;\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","var Set = require('./_Set'),\n    noop = require('./noop'),\n    setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nmodule.exports = createSet;\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","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n  return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    cacheHas = require('./_cacheHas'),\n    createSet = require('./_createSet'),\n    setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseUniq;\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 }"],"sourceRoot":""}