{"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":""}