{"version":3,"sources":["webpack:///./vue_merge_request_widget/components/widget/utils.js","webpack:///./vue_merge_request_widget/components/widget/action_buttons.vue","webpack:///./vue_merge_request_widget/components/widget/action_buttons.vue?7a70","webpack:///vue_merge_request_widget/components/widget/action_buttons.vue","webpack:///./vue_merge_request_widget/components/widget/action_buttons.vue?1070","webpack:///./vue_merge_request_widget/components/widget/widget.vue","webpack:///./vue_merge_request_widget/components/widget/telemetry.js","webpack:///./vue_merge_request_widget/components/widget/dynamic_content.vue?4f9c","webpack:///vue_merge_request_widget/components/widget/dynamic_content.vue","webpack:///./vue_merge_request_widget/components/widget/dynamic_content.vue?9275","webpack:///./vue_merge_request_widget/components/widget/dynamic_content.vue","webpack:///vue_merge_request_widget/components/widget/widget.vue","webpack:///./vue_merge_request_widget/components/widget/widget.vue?b2c5","webpack:///./vue_merge_request_widget/components/widget/widget.vue?1ca7","webpack:///./vue_merge_request_widget/components/widget/widget_content_row.vue","webpack:///./vue_merge_request_widget/components/widget/widget_content_row.vue?5b38","webpack:///vue_merge_request_widget/components/widget/widget_content_row.vue","webpack:///./vue_merge_request_widget/components/widget/widget_content_row.vue?930d"],"names":["TEXT_STYLES","success","start","end","danger","critical","same","strong","small","getStartTag","tag","textStyleTags","escapeText","text","document","createElement","appendChild","createTextNode","parentNode","innerHTML","createText","replace","RegExp","Object","values","reduce","acc","i","join","replacement","endsWith","generateText","href","prependText","components","GlButton","GlDisclosureDropdown","GlIcon","GlLoadingIcon","directives","GlTooltip","GlTooltipDirective","props","widget","type","String","required","default","tertiaryButtons","Array","data","timeout","updatingTooltip","computed","dropdownItems","_this","map","button","action","onClickAction","icon","iconName","loading","extraAttrs","dataClipboardText","dataMethod","target","disabled","methods","e","_this2","$emit","onClick","tooltipOnClick","$root","id","clearTimeout","setTimeout","setTooltip","btn","tooltipText","component","_vm","this","_c","_self","staticClass","attrs","scopedSlots","_u","key","fn","item","_v","_s","_e","_l","index","name","rawName","modifiers","class","length","testId","variant","on","$event","simplifyWidgetName","componentName","noWidget","charAt","toLowerCase","slice","baseWidgetName","extensionName","GlBadge","GlLink","Actions","ContentRow","SafeHtml","widgetName","level","Number","rowIndex","statusIcon","_this$data$icon","undefined","generatedText","generatedSubtext","subtext","generatedSupportingText","supportingText","shouldShowThirdLevel","_this$data$children","children","hasActionButtons","_this$data$actions","actions","onClickedAction","header","helpPopover","value","title","boundary","expression","link","badge","childData","proxy","MISSING_RESPONSE_HEADERS","LOADING_STATE_COLLAPSED","LOADING_STATE_EXPANDED","LOADING_STATE_STATUS_ICON","ActionButtons","StatusIcon","DynamicContent","DynamicScroller","DynamicScrollerItem","HelpPopover","mixins","glFeatureFlagsMixin","loadingText","__","loadingState","validator","s","includes","errorText","fetchCollapsedData","Function","fetchExpandedData","summary","Boolean","content","multiPolling","statusIconName","keys","EXTENSION_ICONS","indexOf","isCollapsible","actionButtons","val","startsWith","telemetry","hasError","isExpandedForTheFirstTime","isCollapsed","isLoadingCollapsedContent","isLoadingExpandedContent","summaryError","contentError","telemetryHub","isSummaryLoading","shouldShowLoadingIcon","generatedSummary","_this$summary","generatedSubSummary","_this$summary2","subtitle","collapseButtonLabel","sprintf","summaryStatusIcon","$options","failedStatusIcon","$scopedSlots","contentWithKeyField","_this$content","reportsTabActionButtons","_window$gl","mergeUrlParams","window","gl","mrWidgetData","reportsTabPath","preventDefault","history","replaceState","mrTabs","tabShown","watch","handler","newValue","immediate","created","viewed","InternalEvents","trackEvent","VIEW_MERGE_REQUEST_WIDGET","label","expanded","EXPAND_MERGE_REQUEST_WIDGET","property","fullReportClicked","CLICK_FULL_REPORT_ON_MERGE_REQUEST_WIDGET","_this$telemetryHub","fetch","onActionClick","_this$telemetryHub2","trackFullReportClicked","toggleCollapsed","_this$telemetryHub3","fetchExpandedContent","promises","request","Promise","resolve","reject","Poll","resource","fetchData","method","successCallback","response","status","headers","logError","Error","normalizeHeaders","errorCallback","Sentry","makeRequest","all","failed","i18n","learnMore","glFeatures","mrReportsTab","_t","options","learnMorePath","style","maxHeight","active","generatedHeader","isArray","generatedSubheader","shouldShowHeaderActions","_this$actionButtons","hasHeader"],"mappings":"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","file":"49.5db7ddfe.chunk.js","sourcesContent":["const TEXT_STYLES = {\n  success: {\n    start: '%{success_start}',\n    end: '%{success_end}',\n  },\n  danger: {\n    start: '%{danger_start}',\n    end: '%{danger_end}',\n  },\n  critical: {\n    start: '%{critical_start}',\n    end: '%{critical_end}',\n  },\n  same: {\n    start: '%{same_start}',\n    end: '%{same_end}',\n  },\n  strong: {\n    start: '%{strong_start}',\n    end: '%{strong_end}',\n  },\n  small: {\n    start: '%{small_start}',\n    end: '%{small_end}',\n  },\n};\n\nconst getStartTag = (tag) => TEXT_STYLES[tag].start;\nconst textStyleTags = {\n  [getStartTag('success')]: '<span class=\"gl-font-bold gl-text-success\">',\n  [getStartTag('danger')]: '<span class=\"gl-font-bold gl-text-red-500\">',\n  [getStartTag('critical')]: '<span class=\"gl-font-bold gl-text-red-800\">',\n  [getStartTag('same')]: '<span class=\"gl-font-bold gl-text-gray-700\">',\n  [getStartTag('strong')]: '<span class=\"gl-font-bold\">',\n  [getStartTag('small')]: '<span class=\"gl-text-sm gl-text-gray-700\">',\n};\n\nconst escapeText = (text) =>\n  document.createElement('div').appendChild(document.createTextNode(text)).parentNode.innerHTML;\n\nconst createText = (text) => {\n  return text\n    .replace(\n      new RegExp(\n        `(${Object.values(TEXT_STYLES)\n          .reduce((acc, i) => [...acc, ...Object.values(i)], [])\n          .join('|')})`,\n        'gi',\n      ),\n      (replace) => {\n        const replacement = textStyleTags[replace];\n\n        // If the replacement tag ends with a `_end` then we can just return `</span>`\n        // unless we have a replacement, for cases were we want to change the HTML tag\n        if (!replacement && replace.endsWith('_end}')) {\n          return '</span>';\n        }\n\n        return replacement;\n      },\n    )\n    .replace(/%{([a-z]|_)+}/g, ''); // Filter out any tags we don't know about\n};\n\nexport const generateText = (text) => {\n  if (typeof text === 'string') {\n    return createText(escapeText(text));\n  }\n  if (typeof text === 'object' && typeof text.text === 'string' && typeof text.href === 'string') {\n    return createText(\n      `${text.prependText ? `${escapeText(text.prependText)} ` : ''}<a class=\"gl-underline\" href=\"${\n        text.href\n      }\">${escapeText(text.text)}</a>`,\n    );\n  }\n\n  return null;\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"gl-flex gl-items-start\"},[_c('gl-disclosure-dropdown',{staticClass:\"gl-block md:!gl-hidden\",attrs:{\"items\":_vm.dropdownItems,\"icon\":\"ellipsis_v\",\"no-caret\":\"\",\"category\":\"tertiary\",\"placement\":\"bottom-end\",\"text-sr-only\":\"\",\"size\":\"small\",\"toggle-class\":\"!gl-p-2\"},scopedSlots:_vm._u([{key:\"list-item\",fn:function({ item }){return [_c('span',{staticClass:\"gl-flex gl-items-center gl-justify-between\"},[_vm._v(\"\\n        \"+_vm._s(item.text)+\"\\n        \"),(item.loading)?_c('gl-loading-icon',{attrs:{\"size\":\"sm\"}}):(item.icon)?_c('gl-icon',{attrs:{\"name\":item.icon}}):_vm._e()],1)]}}])}),_vm._v(\" \"),_vm._l((_vm.tertiaryButtons),function(btn,index){return _c('gl-button',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip.hover\",modifiers:{\"hover\":true}}],key:index,staticClass:\"gl-float-left gl-hidden md:gl-inline-flex\",class:[{ 'gl-mr-3': index !== _vm.tertiaryButtons.length - 1 }, btn.class],attrs:{\"id\":btn.id,\"title\":_vm.setTooltip(btn),\"href\":btn.href,\"target\":btn.target,\"data-clipboard-text\":btn.dataClipboardText,\"data-method\":btn.dataMethod,\"icon\":btn.icon || btn.iconName,\"data-testid\":btn.testId || 'extension-actions-button',\"variant\":btn.variant || 'confirm',\"loading\":btn.loading,\"disabled\":btn.loading,\"category\":\"tertiary\",\"size\":\"small\"},on:{\"click\":($event) => _vm.onClickAction(btn, $event)}},[(btn.text)?[_vm._v(\"\\n      \"+_vm._s(btn.text)+\"\\n    \")]:_vm._e()],2)})],2)\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!./action_buttons.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!./action_buttons.vue?vue&type=script&lang=js\"","<script>\nimport {\n  GlButton,\n  GlDisclosureDropdown,\n  GlIcon,\n  GlLoadingIcon,\n  GlTooltipDirective,\n} from '@gitlab/ui';\n\nexport default {\n  components: {\n    GlButton,\n    GlDisclosureDropdown,\n    GlIcon,\n    GlLoadingIcon,\n  },\n  directives: {\n    GlTooltip: GlTooltipDirective,\n  },\n  props: {\n    widget: {\n      type: String,\n      required: false,\n      default: '',\n    },\n    tertiaryButtons: {\n      type: Array,\n      required: true,\n    },\n  },\n  data() {\n    return {\n      timeout: null,\n      updatingTooltip: false,\n    };\n  },\n  computed: {\n    dropdownItems() {\n      return this.tertiaryButtons.map((button) => {\n        return {\n          text: button.text,\n          href: button.href,\n          action: () => this.onClickAction(button),\n          icon: button.icon || button.iconName,\n          loading: button.loading,\n          extraAttrs: {\n            dataClipboardText: button.dataClipboardText,\n            dataMethod: button.dataMethod,\n            target: button.target,\n            disabled: button.disabled,\n          },\n        };\n      });\n    },\n  },\n  methods: {\n    onClickAction(action, e = null) {\n      this.$emit('clickedAction', action);\n\n      if (action.onClick) {\n        action.onClick(action, e);\n      }\n\n      if (action.tooltipOnClick) {\n        this.updatingTooltip = true;\n        this.$root.$emit('bv::show::tooltip', action.id);\n\n        clearTimeout(this.timeout);\n\n        this.timeout = setTimeout(() => {\n          this.updatingTooltip = false;\n          this.$root.$emit('bv::hide::tooltip', action.id);\n        }, 1000);\n      }\n    },\n    setTooltip(btn) {\n      if (this.updatingTooltip && btn.tooltipOnClick) {\n        return btn.tooltipOnClick;\n      }\n\n      return btn.tooltipText;\n    },\n  },\n};\n</script>\n\n<template>\n  <div class=\"gl-flex gl-items-start\">\n    <gl-disclosure-dropdown\n      :items=\"dropdownItems\"\n      icon=\"ellipsis_v\"\n      no-caret\n      category=\"tertiary\"\n      placement=\"bottom-end\"\n      text-sr-only\n      size=\"small\"\n      toggle-class=\"!gl-p-2\"\n      class=\"gl-block md:!gl-hidden\"\n    >\n      <template #list-item=\"{ item }\">\n        <span class=\"gl-flex gl-items-center gl-justify-between\">\n          {{ item.text }}\n          <gl-loading-icon v-if=\"item.loading\" size=\"sm\" />\n          <gl-icon v-else-if=\"item.icon\" :name=\"item.icon\" />\n        </span>\n      </template>\n    </gl-disclosure-dropdown>\n    <gl-button\n      v-for=\"(btn, index) in tertiaryButtons\"\n      :id=\"btn.id\"\n      :key=\"index\"\n      v-gl-tooltip.hover\n      :title=\"setTooltip(btn)\"\n      :href=\"btn.href\"\n      :target=\"btn.target\"\n      :class=\"[{ 'gl-mr-3': index !== tertiaryButtons.length - 1 }, btn.class]\"\n      :data-clipboard-text=\"btn.dataClipboardText\"\n      :data-method=\"btn.dataMethod\"\n      :icon=\"btn.icon || btn.iconName\"\n      :data-testid=\"btn.testId || 'extension-actions-button'\"\n      :variant=\"btn.variant || 'confirm'\"\n      :loading=\"btn.loading\"\n      :disabled=\"btn.loading\"\n      category=\"tertiary\"\n      size=\"small\"\n      class=\"gl-float-left gl-hidden md:gl-inline-flex\"\n      @click=\"($event) => onClickAction(btn, $event)\"\n    >\n      <template v-if=\"btn.text\">\n        {{ btn.text }}\n      </template>\n    </gl-button>\n  </div>\n</template>\n","import { render, staticRenderFns } from \"./action_buttons.vue?vue&type=template&id=20bdfb32\"\nimport script from \"./action_buttons.vue?vue&type=script&lang=js\"\nexport * from \"./action_buttons.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('section',{staticClass:\"media-section\",attrs:{\"data-testid\":\"widget-extension\"}},[_c('div',{staticClass:\"gl-flex gl-px-5 gl-py-4 gl-pr-4\",class:{ 'gl-pl-9': _vm.glFeatures.mrReportsTab }},[_c('status-icon',{attrs:{\"level\":_vm.glFeatures.mrReportsTab ? 2 : 1,\"name\":_vm.widgetName,\"is-loading\":_vm.shouldShowLoadingIcon,\"icon-name\":_vm.summaryStatusIcon}}),_vm._v(\" \"),_c('div',{staticClass:\"media-body gl-flex !gl-flex-row gl-self-center\",attrs:{\"data-testid\":\"widget-extension-top-level\"}},[_c('div',{staticClass:\"gl-grow\",attrs:{\"data-testid\":\"widget-extension-top-level-summary\"}},[(_vm.summaryError)?_c('span',[_vm._v(_vm._s(_vm.summaryError))]):_vm._t(\"summary\",function(){return [_c('div',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.isSummaryLoading ? _vm.loadingText : _vm.generatedSummary),expression:\"isSummaryLoading ? loadingText : generatedSummary\"}]}),_vm._v(\" \"),(!_vm.isSummaryLoading && _vm.generatedSubSummary)?_c('div',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.generatedSubSummary),expression:\"generatedSubSummary\"}],staticClass:\"gl-text-sm gl-text-subtle\"}):_vm._e()]})],2),_vm._v(\" \"),_c('div',{staticClass:\"gl-flex\"},[(_vm.helpPopover)?_c('help-popover',{class:{ 'gl-mr-3': _vm.hasActionButtons },attrs:{\"icon\":\"information-o\",\"options\":_vm.helpPopover.options}},[(_vm.helpPopover.content)?[(_vm.helpPopover.content.text)?_c('p',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.helpPopover.content.text),expression:\"helpPopover.content.text\"}],staticClass:\"gl-mb-0\"}):_vm._e(),_vm._v(\" \"),(_vm.helpPopover.content.learnMorePath)?_c('gl-link',{staticClass:\"gl-text-sm\",attrs:{\"href\":_vm.helpPopover.content.learnMorePath,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.$options.i18n.learnMore))]):_vm._e()]:_vm._e()],2):_vm._e(),_vm._v(\" \"),(_vm.glFeatures.mrReportsTab)?_c('div',[_c('action-buttons',{attrs:{\"tertiary-buttons\":_vm.reportsTabActionButtons}})],1):_vm._t(\"action-buttons\",function(){return [(_vm.actionButtons.length > 0)?_c('action-buttons',{attrs:{\"tertiary-buttons\":_vm.actionButtons},on:{\"clickedAction\":_vm.onActionClick}}):_vm._e()]})],2),_vm._v(\" \"),(!_vm.glFeatures.mrReportsTab && _vm.isCollapsible && !_vm.isSummaryLoading)?_c('div',{staticClass:\"gl-border-l gl-ml-3 gl-h-6 gl-pl-3\"},[_c('gl-button',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip\"}],attrs:{\"title\":_vm.collapseButtonLabel,\"aria-expanded\":`${!_vm.isCollapsed}`,\"aria-label\":_vm.collapseButtonLabel,\"icon\":_vm.isCollapsed ? 'chevron-lg-down' : 'chevron-lg-up',\"category\":\"tertiary\",\"data-testid\":\"toggle-button\",\"size\":\"small\"},on:{\"click\":_vm.toggleCollapsed}})],1):_vm._e()])],1),_vm._v(\" \"),(!_vm.glFeatures.mrReportsTab && (!_vm.isCollapsed || _vm.contentError))?_c('div',{staticClass:\"gl-border-t gl-relative gl-border-t-section gl-bg-subtle\",attrs:{\"data-testid\":\"widget-extension-collapsed-section\"}},[(_vm.isLoadingExpandedContent)?_c('div',{staticClass:\"report-block-container gl-text-center\"},[_c('gl-loading-icon',{attrs:{\"size\":\"sm\",\"inline\":\"\"}}),_vm._v(\" \"+_vm._s(_vm.loadingText)+\"\\n    \")],1):_c('div',{staticClass:\"gl-flex gl-pl-5\",class:{ 'gl-pr-5': _vm.$scopedSlots.content }},[(_vm.contentError)?_c('content-row',{attrs:{\"level\":2,\"status-icon-name\":_vm.$options.failedStatusIcon,\"widget-name\":_vm.widgetName},scopedSlots:_vm._u([{key:\"body\",fn:function(){return [_vm._v(\"\\n          \"+_vm._s(_vm.contentError)+\"\\n        \")]},proxy:true}],null,false,3245637521)}):_c('div',{staticClass:\"gl-w-full\"},[_vm._t(\"content\",function(){return [(_vm.contentWithKeyField)?_c('dynamic-scroller',{staticClass:\"gl-pr-5\",style:({ maxHeight: '170px' }),attrs:{\"items\":_vm.contentWithKeyField,\"min-item-size\":32,\"data-testid\":\"dynamic-content-scroller\"},scopedSlots:_vm._u([{key:\"default\",fn:function({ item, index, active }){return [_c('dynamic-scroller-item',{attrs:{\"item\":item,\"active\":active}},[_c('dynamic-content',{key:item.id || index,attrs:{\"data\":item,\"widget-name\":_vm.widgetName,\"level\":2,\"row-index\":index,\"data-testid\":\"extension-list-item\"},on:{\"clickedAction\":_vm.onActionClick}})],1)]}}],null,false,1002707288)}):_vm._e()]})],2)],1)]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { InternalEvents } from '~/tracking';\n\nimport {\n  VIEW_MERGE_REQUEST_WIDGET,\n  EXPAND_MERGE_REQUEST_WIDGET,\n  CLICK_FULL_REPORT_ON_MERGE_REQUEST_WIDGET,\n} from '../../constants';\n\nfunction simplifyWidgetName(componentName) {\n  const noWidget = componentName.replace(/^Widget/, '');\n  const camelName = noWidget.charAt(0).toLowerCase() + noWidget.slice(1);\n  const tierlessName = camelName.replace(/(CE|EE)$/, '');\n\n  return tierlessName;\n}\n\nfunction baseWidgetName(extensionName) {\n  return extensionName.replace(/([A-Z])/g, '_$1').toLowerCase();\n}\n\nexport function createTelemetryHub(componentName) {\n  return {\n    viewed() {\n      InternalEvents.trackEvent(VIEW_MERGE_REQUEST_WIDGET, {\n        label: baseWidgetName(simplifyWidgetName(componentName)),\n      });\n    },\n    expanded({ type }) {\n      InternalEvents.trackEvent(EXPAND_MERGE_REQUEST_WIDGET, {\n        label: baseWidgetName(simplifyWidgetName(componentName)),\n      });\n\n      InternalEvents.trackEvent(EXPAND_MERGE_REQUEST_WIDGET, {\n        label: baseWidgetName(simplifyWidgetName(componentName)),\n        property: type,\n      });\n    },\n    fullReportClicked() {\n      InternalEvents.trackEvent(CLICK_FULL_REPORT_ON_MERGE_REQUEST_WIDGET, {\n        label: baseWidgetName(simplifyWidgetName(componentName)),\n      });\n    },\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!./dynamic_content.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!./dynamic_content.vue?vue&type=script&lang=js\"","<script>\nimport { GlBadge, GlLink, GlTooltipDirective } from '@gitlab/ui';\nimport SafeHtml from '~/vue_shared/directives/safe_html';\nimport { generateText } from './utils';\nimport ContentRow from './widget_content_row.vue';\nimport Actions from './action_buttons.vue';\n\nexport default {\n  name: 'DynamicContent',\n  components: {\n    GlBadge,\n    GlLink,\n    Actions,\n    ContentRow,\n  },\n  directives: {\n    SafeHtml,\n    GlTooltip: GlTooltipDirective,\n  },\n  props: {\n    data: {\n      type: Object,\n      required: true,\n    },\n    widgetName: {\n      type: String,\n      required: true,\n    },\n    level: {\n      type: Number,\n      required: false,\n      default: 2,\n    },\n    rowIndex: {\n      type: Number,\n      required: false,\n      default: -1,\n    },\n  },\n  computed: {\n    statusIcon() {\n      return this.data.icon?.name || undefined;\n    },\n    generatedText() {\n      return generateText(this.data.text);\n    },\n    generatedSubtext() {\n      return generateText(this.data.subtext);\n    },\n    generatedSupportingText() {\n      return generateText(this.data.supportingText);\n    },\n    shouldShowThirdLevel() {\n      return this.data.children?.length > 0 && this.level === 2;\n    },\n    hasActionButtons() {\n      return this.data.actions?.length > 0;\n    },\n  },\n  methods: {\n    onClickedAction(action) {\n      this.$emit('clickedAction', action);\n    },\n  },\n};\n</script>\n\n<template>\n  <content-row\n    :level=\"level\"\n    :status-icon-name=\"statusIcon\"\n    :widget-name=\"widgetName\"\n    :header=\"data.header\"\n    :help-popover=\"data.helpPopover\"\n    :class=\"{\n      'gl-border-t-0': rowIndex === 0,\n      'gl-items-start': data.supportingText,\n      'gl-items-baseline': !data.supportingText,\n    }\"\n  >\n    <template #body>\n      <div class=\"gl-flex gl-w-full gl-flex-col\">\n        <div class=\"gl-flex gl-grow\">\n          <div class=\"gl-flex gl-grow gl-items-baseline\">\n            <div>\n              <p\n                v-gl-tooltip=\"{ title: data.tooltipText, boundary: 'viewport' }\"\n                v-safe-html=\"generatedText\"\n                class=\"gl-mb-0 gl-mr-1\"\n              ></p>\n              <gl-link v-if=\"data.link\" :href=\"data.link.href\">{{ data.link.text }}</gl-link>\n              <p\n                v-if=\"data.supportingText\"\n                v-safe-html=\"generatedSupportingText\"\n                class=\"gl-mb-0\"\n              ></p>\n            </div>\n            <gl-badge v-if=\"data.badge\" :variant=\"data.badge.variant || 'info'\">\n              {{ data.badge.text }}\n            </gl-badge>\n          </div>\n          <actions\n            v-if=\"hasActionButtons\"\n            :tertiary-buttons=\"data.actions\"\n            class=\"gl-ml-auto gl-pl-3\"\n            @clickedAction=\"onClickedAction\"\n          />\n          <p v-if=\"data.subtext\" v-safe-html=\"generatedSubtext\" class=\"gl-m-0 gl-text-sm\"></p>\n        </div>\n        <ul v-if=\"shouldShowThirdLevel\" class=\"gl-m-0 gl-list-none gl-p-0\">\n          <li v-for=\"(childData, index) in data.children\" :key=\"childData.id || index\">\n            <dynamic-content\n              :data=\"childData\"\n              :widget-name=\"widgetName\"\n              :level=\"3\"\n              @clickedAction=\"onClickedAction\"\n            />\n          </li>\n        </ul>\n      </div>\n    </template>\n  </content-row>\n</template>\n","import { render, staticRenderFns } from \"./dynamic_content.vue?vue&type=template&id=e3010c66\"\nimport script from \"./dynamic_content.vue?vue&type=script&lang=js\"\nexport * from \"./dynamic_content.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('content-row',{class:{\n    'gl-border-t-0': _vm.rowIndex === 0,\n    'gl-items-start': _vm.data.supportingText,\n    'gl-items-baseline': !_vm.data.supportingText,\n  },attrs:{\"level\":_vm.level,\"status-icon-name\":_vm.statusIcon,\"widget-name\":_vm.widgetName,\"header\":_vm.data.header,\"help-popover\":_vm.data.helpPopover},scopedSlots:_vm._u([{key:\"body\",fn:function(){return [_c('div',{staticClass:\"gl-flex gl-w-full gl-flex-col\"},[_c('div',{staticClass:\"gl-flex gl-grow\"},[_c('div',{staticClass:\"gl-flex gl-grow gl-items-baseline\"},[_c('div',[_c('p',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip\",value:({ title: _vm.data.tooltipText, boundary: 'viewport' }),expression:\"{ title: data.tooltipText, boundary: 'viewport' }\"},{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.generatedText),expression:\"generatedText\"}],staticClass:\"gl-mb-0 gl-mr-1\"}),_vm._v(\" \"),(_vm.data.link)?_c('gl-link',{attrs:{\"href\":_vm.data.link.href}},[_vm._v(_vm._s(_vm.data.link.text))]):_vm._e(),_vm._v(\" \"),(_vm.data.supportingText)?_c('p',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.generatedSupportingText),expression:\"generatedSupportingText\"}],staticClass:\"gl-mb-0\"}):_vm._e()],1),_vm._v(\" \"),(_vm.data.badge)?_c('gl-badge',{attrs:{\"variant\":_vm.data.badge.variant || 'info'}},[_vm._v(\"\\n            \"+_vm._s(_vm.data.badge.text)+\"\\n          \")]):_vm._e()],1),_vm._v(\" \"),(_vm.hasActionButtons)?_c('actions',{staticClass:\"gl-ml-auto gl-pl-3\",attrs:{\"tertiary-buttons\":_vm.data.actions},on:{\"clickedAction\":_vm.onClickedAction}}):_vm._e(),_vm._v(\" \"),(_vm.data.subtext)?_c('p',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.generatedSubtext),expression:\"generatedSubtext\"}],staticClass:\"gl-m-0 gl-text-sm\"}):_vm._e()],1),_vm._v(\" \"),(_vm.shouldShowThirdLevel)?_c('ul',{staticClass:\"gl-m-0 gl-list-none gl-p-0\"},_vm._l((_vm.data.children),function(childData,index){return _c('li',{key:childData.id || index},[_c('dynamic-content',{attrs:{\"data\":childData,\"widget-name\":_vm.widgetName,\"level\":3},on:{\"clickedAction\":_vm.onClickedAction}})],1)}),0):_vm._e()])]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- eslint-disable vue/multi-word-component-names -->\n<script>\nimport { GlButton, GlLink, GlTooltipDirective, GlLoadingIcon } from '@gitlab/ui';\nimport * as Sentry from '~/sentry/sentry_browser_wrapper';\nimport { normalizeHeaders } from '~/lib/utils/common_utils';\nimport { logError } from '~/lib/logger';\nimport glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';\nimport SafeHtml from '~/vue_shared/directives/safe_html';\nimport { sprintf, __ } from '~/locale';\nimport Poll from '~/lib/utils/poll';\nimport { mergeUrlParams } from '~/lib/utils/url_utility';\nimport HelpPopover from '~/vue_shared/components/help_popover.vue';\nimport { DynamicScroller, DynamicScrollerItem } from 'vendor/vue-virtual-scroller';\nimport { EXTENSION_ICONS } from '../../constants';\nimport { generateText } from './utils';\nimport { createTelemetryHub } from './telemetry';\nimport ContentRow from './widget_content_row.vue';\nimport DynamicContent from './dynamic_content.vue';\nimport StatusIcon from './status_icon.vue';\nimport ActionButtons from './action_buttons.vue';\n\nconst WIDGET_PREFIX = 'Widget';\nconst MISSING_RESPONSE_HEADERS =\n  'MR Widget: response object should contain status and headers object. Make sure to include that in your `fetchCollapsedData` and `fetchExpandedData` functions.';\n\nconst LOADING_STATE_COLLAPSED = 'collapsed';\nconst LOADING_STATE_EXPANDED = 'expanded';\nconst LOADING_STATE_STATUS_ICON = 'status_icon';\n\nexport default {\n  MISSING_RESPONSE_HEADERS,\n  LOADING_STATE_COLLAPSED,\n  LOADING_STATE_EXPANDED,\n  LOADING_STATE_STATUS_ICON,\n\n  components: {\n    ActionButtons,\n    StatusIcon,\n    GlLink,\n    GlButton,\n    GlLoadingIcon,\n    ContentRow,\n    DynamicContent,\n    DynamicScroller,\n    DynamicScrollerItem,\n    HelpPopover,\n  },\n  directives: {\n    GlTooltip: GlTooltipDirective,\n    SafeHtml,\n  },\n  mixins: [glFeatureFlagsMixin()],\n  props: {\n    loadingText: {\n      type: String,\n      required: false,\n      default: __('Loading'),\n    },\n    // Use this property when you need to control the loading state from the\n    // parent component.\n    loadingState: {\n      type: String,\n      required: false,\n      default: undefined,\n      validator: (s) => {\n        if (!s) {\n          return true;\n        }\n\n        return [\n          LOADING_STATE_EXPANDED,\n          LOADING_STATE_COLLAPSED,\n          LOADING_STATE_STATUS_ICON,\n        ].includes(s);\n      },\n    },\n    errorText: {\n      type: String,\n      required: false,\n      default: __('Failed to load'),\n    },\n    fetchCollapsedData: {\n      type: Function,\n      required: false,\n      default: undefined,\n    },\n    fetchExpandedData: {\n      type: Function,\n      required: false,\n      default: undefined,\n    },\n    // If the summary slot is not used, this value will be used as a fallback.\n    summary: {\n      type: Object,\n      required: false,\n      default: undefined,\n      validator: (s) => {\n        return Boolean(s.title);\n      },\n    },\n    // If the content slot is not used, this value will be used as a fallback.\n    content: {\n      type: Array,\n      required: false,\n      default: undefined,\n    },\n    multiPolling: {\n      type: Boolean,\n      required: false,\n      default: false,\n    },\n    statusIconName: {\n      type: String,\n      required: false,\n      default: 'neutral',\n      validator: (value) => Object.keys(EXTENSION_ICONS).indexOf(value) > -1,\n    },\n    isCollapsible: {\n      type: Boolean,\n      required: true,\n    },\n    /**\n     * A button is composed of the following properties:\n     *\n     * {\n     *   \"id\": string,\n     *   \"href\": string,\n     *   \"dataMethod\": string,\n     *   \"dataClipboardText\": string,\n     *   \"icon\": string,\n     *   \"variant\": string,\n     *   \"loading\": boolean,\n     *   \"testId\":string,\n     *   \"text\": string,\n     *   \"class\": string | Object,\n     *   \"trackFullReportClicked\": boolean,\n     * }\n     */\n    actionButtons: {\n      type: Array,\n      required: false,\n      default: () => [],\n    },\n    widgetName: {\n      type: String,\n      required: true,\n      // see https://docs.gitlab.com/ee/development/fe_guide/merge_request_widgets.html#add-new-widgets\n      validator: (val) => val.startsWith(WIDGET_PREFIX),\n    },\n    telemetry: {\n      type: Boolean,\n      required: false,\n      default: true,\n    },\n    /**\n     * @typedef {Object} helpPopover\n     * @property {Object} options\n     * @property {String} options.title\n     * @property {Object} content\n     * @property {String} content.text\n     * @property {String} content.learnMorePath\n     */\n    helpPopover: {\n      type: Object,\n      required: false,\n      default: null,\n    },\n    // When this is provided, the widget will display an error message in the summary section.\n    hasError: {\n      type: Boolean,\n      required: false,\n      default: false,\n    },\n  },\n  data() {\n    return {\n      isExpandedForTheFirstTime: true,\n      isCollapsed: true,\n      isLoadingCollapsedContent: true,\n      isLoadingExpandedContent: false,\n      summaryError: null,\n      contentError: null,\n      telemetryHub: null,\n    };\n  },\n  computed: {\n    isSummaryLoading() {\n      return this.isLoadingCollapsedContent || this.loadingState === LOADING_STATE_COLLAPSED;\n    },\n    shouldShowLoadingIcon() {\n      return this.isSummaryLoading || this.loadingState === LOADING_STATE_STATUS_ICON;\n    },\n    generatedSummary() {\n      return generateText(this.summary?.title || '');\n    },\n    generatedSubSummary() {\n      return generateText(this.summary?.subtitle || '');\n    },\n    collapseButtonLabel() {\n      return sprintf(this.isCollapsed ? __('Show details') : __('Hide details'));\n    },\n    summaryStatusIcon() {\n      return this.summaryError ? this.$options.failedStatusIcon : this.statusIconName;\n    },\n    hasActionButtons() {\n      return this.actionButtons.length > 0 || Boolean(this.$scopedSlots['action-buttons']);\n    },\n    contentWithKeyField() {\n      return this.content?.map((item, index) => ({ ...item, id: item.id || index }));\n    },\n    reportsTabActionButtons() {\n      return [\n        {\n          text: __('View report'),\n          href: mergeUrlParams(\n            { type: this.widgetName.replace(WIDGET_PREFIX, '') },\n            window.gl?.mrWidgetData?.reportsTabPath || '',\n          ),\n          onClick(action, e) {\n            e.preventDefault();\n\n            window.history.replaceState(null, null, action.href);\n            window.mrTabs.tabShown('reports');\n          },\n        },\n      ];\n    },\n  },\n  watch: {\n    hasError: {\n      handler(newValue) {\n        this.summaryError = newValue ? this.errorText : null;\n      },\n      immediate: true,\n    },\n    isLoadingCollapsedContent(newValue) {\n      this.$emit('is-loading', newValue);\n    },\n  },\n  created() {\n    if (this.telemetry) {\n      this.telemetryHub = createTelemetryHub(this.widgetName);\n    }\n  },\n  async mounted() {\n    this.isLoadingCollapsedContent = true;\n    this.telemetryHub?.viewed();\n\n    try {\n      if (this.fetchCollapsedData) {\n        await this.fetch(this.fetchCollapsedData);\n      }\n    } catch {\n      this.summaryError = this.errorText;\n    }\n\n    this.isLoadingCollapsedContent = false;\n  },\n  methods: {\n    onActionClick(action) {\n      if (action.trackFullReportClicked) {\n        this.telemetryHub?.fullReportClicked();\n      }\n    },\n    toggleCollapsed() {\n      this.isCollapsed = !this.isCollapsed;\n\n      if (this.isExpandedForTheFirstTime) {\n        this.telemetryHub?.expanded({ type: this.summaryStatusIcon });\n\n        if (typeof this.fetchExpandedData === 'function') {\n          this.isExpandedForTheFirstTime = false;\n          this.fetchExpandedContent();\n        }\n      }\n\n      this.$emit('toggle', { expanded: !this.isCollapsed });\n    },\n    async fetchExpandedContent() {\n      this.isLoadingExpandedContent = true;\n      this.contentError = null;\n\n      try {\n        await this.fetch(this.fetchExpandedData);\n      } catch {\n        this.contentError = this.errorText;\n\n        // Reset these values so that we allow refetching\n        this.isExpandedForTheFirstTime = true;\n        this.isCollapsed = true;\n      }\n\n      this.isLoadingExpandedContent = false;\n    },\n    fetch(handler) {\n      const requests = this.multiPolling ? handler() : [handler];\n\n      const promises = requests.map((request) => {\n        return new Promise((resolve, reject) => {\n          const poll = new Poll({\n            resource: {\n              fetchData: () => request(),\n            },\n            method: 'fetchData',\n            successCallback: (response) => {\n              if (\n                typeof response.status === 'undefined' ||\n                typeof response.headers === 'undefined'\n              ) {\n                logError(MISSING_RESPONSE_HEADERS);\n                throw new Error(MISSING_RESPONSE_HEADERS);\n              }\n\n              const headers = normalizeHeaders(response.headers);\n\n              if (headers['POLL-INTERVAL']) {\n                return;\n              }\n\n              resolve(response.data);\n            },\n            errorCallback: (e) => {\n              Sentry.captureException(e);\n              reject(e);\n            },\n          });\n\n          poll.makeRequest();\n        });\n      });\n\n      return Promise.all(promises);\n    },\n  },\n  failedStatusIcon: EXTENSION_ICONS.failed,\n  i18n: {\n    learnMore: __('Learn more'),\n  },\n};\n</script>\n\n<template>\n  <section class=\"media-section\" data-testid=\"widget-extension\">\n    <div class=\"gl-flex gl-px-5 gl-py-4 gl-pr-4\" :class=\"{ 'gl-pl-9': glFeatures.mrReportsTab }\">\n      <status-icon\n        :level=\"glFeatures.mrReportsTab ? 2 : 1\"\n        :name=\"widgetName\"\n        :is-loading=\"shouldShowLoadingIcon\"\n        :icon-name=\"summaryStatusIcon\"\n      />\n      <div\n        class=\"media-body gl-flex !gl-flex-row gl-self-center\"\n        data-testid=\"widget-extension-top-level\"\n      >\n        <div class=\"gl-grow\" data-testid=\"widget-extension-top-level-summary\">\n          <span v-if=\"summaryError\">{{ summaryError }}</span>\n          <slot v-else name=\"summary\"\n            ><div v-safe-html=\"isSummaryLoading ? loadingText : generatedSummary\"></div>\n            <div\n              v-if=\"!isSummaryLoading && generatedSubSummary\"\n              v-safe-html=\"generatedSubSummary\"\n              class=\"gl-text-sm gl-text-subtle\"\n            ></div\n          ></slot>\n        </div>\n        <div class=\"gl-flex\">\n          <help-popover\n            v-if=\"helpPopover\"\n            icon=\"information-o\"\n            :options=\"helpPopover.options\"\n            :class=\"{ 'gl-mr-3': hasActionButtons }\"\n          >\n            <template v-if=\"helpPopover.content\">\n              <p\n                v-if=\"helpPopover.content.text\"\n                v-safe-html=\"helpPopover.content.text\"\n                class=\"gl-mb-0\"\n              ></p>\n              <gl-link\n                v-if=\"helpPopover.content.learnMorePath\"\n                :href=\"helpPopover.content.learnMorePath\"\n                target=\"_blank\"\n                class=\"gl-text-sm\"\n                >{{ $options.i18n.learnMore }}</gl-link\n              >\n            </template>\n          </help-popover>\n          <div v-if=\"glFeatures.mrReportsTab\">\n            <action-buttons :tertiary-buttons=\"reportsTabActionButtons\" />\n          </div>\n          <slot v-else name=\"action-buttons\">\n            <action-buttons\n              v-if=\"actionButtons.length > 0\"\n              :tertiary-buttons=\"actionButtons\"\n              @clickedAction=\"onActionClick\"\n            />\n          </slot>\n        </div>\n        <div\n          v-if=\"!glFeatures.mrReportsTab && isCollapsible && !isSummaryLoading\"\n          class=\"gl-border-l gl-ml-3 gl-h-6 gl-pl-3\"\n        >\n          <gl-button\n            v-gl-tooltip\n            :title=\"collapseButtonLabel\"\n            :aria-expanded=\"`${!isCollapsed}`\"\n            :aria-label=\"collapseButtonLabel\"\n            :icon=\"isCollapsed ? 'chevron-lg-down' : 'chevron-lg-up'\"\n            category=\"tertiary\"\n            data-testid=\"toggle-button\"\n            size=\"small\"\n            @click=\"toggleCollapsed\"\n          />\n        </div>\n      </div>\n    </div>\n    <div\n      v-if=\"!glFeatures.mrReportsTab && (!isCollapsed || contentError)\"\n      class=\"gl-border-t gl-relative gl-border-t-section gl-bg-subtle\"\n      data-testid=\"widget-extension-collapsed-section\"\n    >\n      <div v-if=\"isLoadingExpandedContent\" class=\"report-block-container gl-text-center\">\n        <gl-loading-icon size=\"sm\" inline /> {{ loadingText }}\n      </div>\n      <div v-else class=\"gl-flex gl-pl-5\" :class=\"{ 'gl-pr-5': $scopedSlots.content }\">\n        <content-row\n          v-if=\"contentError\"\n          :level=\"2\"\n          :status-icon-name=\"$options.failedStatusIcon\"\n          :widget-name=\"widgetName\"\n        >\n          <template #body>\n            {{ contentError }}\n          </template>\n        </content-row>\n        <div v-else class=\"gl-w-full\">\n          <slot name=\"content\">\n            <dynamic-scroller\n              v-if=\"contentWithKeyField\"\n              :items=\"contentWithKeyField\"\n              :min-item-size=\"32\"\n              :style=\"{ maxHeight: '170px' }\"\n              data-testid=\"dynamic-content-scroller\"\n              class=\"gl-pr-5\"\n            >\n              <template #default=\"{ item, index, active }\">\n                <dynamic-scroller-item :item=\"item\" :active=\"active\">\n                  <dynamic-content\n                    :key=\"item.id || index\"\n                    :data=\"item\"\n                    :widget-name=\"widgetName\"\n                    :level=\"2\"\n                    :row-index=\"index\"\n                    data-testid=\"extension-list-item\"\n                    @clickedAction=\"onActionClick\"\n                  />\n                </dynamic-scroller-item>\n              </template>\n            </dynamic-scroller>\n          </slot>\n        </div>\n      </div>\n    </div>\n  </section>\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!./widget.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!./widget.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./widget.vue?vue&type=template&id=95bf05e2\"\nimport script from \"./widget.vue?vue&type=script&lang=js\"\nexport * from \"./widget.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:\"gl-flex\",class:{\n    'gl-border-t gl-border-t-section gl-py-3 gl-pl-7': _vm.level === 2,\n  }},[(_vm.statusIconName && !_vm.header)?_c('status-icon',{attrs:{\"level\":2,\"name\":_vm.widgetName,\"icon-name\":_vm.statusIconName}}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"gl-w-full gl-min-w-0\"},[(_vm.hasHeader())?_c('div',{staticClass:\"gl-flex\"},[_vm._t(\"header\",function(){return [_c('div',{staticClass:\"gl-mb-2\"},[_c('strong',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.generatedHeader),expression:\"generatedHeader\"}],staticClass:\"gl-block\"}),(_vm.generatedSubheader)?_c('span',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.generatedSubheader),expression:\"generatedSubheader\"}],staticClass:\"gl-block\"}):_vm._e()])]}),_vm._v(\" \"),(_vm.shouldShowHeaderActions)?_c('div',{staticClass:\"gl-ml-auto gl-flex gl-items-baseline\"},[(_vm.helpPopover)?_c('help-popover',{class:{ 'gl-mr-3': _vm.hasActionButtons },attrs:{\"options\":_vm.helpPopover.options,\"icon\":\"information-o\"}},[(_vm.helpPopover.content)?[(_vm.helpPopover.content.text)?_c('p',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(_vm.helpPopover.content.text),expression:\"helpPopover.content.text\"}],staticClass:\"gl-mb-0\"}):_vm._e(),_vm._v(\" \"),(_vm.helpPopover.content.learnMorePath)?_c('gl-link',{staticClass:\"gl-text-sm\",attrs:{\"href\":_vm.helpPopover.content.learnMorePath,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.$options.i18n.learnMore))]):_vm._e()]:_vm._e()],2):_vm._e(),_vm._v(\" \"),(_vm.hasActionButtons)?_c('action-buttons',{attrs:{\"tertiary-buttons\":_vm.actionButtons}}):_vm._e()],1):_vm._e()],2):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"gl-flex gl-items-baseline\"},[(_vm.statusIconName && _vm.header)?_c('status-icon',{attrs:{\"level\":2,\"name\":_vm.widgetName,\"icon-name\":_vm.statusIconName}}):_vm._e(),_vm._v(\" \"),_vm._t(\"body\")],2)])],1)\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!./widget_content_row.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!./widget_content_row.vue?vue&type=script&lang=js\"","<script>\nimport { GlLink } from '@gitlab/ui';\nimport { __ } from '~/locale';\nimport HelpPopover from '~/vue_shared/components/help_popover.vue';\nimport SafeHtml from '~/vue_shared/directives/safe_html';\nimport { EXTENSION_ICONS } from '../../constants';\nimport { generateText } from './utils';\nimport ActionButtons from './action_buttons.vue';\nimport StatusIcon from './status_icon.vue';\n\nexport default {\n  components: {\n    StatusIcon,\n    HelpPopover,\n    GlLink,\n    ActionButtons,\n  },\n  directives: {\n    SafeHtml,\n  },\n  props: {\n    level: {\n      type: Number,\n      required: true,\n      validator: (value) => value === 2 || value === 3,\n    },\n    statusIconName: {\n      type: String,\n      required: false,\n      default: '',\n      validator: (value) => value === '' || Object.keys(EXTENSION_ICONS).includes(value),\n    },\n    widgetName: {\n      type: String,\n      required: true,\n    },\n    header: {\n      type: [String, Array],\n      required: false,\n      default: '',\n    },\n    /**\n     * @typedef {Object} helpPopover\n     * @property {Object} options\n     * @property {String} options.title\n     * @property {Object} content\n     * @property {String} content.text\n     * @property {String} content.learnMorePath\n     */\n    helpPopover: {\n      type: Object,\n      required: false,\n      default: null,\n    },\n    actionButtons: {\n      type: Array,\n      required: false,\n      default: () => [],\n    },\n  },\n  computed: {\n    generatedHeader() {\n      return generateText(Array.isArray(this.header) ? this.header[0] : this.header);\n    },\n    generatedSubheader() {\n      return Array.isArray(this.header) && this.header[1] ? generateText(this.header[1]) : '';\n    },\n    shouldShowHeaderActions() {\n      return Boolean(this.helpPopover) || this.actionButtons?.length > 0;\n    },\n    hasActionButtons() {\n      return this.actionButtons.length > 0;\n    },\n  },\n  methods: {\n    hasHeader() {\n      return Boolean(this.$scopedSlots.header || this.header || this.shouldShowHeaderActions);\n    },\n  },\n  i18n: {\n    learnMore: __('Learn more'),\n  },\n};\n</script>\n<template>\n  <div\n    class=\"gl-flex\"\n    :class=\"{\n      'gl-border-t gl-border-t-section gl-py-3 gl-pl-7': level === 2,\n    }\"\n  >\n    <status-icon\n      v-if=\"statusIconName && !header\"\n      :level=\"2\"\n      :name=\"widgetName\"\n      :icon-name=\"statusIconName\"\n    />\n    <div class=\"gl-w-full gl-min-w-0\">\n      <div v-if=\"hasHeader()\" class=\"gl-flex\">\n        <slot name=\"header\">\n          <div class=\"gl-mb-2\">\n            <strong v-safe-html=\"generatedHeader\" class=\"gl-block\"></strong\n            ><span\n              v-if=\"generatedSubheader\"\n              v-safe-html=\"generatedSubheader\"\n              class=\"gl-block\"\n            ></span>\n          </div>\n        </slot>\n        <div v-if=\"shouldShowHeaderActions\" class=\"gl-ml-auto gl-flex gl-items-baseline\">\n          <help-popover\n            v-if=\"helpPopover\"\n            :options=\"helpPopover.options\"\n            :class=\"{ 'gl-mr-3': hasActionButtons }\"\n            icon=\"information-o\"\n          >\n            <template v-if=\"helpPopover.content\">\n              <p\n                v-if=\"helpPopover.content.text\"\n                v-safe-html=\"helpPopover.content.text\"\n                class=\"gl-mb-0\"\n              ></p>\n              <gl-link\n                v-if=\"helpPopover.content.learnMorePath\"\n                :href=\"helpPopover.content.learnMorePath\"\n                target=\"_blank\"\n                class=\"gl-text-sm\"\n                >{{ $options.i18n.learnMore }}</gl-link\n              >\n            </template>\n          </help-popover>\n          <action-buttons v-if=\"hasActionButtons\" :tertiary-buttons=\"actionButtons\" />\n        </div>\n      </div>\n      <div class=\"gl-flex gl-items-baseline\">\n        <status-icon\n          v-if=\"statusIconName && header\"\n          :level=\"2\"\n          :name=\"widgetName\"\n          :icon-name=\"statusIconName\"\n        />\n        <slot name=\"body\"></slot>\n      </div>\n    </div>\n  </div>\n</template>\n","import { render, staticRenderFns } from \"./widget_content_row.vue?vue&type=template&id=70f16d8f\"\nimport script from \"./widget_content_row.vue?vue&type=script&lang=js\"\nexport * from \"./widget_content_row.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"],"sourceRoot":""}