diff --git a/assets/app-launcher/app-launcher-0.1.27.tgz b/assets/app-launcher/app-launcher-0.1.27.tgz index 9803eb9..40fee9e 100644 Binary files a/assets/app-launcher/app-launcher-0.1.27.tgz and b/assets/app-launcher/app-launcher-0.1.27.tgz differ diff --git a/assets/index.yaml b/assets/index.yaml index 3734dd0..bfd9c1f 100644 --- a/assets/index.yaml +++ b/assets/index.yaml @@ -13,9 +13,9 @@ entries: catalog.cattle.io/ui-component: plugins apiVersion: v2 appVersion: 0.1.27 - created: "2024-05-08T14:47:37.841859909Z" + created: "2024-05-09T22:11:02.207709426Z" description: App Launcher plugin for Rancher - digest: ccbc01bd9eef47fb08c26498d606f14a3677f38dd92567342c4f9d9956810042 + digest: 47f22dba873decb2ae8cb4b82bdc53d59de8e0b074f07ec60bb6dd4a0b68ead7 icon: https://raw.githubusercontent.com/krumIO/krum-rancher-extensions/main/pkg/app-launcher/icon.svg name: app-launcher type: application @@ -461,9 +461,9 @@ entries: catalog.cattle.io/ui-component: plugins apiVersion: v2 appVersion: 0.1.2 - created: "2024-05-08T14:47:37.842103625Z" + created: "2024-05-09T22:11:02.207933243Z" description: pirate-locale plugin - digest: f1a83b0d430089626630f21099c8d895506cdc230b1d32b84eee9f31d989165c + digest: c9fd32d63ea8f7eba253ff5db7a8ea25dfec2ecb0d1d19082e6b9e3744db4a39 name: pirate-locale type: application urls: @@ -488,4 +488,4 @@ entries: urls: - assets/pirate-locale/pirate-locale-0.1.1.tgz version: 0.1.1 -generated: "2024-05-08T14:47:37.840801106Z" +generated: "2024-05-09T22:11:02.207338185Z" diff --git a/assets/pirate-locale/pirate-locale-0.1.2.tgz b/assets/pirate-locale/pirate-locale-0.1.2.tgz index 7254d6f..dac5f75 100644 Binary files a/assets/pirate-locale/pirate-locale-0.1.2.tgz and b/assets/pirate-locale/pirate-locale-0.1.2.tgz differ diff --git a/extensions/app-launcher/0.1.27/plugin/app-launcher-0.1.27.umd.min.js b/extensions/app-launcher/0.1.27/plugin/app-launcher-0.1.27.umd.min.js index 22c8b41..2c37924 100644 --- a/extensions/app-launcher/0.1.27/plugin/app-launcher-0.1.27.umd.min.js +++ b/extensions/app-launcher/0.1.27/plugin/app-launcher-0.1.27.umd.min.js @@ -1,4 +1,4 @@ -(function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e(require("__jszip"),require("__jsyaml"),require("vue")):"function"===typeof define&&define.amd?define(["__jszip","__jsyaml"],e):"object"===typeof exports?exports["app-launcher-0.1.27"]=e(require("__jszip"),require("__jsyaml"),require("vue")):t["app-launcher-0.1.27"]=e(t["__jszip"],t["__jsyaml"],t["Vue"])})("undefined"!==typeof self?self:this,(function(t,e,n){return function(t){function e(e){for(var n,o,i=e[0],a=e[1],s=0,c=[];st.nameDisplay).slice(0,5)},plusMore(){const t=this.toRemove.length-this.names.length;return this.t("promptRemove.andOthers",{count:t})}},watch:{value:{handler(t){this.handleRoleDeletionCheck(t,t[0].type,this.$route.hash)},immediate:!0}},methods:{resourceNames:o["m"],async handleRoleDeletionCheck(t,e,n){let r,o;this.warning="";let a=0;const s=new Set;switch(this.info=this.t("rbac.globalRoles.waiting",{count:t.length}),e){case i["j"].GLOBAL_ROLE:r=i["j"].GLOBAL_ROLE_BINDING,o="globalRoleName";break;default:r=n.includes(c)?i["j"].CLUSTER_ROLE_TEMPLATE_BINDING:i["j"].PROJECT_ROLE_TEMPLATE_BINDING,o="roleTemplateName";break}try{var l;const e=await this.$store.dispatch("management/request",{url:"/v1/"+r,method:"get"},{root:!0}),n=await this.$store.dispatch("management/request",{url:"/v1/"+i["j"].USER,method:"get"},{root:!0}),c=null===(l=n.data)||void 0===l?void 0:l.reduce((t,e)=>(e.username&&(t[e.id]=e),t),{});e.data&&e.data.length?(t.forEach(t=>{const n=e.data.filter(e=>e[o]===t.id);if(n.length){const t=[...new Set(n.map(t=>t.userName).filter(t=>c[t]))];t.length&&(a++,t.forEach(t=>s.add(t)))}}),a&&s.size?(this.info="",this.warning=this.t("rbac.globalRoles.usersBound",{count:s.size})):this.info=this.t("rbac.globalRoles.notBound",null,!0)):this.info=this.t("rbac.globalRoles.notBound",null,!0)}catch(u){this.info=this.t("rbac.globalRoles.unableToCheck")}}}}},"0634":function(t,e,n){var r=n("2ed5"),o=n("5e27");function i(t,e){return r(t,o(t),e)}t.exports=i},"0652":function(t,e,n){var r=n("ae68"),o=n("e2e2"),i=n("f72d");function a(t){return i(t)?r(t):o(t)}t.exports=a},"06a5":function(t,e,n){var r=n("1ec9"),o=n("659f"),i=n("4778"),a=n("c991"),s=n("9243"),c=n("c316"),l=n("dda8"),u=n("41dd"),d=1,p="[object Arguments]",f="[object Array]",h="[object Object]",v=Object.prototype,b=v.hasOwnProperty;function g(t,e,n,v,g,m){var y=c(t),w=c(e),_=y?f:s(t),x=w?f:s(e);_=_==p?h:_,x=x==p?h:x;var O=_==h,k=x==h,A=_==x;if(A&&l(t)){if(!l(e))return!1;y=!0,O=!1}if(A&&!O)return m||(m=new r),y||u(t)?o(t,e,n,v,g,m):i(t,e,_,n,v,g,m);if(!(n&d)){var E=O&&b.call(t,"__wrapped__"),S=k&&b.call(e,"__wrapped__");if(E||S){var C=E?t.value():t,T=S?e.value():e;return m||(m=new r),g(C,T,n,v,m)}}return!!A&&(m||(m=new r),a(t,e,n,v,g,m))}t.exports=g},"06cb":function(t,e){var n=/\w*$/;function r(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}t.exports=r},"0788":function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n("907c");n("e24b");r["v"];function o(t){var e;return t=((null===(e=t)||void 0===e?void 0:e.type)||t||"").toLowerCase(),t}},"07d9":function(t,e,n){e.nextTick=function(t){var e=Array.prototype.slice.call(arguments);e.shift(),setTimeout((function(){t.apply(null,e)}),0)},e.platform=e.arch=e.execPath=e.title="browser",e.pid=1,e.browser=!0,e.env={},e.argv=[],e.binding=function(t){throw new Error("No such module. (Possibly not yet loaded)")},function(){var t,r="/";e.cwd=function(){return r},e.chdir=function(e){t||(t=n("a0d5")),r=t.resolve(e,r)}}(),e.exit=e.kill=e.umask=e.dlopen=e.uptime=e.memoryUsage=e.uvCounters=function(){},e.features={}},"0843":function(t,e,n){"use strict";n("be67")},"084c":function(t,e,n){var r=n("c364");function o(t){return function(e){return r(e,t)}}t.exports=o},"09b2":function(t,e){var n=Object.prototype;function r(t){var e=t&&t.constructor,r="function"==typeof e&&e.prototype||n;return t===r}t.exports=r},"0a87":function(t,e,n){var r=n("e902");function o(t){return r(this.__data__,t)>-1}t.exports=o},"0c0f":function(t,e,n){var r=n("86eb");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("464d0db1",r,!0,{sourceMap:!1,shadowMode:!1})},"0d63":function(t,e,n){var r=n("3ac3");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("3fc7d1e6",r,!0,{sourceMap:!1,shadowMode:!1})},"0d7f":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,'.checkbox-outer-container{display:inline-flex;flex-direction:column}.checkbox-outer-container-description{color:var(--input-label);font-size:14px;margin-left:19px;margin-top:5px;opacity:.8}.checkbox-container{position:relative;display:inline-flex;align-items:center;margin:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border-radius:var(--border-radius)}.checkbox-container .checkbox-label{color:var(--input-label);display:inline-flex;margin:0 10px 0 5px}.checkbox-container .checkbox-label.checkbox-primary{color:inherit;font-weight:600}.checkbox-container .checkbox-info{line-height:normal;margin-left:2px}.checkbox-container .checkbox-custom{height:14px;width:14px;background-color:var(--body-bg);border-radius:var(--border-radius);transition:all .3s ease-out;border:1px solid var(--border)}.checkbox-container input{opacity:0;position:absolute;z-index:-1}.checkbox-container input:checked~.checkbox-custom{background-color:var(--primary);transform:rotate(0deg) scale(1);opacity:1;border:1px solid var(--primary)}.checkbox-container .checkbox-custom:after{position:absolute;content:"";left:0;top:0;height:0;width:0;border-radius:var(--border-radius);border:solid;border-color:var(--input-text);border-width:0 3px 3px 0;transform:rotate(0deg) scale(0);opacity:1}.checkbox-container input:checked~.checkbox-custom:after{transform:rotate(45deg) scale(1);opacity:1;left:4px;width:4px;height:10px;border:solid;border-color:var(--checkbox-tick);border-width:0 2px 2px 0;background-color:transparent}.checkbox-container input:checked~.checkbox-custom.indeterminate:after{transform:scale(1);opacity:1;left:3px;top:2px;width:6px;height:5px;border:solid;border-color:var(--checkbox-tick);border-width:0 0 2px 0;background-color:transparent}.checkbox-container.disabled .checkbox-custom,.checkbox-container.disabled input:checked~.checkbox-custom{background-color:var(--checkbox-disabled-bg);border-color:var(--checkbox-disabled-bg)}.checkbox-container.disabled input:checked~.checkbox-custom:after{border-color:var(--checkbox-tick-disabled)}.checkbox-container.disabled{cursor:not-allowed}.checkbox-container .checkbox-view{display:flex;flex-direction:column}.checkbox-container .checkbox-view LABEL{color:var(--input-label)}',""]),t.exports=e},"0df0":function(t,e,n){"use strict";var r=n("1032");n.d(e,"a",(function(){return r["a"]}))},"0e19":function(t,e,n){var r=n("4b2c"),o=n("2822"),i=n("907a"),a="[object Null]",s="[object Undefined]",c=r?r.toStringTag:void 0;function l(t){return null==t?void 0===t?s:a:c&&c in Object(t)?o(t):i(t)}t.exports=l},"0e30":function(t,e){function n(){return!1}t.exports=n},"0ed3":function(t,e,n){"use strict";function r(t,e){for(var n=[],r={},o=0;on.parts.length&&(r.parts.length=n.parts.length)}else{var a=[];for(o=0;ot.advFilterSelectedLabel=e.label},model:{value:t.advFilterSelectedProp,callback:function(e){t.advFilterSelectedProp=e},expression:"advFilterSelectedProp"}})],1),e("div",{staticClass:"bottom-block"},[e("button",{staticClass:"btn role-secondary",attrs:{disabled:!t.advancedFilteringValues.length},on:{click:t.clearAllAdvancedFilters}},[t._v(" "+t._s(t.t("sortableTable.resetFilters"))+" ")]),e("button",{staticClass:"btn role-primary",on:{click:t.addAdvancedFilter}},[t._v(" "+t._s(t.t("sortableTable.add"))+" ")])])])]):t.search?e("input",{directives:[{name:"model",rawName:"v-model",value:t.eventualSearchQuery,expression:"eventualSearchQuery"}],ref:"searchQuery",staticClass:"input-sm search-box",attrs:{type:"search",placeholder:t.t("sortableTable.search")},domProps:{value:t.eventualSearchQuery},on:{input:function(e){e.target.composing||(t.eventualSearchQuery=e.target.value)}}}):t._e(),t._t("header-button")],2):t._e()]):t._e()],2),e("table",{staticClass:"sortable-table",class:t.classObject,attrs:{width:"100%"}},[t.showHeaders?e("THead",{attrs:{"label-for":t.labelFor,columns:t.columns,group:t.group,"group-options":t.advGroupOptions,"has-advanced-filtering":t.hasAdvancedFiltering,"adv-filter-hide-labels-as-cols":t.advFilterHideLabelsAsCols,"table-actions":t.tableActions,"table-cols-options":t.columnOptions,"row-actions":t.rowActions,"sub-expand-column":t.subExpandColumn,"row-actions-width":t.rowActionsWidth,"how-much-selected":t.howMuchSelected,"sort-by":t.sortBy,"default-sort-by":t._defaultSortBy,descending:t.descending,"no-rows":t.noRows,loading:t.loading&&!t.loadingDelay,"no-results":t.noResults},on:{"on-toggle-all":t.onToggleAll,"on-sort-change":t.changeSort,"col-visibility-change":t.changeColVisibility,"group-value-change":e=>t.$emit("group-value-change",e),"update-cols-options":t.updateColsOptions}}):t._e(),t.loading&&!t.loadingDelay?e("div"):t.loading?e("tbody",[t._t("loading",(function(){return[e("tr",[e("td",{attrs:{colspan:t.fullColspan}},[e("div",{staticClass:"data-loading"},[e("i",{staticClass:"icon-spin icon icon-spinner"}),e("t",{attrs:{k:"generic.loading",raw:!0}})],1)])])]}))],2):t.noRows?e("tbody",[t._t("no-rows",(function(){return[e("tr",{staticClass:"no-rows"},[e("td",{attrs:{colspan:t.fullColspan}},[t.showNoRows?e("t",{attrs:{k:t.noRowsKey}}):t._e()],1)])]}))],2):t.noResults?e("tbody",[t._t("no-results",(function(){return[e("tr",{staticClass:"no-results"},[e("td",{staticClass:"text-center",attrs:{colspan:t.fullColspan}},[e("t",{attrs:{k:t.noDataKey}})],1)])]}))],2):t._l(t.displayRows,(function(n){return e("tbody",{key:n.key,class:{group:t.groupBy}},[t.groupBy?t._t("group-row",(function(){return[e("tr",{staticClass:"group-row"},[e("td",{attrs:{colspan:t.fullColspan}},[t._t("group-by",(function(){return[e("div",{directives:[{name:"trim-whitespace",rawName:"v-trim-whitespace"}],staticClass:"group-tab"},[t._v(" "+t._s(n.ref)+" ")])]}),{group:n.grp})],2)])]}),{group:n,fullColspan:t.fullColspan}):t._e(),t._l(n.rows,(function(n,r){return[t._t("main-row",(function(){return[t._t("main-row:"+(n.row.mainRowKey||r),(function(){return[e("tr",{key:n.key,staticClass:"main-row",class:{"has-sub-row":n.showSubRow},attrs:{"data-testid":t.componentTestid+"-"+r+"-row","data-node-id":n.key,"data-cant-run-bulk-action-of-interest":t.actionOfInterest&&!n.canRunBulkActionOfInterest}},[t.tableActions?e("td",{staticClass:"row-check",attrs:{align:"middle"}},[t._v(" "+t._s(n.mainRowKey)),e("Checkbox",{staticClass:"selection-checkbox",attrs:{"data-node-id":n.key,"data-testid":t.componentTestid+"-"+r+"-checkbox",value:t.selectedRows.includes(n.row)}})],1):t._e(),t.subExpandColumn?e("td",{staticClass:"row-expand",attrs:{align:"middle"}},[e("i",{class:{icon:!0,"icon-chevron-right":!t.expanded[n.row[t.keyField]],"icon-chevron-down":!!t.expanded[n.row[t.keyField]]},attrs:{"data-title":"Toggle Expand"},on:{click:function(e){return e.stopPropagation(),t.toggleExpand(n.row)}}})]):t._e(),t._l(n.columns,(function(o,i){return[t._t("col:"+o.col.name,(function(){return[e("td",{directives:[{name:"show",rawName:"v-show",value:!t.hasAdvancedFiltering||t.hasAdvancedFiltering&&o.col.isColVisible,expression:"!hasAdvancedFiltering || (hasAdvancedFiltering && col.col.isColVisible)"}],key:o.col.name,class:{["col-"+o.dasherize]:!!o.col.formatter,[o.col.breakpoint]:!!o.col.breakpoint,["skip-select"]:o.col.skipSelect},attrs:{"data-title":o.col.label,"data-testid":`sortable-cell-${r}-${i}`,align:o.col.align||"left",width:o.col.width}},[t._t("cell:"+o.col.name,(function(){return[o.component&&o.needRef?e(o.component,t._b({ref:"column",refInFor:!0,tag:"component",attrs:{value:o.value,row:n.row,col:o.col,"row-key":n.key,"get-custom-detail-link":t.getCustomDetailLink}},"component",o.col.formatterOpts,!1)):o.component?e(o.component,t._b({tag:"component",attrs:{value:o.value,row:n.row,col:o.col,"row-key":n.key}},"component",o.col.formatterOpts,!1)):o.col.formatter?e(o.col.formatter,t._b({tag:"component",attrs:{value:o.value,row:n.row,col:o.col,"row-key":n.key}},"component",o.col.formatterOpts,!1)):""!==o.value?[t._v(" "+t._s(o.formatted)+" ")]:o.col.dashIfEmpty?[e("span",{staticClass:"text-muted"},[t._v("—")])]:t._e()]}),{row:n.row,col:o.col,value:o.value})],2)]}),{row:n.row,col:o.col,dt:t.dt,expanded:t.expanded,rowKey:n.key})]})),t.rowActions?e("td",{attrs:{align:"middle"}},[t._t("row-actions",(function(){return[e("button",{ref:"actionButton"+r,refInFor:!0,staticClass:"btn btn-sm role-multi-action actions",attrs:{id:`actionButton+${r}+${n.row&&n.row.name?n.row.name:""}`,"data-testid":t.componentTestid+"-"+r+"-action-button","aria-haspopup":"true","aria-expanded":"false",type:"button"},on:{click:function(e){return t.handleActionButtonClick(r,e)}}},[e("i",{staticClass:"icon icon-actions"})])]}),{row:n.row})],2):t._e()],2)]}),{fullColspan:t.fullColspan})]}),{row:n.row}),n.showSubRow?t._t("sub-row",(function(){return[n.row.stateDescription?e("tr",{key:n.row[t.keyField]+"-description",staticClass:"state-description sub-row",attrs:{"data-testid":t.componentTestid+"-"+r+"-row-description"},on:{mouseenter:t.onRowMouseEnter,mouseleave:t.onRowMouseLeave}},[t.tableActions?e("td",{staticClass:"row-check",attrs:{align:"middle"}}):t._e(),e("td",{class:{"text-error":n.row.stateObj.error},attrs:{colspan:t.fullColspan-(t.tableActions?1:0)}},[t._v(" "+t._s(n.row.stateDescription)+" ")])]):t._e()]}),{fullColspan:t.fullColspan,row:n.row,subMatches:t.subMatches,keyField:t.keyField,componentTestid:t.componentTestid,i:r,onRowMouseEnter:t.onRowMouseEnter,onRowMouseLeave:t.onRowMouseLeave}):t._e()]}))],2)}))],2),t.showPaging?e("div",{staticClass:"paging"},[e("button",{staticClass:"btn btn-sm role-multi-action",attrs:{type:"button",disabled:1==t.page},on:{click:function(e){return t.goToPage("first")}}},[e("i",{staticClass:"icon icon-chevron-beginning"})]),e("button",{staticClass:"btn btn-sm role-multi-action",attrs:{type:"button",disabled:1==t.page},on:{click:function(e){return t.goToPage("prev")}}},[e("i",{staticClass:"icon icon-chevron-left"})]),e("span",[t._v(" "+t._s(t.pagingDisplay)+" ")]),e("button",{staticClass:"btn btn-sm role-multi-action",attrs:{type:"button",disabled:t.page==t.totalPages},on:{click:function(e){return t.goToPage("next")}}},[e("i",{staticClass:"icon icon-chevron-right"})]),e("button",{staticClass:"btn btn-sm role-multi-action",attrs:{type:"button",disabled:t.page==t.totalPages},on:{click:function(e){return t.goToPage("last")}}},[e("i",{staticClass:"icon icon-chevron-end"})])]):t._e(),t.search?e("button",{directives:[{name:"shortkey",rawName:"v-shortkey.once",value:["/"],expression:"['/']",modifiers:{once:!0}}],staticClass:"hide",on:{shortkey:function(e){return t.focusSearch()}}}):t._e(),t.tableActions?[e("button",{directives:[{name:"shortkey",rawName:"v-shortkey",value:["j"],expression:"['j']"}],staticClass:"hide",on:{shortkey:function(e){return t.focusNext(e)}}}),e("button",{directives:[{name:"shortkey",rawName:"v-shortkey",value:["k"],expression:"['k']"}],staticClass:"hide",on:{shortkey:function(e){return t.focusPrevious(e)}}}),e("button",{directives:[{name:"shortkey",rawName:"v-shortkey",value:["shift","j"],expression:"['shift','j']"}],staticClass:"hide",on:{shortkey:function(e){return t.focusNext(e,!0)}}}),e("button",{directives:[{name:"shortkey",rawName:"v-shortkey",value:["shift","k"],expression:"['shift','k']"}],staticClass:"hide",on:{shortkey:function(e){return t.focusPrevious(e,!0)}}}),t._t("shortkeys")]:t._e()],2)},o=[],i=n("9ce4"),a=n("b48b"),s=n.n(a),c=n("2cb5"),l=n("e24b"),u=n("bddd"),d=n("0df0"),p=function(){var t=this,e=t._self._c;t._self._setupProxy;return e("button",{ref:"btn",class:t.classes,attrs:{name:t.name,type:t.type,disabled:t.isDisabled,"tab-index":t.tabIndex,"data-testid":t.componentTestid+"-async-button"},on:{click:t.clicked}},[t.displayIcon?e("i",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip,expression:"tooltip"}],class:{icon:!0,"icon-lg":!0,[t.displayIcon]:!0}}):t._e(),"text"===t.labelAs&&t.displayLabel?e("span",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip,expression:"tooltip"},{name:"clean-html",rawName:"v-clean-html",value:t.displayLabel,expression:"displayLabel"}]}):t._e()])},f=[],h=n("8bbf"),v=n.n(h),b={memberOfObject:(t,e)=>Object.entries(t||{}).find(([t])=>t===e),memberOfComponent:(t,e)=>t[e]};const g={ACTION:"action",WAITING:"waiting",SUCCESS:"success",ERROR:"error"},m="text",y="tooltip";var w=v.a.extend({props:{mode:{type:String,default:"edit"},delay:{type:Number,default:5e3},name:{type:String,default:null},disabled:{type:Boolean,default:!1},type:{type:String,default:"button"},tabIndex:{type:Number,default:null},actionColor:{type:String,default:"role-primary"},waitingColor:{type:String,default:"bg-primary"},successColor:{type:String,default:"bg-success"},errorColor:{type:String,default:"bg-error"},actionLabel:{type:String,default:null},waitingLabel:{type:String,default:null},successLabel:{type:String,default:null},errorLabel:{type:String,default:null},icon:{type:String,default:null},labelAs:{type:String,default:m},size:{type:String,default:""},currentPhase:{type:String,default:g.ACTION},componentTestid:{type:String,default:"action-button"},manual:{type:Boolean,default:!1}},data(){return{phase:this.currentPhase}},watch:{currentPhase(t){this.phase=t}},computed:{classes(){const t=this.phase+"Color",e=b.memberOfComponent(this,t),n={btn:!0,[e]:!0};return this.size&&(n["btn-"+this.size]=!0),n},displayIcon(){const t=this.$store.getters["i18n/exists"],e=this.$store.getters["i18n/t"],n=`asyncButton.${this.mode}.${this.phase}Icon`,r=`asyncButton.default.${this.phase}Icon`;let o="";return this.icon?o=this.icon:t(n)?o="icon-"+e(n):t(r)&&(o="icon-"+e(r)),this.isSpinning&&(o||(o="icon-spinner"),o+=" icon-spin"),o},displayLabel(){const t=b.memberOfComponent(this,this.phase+"Label"),e=this.$store.getters["i18n/exists"],n=this.$store.getters["i18n/t"],r=`asyncButton.${this.mode}.${this.phase}`,o="asyncButton.default."+this.phase;return t||(e(r)?n(r):e(o)?n(o):"")},isSpinning(){return this.phase===g.WAITING},isDisabled(){return this.disabled||this.phase===g.WAITING},tooltip(){return this.labelAs===y?{content:this.displayLabel,hideOnTargetClick:!1}:null}},beforeDestroy(){this.timer&&clearTimeout(this.timer)},methods:{clicked(t){if(t&&(t.stopPropagation(),t.preventDefault()),this.isDisabled)return;this.timer&&clearTimeout(this.timer),this.manual||(this.phase=g.WAITING);const e=t=>{this.done(t)};this.$emit("click",e)},done(t){"cancelled"===t?this.phase=g.ACTION:(this.phase=t?g.SUCCESS:g.ERROR,this.timer=setTimeout(()=>{this.timerDone()},this.delay))},timerDone(){this.phase!==g.SUCCESS&&this.phase!==g.ERROR||(this.phase=g.ACTION)},focus(){this.$refs.btn.focus()}}}),_=w,x=n("d802"),O=Object(x["a"])(_,p,f,!1,null,null,null),k=O.exports,A=function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-button-group"},[e("div",{staticClass:"dropdown-button bg-primary",class:{"one-action":!t.dualAction,[t.buttonSize]:!0,disabled:t.disableButton}},[e("v-popover",{attrs:{placement:"bottom",container:!1,disabled:t.disableButton,"popper-options":{modifiers:{flip:{enabled:!1}}}},scopedSlots:t._u([{key:"popover",fn:function(){return[t._t("popover-content")]},proxy:!0}],null,!0)},[t._t("button-content",(function(){return[e("button",{ref:"popoverButton",staticClass:"icon-container bg-primary no-left-border-radius",class:t.buttonSize,attrs:{disabled:t.disableButton,type:"button"}},[t._v(" Button "),e("i",{staticClass:"icon icon-chevron-down"})])]}),{buttonSize:t.buttonSize})],2)],1)])},E=[],S={name:"ActionDropdown",props:{size:{type:String,default:""},dualAction:{type:Boolean,default:!0},disableButton:{type:Boolean,default:!1}},computed:{buttonSize(){const{size:t}=this;let e;switch(t){case"":e="btn";break;case"xs":e="btn btn-xs";break;case"sm":e="btn btn-sm";break;case"lg":e="btn btn-lg";break;default:}return e}},methods:{hasSlot(t="default"){return!!this.$slots[t]||!!this.$scopedSlots[t]},togglePopover(){}}},C=S,T=(n("78e0"),Object(x["a"])(C,A,E,!1,null,null,null)),R=T.exports,I=n("05ca"),L=n.n(I),j=n("44db"),N=n.n(j),D=function(){var t=this,e=t._self._c;return e("thead",[e("tr",{class:{loading:t.loading}},[t.tableActions?e("th",{attrs:{width:t.checkWidth,align:"middle"}},[e("Checkbox",{staticClass:"check",attrs:{"data-testid":"sortable-table_check_select_all",indeterminate:t.isIndeterminate,disabled:t.noRows||t.noResults},model:{value:t.isAll,callback:function(e){t.isAll=e},expression:"isAll"}})],1):t._e(),t.subExpandColumn?e("th",{attrs:{width:t.expandWidth}}):t._e(),t._l(t.columns,(function(n){return e("th",{directives:[{name:"show",rawName:"v-show",value:!t.hasAdvancedFiltering||t.hasAdvancedFiltering&&n.isColVisible,expression:"!hasAdvancedFiltering || (hasAdvancedFiltering && col.isColVisible)"}],key:n.name,class:{sortable:n.sort,[n.breakpoint]:!!n.breakpoint},attrs:{align:n.align||"left",width:n.width},on:{click:function(e){return e.preventDefault(),t.changeSort(e,n)}}},[e("div",{staticClass:"table-header-container",class:{"not-filterable":t.hasAdvancedFiltering&&!n.isFilter}},[n.sort?e("span",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip(n),expression:"tooltip(col)"}]},[e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.labelFor(n),expression:"labelFor(col)"}]}),e("i",{directives:[{name:"show",rawName:"v-show",value:t.hasAdvancedFiltering&&!n.isFilter,expression:"hasAdvancedFiltering && !col.isFilter"},{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.t("sortableTable.tableHeader.noFilter"),expression:"t('sortableTable.tableHeader.noFilter')"}],staticClass:"icon icon-info not-filter-icon"}),e("span",{staticClass:"icon-stack"},[e("i",{staticClass:"icon icon-sort icon-stack-1x faded"}),t.isCurrent(n)&&!t.descending?e("i",{staticClass:"icon icon-sort-down icon-stack-1x"}):t._e(),t.isCurrent(n)&&t.descending?e("i",{staticClass:"icon icon-sort-up icon-stack-1x"}):t._e()])]):e("span",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip(n),expression:"tooltip(col)"}]},[t._v(t._s(t.labelFor(n)))])])])})),t.rowActions&&t.hasAdvancedFiltering&&t.tableColsOptions.length?e("th",{attrs:{width:t.rowActionsWidth}},[e("div",{ref:"table-options",staticClass:"table-options-group"},[e("button",{staticClass:"btn btn-sm role-multi-action table-options-btn",attrs:{"aria-haspopup":"true","aria-expanded":"false",type:"button"},on:{click:t.tableColsOptionsClick}},[e("i",{staticClass:"icon icon-actions"})]),e("div",{directives:[{name:"show",rawName:"v-show",value:t.tableColsOptionsVisibility,expression:"tableColsOptionsVisibility"}],staticClass:"table-options-container",style:t.tableColsMenuPosition},[t.hasAdvGrouping?e("div",{staticClass:"table-options-grouping"},[e("span",{staticClass:"table-options-col-subtitle"},[t._v(t._s(t.t("sortableTable.tableHeader.groupBy"))+":")]),e("LabeledSelect",{staticClass:"table-options-grouping-select",attrs:{clearable:!0,options:t.groupOptions,disabled:!1,searchable:!1,mode:"edit",multiple:!1,taggable:!1},model:{value:t.advGroup,callback:function(e){t.advGroup=e},expression:"advGroup"}})],1):t._e(),e("p",{staticClass:"table-options-col-subtitle mb-20"},[t._v(" "+t._s(t.t("sortableTable.tableHeader.show"))+": ")]),e("ul",t._l(t.tableColsOptions,(function(n,r){return e("li",{directives:[{name:"show",rawName:"v-show",value:n.isTableOption,expression:"col.isTableOption"}],key:r,class:{visible:!n.preventColToggle}},[e("Checkbox",{directives:[{name:"show",rawName:"v-show",value:!n.preventColToggle,expression:"!col.preventColToggle"}],staticClass:"table-options-checkbox",attrs:{label:n.label},on:{input:function(e){return t.tableOptionsCheckbox(e,n.label)}},model:{value:n.isColVisible,callback:function(e){t.$set(n,"isColVisible",e)},expression:"col.isColVisible"}})],1)})),0)])])]):t.rowActions?e("th",{attrs:{width:t.rowActionsWidth}}):t._e()],2)])},P=[],$=n("98d3");function M(t,e){var n;if(t=null===(n=t)||void 0===n?void 0:n.parentElement,!t)return null;const r=t.matches||t.matchesSelector;return r.call(t,e)?t:M(t,e)}const F="all",B="some",U="none";var G={mounted(){const t=this.$el.querySelector("TABLE");this._onRowClickBound=this.onRowClick.bind(this),this._onRowMousedownBound=this.onRowMousedown.bind(this),this._onRowContextBound=this.onRowContext.bind(this),t.addEventListener("click",this._onRowClickBound),t.addEventListener("mousedown",this._onRowMousedownBound),t.addEventListener("contextmenu",this._onRowContextBound)},beforeDestroy(){const t=this.$el.querySelector("TABLE");t.removeEventListener("click",this._onRowClickBound),t.removeEventListener("mousedown",this._onRowMousedownBound),t.removeEventListener("contextmenu",this._onRowContextBound)},computed:{howMuchSelected(){const t=this.pagedRows.length,e=this.selectedRows.length;return e>=t&&t>0?F:e>0?B:U},bulkActionsForSelection(){let t=!1;const e=this.pagedRows,n=this.arrangedRows;let r=this.selectedRows;if(!this.selectedRows.length){if(!n)return[];const e=n[0];r=e?[e]:[],t=!0}const o={};for(const a of e)if(a.availableActions)for(const t of a.availableActions)t.bulkable&&V(o,t,!1);for(const a of r)if(a.availableActions)for(const t of a.availableActions)t.bulkable&&t.enabled&&V(o,t,!1);const i=q(o,t);return i.forEach(t=>{const e=this.selectedRows.some(e=>{const n=e.availableActions||[];return n.some(e=>e.action===t.action&&e.enabled)});t.enabled=this.selectedRows.length>0&&e}),i.sort((t,e)=>(e.weight||0)-(t.weight||0))}},data(){return{selectedRows:[],prevNode:null}},watch:{pagedRows(){const t=this.pagedRows,e=[];for(const n of this.selectedRows)t.includes(n)||e.push(n);this.update([],e)}},methods:{onToggleAll(t){return t?(this.update(this.pagedRows,[]),!0):(this.update([],this.pagedRows),!1)},onRowMousedown(t){(Object($["d"])(t)||this.isSelectionCheckbox(t.target))&&t.preventDefault()},onRowMouseEnter(t){const e=t.target.closest("TR");if(e.classList.contains("sub-row")){const t=e.previousElementSibling;t.classList.add("sub-row-hovered")}},onRowMouseLeave(t){const e=t.target.closest("TR");if(e.classList.contains("sub-row")){const t=e.previousElementSibling;t.classList.remove("sub-row-hovered")}},nodeForEvent(t){const e=t.target.tagName,n=t.target,r=n.closest(".actions");if(n.classList.contains("select-all-check"))return;if(!r&&("A"===e||"BUTTON"===e||M(n,".btn")))return;const o=t.target.closest("TR");return this.nodeForRow(o)},nodeForRow(t){var e;if(null!==(e=t)&&void 0!==e&&e.classList.contains("separator-row"))return;while(t&&!t.classList.contains("main-row"))t=t.previousElementSibling;if(!t)return;const n=t.dataset.nodeId;if(!n)return;const r=this.pagedRows.find(t=>Object(l["f"])(t,this.keyField)===n);return r},async onRowClick(t){const e=this.nodeForEvent(t),n=t.target.closest("TD"),r=null===n||void 0===n?void 0:n.classList.contains("skip-select");if(r)return;const o=this.selectedRows,i=this.isSelectionCheckbox(t.target)||(null===n||void 0===n?void 0:n.classList.contains("row-check")),a=null===n||void 0===n?void 0:n.classList.contains("row-expand"),s=this.pagedRows;if(this.$emit("rowClick",t),!e)return;if(a)return void this.toggleExpand(e);const c=t.target.closest(".actions");if(c){let n=[e];if(this.mangleActionResources){const t=c.querySelector("i");t.classList.remove("icon-actions"),t.classList.add("icon-spinner"),t.classList.add("icon-spin");try{n=await this.mangleActionResources(n)}finally{t.classList.remove("icon-spinner"),t.classList.remove("icon-spin"),t.classList.add("icon-actions")}}return void this.$store.commit("action-menu/show",{resources:n,event:t,elem:c})}const l=o.includes(e);let u=this.prevNode;if(u&&s.includes(u)||(u=e),Object($["c"])(t))this.toggle(e);else if(Object($["d"])(t)){const t=this.nodesBetween(u,e);l?this.update([],t):this.update(t,[])}else i?this.toggle(e):this.update([e],s);this.prevNode=e},async onRowContext(t){const e=this.nodeForEvent(t);if(Object($["e"])(t))return;if(!e)return;t.preventDefault(),t.stopPropagation(),this.prevNode=e;const n=this.selectedRows.includes(e);n||this.update([e],this.selectedRows.slice());let r=this.selectedRows;this.mangleActionResources&&(r=await this.mangleActionResources(r)),this.$store.commit("action-menu/show",{resources:r,event:t})},keySelectRow(t,e=!1){const n=this.nodeForRow(t),r=this.pagedRows;n&&(e?this.update([n],[]):this.update([n],r),this.prevNode=n)},isSelectionCheckbox(t){return"INPUT"===t.tagName&&"checkbox"===t.type&&null!==t.closest(".selection-checkbox")},nodesBetween(t,e){let n=[];const r=this.groupBy;if(r){const r=this.groupedRows;let o=this.groupIdx(t),i=this.groupIdx(e);if(!o||!i)return[];(o.group>i.group||o.group===i.group&&o.item>i.item)&&([o,i]=[i,o]);for(let t=o.group;t<=i.group;t++){const e=r[t].rows;let a=o.group===t?o.item:0;while(e[a]&&(t!this.selectedRows.includes(t)),n},groupIdx(t){const e=this.groupedRows;for(let n=0;n{const e=this.selectedRows.findIndex(e=>e===t);-1!==e&&this.selectedRows.splice(e,1)}),t&&this.selectedRows.push(...t),e.length&&this.$nextTick(()=>{for(let t=0;t{for(let e=0;e{this.$emit("selection",this.selectedRows)})},updateInput(t,e,n){const r=Object(l["f"])(t,n);if(r){const t=this.$el.querySelector(`div[data-checkbox-ctrl][data-node-id="${r}"]`);if(t&&!t.disabled){const n=t.querySelector("label");n&&(n.value=e);let r=t.closest("tr"),o=!0;while(r&&(o||r.classList.contains("sub-row")))e?r.classList.add("row-selected"):r.classList.remove("row-selected"),r=r.nextElementSibling,o=!1}}},select(t){t.forEach(t=>{const e=Object(l["f"])(t,this.keyField),n=this.$el.querySelector(`label[data-node-id="${e}"]`);n.dispatchEvent(new Event("click"))})},applyTableAction(t,e,n){const r={alt:n&&Object($["a"])(n),event:n},o=this.selectedRows.filter(e=>{const n=e.availableActions.find(e=>e.action===t.action);return null===n||void 0===n?void 0:n.enabled});z(o,t,e,r,this),this.actionOfInterest=null},clearSelection(){this.update([],this.selectedRows)}}};let H=0;function V(t,e,n=!0){let r=e.action;r||(r="anon"+H,H++);let o=t[r];return o||(o=Object.assign({},e),t[r]=o,o.allEnabled=!1),e.enabled?o.anyEnabled=!0:o.allEnabled=!1,n&&(o.available=(o.available||0)+(e.enabled?1:0),o.total=(o.total||0)+1),o}function q(t,e=!1){const n=Object(u["c"])(Object.values(t),"anyEnabled",!0);for(const r of n)r.enabled=!e&&r.available>=r.total;return n}function z(t,e,n,r={},o){if(n=n||[],e.invoke){const i={action:e,event:r.event,isAlt:!!r.alt};return e.invoke.apply(o,[i,t||[],n])}if(t.length>1&&e.bulkAction&&!r.alt){const r=t[0][e.bulkAction];if(r)return r.call(t[0],t,...n)}const i=[];for(const a of t){let t;t=r.alt&&e.altAction?a[e.altAction]:a[e.action],t&&i.push(t.apply(a,n))}return Promise.all(i)}const K="left",W="right",X="top",Y="center",J="center",Q="bottom",Z="auto";function tt(t){const e=t.getBoundingClientRect(),n=t.offsetWidth,r=t.offsetHeight;return{top:e.top,right:e.left+n,bottom:e.top+r,left:e.left,width:n,height:r}}function et(t){return{top:t.clientY,left:t.clientX,bottom:t.clientY,right:t.clientX,width:0,height:0}}function nt(){const t=window.innerWidth,e=window.innerHeight,n=window.pageYOffset,r=window.pageXOffset;return{top:n,right:r+t,bottom:n+e,left:r,width:t,height:e}}function rt(t,e,n,r){let{positionX:o=Z,positionY:i=Z}=n||{};const{fudgeX:a=0,fudgeY:s=0,overlapX:c=!0,overlapY:l=!1}=n||{},u=nt();let d;d=e instanceof Event?et(e):tt(e);let p={};t&&(p=tt(t)),r&&(p={top:0,right:147,bottom:163,left:0,width:147,height:80});const f={position:"absolute"},h={left:c?d.left:d.right,center:(d.left+d.right)/2,right:c?d.right:d.left,top:l?d.bottom:d.top,middle:(d.top+d.bottom)/2,bottom:l?d.top:d.bottom},v={left:u.right-p.width-h.left,center:Math.min(u.right-p.width/2-h.center,h.center-p.width/2-u.left),right:h.right-p.width-u.left,top:h.bottom-p.height-u.top,middle:Math.min(h.middle-p.height/2-u.top,u.bottom-p.height/2-h.middle),bottom:u.bottom-p.height-h.top};switch(o===Y&&v.center<0&&(o=Z),o===Z?o=v.left<0||1.5*v.right>v.left?W:K:i===K&&v.left<0?o=W:i===W&&v.right<0&&(o=K),o){case K:f.left=h.left-a+"px";break;case Y:f.left=(h.left+h.right)/2-p.width/2-a+"px";break;case W:f.left=h.right+a-p.width+"px";break}switch(i===J&&v.middle<0&&(i=Z),i===Z?i=v.top<0||1.5*v.bottom>v.top?Q:X:i===X&&v.top<0?i=Q:i===Q&&v.bottom<0&&(i=X),i){case X:f.top=h.top+s-p.height+"px";break;case Y:f.top=(h.top+h.bottom)/2+s-p.height+"px";break;case Q:f.top=h.bottom-s+"px";break}return f}var ot=function(){var t=this,e=t._self._c;return e("div",{ref:"select",staticClass:"labeled-select",class:{disabled:t.isView||t.disabled,focused:t.focused,[t.mode]:!0,[t.status]:t.status,taggable:t.$attrs.taggable,taggable:t.$attrs.multiple,hoverable:t.hoverTooltip,"compact-input":t.isCompact,"no-label":!t.hasLabel},on:{click:t.focusSearch,focus:t.focusSearch}},[e("div",{class:{"labeled-container":!0,raised:t.raised,empty:t.empty,[t.mode]:!0},style:{border:"none"}},[t.hasLabel?e("label",[t.labelKey?e("t",{attrs:{k:t.labelKey}}):t.label?[t._v(t._s(t.label))]:t._e(),t.requiredField?e("span",{staticClass:"required"},[t._v("*")]):t._e()],2):t._e()]),e("v-select",t._g(t._b({ref:"select-input",staticClass:"inline",class:{"no-label":!(t.label||"").length},attrs:{"append-to-body":t.appendToBody,"calculate-position":t.positionDropdown,clearable:t.clearable,disabled:t.isView||t.disabled||t.loading,"get-option-key":t.getOptionKey,"get-option-label":e=>t.getOptionLabel(e),label:t.optionLabel,options:t.options,"map-keydown":t.mappedKeys,placeholder:t.placeholder,reduce:e=>t.reduce(e),searchable:t.isSearchable,selectable:t.selectable,value:null==t.value||t.loading?"":t.value,"dropdown-should-open":t.dropdownShouldOpen},on:{"search:blur":t.onBlur,"search:focus":t.onFocus,search:t.onSearch,open:t.onOpen,close:t.onClose,"option:selected":function(e){return t.$emit("selecting",e)}},scopedSlots:t._u([{key:"option",fn:function(n){return["group"===n.kind?[e("div",{staticClass:"vs__option-kind-group"},[e("b",[t._v(t._s(t.getOptionLabel(n)))]),n.badge?e("div",[t._v(" "+t._s(n.badge)+" ")]):t._e()])]:"divider"===n.kind?[e("hr")]:"highlighted"===n.kind?[e("div",{staticClass:"option-kind-highlighted"},[t._v(" "+t._s(n.label)+" ")])]:e("div",{on:{mousedown:e=>t.onClickOption(n,e)}},[t._v(" "+t._s(t.getOptionLabel(n))+" "),n.error?e("i",{staticClass:"icon icon-warning pull-right",staticStyle:{"font-size":"20px"}}):t._e()])]}},t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(e){return[t._t(n,null,null,e)]}}}))],null,!0)},"v-select",t.$attrs,!1),t.$listeners)),t.loading?e("i",{staticClass:"icon icon-spinner icon-spin icon-lg"}):t._e(),t.tooltip&&!t.focused?e("LabeledTooltip",{attrs:{hover:t.hoverTooltip,value:t.tooltip,status:t.status}}):t._e(),t.validationMessage?e("LabeledTooltip",{attrs:{hover:t.hoverTooltip,value:t.validationMessage}}):t._e()],1)},it=[],at=v.a.extend({props:{compact:{type:Boolean,default:null},label:{type:String,default:null},labelKey:{type:String,default:null}},computed:{isCompact(){return null!==this.compact?this.compact:!(this.label||this.labelKey)}}}),st=n("da25");function ct(t,e){t&&("function"===typeof e&&(e=e()),t.style.width="string"!==typeof e?e+"px":e)}function lt(t){if(t&&t.length)return t.length?parseFloat(getComputedStyle(t[0]).width.replace("px","")):parseFloat(getComputedStyle(t).width.replace("px",""))}var ut=v.a.extend({inheritAttrs:!1,props:{mode:{type:String,default:st["i"]},label:{type:String,default:null},labelKey:{type:String,default:null},placeholderKey:{type:String,default:null},tooltip:{type:[String,Object],default:null},hoverTooltip:{type:Boolean,default:!0},tooltipKey:{type:String,default:null},required:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},placeholder:{type:[String,Number],default:""},value:{type:[String,Number,Object],default:""},options:{default:null,type:Array},searchable:{default:!1,type:Boolean},rules:{default:()=>[],type:Array,validator:t=>t.every(t=>["function"].includes(typeof t))}},data(){return{raised:this.mode===st["m"]||!!(""+this.value),focused:!1,blurred:null}},computed:{requiredField(){return this.required||this.rules.some(t=>"required"===(null===t||void 0===t?void 0:t.name))},empty(){return!!(""+this.value)},isView(){return this.mode===st["m"]},isDisabled(){return this.disabled||this.isView},isSearchable(){const{searchable:t}=this,e=this.options||[];return!!(t||e.length>=10)},validationMessage(){const t=this.rules.find(t=>"required"===(null===t||void 0===t?void 0:t.name)),e=[],n=null===this||void 0===this?void 0:this.value;if(t&&this.blurred&&!this.focused){const e=t(n);if(e)return e}for(const r of this.rules){const t=r(n);t&&"required"!==r.name&&e.push(t)}return e.length>0&&(this.blurred||this.focused)?e.join(", "):void 0}},methods:{resizeHandler(){this.$nextTick(()=>{const t=this.$refs.select.querySelector("ul.vs__dropdown-menu"),e=lt(this.$refs.select)||0,n=lt(t)||0;nthis.optionKey?this.get(t,this.optionKey):this.getOptionLabel(t),r=n(t),o=this.value||[],i=o.findIndex(t=>n(t)===r);i<0||(this.value.splice(i,1),this.$emit("input",this.value),e.preventDefault(),e.stopPropagation(),this.closeOnSelect&&this.$refs["select-input"].closeSearchOptions())}function yt(t,e,n,r){const o=e.$parent.$el,i=o.getBoundingClientRect(),a=r||"bottom-start",s=document.body.offsetHeight,c=s-window.scrollY-i.y-1;let l;if(!a.includes("top")){l=i.y+i.height-1;const e=l+t.offsetHeight;e>window.innerHeight?l=void 0:l+=window.scrollY}l?(t.style.top=l+"px",t.classList.remove("vs__dropdown-up"),o.classList.remove("vs__dropdown-up")):(t.style.bottom=c+"px",t.classList.add("vs__dropdown-up"),o.classList.add("vs__dropdown-up")),t.style.left=i.x+"px",t.style.width="min-content",t.style.minWidth=i.width+"px"}var wt=n("9e74"),_t=n.n(wt),xt={name:"LabeledSelect",components:{LabeledTooltip:bt},mixins:[at,ut,gt["a"]],props:{appendToBody:{default:!0,type:Boolean},clearable:{default:!1,type:Boolean},disabled:{default:!1,type:Boolean},required:{default:!1,type:Boolean},hoverTooltip:{default:!0,type:Boolean},loading:{default:!1,type:Boolean},localizedLabel:{default:!1,type:Boolean},optionKey:{default:null,type:String},optionLabel:{default:"label",type:String},placement:{default:null,type:String},reduce:{default:t=>t&&"object"===typeof t&&void 0!==t.value?t.value:t,type:Function},selectable:{default:t=>!t||!t.disabled&&"group"!==t.kind&&"divider"!==t.kind&&!t.loading,type:Function},status:{default:null,type:String},tooltip:{default:null,type:[String,Object]},value:{default:null,type:[String,Object,Number,Array,Boolean]},closeOnSelect:{type:Boolean,default:!0}},data(){return{selectedVisibility:"visible",shouldOpen:!0}},computed:{hasLabel(){return!this.isCompact&&(!!this.label||!!this.labelKey||!!this.$slots.label)}},methods:{focusSearch(){const t=Date.now()-this.blurred;!this.focused&&t<250||this.$nextTick(()=>{var t;const e=null===(t=this.$refs["select-input"])||void 0===t?void 0:t.searchEl;e&&e.focus()})},onFocus(){this.selectedVisibility="hidden",this.onFocusLabeled()},onBlur(){this.selectedVisibility="visible",this.onBlurLabeled()},onOpen(){this.$emit("on-open"),this.resizeHandler()},onClose(){this.$emit("on-close")},getOptionLabel(t){if(!t)return;const e=!this.options.find(e=>t[this.optionLabel]===e[this.optionLabel]);if(e&&this.options){const e=this.options.find(e=>_t()(this.reduce(t),this.reduce(e)));if(e){const t=Object(l["f"])(e,this.optionLabel);return this.localizedLabel&&this.$store.getters["i18n/t"](t)||t}}if(this.$attrs["get-option-label"])return this.$attrs["get-option-label"](t);if(Object(l["f"])(t,this.optionLabel)){if(this.localizedLabel){const e=Object(l["f"])(t,this.optionLabel);return this.$store.getters["i18n/t"](e)||e}return Object(l["f"])(t,this.optionLabel)}return t},positionDropdown(t,e,{width:n}){yt(t,e,n,this.placement)},get:l["f"],onClickOption(t,e){mt.call(this,t,e)},dropdownShouldOpen(t,e=!1){const{noDrop:n,mutableLoading:r}=t,{open:o}=t,i=this.shouldOpen;return e?(t.open=!0,!0):(!1===i&&(this.shouldOpen=!0,t.closeSearchOptions()),!n&&(o&&i&&!r))},onSearch(t){t&&this.dropdownShouldOpen(this.$refs["select-input"],!0)},getOptionKey(t){return this.optionKey?Object(l["f"])(t,this.optionKey):this.getOptionLabel(t)}}},Ot=xt,kt=(n("a805"),Object(x["a"])(Ot,ot,it,!1,null,"0abf511e",null)),At=kt.exports,Et={components:{Checkbox:d["a"],LabeledSelect:At},props:{columns:{type:Array,required:!0},sortBy:{type:String,required:!0},defaultSortBy:{type:String,default:""},group:{type:String,default:""},groupOptions:{type:Array,default:()=>[]},descending:{type:Boolean,required:!0},hasAdvancedFiltering:{type:Boolean,required:!1},tableColsOptions:{type:Array,default:()=>[]},tableActions:{type:Boolean,required:!0},rowActions:{type:Boolean,required:!0},howMuchSelected:{type:String,required:!0},checkWidth:{type:Number,default:30},rowActionsWidth:{type:Number,required:!0},subExpandColumn:{type:Boolean,default:!1},expandWidth:{type:Number,default:30},labelFor:{type:Function,required:!0},noRows:{type:Boolean,default:!0},noResults:{type:Boolean,default:!0},loading:{type:Boolean,required:!1}},data(){return{tableColsOptionsVisibility:!1,tableColsMenuPosition:null}},watch:{advancedFilteringValues(){this.watcherUpdateLiveAndDelayed(!0,!1)},tableColsOptionsVisibility(t){t?(window.addEventListener("click",this.onClickOutside),this.$emit("update-cols-options")):window.removeEventListener("click",this.onClickOutside)}},computed:{isAll:{get(){return this.howMuchSelected!==U},set(t){this.$emit("on-toggle-all",t)}},hasAdvGrouping(){var t,e;return(null===(t=this.group)||void 0===t?void 0:t.length)&&(null===(e=this.groupOptions)||void 0===e?void 0:e.length)},advGroup:{get(){return this.group||this.advGroup},set(t){this.$emit("group-value-change",t)}},isIndeterminate(){return this.howMuchSelected===B}},methods:{changeSort(t,e){if(!e.sort)return;let n=!1;this.sortBy===e.name&&(n=!this.descending),this.$emit("on-sort-change",e.name,n)},isCurrent(t){return t.name===this.sortBy},tableColsOptionsClick(t){const e=document.querySelector(".table-options-container"),n=document.querySelector(".table-options-btn");this.tableColsMenuPosition||(this.tableColsMenuPosition=rt(e,t||n,{overlapX:!0,fudgeX:26,fudgeY:-22,positionX:Y,positionY:Z})),this.tableColsOptionsVisibility=!this.tableColsOptionsVisibility},onClickOutside(t){const e=this.$refs["table-options"];e&&!e.contains(t.target)&&(this.tableColsOptionsVisibility=!1)},tableOptionsCheckbox(t,e){this.$emit("col-visibility-change",{label:e,value:t})},tooltip(t){if(!t.tooltip)return null;const e=this.$store.getters["i18n/exists"];return e(t.tooltip)?this.t(t.tooltip):t.tooltip}}},St=Et,Ct=(n("d6e7"),n("c310"),Object(x["a"])(St,D,P,!1,null,"96d8a090",null)),Tt=Ct.exports;const Rt="allcols",It="All Columns",Lt=":::islabel";var jt={data(){return{searchQuery:null,previousFilter:null,previousResult:null}},computed:{searchFields(){const t=Nt(this.columns);return this.extraSearchFields&&Object(u["b"])(t,this.extraSearchFields),t},filteredRows(){return this.hasAdvancedFiltering?this.handleAdvancedFiltering():this.handleFiltering()}},methods:{handleAdvancedFiltering(){if(this.subMatches=null,this.searchQuery.length){const t=(this.arrangedRows||[]).slice(),e=t.filter(t=>this.searchQuery.every(e=>{if(e.prop===Rt){const n=this.advFilterSelectOptions.slice(1);let r=[];return n.forEach(t=>{if(t.value.includes("[")&&t.value.includes("]"))r=r.concat(JSON.parse(t.value));else{const e=t.isLabel?`${t.label}${Lt}`:t.value;r.push(e)}}),Pt(r,[e.value],t)}{if(e.prop.includes("[")&&e.prop.includes("]"))return Pt(JSON.parse(e.prop),[e.value],t);let n=e.prop;return e.prop.includes("metadata.labels")&&(n=`${e.label}${Lt}`),Pt([n],[e.value],t)}}));return e}return this.arrangedRows},handleFiltering(){const t=(this.searchQuery||"").trim().toLowerCase();let e;if(t&&this.previousResult&&t.startsWith(this.previousFilter)?e=this.previousResult.slice():(this.previousResult=null,e=(this.arrangedRows||[]).slice()),this.previousFilter=t,!t.length)return this.subMatches=null,this.previousResult=null,e;const n=this.searchFields,r=t.split(/\s*[, ]\s*/),o=this.subSearch,i=this.subFields,a={};for(let s=e.length-1;s>=0;s--){const t=e[s];let c=0,d=!0;if(d=Pt(n,r,t),i&&o){const e=t[o]||[];for(let n=e.length-1;n>=0;n--){let e=!0;e=Pt(i,r,t),e&&c++}a[Object(l["f"])(t,this.keyField)]=c}d||0!==c||Object(u["g"])(e,s)}return this.subMatches=a,this.previousResult=e,e}},watch:{arrangedRows(t){this.previousResult=null}}};function Nt(t){const e=[];return(t||[]).forEach(t=>{const n=t.search;n?"string"===typeof n?Object(u["a"])(e,n):Object(u["f"])(n)&&Object(u["b"])(e,n):!1===n||Object(u["a"])(e,t.value||t.name)}),e.filter(t=>!!t)}const Dt=/^[0-9a-f\.:]+$/i;function Pt(t,e,n){for(let r=0;r0&&(t=r.substr(e+1),r=r.substr(0,e)),o=r.includes(".")?Object(l["f"])(n,r):n[r]}if(void 0!==o&&(o=(""+o).toLowerCase(),o))if(t){if("exact"===t){if(o===e)return!0}else if("ip"===t){const t=Dt.test(e);if(t){const t=new RegExp(`(?:^|\\.)${e}(?:\\.|$)`);if(t.test(o))return!0}}else if("prefix"===t&&0===o.indexOf(e))return!0}else if(o.includes((""+e).toLowerCase()))return!0}return!1}var Mt=n("1d19"),Ft={computed:{sortFields(){let t=(this.groupBy?this.groupSort||this.groupBy:null)||[],e=[];const n=(this.columns||this.headers).find(t=>t&&t.name&&t.name.toLowerCase()===this.sortBy.toLowerCase());this.sortBy&&n&&n.sort&&(e=n.sort),Array.isArray(t)||(t=[t]),Array.isArray(e)||(e=[e]);const r=[...t,...e];return Object(u["a"])(r,"nameSort"),Object(u["a"])(r,"id"),r},arrangedRows(){let t;if(this.sortGenerationFn&&(t=`${this.sortGenerationFn.apply(this)}/${this.rows.length}/${this.descending}/${this.sortFields.join(",")}`,this.cacheKey===t))return this.cachedRows;const e=Object(Mt["a"])(this.rows,this.sortFields,this.descending);return t&&(this.cacheKey=t,this.cachedRows=e),e}},data(){let t=null;if(this._defaultSortBy=this.defaultSortBy,!this._defaultSortBy){const t=this.headers.find(t=>!!t.defaultSort),e=this.headers.find(t=>"name"===t.name);if(t)this._defaultSortBy=t.name;else if(e)this._defaultSortBy=e.name;else{const t=this.headers.filter(t=>"state"!==t.name)[0];this._defaultSortBy=t?t.name:"id"}}return t&&this.headers.find(e=>e.name===t)||(t=this._defaultSortBy),{sortBy:t,descending:!1,cachedRows:null,cacheKey:null}},methods:{changeSort(t,e){this.sortBy=t,this.descending=e,this.setPage(1)}}},Bt=n("5000"),Ut={computed:{indexFrom(){return Math.max(0,1+this.perPage*(this.page-1))},indexTo(){return Math.min(this.filteredRows.length,this.indexFrom+this.perPage-1)},totalPages(){return Math.ceil(this.filteredRows.length/this.perPage)},showPaging(){return!this.loading&&this.paging&&this.totalPages>1},pagingDisplay(){const t={...this.pagingParams||{},count:this.filteredRows.length,pages:this.totalPages,from:this.indexFrom,to:this.indexTo};return this.$store.getters["i18n/t"](this.pagingLabel,t)},pagedRows(){return this.paging?this.filteredRows.slice(this.indexFrom-1,this.indexTo):this.filteredRows}},data(){const t=this.getPerPage();return{page:1,perPage:t}},watch:{pagedRows(){const t=this.indexFrom,e=this.filteredRows.length;this.totalPages>0&&this.page>1&&t>e&&this.setPage(this.totalPages)}},methods:{getPerPage(){let t=this.rowsPerPage||0;return t<=0&&(t=parseInt(this.$store.getters["prefs/get"](Bt["d"]),10)||0),t<=0&&(t=10),t},setPage(t){this.page!==t&&(this.page=t)},goToPage(t){let e;switch(t){case"first":e=1;break;case"prev":e=Math.max(1,this.page-1);break;case"next":e=Math.min(this.totalPages,this.page+1);break;case"last":e=this.totalPages;break}this.setPage(e)}}},Gt={computed:{groupedRows(){const t=this.groupBy,e=this.groupRef||t;if(!t)return[{key:"default",ref:"default",rows:this.pagedRows}];const n=[],r={};for(const o of this.pagedRows){const i=Object(l["f"])(o,t)||"",a=Object(l["f"])(o,e);let s=r[i];s?s.rows.push(o):(s={key:i,ref:a,rows:[o]},r[i]=s,n.push(s))}return n}}};const Ht="inline-block";var Vt={data(){return{bulkActionsClass:"bulk",bulkActionClass:"bulk-action",bulkActionsDropdownClass:"bulk-actions-dropdown",bulkActionAvailabilityClass:"action-availability",hiddenActions:[],updateHiddenBulkActions:N()(this.protectedUpdateHiddenBulkActions,10)}},beforeDestroy(){window.removeEventListener("resize",this.onWindowResize)},mounted(){window.addEventListener("resize",this.onWindowResize),this.updateHiddenBulkActions()},watch:{selectedRows(){this.updateHiddenBulkActions()},keyedAvailableActions(){this.updateHiddenBulkActions()}},computed:{availableActions(){return this.bulkActionsForSelection.filter(t=>!t.external)},keyedAvailableActions(){return this.availableActions.map(t=>t.action)},selectedRowsText(){return this.selectedRows.length?this.t("sortableTable.actionAvailability.selected",{actionable:this.selectedRows.length}):null},actionTooltip(){if(!this.selectedRows.length||!this.actionOfInterest)return null;const t=this.selectedRows.filter(this.canRunBulkActionOfInterest).length;return t===this.selectedRows.length?null:this.t("sortableTable.actionAvailability.some",{actionable:t,total:this.selectedRows.length})}},methods:{onWindowResize(){this.updateHiddenBulkActions(),this.onScroll()},protectedUpdateHiddenBulkActions(){if(!this.$refs.container)return;const t=this.$refs.container.querySelector("."+this.bulkActionsClass),e=this.$refs.container.querySelector("."+this.bulkActionsDropdownClass);if(!t||!e)return;const n=t.offsetWidth,r=this.$refs.container.querySelectorAll("."+this.bulkActionClass),o=Array.from(r||[]),i=this.$refs.container.querySelector("."+this.bulkActionAvailabilityClass);let a=0;this.selectedRowsText&&(i?(i.style.display=Ht,a=i.offsetWidth):i.style.display="none;"),this.hiddenActions=[];let s=0,c=!1,l=n-a;for(let u=0;u=l)if(c){const e=t.attributes.getNamedItem("id").value;this.hiddenActions.push(this.availableActions.find(t=>t.action===e)),t.style.display="none"}else e.style.display=Ht,u=-1,s=0,c=!0,l=n-e.offsetWidth-a}c||(e.style.display="none")}}};const qt=Rt;var zt={props:{group:{type:String,default:()=>""},groupOptions:{type:Array,default:()=>[]},hasAdvancedFiltering:{type:Boolean,default:!1},advFilterHideLabelsAsCols:{type:Boolean,default:!1},advFilterPreventFilteringLabels:{type:Boolean,default:!1}},data(){return{columnOptions:[],colOptionsWatcher:null,advancedFilteringVisibility:!1,advancedFilteringValues:[],advFilterSearchTerm:null,advFilterSelectedProp:qt,advFilterSelectedLabel:It,column:null}},mounted(){this.hasAdvancedFiltering&&this.updateColsOptions()},watch:{advancedFilteringValues(){this.watcherUpdateLiveAndDelayed(!0,!1)},advancedFilteringVisibility(t){t?(window.addEventListener("click",this.onClickOutside),this.updateColsOptions()):window.removeEventListener("click",this.onClickOutside)}},computed:{advFilterSelectOptions(){return this.columnOptions.filter(t=>t.isFilter&&!t.preventFiltering)},advGroupOptions(){return this.groupOptions.map(t=>({label:this.t(t.tooltipKey),value:t.value}))}},methods:{handleColsVisibilyAndFiltering(t){const e=t;return this.columnOptions.forEach(t=>{if(t.isTableOption){const n=e.findIndex(e=>e.name===t.name);-1!==n?(e[n].isColVisible=t.isColVisible,e[n].isFilter=t.isFilter):e.push(t)}}),e},setColsOptions(){let t=[];const e=[],n=[],r=this.headers.slice().filter(t=>!t.maxPageSize||t.maxPageSize&&t.maxPageSize>=this.perPage);return r.forEach(t=>{var e;const r=t.name,o=t.labelKey?this.t(""+t.labelKey):t.label,i=!(Object.keys(t).includes("search")&&!t.search);let a=t.sort;const s=t.valueProp||t.value;let c=null,l=!0;if(t.sort&&s?("string"===typeof t.sort&&(a=t.sort.includes(":")?[t.sort.split(":")[0]]:[t.sort]),c=a.includes(s)?JSON.stringify([s]):JSON.stringify(a.concat([s]))):c=s?JSON.stringify([s]):null,null!==(e=this.columnOptions)&&void 0!==e&&e.length){const t=this.columnOptions.find(t=>t.name===r&&t.label===o);t&&(l=t.isColVisible)}n.push({name:r,label:o,value:c,isFilter:i,isTableOption:!0,isColVisible:l})}),this.rows.length&&this.rows.forEach(t=>{var n,r,o;null!==(n=t.metadata)&&void 0!==n&&n.labels&&Object.keys(null===(r=t.metadata)||void 0===r?void 0:r.labels).length&&Object.keys(null===(o=t.metadata)||void 0===o?void 0:o.labels).forEach(t=>{var n;const r={name:t,label:t,value:"metadata.labels."+t,isFilter:!0,isTableOption:!0,isColVisible:!1,isLabel:!0,preventFiltering:this.advFilterPreventFilteringLabels,preventColToggle:this.advFilterHideLabelsAsCols};if(null!==(n=this.columnOptions)&&void 0!==n&&n.length){const e=this.columnOptions.find(e=>e.name===t&&e.label===t);e&&(r.isColVisible=e.isColVisible)}e.filter(e=>e.label===t).length||e.push(r)})}),t=n.concat(e),t.length&&t.unshift({name:It,label:It,value:Rt,isFilter:!0,isTableOption:!1}),t},addAdvancedFilter(){this.advFilterSelectedProp&&this.advFilterSearchTerm&&(this.advancedFilteringValues.push({prop:this.advFilterSelectedProp,value:this.advFilterSearchTerm,label:this.advFilterSelectedLabel}),this.eventualSearchQuery=this.advancedFilteringValues,this.advancedFilteringVisibility=!1,this.advFilterSelectedProp=qt,this.advFilterSelectedLabel=It,this.advFilterSearchTerm=null)},clearAllAdvancedFilters(){this.advancedFilteringValues=[],this.eventualSearchQuery=this.advancedFilteringValues,this.advancedFilteringVisibility=!1,this.advFilterSelectedProp=qt,this.advFilterSelectedLabel=It,this.advFilterSearchTerm=null},clearAdvancedFilter(t){this.advancedFilteringValues.splice(t,1),this.eventualSearchQuery=this.advancedFilteringValues},onClickOutside(t){const e=this.$refs["advanced-filter-group"];e&&!e.contains(t.target)&&(this.advancedFilteringVisibility=!1)},updateColsOptions(){this.columnOptions=this.setColsOptions()},changeColVisibility(t){const e=this.columnOptions.findIndex(e=>e.label===t.label);-1!==e&&(this.columnOptions[e].isColVisible=t.value)}}};const Kt={},Wt={TABLET:"tablet",LAPTOP:"laptop",DESKTOP:"desktop"};var Xt={name:"SortableTable",components:{THead:Tt,Checkbox:d["a"],AsyncButton:k,ActionDropdown:R,LabeledSelect:At},mixins:[jt,Ft,Ut,Gt,G,Vt,zt],props:{headers:{type:Array,required:!0},rows:{type:Array,required:!0},keyField:{type:String,default:"_key"},loading:{type:Boolean,required:!1},groupBy:{type:String,default:null},groupRef:{type:String,default:null},groupSort:{type:Array,default:null},defaultSortBy:{type:String,default:null},tableActions:{type:Boolean,default:!0},rowActions:{type:Boolean,default:!0},mangleActionResources:{type:Function,default:null},rowActionsWidth:{type:Number,default:40},search:{type:Boolean,default:!0},extraSearchFields:{type:Array,default:null},subRows:{type:Boolean,default:!1},subExpandable:{type:Boolean,default:!1},subExpandColumn:{type:Boolean,default:!1},subSearch:{type:String,default:null},subFields:{type:Array,default:null},topDivider:{type:Boolean,default:!0},bodyDividers:{type:Boolean,default:!1},overflowX:{type:Boolean,default:!1},overflowY:{type:Boolean,default:!1},paging:{type:Boolean,default:!1},pagingLabel:{type:String,default:"sortableTable.paging.generic"},pagingParams:{type:Object,default:null},rowsPerPage:{type:Number,default:null},noRowsKey:{type:String,default:"sortableTable.noRows"},showNoRows:{type:Boolean,default:!0},noDataKey:{type:String,default:"sortableTable.noData"},showHeaders:{type:Boolean,default:!0},sortGenerationFn:{type:Function,default:null},getCustomDetailLink:{type:Function,default:null},componentTestid:{type:String,default:"sortable-table"},useQueryParamsForSimpleFiltering:{type:Boolean,default:!1},forceUpdateLiveAndDelayed:{type:Number,default:0}},data(){var t;let e="",n="";var r,o;!this.hasAdvancedFiltering&&this.useQueryParamsForSimpleFiltering&&null!==(t=this.$route.query)&&void 0!==t&&t.q&&(e=null===(r=this.$route.query)||void 0===r?void 0:r.q,n=null===(o=this.$route.query)||void 0===o?void 0:o.q);return{currentPhase:g.WAITING,expanded:{},searchQuery:e,eventualSearchQuery:n,actionOfInterest:null,loadingDelay:!1}},mounted(){this._loadingDelayTimer=setTimeout(()=>{this.loadingDelay=!0},200);const t=document.querySelector("main");this._onScroll=this.onScroll.bind(this),null===t||void 0===t||t.addEventListener("scroll",this._onScroll)},beforeDestroy(){clearTimeout(this.loadingDelayTimer),clearTimeout(this._scrollTimer),clearTimeout(this._loadingDelayTimer),clearTimeout(this._liveColumnsTimer),clearTimeout(this._delayedColumnsTimer),clearTimeout(this.manualRefreshTimer);const t=document.querySelector("main");null===t||void 0===t||t.removeEventListener("scroll",this._onScroll)},watch:{eventualSearchQuery:N()((function(t){if(this.searchQuery=t,!this.hasAdvancedFiltering&&this.useQueryParamsForSimpleFiltering){var e;const n={name:this.$route.name,params:{...this.$route.params},query:{...this.$route.query,q:t}};!t&&null!==(e=this.$route.query)&&void 0!==e&&e.q&&(n.query={}),this.$router.replace(n)}}),200),descending(t,e){this.watcherUpdateLiveAndDelayed(t,e)},searchQuery(t,e){this.watcherUpdateLiveAndDelayed(t,e)},sortFields(t,e){this.watcherUpdateLiveAndDelayed(t,e)},groupBy(t,e){this.watcherUpdateLiveAndDelayed(t,e)},namespaces(t,e){this.watcherUpdateLiveAndDelayed(t,e)},page(t,e){this.watcherUpdateLiveAndDelayed(t,e)},forceUpdateLiveAndDelayed(t,e){this.watcherUpdateLiveAndDelayed(t,e)},initalLoad:{handler(t){t&&(this._didinit=!0,this.$nextTick(()=>this.updateLiveAndDelayed()))},immediate:!0},manualRefreshLoadingFinished:{handler(t,e){this.currentPhase=t?g.ACTION:g.WAITING,t&&t!==e&&this.$nextTick(()=>this.updateLiveAndDelayed())},immediate:!0}},created(){this.debouncedRefreshTableData=N()(this.refreshTableData,500)},computed:{...Object(i["a"])({isTooManyItemsToAutoUpdate:"resource-fetch/isTooManyItemsToAutoUpdate"}),...Object(i["a"])({isManualRefreshLoading:"resource-fetch/manualRefreshIsLoading"}),namespaces(){return this.$store.getters["activeNamespaceCache"]},initalLoad(){var t;return!(this.loading||this._didinit||null===(t=this.rows)||void 0===t||!t.length)},manualRefreshLoadingFinished(){var t;return!(this.loading||!this._didinit||null===(t=this.rows)||void 0===t||!t.length||this.isManualRefreshLoading)},fullColspan(){let t=0;for(let e=0;e!t.maxPageSize||t.maxPageSize&&t.maxPageSize>=this.perPage);if(this.groupBy){const e=t.find(t=>t.name===this.groupBy);e&&Object(u["h"])(t,e)}const e=t.find(t=>!t.width);if(!e){const e=t.find(t=>t.canBeVariable);if(e){const n=Object(l["e"])(e);delete n.width,t.splice(t.indexOf(e),1,n)}}if(this.hasAdvancedFiltering){const e=this.handleColsVisibilyAndFiltering(t);return e}return t},dt(){const t={check:"Select: ",actions:"Actions: "};return this.columns.forEach(e=>{t[e.name]=(e.label||e.name)+":"}),t},classObject(){return{"top-divider":this.topDivider,"body-dividers":this.bodyDividers,"overflow-y":this.overflowY,"overflow-x":this.overflowX}},hasLiveColumns(){const t=this.columns.find(t=>{var e;return(null===(e=t.formatter)||void 0===e?void 0:e.startsWith("Live"))||t.liveUpdates});return!!t},hasDelayedColumns(){const t=this.columns.find(t=>t.delayLoading);return!!t},columnFormmatterIDs(){const t={};return this.columns.forEach(e=>{e.formatter&&(t[e.formatter]=Object(c["c"])(e.formatter))}),t},displayRows(){const t=[],e=this.columnFormmatterIDs;return this.groupedRows.forEach(n=>{const r={grp:n,key:n.key,ref:n.ref,rows:[]};t.push(r),n.rows.forEach(t=>{const n={row:t,key:this.get(t,this.keyField),showSubRow:this.showSubRow(t,this.keyField),canRunBulkActionOfInterest:this.canRunBulkActionOfInterest(t),columns:[]};r.rows.push(n),this.columns.forEach(r=>{var o;const i=r.delayLoading?void 0:this.valueFor(t,r,r.isLabel);let a,s=i,c=!1;if(Array.isArray(i)&&(s=i.join(", ")),r.formatter)if(Kt[r.formatter])a=Kt[r.formatter],c=!0;else{var l;const t=null===(l=this.$plugin)||void 0===l?void 0:l.getDynamic("formatters",r.formatter);t&&(a=t,c=!0)}n.columns.push({col:r,value:i,formatted:s,component:a,needRef:c,delayed:r.delayLoading,live:(null===(o=r.formatter)||void 0===o?void 0:o.startsWith("Live"))||r.liveUpdates,label:this.labelFor(r),dasherize:e[r.formatter]||""})})})}),t}},methods:{refreshTableData(){this.$store.dispatch("resource-fetch/doManualRefresh")},get:l["f"],dasherize:c["c"],onScroll(){(this.hasLiveColumns||this.hasDelayedColumns)&&(clearTimeout(this._liveColumnsTimer),clearTimeout(this._scrollTimer),clearTimeout(this._delayedColumnsTimer),this._scrollTimer=setTimeout(()=>{this.updateLiveColumns(),this.updateDelayedColumns()},300))},watcherUpdateLiveAndDelayed(t,e){t!==e&&this.$nextTick(()=>this.updateLiveAndDelayed())},updateLiveAndDelayed(){this.hasLiveColumns&&this.updateLiveColumns(),this.hasDelayedColumns&&this.updateDelayedColumns()},updateDelayedColumns(){if(clearTimeout(this._delayedColumnsTimer),!this.$refs.column||0===this.pagedRows.length)return;const t=this.$refs.column.filter(t=>t.startDelayedLoading&&!t.__delayedLoading),e=(window.innerHeight||document.documentElement.clientHeight)+100;let n=0;for(let r=0;r=0&&i<=e&&(o.startDelayedLoading(!0),o.__delayedLoading=!0,n++,4===n))return void(this._delayedColumnsTimer=setTimeout(this.updateDelayedColumns,100))}},updateLiveColumns(){if(clearTimeout(this._liveColumnsTimer),!this.$refs.column||!this.hasLiveColumns||0===this.pagedRows.length)return;const t=window.innerHeight||document.documentElement.clientHeight,e=this.$refs.column.filter(t=>!!t.liveUpdate),n=s()();let r=Number.MAX_SAFE_INTEGER;for(let o=0;o=0&&a<=t){const t=i.liveUpdate(n);tthis.updateLiveColumns(),1e3*r)},labelFor(t){return t.labelKey?this.t(t.labelKey,void 0,!0):t.label?t.label:Object(c["p"])(t.name)},valueFor(t,e,n){if("function"===typeof e.value)return e.value(t);var r,o,i;if(n)return null!==(r=t.metadata)&&void 0!==r&&r.labels&&null!==(o=t.metadata)&&void 0!==o&&o.labels[e.label]?null===(i=t.metadata)||void 0===i?void 0:i.labels[e.label]:"";const a=e.value||e.name,s=Object(l["f"])(t,a);return null===s||void 0===s?"":s},isExpanded(t){const e=t[this.keyField];return!!this.expanded[e]},toggleExpand(t){const e=t[this.keyField],n=!this.expanded[e];return this.expanded[e]=n,this.expanded={...this.expanded},n},setBulkActionOfInterest(t){this.actionOfInterest=t},canRunBulkActionOfInterest(t){if(!this.actionOfInterest)return!1;const e=t.availableActions.find(t=>t.action===this.actionOfInterest.action);return null===e||void 0===e?void 0:e.enabled},focusSearch(){this.$refs.searchQuery&&(this.$refs.searchQuery.focus(),this.$refs.searchQuery.select())},nearestCheckbox(){var t;return null===(t=document.activeElement.closest("tr.main-row"))||void 0===t?void 0:t.querySelector(".checkbox-custom")},focusAdjacent(t=!0){const e=Array.from(this.$el.querySelectorAll(".checkbox-custom")),n=this.nearestCheckbox();let r=-1;return r=n?e.indexOf(n)+(t?1:-1):t?1:e.length-1,r<1?(r=1,null):r>=e.length?(r=e.length-1,null):e[r]?(e[r].focus(),e[r]):void 0},focusNext:L()((function(t,e=!1){const n=this.focusAdjacent(!0),r=M(n,"tr");null!==r&&void 0!==r&&r.classList.contains("row-selected")||this.keySelectRow(r,e)}),50),focusPrevious:L()((function(t,e=!1){const n=this.focusAdjacent(!1),r=M(n,"tr");null!==r&&void 0!==r&&r.classList.contains("row-selected")||this.keySelectRow(r,e)}),50),showSubRow(t,e){const n=this.subRows&&(!this.subExpandable||this.expanded[Object(l["f"])(t,e)]),r=t.stateDescription;return n||r},handleActionButtonClick(t,e){this.$emit("clickedActionButton",{event:e,targetElement:this.$refs["actionButton"+t][0]})}}},Yt=Xt,Jt=(n("7e5c"),n("9001"),Object(x["a"])(Yt,r,o,!1,null,"3b0138b8",null));e["b"]=Jt.exports},1001:function(t,e,n){var r=n("986c");function o(t){var e=new t.constructor(t.byteLength);return new r(e).set(new r(t)),e}t.exports=o},1032:function(t,e,n){"use strict";var r=function(){var t=this,e=t._self._c;t._self._setupProxy;return e("div",{staticClass:"checkbox-outer-container",attrs:{"data-checkbox-ctrl":""}},[e("label",{staticClass:"checkbox-container",class:{disabled:t.isDisabled},attrs:{for:t.id},on:{keydown:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.preventDefault(),t.clicked(e))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"space",32,e.key,[" ","Spacebar"])?null:(e.preventDefault(),t.clicked(e))}],click:function(e){return t.clicked(e)}}},[e("input",{attrs:{type:"checkbox",tabindex:-1,name:t.id},domProps:{checked:t.isChecked,value:t.valueWhenTrue},on:{click:function(t){t.stopPropagation(),t.preventDefault()}}}),e("span",{staticClass:"checkbox-custom",class:{indeterminate:t.indeterminate},attrs:{tabindex:t.isDisabled?-1:0,"aria-label":t.label,"aria-checked":!!t.value,role:"checkbox"}}),t.$slots.label||t.label||t.labelKey||t.tooltipKey||t.tooltip?e("span",{staticClass:"checkbox-label",class:{"checkbox-primary":t.primary}},[t._t("label",(function(){return[t.labelKey?e("t",{attrs:{k:t.labelKey,raw:!0}}):t.label?[t._v(t._s(t.label))]:t._e(),t.tooltipKey?e("i",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.t(t.tooltipKey),expression:"t(tooltipKey)"}],staticClass:"checkbox-info icon icon-info icon-lg"}):t.tooltip?e("i",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip,expression:"tooltip"}],staticClass:"checkbox-info icon icon-info icon-lg"}):t._e()]}))],2):t._e()]),t.descriptionKey||t.description?e("div",{staticClass:"checkbox-outer-container-description"},[t.descriptionKey?e("t",{attrs:{k:t.descriptionKey}}):t.description?[t._v(" "+t._s(t.description)+" ")]:t._e()],2):t._e()])},o=[],i=n("8bbf"),a=n.n(i),s=n("da25"),c=n("bddd"),l=n("736a"),u=n.n(l),d=a.a.extend({name:"Checkbox",props:{value:{type:[Boolean,Array,String],default:!1},label:{type:String,default:null},labelKey:{type:String,default:null},id:{type:String,default:String(1e3*Math.random())},disabled:{type:Boolean,default:!1},indeterminate:{type:Boolean,default:!1},mode:{type:String,default:s["i"]},tooltip:{type:[String,Object],default:null},tooltipKey:{type:String,default:null},valueWhenTrue:{type:[Boolean,String,Number],default:!0},descriptionKey:{type:String,default:null},description:{type:String,default:null},primary:{type:Boolean,default:!1}},computed:{isDisabled(){return this.disabled||this.mode===s["m"]},isChecked(){return this.isMulti(this.value)?this.findTrueValues(this.value):this.value===this.valueWhenTrue}},methods:{clicked(t){if("A"===t.target.tagName&&t.target.href)return!0;if(t.stopPropagation(),t.preventDefault(),this.isDisabled)return;const e={bubbles:!0,cancelable:!1,shiftKey:t.shiftKey,altKey:t.altKey,ctrlKey:t.ctrlKey,metaKey:t.metaKey},n=new CustomEvent("click",e),r=u()(this.value);this.isMulti(r)?(this.isChecked?Object(c["h"])(r,this.valueWhenTrue):Object(c["a"])(r,this.valueWhenTrue),this.$emit("input",r)):this.isString(this.valueWhenTrue)?this.isChecked?this.$emit("input",null):this.$emit("input",this.valueWhenTrue):(this.$emit("input",!r),this.$el.dispatchEvent(n))},isMulti(t){return Array.isArray(t)},isString(t){return"string"===typeof t},findTrueValues(t){return t.find(t=>t===this.valueWhenTrue)||!1}}}),p=d,f=(n("13cb"),n("d802")),h=Object(f["a"])(p,r,o,!1,null,null,null);e["a"]=h.exports},"108e":function(t,e){function n(t){return function(e){return null==e?void 0:e[t]}}t.exports=n},"10d1":function(t,e,n){var r=n("201b"),o=function(){return r.Date.now()};t.exports=o},"11fb":function(t,e,n){"use strict";n("7dbf")},"122c":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".cluster-list-view[data-v-56771e1c]{margin-bottom:2rem}.cluster-list-view .favorite-icon[data-v-56771e1c]{margin-right:1rem;background:none}",""]),t.exports=e},1386:function(t,e){function n(t){var e=this.__data__,n=e["delete"](t);return this.size=e.size,n}t.exports=n},"13cb":function(t,e,n){"use strict";n("806a")},1722:function(t,e,n){"use strict";n.d(e,"a",(function(){return p}));var r=n("7083"),o=n("98d3"),i=n("2cb5"),a=n("da25"),s=n("4fce"),c=n("e24b");function l({name:t,params:e,query:n},r){const o=Object(s["a"])({name:t,params:e,query:n});return"home"===r&&"home"===t||r===o}function u({name:t,query:e},n){return!(n!==a["i"]||!e.mode||e.mode!==a["i"])||(!(n!==a["g"]||!e.as||e.as!==a["g"])||(!(n!==a["h"]||!t.includes("-id"))||!(n!==a["k"]||t.includes("-id")||!t.includes("-resource"))))}function d(t,e,n){if(!Object.keys(e).length)return!0;const{params:r}=t,o=["product","resource","namespace","cluster","id","mode","queryParam","context"];let i=!0;for(let a=0;a{if(d(a,t.locationConfig,c||{})){if(e===r["c"].CARD)n===r["b"].CLUSTER_DASHBOARD_CARD&&t.labelKey&&(l[p].label=s.t(t.labelKey));else if(e===r["c"].ACTION&&(n===r["a"].TABLE&&(t.labelKey&&(l[p].label=s.t(t.labelKey)),l[p].bulkable=l[p].multiple||l[p].bulkable,l[p].action||(l[p].action="custom-table-action-"+Object(i["l"])(10).toLowerCase())),n===r["a"].HEADER&&t.shortcut))if("string"===typeof t.shortcut)l[p].shortcutLabel=()=>o["b"]?`(⌘-${t.shortcut.toUpperCase()})`:`(Ctrl-${t.shortcut.toUpperCase()})`,l[p].shortcutKey={windows:["ctrl",t.shortcut],mac:["meta",t.shortcut]};else if("object"===typeof t.shortcut&&!Array.isArray(t.shortcut)&&null!==t.shortcut){l[p].shortcutKey=t.shortcut;const e=o["b"]?l[p].shortcut.mac:l[p].shortcut.windows?l[p].shortcut.windows:[];let n="";e.forEach((t,r)=>{r`(${n})`}u.push(l[p])}})}return u}},"17c2":function(t,e,n){var r=n("2376");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("2d1d510e",r,!0,{sourceMap:!1,shadowMode:!1})},"18ae":function(t,e,n){"use strict";n("0c0f")},"1a93":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".manual-refresh[data-v-3b0138b8]{height:40px}.advanced-filter-group[data-v-3b0138b8]{position:relative;margin-left:10px}.advanced-filter-group .advanced-filter-container[data-v-3b0138b8]{position:absolute;top:38px;right:0;width:300px;border:1px solid var(--primary);background-color:var(--body-bg);padding:20px;z-index:2}.advanced-filter-group .advanced-filter-container .middle-block[data-v-3b0138b8]{display:flex;align-items:center;margin-top:20px}.advanced-filter-group .advanced-filter-container .middle-block span[data-v-3b0138b8]{margin-right:20px}.advanced-filter-group .advanced-filter-container .middle-block button[data-v-3b0138b8]{margin-left:20px}.advanced-filter-group .advanced-filter-container .bottom-block[data-v-3b0138b8]{display:flex;align-items:center;margin-top:40px;justify-content:space-between}.advanced-filters-applied[data-v-3b0138b8]{display:inline-flex;margin:0;padding:0;list-style:none;max-width:100%;flex-wrap:wrap;justify-content:flex-end}.advanced-filters-applied li[data-v-3b0138b8]{margin:0 20px 10px 0;padding:2px 5px;border:1px solid;display:flex;align-items:center;position:relative;height:20px}.advanced-filters-applied li[data-v-3b0138b8]:nth-child(4n+1){border-color:var(--success)}.advanced-filters-applied li:nth-child(4n+1) .bg[data-v-3b0138b8]{background-color:var(--success)}.advanced-filters-applied li[data-v-3b0138b8]:nth-child(4n+2){border-color:var(--warning)}.advanced-filters-applied li:nth-child(4n+2) .bg[data-v-3b0138b8]{background-color:var(--warning)}.advanced-filters-applied li[data-v-3b0138b8]:nth-child(4n+3){border-color:var(--info)}.advanced-filters-applied li:nth-child(4n+3) .bg[data-v-3b0138b8]{background-color:var(--info)}.advanced-filters-applied li[data-v-3b0138b8]:nth-child(4n+4){border-color:var(--error)}.advanced-filters-applied li:nth-child(4n+4) .bg[data-v-3b0138b8]{background-color:var(--error)}.advanced-filters-applied li .bg[data-v-3b0138b8]{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.2;z-index:-1}.advanced-filters-applied li .label[data-v-3b0138b8]{margin-right:10px;font-size:11px}.advanced-filters-applied li .cross[data-v-3b0138b8]{font-size:12px;font-weight:700;cursor:pointer}td .actions.role-multi-action[data-v-3b0138b8]{background-color:transparent;border:none}td .actions.role-multi-action[data-v-3b0138b8]:focus,td .actions.role-multi-action[data-v-3b0138b8]:hover{background-color:var(--accent-btn);box-shadow:none}@media only screen and (max-width:480px){td.desktop[data-v-3b0138b8],td.laptop[data-v-3b0138b8],td.tablet[data-v-3b0138b8]{display:none}}@media only screen and (max-width:992px){td.desktop[data-v-3b0138b8],td.laptop[data-v-3b0138b8]{display:none}}@media only screen and (max-width:1281px){td.desktop[data-v-3b0138b8]{display:none}}tr td div.data-loading[data-v-3b0138b8]{align-items:center;display:flex;justify-content:center;padding:20px 0}tr td div.data-loading>i[data-v-3b0138b8]{font-size:20px;height:20px;margin-right:5px;width:20px}.search-box[data-v-3b0138b8]{height:40px;margin-left:10px;min-width:180px}",""]),t.exports=e},"1ab6":function(t,e,n){(function(t){var r=n("201b"),o=e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o,s=a?r.Buffer:void 0,c=s?s.allocUnsafe:void 0;function l(t,e){if(e)return t.slice();var n=t.length,r=c?c(n):new t.constructor(n);return t.copy(r),r}t.exports=l}).call(this,n("6984")(t))},"1c25":function(t,e,n){"use strict";if(n.r(e),"undefined"!==typeof window){var r=window.document.currentScript,o=r&&r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);o&&(n.p=o[1])}function i(t){t.register("l10n","en-us",()=>n.e(2).then(n.t.bind(null,"1bb6",7)))}var a=function(){var t=this,e=t._self._c;return t.loading?e("Loading",{attrs:{label:t.$store.getters["i18n/t"]("appLauncher.loading")}}):e("div",{staticClass:"main-container"},[e("ClusterActions",{attrs:{"search-query":t.searchQuery,"is-grid-view":"grid"===t.selectedView,"selected-cluster":t.selectedCluster,"cluster-options":t.clusterOptions,"sort-order":t.tableHeaders[0].sortOrder},on:{"update:search-query":t.updateSearchQuery,"toggle-sort":t.toggleSortOrder,"update:selected-cluster":function(e){t.selectedCluster=e},"set-view":function(e){t.selectedView=e}}}),t.favoritedApps.length>0?e("div",[e("div",{staticClass:"cluster-header"},[e("h2",[t._v(t._s(t.t("appLauncher.globalApps")))])]),e("div",{staticClass:"services-by-cluster-grid"},t._l(t.sortedFavoritedApps,(function(n){return e("AppLauncherCard",{key:`${n.clusterId}-${n.id}-${n.kind}-fav`,attrs:{app:n,isInGlobalView:!0,"favorited-apps":t.favoritedApps},on:{"toggle-favorite":t.toggleFavorite}})})),1)]):t._e(),t.selectedCluster?e("div",["grid"===t.selectedView?e("div",t._l(t.displayedClusterData,(function(n){return e("div",{key:n.id},[e("ClusterGridView",{attrs:{"cluster-data":n,"favorited-apps":t.favoritedApps},on:{"toggle-favorite":t.toggleFavorite}})],1)})),0):"list"===t.selectedView?e("div",t._l(t.displayedClusterData,(function(n){return e("div",{key:n.id},[e("ClusterListView",{attrs:{"cluster-data":n,"favorited-apps":t.favoritedApps,"table-headers":t.tableHeaders},on:{"toggle-favorite":t.toggleFavorite}})],1)})),0):t._e()]):e("div",[e("p",[t._v(t._s(t.$store.getters["i18n/t"]("appLauncher.noClusterSelected")))])])],1)},s=[],c=n("907c"),l=function(){var t=this,e=t._self._c;return t.loading?e("div",{staticClass:"loading-indicator"},[t.showMessage?e("div",{staticClass:"overlay",class:{"overlay-content-mode":"content"===t.mode,"overlay-main-mode":"main"===t.mode}},[e("t",{attrs:{k:"generic.loading",raw:!0}})],1):t._e()]):e("div",[t._t("default")],2)},u=[],d={props:{loading:{type:Boolean,default:!0},mode:{type:String,default:"content"},noDelay:{type:Boolean,default:!1}},data(){return{timer:null,showMessage:this.noDelay}},mounted(){this.timer=setTimeout(()=>{this.showMessage=!0},250)},beforeDestroy(){clearTimeout(this.timer)}},p=d,f=(n("c6c1"),n("d802")),h=Object(f["a"])(p,l,u,!1,null,"e765d1f4",null),v=h.exports,b=function(){var t=this,e=t._self._c;return t.app?e("Card",{staticClass:"app-launcher-card",attrs:{"show-highlight-border":!1,sticky:!0},scopedSlots:t._u([{key:"title",fn:function(){var n,r,o,i,a;return[e("div",{staticStyle:{width:"100%"}},[e("p",{staticStyle:{"font-size":"1.2rem"}},[t._v(" "+t._s(null===(n=t.app.metadata)||void 0===n?void 0:n.name)+" ")]),e("div",{staticStyle:{color:"var(--input-label)",display:"flex","justify-content":"space-between","margin-top":"4px"}},["Service"===t.app.kind&&void 0!==(null===(r=t.app.metadata)||void 0===r||null===(o=r.labels)||void 0===o?void 0:o["app.kubernetes.io/version"])?e("p",[t._v(" "+t._s(t.kubernetesVersion)+" ")]):t._e(),"Service"===t.app.kind&&void 0!==(null===(i=t.app.metadata)||void 0===i||null===(a=i.labels)||void 0===a?void 0:a["helm.sh/chart"])?e("p",[t._v(" "+t._s(t.helmChart)+" ")]):t._e(),"Ingress"===t.app.kind?e("p",[t._v(" Ingress ")]):t._e()])])]},proxy:!0},{key:"body",fn:function(){return["Service"===t.app.kind?e("p",[t._v(" "+t._s((t.isGlobalApp||t.isFavorited)&&t.isInGlobalView?t.app.clusterName+"/":"")+t._s(t.namespace)+"/"+t._s(t.name)+" ")]):t._e(),"Ingress"===t.app.kind?e("p",[t._v(" "+t._s((t.isGlobalApp||t.isFavorited)&&t.isInGlobalView?t.app.clusterName+": ":"")+t._s(t.ingressPath)+" ")]):t._e()]},proxy:!0},{key:"actions",fn:function(){var n,r,o,i,a;return[t.isGlobalApp?e("i",{staticClass:"icon icon-globe icon-only"}):e("button",{staticClass:"icon-button",on:{click:t.toggleFavorite}},[e("i",{class:["icon",t.isFavorited?"icon-star":"icon-star-open"]})]),(null!==(n=null===(r=t.endpoints)||void 0===r?void 0:r.length)&&void 0!==n?n:0)<=1&&"Service"===t.app.kind?e("a",{staticClass:"btn role-primary",attrs:{disabled:!(null!==(o=t.endpoints)&&void 0!==o&&o.length),href:null===(i=t.endpoints[0])||void 0===i?void 0:i.value,target:"_blank",rel:"noopener noreferrer nofollow",title:0===(null===(a=t.endpoints)||void 0===a?void 0:a.length)?t.t("appLauncher.noEndpointFoundForApp"):t.t("appLauncher.launchEndpoint",{endpoint:t.endpoints[0].label})}},[t._v(" "+t._s(t.t("appLauncher.launch"))+" ")]):"Ingress"===t.app.kind?e("a",{staticClass:"btn role-primary",attrs:{href:t.ingressPath,target:"_blank",rel:"noopener noreferrer nofollow"}},[t._v(" "+t._s(t.t("appLauncher.launch"))+" ")]):e("ButtonDropDown",{attrs:{"button-label":t.t("appLauncher.launch"),"dropdown-options":t.endpoints,title:t.t("appLauncher.launchAnEndpointFromSelection")},on:{"click-action":e=>t.openLink(e.value)}})]},proxy:!0}],null,!1,345375573)}):t._e()},g=[],m=function(){var t=this,e=t._self._c;t._self._setupProxy;return e("div",{staticClass:"card-container",class:{"highlight-border":t.showHighlightBorder,"card-sticky":t.sticky},attrs:{"data-testid":"card"}},[e("div",{staticClass:"card-wrap"},[e("div",{staticClass:"card-title",attrs:{"data-testid":"card-title-slot"}},[t._t("title",(function(){return[t._v(" "+t._s(t.title)+" ")]}))],2),e("hr"),e("div",{staticClass:"card-body",attrs:{"data-testid":"card-body-slot"}},[t._t("body",(function(){return[t._v(" "+t._s(t.content)+" ")]}))],2),t.showActions?e("div",{staticClass:"card-actions",attrs:{"data-testid":"card-actions-slot"}},[t._t("actions",(function(){return[e("button",{staticClass:"btn role-primary",on:{click:t.buttonAction}},[t._v(" "+t._s(t.buttonText)+" ")])]}))],2):t._e()])])},y=[],w=n("8bbf"),_=n.n(w),x=_.a.extend({name:"Card",props:{title:{type:String,default:""},content:{type:String,default:""},buttonAction:{type:Function,default:()=>{}},buttonText:{type:String,default:"go"},showHighlightBorder:{type:Boolean,default:!0},showActions:{type:Boolean,default:!0},sticky:{type:Boolean,default:!1}}}),O=x,k=(n("5622"),Object(f["a"])(O,m,y,!1,null,null,null)),A=k.exports,E=function(){var t=this,e=t._self._c;return e("v-select",t._b({ref:"button-dropdown",staticClass:"button-dropdown btn",class:{disabled:t.disabled,focused:t.focused},attrs:{"append-to-body":!0,"calculate-position":t.withPopper,searchable:!1,clearable:!1,"close-on-select":t.closeOnSelect,filterable:!1,value:t.buttonLabel,options:t.dropdownOptions,"map-keydown":t.mappedKeys,"get-option-key":e=>t.optionKey?t.get(e,t.optionKey):t.getOptionLabel(e),"get-option-label":e=>t.getOptionLabel(e),selectable:t.selectable},on:{"search:blur":t.onBlur,"search:focus":t.onFocus,input:function(e){return t.$emit("click-action",e)}},scopedSlots:t._u([{key:"selected-option",fn:function(n){return[e("button",{staticClass:"dropdown-button-two btn",attrs:{tabindex:"-1",type:"button"},on:{click:function(e){return t.ddButtonAction(n)},focus:t.focusSearch}},[t._v(" "+t._s(n.label)+" ")])]}},t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(e){return["selected-option"!==n?t._t(n,null,null,e):t._e()]}}}))],null,!0)},"v-select",t.$attrs,!1),[e("template",{slot:"no-options"},[t._t("no-options")],2)],2)},S=[];function C(t){var e=t.getBoundingClientRect();return{width:e.width,height:e.height,top:e.top,right:e.right,bottom:e.bottom,left:e.left,x:e.left,y:e.top}}function T(t){if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e?e.defaultView:window}return t}function R(t){var e=T(t),n=e.pageXOffset,r=e.pageYOffset;return{scrollLeft:n,scrollTop:r}}function I(t){var e=T(t).Element;return t instanceof e||t instanceof Element}function L(t){var e=T(t).HTMLElement;return t instanceof e||t instanceof HTMLElement}function j(t){return{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function N(t){return t!==T(t)&&L(t)?j(t):R(t)}function D(t){return t?(t.nodeName||"").toLowerCase():null}function P(t){return(I(t)?t.ownerDocument:t.document).documentElement}function $(t){return C(P(t)).left+R(t).scrollLeft}function M(t){return T(t).getComputedStyle(t)}function F(t){var e=M(t),n=e.overflow,r=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function B(t,e,n){void 0===n&&(n=!1);var r=P(e),o=C(t),i=L(e),a={scrollLeft:0,scrollTop:0},s={x:0,y:0};return(i||!i&&!n)&&(("body"!==D(e)||F(r))&&(a=N(e)),L(e)?(s=C(e),s.x+=e.clientLeft,s.y+=e.clientTop):r&&(s.x=$(r))),{x:o.left+a.scrollLeft-s.x,y:o.top+a.scrollTop-s.y,width:o.width,height:o.height}}function U(t){return{x:t.offsetLeft,y:t.offsetTop,width:t.offsetWidth,height:t.offsetHeight}}function G(t){return"html"===D(t)?t:t.assignedSlot||t.parentNode||t.host||P(t)}function H(t){return["html","body","#document"].indexOf(D(t))>=0?t.ownerDocument.body:L(t)&&F(t)?t:H(G(t))}function V(t,e){void 0===e&&(e=[]);var n=H(t),r="body"===D(n),o=T(n),i=r?[o].concat(o.visualViewport||[],F(n)?n:[]):n,a=e.concat(i);return r?a:a.concat(V(G(i)))}function q(t){return["table","td","th"].indexOf(D(t))>=0}function z(t){if(!L(t)||"fixed"===M(t).position)return null;var e=t.offsetParent;if(e){var n=P(e);if("body"===D(e)&&"static"===M(e).position&&"static"!==M(n).position)return n}return e}function K(t){var e=G(t);while(L(e)&&["html","body"].indexOf(D(e))<0){var n=M(e);if("none"!==n.transform||"none"!==n.perspective||n.willChange&&"auto"!==n.willChange)return e;e=e.parentNode}return null}function W(t){var e=T(t),n=z(t);while(n&&q(n)&&"static"===M(n).position)n=z(n);return n&&"body"===D(n)&&"static"===M(n).position?e:n||K(t)||e}var X="top",Y="bottom",J="right",Q="left",Z="auto",tt=[X,Y,J,Q],et="start",nt="end",rt="clippingParents",ot="viewport",it="popper",at="reference",st=tt.reduce((function(t,e){return t.concat([e+"-"+et,e+"-"+nt])}),[]),ct=[].concat(tt,[Z]).reduce((function(t,e){return t.concat([e,e+"-"+et,e+"-"+nt])}),[]),lt="beforeRead",ut="read",dt="afterRead",pt="beforeMain",ft="main",ht="afterMain",vt="beforeWrite",bt="write",gt="afterWrite",mt=[lt,ut,dt,pt,ft,ht,vt,bt,gt];function yt(t){var e=new Map,n=new Set,r=[];function o(t){n.add(t.name);var i=[].concat(t.requires||[],t.requiresIfExists||[]);i.forEach((function(t){if(!n.has(t)){var r=e.get(t);r&&o(r)}})),r.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){n.has(t.name)||o(t)})),r}function wt(t){var e=yt(t);return mt.reduce((function(t,n){return t.concat(e.filter((function(t){return t.phase===n})))}),[])}function _t(t){var e;return function(){return e||(e=new Promise((function(n){Promise.resolve().then((function(){e=void 0,n(t())}))}))),e}}function xt(t){var e=t.reduce((function(t,e){var n=t[e.name];return t[e.name]=n?Object.assign(Object.assign(Object.assign({},n),e),{},{options:Object.assign(Object.assign({},n.options),e.options),data:Object.assign(Object.assign({},n.data),e.data)}):e,t}),{});return Object.keys(e).map((function(t){return e[t]}))}var Ot={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),n=0;n=0?"x":"y"}function Lt(t){var e,n=t.reference,r=t.element,o=t.placement,i=o?Tt(o):null,a=o?Rt(o):null,s=n.x+n.width/2-r.width/2,c=n.y+n.height/2-r.height/2;switch(i){case X:e={x:s,y:n.y-r.height};break;case Y:e={x:s,y:n.y+n.height};break;case J:e={x:n.x+n.width,y:c};break;case Q:e={x:n.x-r.width,y:c};break;default:e={x:n.x,y:n.y}}var l=i?It(i):null;if(null!=l){var u="y"===l?"height":"width";switch(a){case et:e[l]=Math.floor(e[l])-Math.floor(n[u]/2-r[u]/2);break;case nt:e[l]=Math.floor(e[l])+Math.ceil(n[u]/2-r[u]/2);break;default:}}return e}function jt(t){var e=t.state,n=t.name;e.modifiersData[n]=Lt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}var Nt={name:"popperOffsets",enabled:!0,phase:"read",fn:jt,data:{}},Dt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Pt(t){var e=t.x,n=t.y,r=window,o=r.devicePixelRatio||1;return{x:Math.round(e*o)/o||0,y:Math.round(n*o)/o||0}}function $t(t){var e,n=t.popper,r=t.popperRect,o=t.placement,i=t.offsets,a=t.position,s=t.gpuAcceleration,c=t.adaptive,l=Pt(i),u=l.x,d=l.y,p=i.hasOwnProperty("x"),f=i.hasOwnProperty("y"),h=Q,v=X,b=window;if(c){var g=W(n);g===T(n)&&(g=P(n)),o===X&&(v=Y,d-=g.clientHeight-r.height,d*=s?1:-1),o===Q&&(h=J,u-=g.clientWidth-r.width,u*=s?1:-1)}var m,y=Object.assign({position:a},c&&Dt);return s?Object.assign(Object.assign({},y),{},(m={},m[v]=f?"0":"",m[h]=p?"0":"",m.transform=(b.devicePixelRatio||1)<2?"translate("+u+"px, "+d+"px)":"translate3d("+u+"px, "+d+"px, 0)",m)):Object.assign(Object.assign({},y),{},(e={},e[v]=f?d+"px":"",e[h]=p?u+"px":"",e.transform="",e))}function Mt(t){var e=t.state,n=t.options,r=n.gpuAcceleration,o=void 0===r||r,i=n.adaptive,a=void 0===i||i,s={placement:Tt(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign(Object.assign({},e.styles.popper),$t(Object.assign(Object.assign({},s),{},{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:a})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign(Object.assign({},e.styles.arrow),$t(Object.assign(Object.assign({},s),{},{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1})))),e.attributes.popper=Object.assign(Object.assign({},e.attributes.popper),{},{"data-popper-placement":e.placement})}var Ft={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Mt,data:{}};function Bt(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var n=e.styles[t]||{},r=e.attributes[t]||{},o=e.elements[t];L(o)&&D(o)&&(Object.assign(o.style,n),Object.keys(r).forEach((function(t){var e=r[t];!1===e?o.removeAttribute(t):o.setAttribute(t,!0===e?"":e)})))}))}function Ut(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach((function(t){var r=e.elements[t],o=e.attributes[t]||{},i=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:n[t]),a=i.reduce((function(t,e){return t[e]="",t}),{});L(r)&&D(r)&&(Object.assign(r.style,a),Object.keys(o).forEach((function(t){r.removeAttribute(t)})))}))}}var Gt={name:"applyStyles",enabled:!0,phase:"write",fn:Bt,effect:Ut,requires:["computeStyles"]};function Ht(t,e,n){var r=Tt(t),o=[Q,X].indexOf(r)>=0?-1:1,i="function"===typeof n?n(Object.assign(Object.assign({},e),{},{placement:t})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[Q,J].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}function Vt(t){var e=t.state,n=t.options,r=t.name,o=n.offset,i=void 0===o?[0,0]:o,a=ct.reduce((function(t,n){return t[n]=Ht(n,e.rects,i),t}),{}),s=a[e.placement],c=s.x,l=s.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=c,e.modifiersData.popperOffsets.y+=l),e.modifiersData[r]=a}var qt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Vt},zt={left:"right",right:"left",bottom:"top",top:"bottom"};function Kt(t){return t.replace(/left|right|bottom|top/g,(function(t){return zt[t]}))}var Wt={start:"end",end:"start"};function Xt(t){return t.replace(/start|end/g,(function(t){return Wt[t]}))}function Yt(t){var e=T(t),n=P(t),r=e.visualViewport,o=n.clientWidth,i=n.clientHeight,a=0,s=0;return r&&(o=r.width,i=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(a=r.offsetLeft,s=r.offsetTop)),{width:o,height:i,x:a+$(t),y:s}}function Jt(t){var e=P(t),n=R(t),r=t.ownerDocument.body,o=Math.max(e.scrollWidth,e.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),i=Math.max(e.scrollHeight,e.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),a=-n.scrollLeft+$(t),s=-n.scrollTop;return"rtl"===M(r||e).direction&&(a+=Math.max(e.clientWidth,r?r.clientWidth:0)-o),{width:o,height:i,x:a,y:s}}function Qt(t,e){var n=Boolean(e.getRootNode&&e.getRootNode().host);if(t.contains(e))return!0;if(n){var r=e;do{if(r&&t.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function Zt(t){return Object.assign(Object.assign({},t),{},{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function te(t){var e=C(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}function ee(t,e){return e===ot?Zt(Yt(t)):L(e)?te(e):Zt(Jt(P(t)))}function ne(t){var e=V(G(t)),n=["absolute","fixed"].indexOf(M(t).position)>=0,r=n&&L(t)?W(t):t;return I(r)?e.filter((function(t){return I(t)&&Qt(t,r)&&"body"!==D(t)})):[]}function re(t,e,n){var r="clippingParents"===e?ne(t):[].concat(e),o=[].concat(r,[n]),i=o[0],a=o.reduce((function(e,n){var r=ee(t,n);return e.top=Math.max(r.top,e.top),e.right=Math.min(r.right,e.right),e.bottom=Math.min(r.bottom,e.bottom),e.left=Math.max(r.left,e.left),e}),ee(t,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function oe(){return{top:0,right:0,bottom:0,left:0}}function ie(t){return Object.assign(Object.assign({},oe()),t)}function ae(t,e){return e.reduce((function(e,n){return e[n]=t,e}),{})}function se(t,e){void 0===e&&(e={});var n=e,r=n.placement,o=void 0===r?t.placement:r,i=n.boundary,a=void 0===i?rt:i,s=n.rootBoundary,c=void 0===s?ot:s,l=n.elementContext,u=void 0===l?it:l,d=n.altBoundary,p=void 0!==d&&d,f=n.padding,h=void 0===f?0:f,v=ie("number"!==typeof h?h:ae(h,tt)),b=u===it?at:it,g=t.elements.reference,m=t.rects.popper,y=t.elements[p?b:u],w=re(I(y)?y:y.contextElement||P(t.elements.popper),a,c),_=C(g),x=Lt({reference:_,element:m,strategy:"absolute",placement:o}),O=Zt(Object.assign(Object.assign({},m),x)),k=u===it?O:_,A={top:w.top-k.top+v.top,bottom:k.bottom-w.bottom+v.bottom,left:w.left-k.left+v.left,right:k.right-w.right+v.right},E=t.modifiersData.offset;if(u===it&&E){var S=E[o];Object.keys(A).forEach((function(t){var e=[J,Y].indexOf(t)>=0?1:-1,n=[X,Y].indexOf(t)>=0?"y":"x";A[t]+=S[n]*e}))}return A}function ce(t,e){void 0===e&&(e={});var n=e,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?ct:c,u=Rt(r),d=u?s?st:st.filter((function(t){return Rt(t)===u})):tt,p=d.filter((function(t){return l.indexOf(t)>=0}));0===p.length&&(p=d);var f=p.reduce((function(e,n){return e[n]=se(t,{placement:n,boundary:o,rootBoundary:i,padding:a})[Tt(n)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}function le(t){if(Tt(t)===Z)return[];var e=Kt(t);return[Xt(t),e,Xt(e)]}function ue(t){var e=t.state,n=t.options,r=t.name;if(!e.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,p=n.altBoundary,f=n.flipVariations,h=void 0===f||f,v=n.allowedAutoPlacements,b=e.options.placement,g=Tt(b),m=g===b,y=c||(m||!h?[Kt(b)]:le(b)),w=[b].concat(y).reduce((function(t,n){return t.concat(Tt(n)===Z?ce(e,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:h,allowedAutoPlacements:v}):n)}),[]),_=e.rects.reference,x=e.rects.popper,O=new Map,k=!0,A=w[0],E=0;E=0,I=R?"width":"height",L=se(e,{placement:S,boundary:u,rootBoundary:d,altBoundary:p,padding:l}),j=R?T?J:Q:T?Y:X;_[I]>x[I]&&(j=Kt(j));var N=Kt(j),D=[];if(i&&D.push(L[C]<=0),s&&D.push(L[j]<=0,L[N]<=0),D.every((function(t){return t}))){A=S,k=!1;break}O.set(S,D)}if(k)for(var P=h?3:1,$=function(t){var e=w.find((function(e){var n=O.get(e);if(n)return n.slice(0,t).every((function(t){return t}))}));if(e)return A=e,"break"},M=P;M>0;M--){var F=$(M);if("break"===F)break}e.placement!==A&&(e.modifiersData[r]._skip=!0,e.placement=A,e.reset=!0)}}var de={name:"flip",enabled:!0,phase:"main",fn:ue,requiresIfExists:["offset"],data:{_skip:!1}};function pe(t){return"x"===t?"y":"x"}function fe(t,e,n){return Math.max(t,Math.min(e,n))}function he(t){var e=t.state,n=t.options,r=t.name,o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0!==a&&a,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,p=n.tether,f=void 0===p||p,h=n.tetherOffset,v=void 0===h?0:h,b=se(e,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),g=Tt(e.placement),m=Rt(e.placement),y=!m,w=It(g),_=pe(w),x=e.modifiersData.popperOffsets,O=e.rects.reference,k=e.rects.popper,A="function"===typeof v?v(Object.assign(Object.assign({},e.rects),{},{placement:e.placement})):v,E={x:0,y:0};if(x){if(i){var S="y"===w?X:Q,C="y"===w?Y:J,T="y"===w?"height":"width",R=x[w],I=x[w]+b[S],L=x[w]-b[C],j=f?-k[T]/2:0,N=m===et?O[T]:k[T],D=m===et?-k[T]:-O[T],P=e.elements.arrow,$=f&&P?U(P):{width:0,height:0},M=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:oe(),F=M[S],B=M[C],G=fe(0,O[T],$[T]),H=y?O[T]/2-j-G-F-A:N-G-F-A,V=y?-O[T]/2+j+G+B+A:D+G+B+A,q=e.elements.arrow&&W(e.elements.arrow),z=q?"y"===w?q.clientTop||0:q.clientLeft||0:0,K=e.modifiersData.offset?e.modifiersData.offset[e.placement][w]:0,Z=x[w]+H-K-z,tt=x[w]+V-K,nt=fe(f?Math.min(I,Z):I,R,f?Math.max(L,tt):L);x[w]=nt,E[w]=nt-R}if(s){var rt="x"===w?X:Q,ot="x"===w?Y:J,it=x[_],at=it+b[rt],st=it-b[ot],ct=fe(at,it,st);x[_]=ct,E[_]=ct-it}e.modifiersData[r]=E}}var ve={name:"preventOverflow",enabled:!0,phase:"main",fn:he,requiresIfExists:["offset"]};function be(t){var e,n=t.state,r=t.name,o=n.elements.arrow,i=n.modifiersData.popperOffsets,a=Tt(n.placement),s=It(a),c=[Q,J].indexOf(a)>=0,l=c?"height":"width";if(o&&i){var u=n.modifiersData[r+"#persistent"].padding,d=U(o),p="y"===s?X:Q,f="y"===s?Y:J,h=n.rects.reference[l]+n.rects.reference[s]-i[s]-n.rects.popper[l],v=i[s]-n.rects.reference[s],b=W(o),g=b?"y"===s?b.clientHeight||0:b.clientWidth||0:0,m=h/2-v/2,y=u[p],w=g-d[l]-u[f],_=g/2-d[l]/2+m,x=fe(y,_,w),O=s;n.modifiersData[r]=(e={},e[O]=x,e.centerOffset=x-_,e)}}function ge(t){var e=t.state,n=t.options,r=t.name,o=n.element,i=void 0===o?"[data-popper-arrow]":o,a=n.padding,s=void 0===a?0:a;null!=i&&("string"!==typeof i||(i=e.elements.popper.querySelector(i),i))&&Qt(e.elements.popper,i)&&(e.elements.arrow=i,e.modifiersData[r+"#persistent"]={padding:ie("number"!==typeof s?s:ae(s,tt))})}var me={name:"arrow",enabled:!0,phase:"main",fn:be,effect:ge,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ye(t,e,n){return void 0===n&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function we(t){return[X,J,Y,Q].some((function(e){return t[e]>=0}))}function _e(t){var e=t.state,n=t.name,r=e.rects.reference,o=e.rects.popper,i=e.modifiersData.preventOverflow,a=se(e,{elementContext:"reference"}),s=se(e,{altBoundary:!0}),c=ye(a,r),l=ye(s,o,i),u=we(c),d=we(l);e.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},e.attributes.popper=Object.assign(Object.assign({},e.attributes.popper),{},{"data-popper-reference-hidden":u,"data-popper-escaped":d})}var xe={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:_e},Oe=[Ct,Nt,Ft,Gt,qt,de,ve,me,xe],ke=At({defaultModifiers:Oe}),Ae=n("e24b"),Ee=n("9c38"),Se=n.n(Ee),Ce=n("9f16"),Te={mixins:[Ce["a"]],props:{buttonLabel:{default:"",type:String},closeOnSelect:{default:!0,type:Boolean},disabled:{default:!1,type:Boolean},dropdownOptions:{default:()=>[],type:Array},optionKey:{default:null,type:String},optionLabel:{default:"label",type:String},size:{default:null,type:String},value:{default:null,type:String},placement:{default:"bottom-start",type:String},selectable:{default:t=>!t||!t.disabled&&"group"!==t.kind&&"divider"!==t.kind&&!t.loading,type:Function}},data(){return{focused:!1}},methods:{withPopper(t,e,{width:n}){const r=e.$refs.search.clientWidth,o=t.clientWidth;t.style.width=oi.destroy()},ddButtonAction(t){this.focusSearch(),this.$emit("dd-button-action",t)},getOptionLabel(t){return Se()(t)?t:this.$attrs["get-option-label"]?this.$attrs["get-option-label"](t):Object(Ae["f"])(t,this.optionLabel)?this.localizedLabel?this.$store.getters["i18n/t"](Object(Ae["f"])(t,this.optionLabel)):Object(Ae["f"])(t,this.optionLabel):t},onFocus(){return this.onFocusLabeled()},onFocusLabeled(){this.focused=!0},onBlur(){return this.onBlurLabeled()},onBlurLabeled(){this.focused=!1},focusSearch(){this.$nextTick(()=>{const t=this.$refs["button-dropdown"].searchEl;t&&t.focus()})},get:Ae["f"]}},Re=Te,Ie=(n("47be"),Object(f["a"])(Re,E,S,!1,null,"4b526572",null)),Le=Ie.exports;function je(t,e){const n=e.toLowerCase();return Ne([t],[443,8443],["443"])||"https"===n}function Ne(t,e,n){for(let r=0;r(n&&(r[e.q.name][n]=o),"")),r}De.options={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","queryStr","anchor"],q:{name:"query",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};n("b10f"),n("330a");var Pe=n("640c");function $e(t){const e=t.tls||[];return e.flatMap(t=>t.hosts||[])}function Me(t,e){return $e(t).includes(e)}function Fe(t,e,n={}){const r=t.spec,o=e.host||"",i=n.path||"";let a="";return o&&(a=Me(r,o)?"https://":"http://"),`${a}${o}${i}`}Pe["a"];var Be={components:{Card:A,ButtonDropDown:Le},props:{favoritedApps:{type:Array,required:!0},app:{type:Object,default:null},isInGlobalView:{type:Boolean,default:!1}},methods:{openLink(t){window.open(t)},toggleFavorite(){this.$emit("toggle-favorite",this.app)}},computed:{endpoints(){var t,e,n,r;return null!==(t=null===(e=this.app)||void 0===e||null===(n=e.spec)||void 0===n||null===(r=n.ports)||void 0===r?void 0:r.map(t=>{var e;const n=`${je(t.port,t.protocol)?"https":"http"}:${null===(e=this.app.metadata)||void 0===e?void 0:e.name}:${t.port}`;return{label:`${n}${"UDP"===t.protocol?" (UDP)":""}`,value:`/k8s/clusters/${this.clusterId}/api/v1/namespaces/${this.app.namespace}/services/${n}/proxy`}}))&&void 0!==t?t:[]},computedServiceName(){var t,e,n,r,o,i;return null!==(t=null===(e=this.app)||void 0===e||null===(n=e.metadata)||void 0===n||null===(r=n.labels)||void 0===r?void 0:r["app.kubernetes.io/component"])&&void 0!==t?t:null===(o=this.app)||void 0===o||null===(i=o.metadata)||void 0===i?void 0:i.name},helmChart(){var t,e,n;return null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e||null===(n=e.labels)||void 0===n?void 0:n["helm.sh/chart"]},kubernetesVersion(){var t,e,n;return null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e||null===(n=e.labels)||void 0===n?void 0:n["app.kubernetes.io/version"]},name(){var t,e;return null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e?void 0:e.name},namespace(){var t,e;return null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e?void 0:e.namespace},isFavorited(){return this.favoritedApps.some(t=>(null===t||void 0===t?void 0:t.id)===this.app.id&&(null===t||void 0===t?void 0:t.kind)===this.app.kind)},isGlobalApp(){var t,e,n;return"true"===(null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e||null===(n=e.annotations)||void 0===n?void 0:n["extensions.applauncher/global-app"])},ingressPath(){var t,e,n;return Fe(this.app,null===(t=this.app)||void 0===t||null===(e=t.spec)||void 0===e||null===(n=e.rules)||void 0===n?void 0:n[0])}},name:"AppLauncherCard",layout:"plain"},Ue=Be,Ge=(n("2691"),Object(f["a"])(Ue,b,g,!1,null,"c0d726ac",null)),He=Ge.exports,Ve=function(){var t=this,e=t._self._c;return e("div",{staticClass:"cluster-actions"},[e("div",{staticClass:"search-input"},[e("input",{attrs:{placeholder:t.$store.getters["i18n/t"]("appLauncher.filter")},domProps:{value:t.searchQuery},on:{input:function(e){return t.$emit("update:search-query",e.target.value)}}})]),t.isGridView?e("div",{staticClass:"sort-buttons",on:{click:function(e){return t.$emit("toggle-sort")}}},[e("div",{staticClass:"sort-button",class:{active:"asc"===t.sortOrder},attrs:{disabled:"asc"===t.sortOrder}},[e("i",{staticClass:"icon-chevron-up"})]),e("div",{staticClass:"sort-label"},[e("p",[t._v(t._s(t.aToZorZtoA))])]),e("div",{staticClass:"sort-button",class:{active:"desc"===t.sortOrder},attrs:{disabled:"desc"===t.sortOrder}},[e("i",{staticClass:"icon-chevron-down"})])]):t._e(),e("div",{staticClass:"select-wrapper"},[e("select",{staticClass:"cluster-select",domProps:{value:t.selectedCluster},on:{change:function(e){return t.$emit("update:selected-cluster",e.target.value)}}},t._l(t.clusterOptions,(function(n){return e("option",{key:n.value,domProps:{value:n.value}},[t._v(" "+t._s(n.label)+" ")])})),0)]),e("button",{staticClass:"icon-button",on:{click:function(e){return t.$emit("set-view","grid")}}},[e("i",{staticClass:"icon icon-apps"})]),e("button",{staticClass:"icon-button",on:{click:function(e){return t.$emit("set-view","list")}}},[e("i",{staticClass:"icon icon-list-flat"})])])},qe=[],ze={name:"ClusterActions",props:{searchQuery:{type:String,required:!0},isGridView:{type:Boolean,required:!0},sortOrder:{type:String,required:!0},selectedCluster:{type:String,required:!0},clusterOptions:{type:Array,required:!0}},computed:{aToZorZtoA(){return console.log(this.$store.getters["i18n/t"]("appLauncher.aToZ")),"asc"===this.sortOrder?this.$store.getters["i18n/t"]("appLauncher.aToZ"):this.$store.getters["i18n/t"]("appLauncher.zToA")}},emits:["update:search-query","toggle-sort","update:selected-cluster","set-view"]},Ke=ze,We=(n("01fc"),Object(f["a"])(Ke,Ve,qe,!1,null,"88f0655a",null)),Xe=We.exports,Ye=function(){var t=this,e=t._self._c;return e("div",{staticClass:"cluster-grid-view"},[e("div",{staticClass:"cluster-header"},[e("h1",[t._v(" "+t._s(t.clusterData.name)+" ")])]),e("div",{staticClass:"services-by-cluster-grid"},t._l(t.clusterData.filteredApps,(function(n){return e("AppLauncherCard",{key:`${n.clusterId}-${n.id}-${n.kind}`,attrs:{app:n,isInGlobalView:!1,"favorited-apps":t.favoritedApps},on:{"toggle-favorite":function(e){return t.$emit("toggle-favorite",e)}}})})),1)])},Je=[],Qe={name:"ClusterGridView",components:{AppLauncherCard:He},props:{clusterData:{type:Object,required:!0},favoritedApps:{type:Array,required:!0}},emits:["toggle-favorite"]},Ze=Qe,tn=(n("11fb"),Object(f["a"])(Ze,Ye,Je,!1,null,"1dd06ec8",null)),en=tn.exports,nn=function(){var t=this,e=t._self._c;return e("div",{staticClass:"cluster-list-view"},[e("div",{staticClass:"cluster-header"},[e("h1",[t._v(" "+t._s(t.clusterData.name)+" ")])]),e("SortableTable",{attrs:{rows:t.clusterData.filteredApps,headers:t.tableHeaders,"row-key":"uniqueId",search:!1,"table-actions":!1,"row-actions":!1,"no-rows-text":t.$store.getters["i18n/t"]("appLauncher.noAppsFound")},scopedSlots:t._u([{key:"cell:name",fn:function({row:e}){return[t._v(" "+t._s(e.metadata.name)+" ")]}},{key:"cell:namespace",fn:function({row:e}){return[t._v(" "+t._s(e.metadata.namespace)+" ")]}},{key:"cell:version",fn:function({row:e}){var n;return[t._v(" "+t._s(null===(n=e.metadata.labels)||void 0===n?void 0:n["app.kubernetes.io/version"])+" ")]}},{key:"cell:helmChart",fn:function({row:e}){var n;return[t._v(" "+t._s(null===(n=e.metadata.labels)||void 0===n?void 0:n["helm.sh/chart"])+" ")]}},{key:"cell:actions",fn:function({row:n}){var r,o;return[e("div",{staticStyle:{display:"flex","justify-content":"flex-end"}},[e("button",{staticClass:"icon-button favorite-icon",on:{click:function(e){return t.$emit("toggle-favorite",n)}}},[e("i",{class:["icon",t.isFavorited(n,t.favoritedApps)?"icon-star":"icon-star-open"]})]),(null===(r=t.getEndpoints(n))||void 0===r?void 0:r.length)<=1?e("a",{staticClass:"btn role-primary",attrs:{href:null===(o=t.getEndpoints(n)[0])||void 0===o?void 0:o.value,target:"_blank",rel:"noopener noreferrer nofollow"}},[t._v(" "+t._s(t.t("appLauncher.launch"))+" ")]):e("ButtonDropDown",{attrs:{"button-label":t.t("appLauncher.launch"),"dropdown-options":t.getEndpoints(n),title:t.t("appLauncher.launchAnEndpointFromSelection")},on:{"click-action":t.openLink}})],1)]}}])})],1)},rn=[],on=n("0fb1"),an={name:"ClusterListView",components:{SortableTable:on["b"],ButtonDropDown:Le},props:{clusterData:{type:Object,required:!0},favoritedApps:{type:Array,required:!0},tableHeaders:{type:Array,required:!0}},methods:{isFavorited(t,e){return e.some(e=>e.id===t.id&&e.kind===t.kind)},getEndpoints(t){var e,n;return null!==(e=null===t||void 0===t||null===(n=t.spec.ports)||void 0===n?void 0:n.map(e=>{const n=`${je(e.port,e.protocol)?"https":"http"}:${t.metadata.name}:${e.port}`;return{label:`${n}${"UDP"===e.protocol?" (UDP)":""}`,value:`/k8s/clusters/${t.clusterId}/api/v1/namespaces/${t.metadata.namespace}/services/${n}/proxy`}}))&&void 0!==e?e:[]},openLink(t){window.open(t.value,"_blank")}},emits:["toggle-favorite"]},sn=an,cn=(n("8ccc"),Object(f["a"])(sn,nn,rn,!1,null,"56771e1c",null)),ln=cn.exports,un={components:{Loading:v,AppLauncherCard:He,ClusterActions:Xe,ClusterGridView:en,ClusterListView:ln},data(){return{servicesByCluster:[],ingressesByCluster:[],loading:!0,selectedCluster:null,clusterOptions:[],selectedView:"grid",favoritedApps:[],searchQuery:"",tableHeaders:[{name:"name",label:"Name",value:"metadata.name",sort:"metadata.name",sortOrder:"asc"},{name:"namespace",label:"Namespace",value:"metadata.namespace"},{name:"version",label:"Version",value:'metadata.labels["app.kubernetes.io/version"]'},{name:"helmChart",label:"Helm Chart",value:'metadata.labels["helm.sh/chart"]'},{name:"actions",label:"Actions",value:"actions",align:"right"}]}},async mounted(){try{const t=await this.getClusters();this.servicesByCluster=await this.getServicesByCluster(t),this.ingressesByCluster=await this.getIngressesByCluster(t),this.selectedCluster="ALL_CLUSTERS",this.generateClusterOptions(),this.servicesByCluster.forEach(t=>{t.services.forEach(e=>{var n,r;"true"===(null===(n=e.metadata)||void 0===n||null===(r=n.annotations)||void 0===r?void 0:r["extensions.applauncher/global-app"])&&this.favoritedApps.push({...e,clusterId:t.id,clusterName:t.name})})}),this.ingressesByCluster.forEach(t=>{t.ingresses.forEach(e=>{var n,r;"true"===(null===(n=e.metadata)||void 0===n||null===(r=n.annotations)||void 0===r?void 0:r["extensions.applauncher/global-app"])&&this.favoritedApps.push({...e,clusterId:t.id,clusterName:t.name})})});const e=localStorage.getItem("favoritedApps");e&&this.favoritedApps.push(...JSON.parse(e))}catch(t){console.error("Error fetching clusters",t)}finally{this.loading=!1}},methods:{async getClusters(){return await this.$store.dispatch("management/findAll",{type:c["j"].CLUSTER})},getCluster(t){return this.servicesByCluster.find(e=>e.id===t)||null},async getServicesByCluster(t){return await Promise.all(t.filter(t=>t.isReady).map(async t=>{const e={name:t.spec.displayName,id:t.id,services:[],loading:!0,error:!1};try{const n=(await this.$store.dispatch("cluster/request",{url:`/k8s/clusters/${t.id}/v1/services`})).data;e.services=n.map(e=>({...e,clusterId:t.id,clusterName:t.spec.displayName}))}catch(n){console.error(`Error fetching services for cluster ${t.id}:`,n),e.error=!0}finally{e.loading=!1}return e}))},async getIngressesByCluster(t){return Promise.all(t.filter(t=>t.isReady).map(async t=>{const e={name:t.spec.displayName,id:t.id,ingresses:[],loading:!0,error:!1};try{const n=(await this.$store.dispatch("cluster/request",{url:`/k8s/clusters/${t.id}/v1/networking.k8s.io.ingresses`})).data;e.ingresses=n.map(e=>({...e,clusterId:t.id,clusterName:t.spec.displayName}))}catch(n){console.error(`Error fetching ingresses for cluster ${t.id}:`,n),e.error=!0}finally{e.loading=!1}return e}))},generateClusterOptions(){this.clusterOptions=[{label:"All Clusters",value:"ALL_CLUSTERS"},...this.servicesByCluster.map(t=>({label:t.name,value:t.id}))]},toggleSortOrder(){this.tableHeaders[0].sortOrder="asc"===this.tableHeaders[0].sortOrder?"desc":"asc"},toggleFavorite(t){const e=this.favoritedApps.findIndex(e=>e.id===t.id&&e.kind===t.kind);-1!==e?this.favoritedApps.splice(e,1):this.favoritedApps.push({...t});const n=JSON.stringify(this.favoritedApps.filter(t=>{var e;return"true"!==(null===(e=t.metadata.annotations)||void 0===e?void 0:e["extensions.applauncher/global-app"])}));localStorage.setItem("favoritedApps",n)},updateSearchQuery(t){this.searchQuery=t}},computed:{aToZorZtoA(){return"asc"===this.tableHeaders[0].sortOrder?"A-Z":"Z-A"},displayedClusterData(){if("ALL_CLUSTERS"===this.selectedCluster){const t=this.servicesByCluster.map(t=>{var e,n;return{...t,ingresses:(null===(e=this.ingressesByCluster.find(e=>e.id===t.id))||void 0===e?void 0:e.ingresses)||[],filteredApps:this.filteredApps(t.services,(null===(n=this.ingressesByCluster.find(e=>e.id===t.id))||void 0===n?void 0:n.ingresses)||[])}});return t}{const e=this.getCluster(this.selectedCluster);if(e){var t;const n=(null===(t=this.ingressesByCluster.find(t=>t.id===e.id))||void 0===t?void 0:t.ingresses)||[],r=e.services,o=this.filteredApps(r,n);return[{...e,ingresses:n,filteredApps:o}]}console.error("Cluster not found:",this.selectedCluster)}return[]},sortedFavoritedApps(){return this.favoritedApps.sort((t,e)=>{const n=t.metadata.name.toLowerCase(),r=e.metadata.name.toLowerCase();return"asc"===this.tableHeaders[0].sortOrder?n.localeCompare(r):r.localeCompare(n)})},filteredApps(){return(t,e)=>{const n=[...t||[],...e||[]].sort((t,e)=>{const n=t.metadata.name.toLowerCase(),r=e.metadata.name.toLowerCase();return"asc"===this.tableHeaders[0].sortOrder?n.localeCompare(r):r.localeCompare(n)});if(""===this.searchQuery.trim())return n;{const t=this.searchQuery.trim().toLowerCase();return n.filter(e=>{var n,r,o,i;return e.metadata.name.toLowerCase().includes(t)||e.metadata.namespace.toLowerCase().includes(t)||(null===(n=e.metadata.labels)||void 0===n||null===(r=n["app.kubernetes.io/version"])||void 0===r?void 0:r.toLowerCase().includes(t))||(null===(o=e.metadata.labels)||void 0===o||null===(i=o["helm.sh/chart"])||void 0===i?void 0:i.toLowerCase().includes(t))||e.metadata.fields.includes(t)})}}}},layout:"plain"},dn=un,pn=(n("9373"),Object(f["a"])(dn,a,s,!1,null,"3b920c85",null)),fn=pn.exports,hn=n("2902");const vn=[{name:hn["b"]+"-c-cluster",path:`/${hn["b"]}/c/:cluster`,component:fn,meta:{product:hn["b"],cluster:hn["a"],pkg:hn["b"]}}];var bn=vn,gn=function(t){i(t),t.metadata=n("9224"),t.addProduct(n("85d6")),t.addRoutes(bn)};e["default"]=gn},"1d19":function(t,e,n){"use strict";n.d(e,"a",(function(){return p})),n.d(e,"b",(function(){return v}));var r=n("e24b"),o=n("2cb5");const i={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object","[object FileList]":"filelist"},{toString:a}=Object.prototype;function s(t){if(null===t)return"null";if(void 0===t)return"undefined";let e=i[a.call(t)]||"object";return"object"===e&&(t instanceof Error?e="error":t instanceof Date&&(e="date")),e}function c(t,e){const n=t-e;return(n>0)-(n<0)}const l={undefined:0,null:1,boolean:2,number:3,string:4,array:5,object:6,instance:7,function:8,class:9,date:10};function u(t,e){const n=s(t),r=s(e),o=c(l[n],l[r]);if(o)return o;switch(n){case"boolean":case"number":return c(t,e);case"string":return c(t.localeCompare(e),0);case"array":{const n=t.length,r=e.length,o=Math.min(n,r);for(let i=0;i{for(let i=0;it.match(h)?Object(o["o"])(t,10,"0"):t).join("").trim()}},"1d5f":function(t){t.exports=JSON.parse('{"hasStylesheet":"true"}')},"1db5":function(t,e,n){"use strict";n("8dcd")},"1ec9":function(t,e,n){var r=n("fa8a"),o=n("44d9"),i=n("1386"),a=n("052a"),s=n("2fab"),c=n("e3f8");function l(t){var e=this.__data__=new r(t);this.size=e.size}l.prototype.clear=o,l.prototype["delete"]=i,l.prototype.get=a,l.prototype.has=s,l.prototype.set=c,t.exports=l},"1fcb":function(t,e,n){var r=n("3336"),o=n("c294"),i=o((function(t,e,n){r(t,e,n)}));t.exports=i},"1fce":function(t,e){function n(t,e){var n=-1,r=null==t?0:t.length,o=Array(r);while(++n-1)||n.indexOf(",")>-1||n.indexOf("/")>-1||r.StringUtilities.containsAny(o,t.specialCharacters))if(!e&&o.indexOf(",")>-1&&-1==o.indexOf("-")&&-1==o.indexOf("/")&&!r.StringUtilities.containsAny(n,t.specialCharacters)){var a=o.split(",");i+=this.i18n.at();for(var s=0;s0&&l.length>0&&(i+=", "),i+=l,i.length>0&&u.length>0&&(i+=", "),i+=u}else{var d=n.split("-");i+=r.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(),this.formatTime(o,d[0],""),this.formatTime(o,d[1],""))}else i+=this.i18n.atSpace()+this.formatTime(o,n,e);return i},t.prototype.getSecondsDescription=function(){var t=this,e=this.getSegmentDescription(this.expressionParts[0],this.i18n.everySecond(),(function(t){return t}),(function(e){return r.StringUtilities.format(t.i18n.everyX0Seconds(),e)}),(function(e){return t.i18n.secondsX0ThroughX1PastTheMinute()}),(function(e){return"0"==e?"":parseInt(e)<20?t.i18n.atX0SecondsPastTheMinute():t.i18n.atX0SecondsPastTheMinuteGt20()||t.i18n.atX0SecondsPastTheMinute()}));return e},t.prototype.getMinutesDescription=function(){var t=this,e=this.expressionParts[0],n=this.expressionParts[2],o=this.getSegmentDescription(this.expressionParts[1],this.i18n.everyMinute(),(function(t){return t}),(function(e){return r.StringUtilities.format(t.i18n.everyX0Minutes(),e)}),(function(e){return t.i18n.minutesX0ThroughX1PastTheHour()}),(function(r){try{return"0"==r&&-1==n.indexOf("/")&&""==e?t.i18n.everyHour():parseInt(r)<20?t.i18n.atX0MinutesPastTheHour():t.i18n.atX0MinutesPastTheHourGt20()||t.i18n.atX0MinutesPastTheHour()}catch(o){return t.i18n.atX0MinutesPastTheHour()}}));return o},t.prototype.getHoursDescription=function(){var t=this,e=this.expressionParts[2],n=this.getSegmentDescription(e,this.i18n.everyHour(),(function(e){return t.formatTime(e,"0","")}),(function(e){return r.StringUtilities.format(t.i18n.everyX0Hours(),e)}),(function(e){return t.i18n.betweenX0AndX1()}),(function(e){return t.i18n.atX0()}));return n},t.prototype.getDayOfWeekDescription=function(){var t=this,e=this.i18n.daysOfTheWeek(),n=null;return n="*"==this.expressionParts[5]?"":this.getSegmentDescription(this.expressionParts[5],this.i18n.commaEveryDay(),(function(t){var n=t;return t.indexOf("#")>-1?n=t.substr(0,t.indexOf("#")):t.indexOf("L")>-1&&(n=n.replace("L","")),e[parseInt(n)]}),(function(e){return 1==parseInt(e)?"":r.StringUtilities.format(t.i18n.commaEveryX0DaysOfTheWeek(),e)}),(function(e){return t.i18n.commaX0ThroughX1()}),(function(e){var n=null;if(e.indexOf("#")>-1){var r=e.substring(e.indexOf("#")+1),o=null;switch(r){case"1":o=t.i18n.first();break;case"2":o=t.i18n.second();break;case"3":o=t.i18n.third();break;case"4":o=t.i18n.fourth();break;case"5":o=t.i18n.fifth();break}n=t.i18n.commaOnThe()+o+t.i18n.spaceX0OfTheMonth()}else if(e.indexOf("L")>-1)n=t.i18n.commaOnTheLastX0OfTheMonth();else{var i="*"!=t.expressionParts[3];n=i?t.i18n.commaAndOnX0():t.i18n.commaOnlyOnX0()}return n})),n},t.prototype.getMonthDescription=function(){var t=this,e=this.i18n.monthsOfTheYear(),n=this.getSegmentDescription(this.expressionParts[4],"",(function(t){return e[parseInt(t)-1]}),(function(e){return 1==parseInt(e)?"":r.StringUtilities.format(t.i18n.commaEveryX0Months(),e)}),(function(e){return t.i18n.commaMonthX0ThroughMonthX1()||t.i18n.commaX0ThroughX1()}),(function(e){return t.i18n.commaOnlyInMonthX0?t.i18n.commaOnlyInMonthX0():t.i18n.commaOnlyInX0()}));return n},t.prototype.getDayOfMonthDescription=function(){var t=this,e=null,n=this.expressionParts[3];switch(n){case"L":e=this.i18n.commaOnTheLastDayOfTheMonth();break;case"WL":case"LW":e=this.i18n.commaOnTheLastWeekdayOfTheMonth();break;default:var o=n.match(/(\d{1,2}W)|(W\d{1,2})/);if(o){var i=parseInt(o[0].replace("W","")),a=1==i?this.i18n.firstWeekday():r.StringUtilities.format(this.i18n.weekdayNearestDayX0(),i.toString());e=r.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(),a);break}var s=n.match(/L-(\d{1,2})/);if(s){var c=s[1];e=r.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(),c);break}if("*"==n&&"*"!=this.expressionParts[5])return"";e=this.getSegmentDescription(n,this.i18n.commaEveryDay(),(function(e){return"L"==e?t.i18n.lastDay():t.i18n.dayX0?r.StringUtilities.format(t.i18n.dayX0(),e):e}),(function(e){return"1"==e?t.i18n.commaEveryDay():t.i18n.commaEveryX0Days()}),(function(e){return t.i18n.commaBetweenDayX0AndX1OfTheMonth()}),(function(e){return t.i18n.commaOnDayX0OfTheMonth()}));break}return e},t.prototype.getYearDescription=function(){var t=this,e=this.getSegmentDescription(this.expressionParts[6],"",(function(t){return/^\d+$/.test(t)?new Date(parseInt(t),1).getFullYear().toString():t}),(function(e){return r.StringUtilities.format(t.i18n.commaEveryX0Years(),e)}),(function(e){return t.i18n.commaYearX0ThroughYearX1()||t.i18n.commaX0ThroughX1()}),(function(e){return t.i18n.commaOnlyInYearX0?t.i18n.commaOnlyInYearX0():t.i18n.commaOnlyInX0()}));return e},t.prototype.getSegmentDescription=function(t,e,n,o,i,a){var s=this,c=null;if(t)if("*"===t)c=e;else if(r.StringUtilities.containsAny(t,["/","-",","]))if(t.indexOf("/")>-1){var l=t.split("/");if(c=r.StringUtilities.format(o(l[1]),l[1]),l[0].indexOf("-")>-1){var u=this.generateBetweenSegmentDescription(l[0],i,n);0!=u.indexOf(", ")&&(c+=", "),c+=u}else if(!r.StringUtilities.containsAny(l[0],["*",","])){var d=r.StringUtilities.format(a(l[0]),n(l[0]));d=d.replace(", ",""),c+=r.StringUtilities.format(this.i18n.commaStartingX0(),d)}}else if(t.indexOf(",")>-1){l=t.split(",");for(var p="",f=0;f0&&l.length>2&&(p+=",",f0&&l.length>1&&(f==l.length-1||2==l.length)&&(p+=this.i18n.spaceAnd()+" "),l[f].indexOf("-")>-1){u=this.generateBetweenSegmentDescription(l[f],(function(t){return s.i18n.commaX0ThroughX1()}),n);u=u.replace(", ",""),p+=u}else p+=n(l[f]);c=r.StringUtilities.format(a(t),p)}else t.indexOf("-")>-1&&(c=this.generateBetweenSegmentDescription(t,i,n));else c=r.StringUtilities.format(a(t),n(t));else c="";return c},t.prototype.generateBetweenSegmentDescription=function(t,e,n){var o="",i=t.split("-"),a=n(i[0]),s=n(i[1]);s=s.replace(":00",":59");var c=e(t);return o+=r.StringUtilities.format(c,a,s),o},t.prototype.formatTime=function(t,e,n){var r=parseInt(t),o="",i=!1;this.options.use24HourTimeFormat||(i=this.i18n.setPeriodBeforeTime&&this.i18n.setPeriodBeforeTime(),o=i?this.getPeriod(r)+" ":" "+this.getPeriod(r),r>12&&(r-=12),0===r&&(r=12));var a=e,s="";return n&&(s=":"+("00"+n).substring(n.length)),""+(i?o:"")+("00"+r.toString()).substring(r.toString().length)+":"+("00"+a.toString()).substring(a.toString().length)+s+(i?"":o)},t.prototype.transformVerbosity=function(t,e){return e||(t=t.replace(new RegExp(", "+this.i18n.everyMinute(),"g"),""),t=t.replace(new RegExp(", "+this.i18n.everyHour(),"g"),""),t=t.replace(new RegExp(this.i18n.commaEveryDay(),"g"),""),t=t.replace(/\, ?$/,"")),t},t.prototype.getPeriod=function(t){return t>=12?this.i18n.pm&&this.i18n.pm()||"PM":this.i18n.am&&this.i18n.am()||"AM"},t.locales={},t}();e.ExpressionDescriptor=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){}return t.format=function(t){for(var e=[],n=1;n-1}))},t}();e.StringUtilities=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){void 0===e&&(e=!0),this.expression=t,this.dayOfWeekStartIndexZero=e}return t.prototype.parse=function(){var t=this.extractParts(this.expression);return this.normalize(t),this.validate(t),t},t.prototype.extractParts=function(t){if(!this.expression)throw new Error("Expression is empty");var e=t.trim().split(/[ ]+/);if(e.length<5)throw new Error("Expression has only "+e.length+" part"+(1==e.length?"":"s")+". At least 5 parts are required.");if(5==e.length)e.unshift(""),e.push("");else if(6==e.length)/\d{4}$/.test(e[5])?e.unshift(""):e.push("");else if(e.length>7)throw new Error("Expression has "+e.length+" parts; too many!");return e},t.prototype.normalize=function(t){var e=this;if(t[3]=t[3].replace("?","*"),t[5]=t[5].replace("?","*"),t[2]=t[2].replace("?","*"),0==t[0].indexOf("0/")&&(t[0]=t[0].replace("0/","*/")),0==t[1].indexOf("0/")&&(t[1]=t[1].replace("0/","*/")),0==t[2].indexOf("0/")&&(t[2]=t[2].replace("0/","*/")),0==t[3].indexOf("1/")&&(t[3]=t[3].replace("1/","*/")),0==t[4].indexOf("1/")&&(t[4]=t[4].replace("1/","*/")),0==t[5].indexOf("1/")&&(t[5]=t[5].replace("1/","*/")),0==t[6].indexOf("1/")&&(t[6]=t[6].replace("1/","*/")),t[5]=t[5].replace(/(^\d)|([^#/\s]\d)/g,(function(t){var n=t.replace(/\D/,""),r=n;return e.dayOfWeekStartIndexZero?"7"==n&&(r="0"):r=(parseInt(n)-1).toString(),t.replace(n,r)})),"L"==t[5]&&(t[5]="6"),"?"==t[3]&&(t[3]="*"),t[3].indexOf("W")>-1&&(t[3].indexOf(",")>-1||t[3].indexOf("-")>-1))throw new Error("The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.");var n={SUN:0,MON:1,TUE:2,WED:3,THU:4,FRI:5,SAT:6};for(var r in n)t[5]=t[5].replace(new RegExp(r,"gi"),n[r].toString());var o={JAN:1,FEB:2,MAR:3,APR:4,MAY:5,JUN:6,JUL:7,AUG:8,SEP:9,OCT:10,NOV:11,DEC:12};for(var i in o)t[4]=t[4].replace(new RegExp(i,"gi"),o[i].toString());"0"==t[0]&&(t[0]=""),/\*|\-|\,|\//.test(t[2])||!/\*|\//.test(t[1])&&!/\*|\//.test(t[0])||(t[2]+="-"+t[2]);for(var a=0;a-1&&!/^\*|\-|\,/.test(t[a])){var s=null;switch(a){case 4:s="12";break;case 5:s="6";break;case 6:s="9999";break;default:s=null;break}if(null!=s){var c=t[a].split("/");t[a]=c[0]+"-"+s+"/"+c[1]}}},t.prototype.validate=function(t){this.assertNoInvalidCharacters("DOW",t[5]),this.assertNoInvalidCharacters("DOM",t[3])},t.prototype.assertNoInvalidCharacters=function(t,e){var n=e.match(/[A-KM-VX-Z]+/gi);if(n&&n.length)throw new Error(t+" part contains invalid values: '"+n.toString()+"'")},t}();e.CronParser=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"An error occured when generating the expression description. Check the cron expression syntax."},t.prototype.everyMinute=function(){return"every minute"},t.prototype.everyHour=function(){return"every hour"},t.prototype.atSpace=function(){return"At "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Every minute between %s and %s"},t.prototype.at=function(){return"At"},t.prototype.spaceAnd=function(){return" and"},t.prototype.everySecond=function(){return"every second"},t.prototype.everyX0Seconds=function(){return"every %s seconds"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"seconds %s through %s past the minute"},t.prototype.atX0SecondsPastTheMinute=function(){return"at %s seconds past the minute"},t.prototype.everyX0Minutes=function(){return"every %s minutes"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minutes %s through %s past the hour"},t.prototype.atX0MinutesPastTheHour=function(){return"at %s minutes past the hour"},t.prototype.everyX0Hours=function(){return"every %s hours"},t.prototype.betweenX0AndX1=function(){return"between %s and %s"},t.prototype.atX0=function(){return"at %s"},t.prototype.commaEveryDay=function(){return", every day"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", every %s days of the week"},t.prototype.commaX0ThroughX1=function(){return", %s through %s"},t.prototype.first=function(){return"first"},t.prototype.second=function(){return"second"},t.prototype.third=function(){return"third"},t.prototype.fourth=function(){return"fourth"},t.prototype.fifth=function(){return"fifth"},t.prototype.commaOnThe=function(){return", on the "},t.prototype.spaceX0OfTheMonth=function(){return" %s of the month"},t.prototype.lastDay=function(){return"the last day"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", on the last %s of the month"},t.prototype.commaOnlyOnX0=function(){return", only on %s"},t.prototype.commaAndOnX0=function(){return", and on %s"},t.prototype.commaEveryX0Months=function(){return", every %s months"},t.prototype.commaOnlyInX0=function(){return", only in %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", on the last day of the month"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", on the last weekday of the month"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s days before the last day of the month"},t.prototype.firstWeekday=function(){return"first weekday"},t.prototype.weekdayNearestDayX0=function(){return"weekday nearest day %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", on the %s of the month"},t.prototype.commaEveryX0Days=function(){return", every %s days"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", between day %s and %s of the month"},t.prototype.commaOnDayX0OfTheMonth=function(){return", on day %s of the month"},t.prototype.commaEveryHour=function(){return", every hour"},t.prototype.commaEveryX0Years=function(){return", every %s years"},t.prototype.commaStartingX0=function(){return", starting %s"},t.prototype.daysOfTheWeek=function(){return["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},t.prototype.monthsOfTheYear=function(){return["January","February","March","April","May","June","July","August","September","October","November","December"]},t}();e.en=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(0),o=n(5);r.ExpressionDescriptor.initialize(new o.enLocaleLoader),e.default=r.ExpressionDescriptor;var i=r.ExpressionDescriptor.toString;e.toString=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),o=function(){function t(){}return t.prototype.load=function(t){t["en"]=new r.en},t}();e.enLocaleLoader=o}])}))},"212d":function(t,e,n){var r=n("bf10"),o=n("201b"),i=r(o,"Promise");t.exports=i},2357:function(t,e,n){var r=n("e972"),o=/^\s+/;function i(t){return t?t.slice(0,r(t)+1).replace(o,""):t}t.exports=i},2376:function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".cluster-actions[data-v-88f0655a]{display:flex;align-items:center;gap:1rem;position:fixed;right:5.8%;top:4.3rem;z-index:2;padding-bottom:.425rem;padding-right:4.4rem;background:inherit;border-bottom:var(--header-border-size) solid var(--header-border)}.icon-button[data-v-88f0655a]{padding:0;color:var(--primary);font-size:1.8rem}.icon-button[data-v-88f0655a],.sort-button[data-v-88f0655a]{background:none;border:none;cursor:pointer}.sort-button[data-v-88f0655a]{padding:none;color:#555;font-size:1.3rem;display:flex;align-items:center}.sort-label[data-v-88f0655a]{color:var(--primary);font-size:1rem;cursor:pointer}.sort-buttons[data-v-88f0655a]{display:flex;gap:1rem;align-items:center}.sort-button[data-v-88f0655a]:hover{color:var(--primary-hover)}.sort-button.active[data-v-88f0655a]{color:var(--primary)}.search-input[data-v-88f0655a]{text-align:right;justify-content:flex-end;display:flex;input[data-v-88f0655a]{width:190px;padding:11px;font-size:1rem;border:1px solid var(--border);border-radius:4px}}.select-wrapper select[data-v-88f0655a]{padding:.8rem;border:1px solid #ccc;border-radius:4px}",""]),t.exports=e},2419:function(t,e,n){var r=n("872c"),o=n("aa31"),i=n("7049");function a(t){var e=-1,n=null==t?0:t.length;this.__data__=new r;while(++e{return i("Starting wait for",e),new Promise((o,a)=>{t()&&(i("Wait for",e||"unknown","done immediately"),o(void 0));const s=setTimeout(()=>{if(i("Wait for",e,"timed out"),clearInterval(c),clearTimeout(s),!e)throw new Error(`waitFor timed out after ${n/1e3} seconds`);a(new Error("Failed waiting for: "+e))},n),c=setInterval(()=>{t()?(i("Wait for",e,"done"),clearInterval(c),clearTimeout(s),o(void 0)):e&&i("Wait for",e,"not done yet")},r)});function i(...t){o&&console.log(...t)}}},"2c98":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".services-by-cluster-grid[data-v-1dd06ec8]{display:grid;grid-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.cluster-header[data-v-1dd06ec8]{display:flex;align-items:center;justify-content:space-between;margin:1rem 0;background:var(--header-bg);border-bottom:var(--header-border-size) solid var(--header-border);height:var(--header-height);position:sticky;top:0;z-index:1}.favorite-icon[data-v-1dd06ec8]{margin-right:1rem}",""]),t.exports=e},"2cb5":function(t,e,n){"use strict";function r(t){return _(t||"").split("-").map(t=>o(t)).join(" ")}function o(t){return t=t||"",t.substr(0,1).toUpperCase()+t.substr(1)}function i(t,e,n=" ",r=!1){if(t=""+t,t.length>=e)return t;const o=e-t.length+1,i=new Array(o).join(n).substr(0,o);return r?t+i:i+t}n.d(e,"a",(function(){return r})),n.d(e,"p",(function(){return o})),n.d(e,"o",(function(){return i})),n.d(e,"e",(function(){return s})),n.d(e,"f",(function(){return c})),n.d(e,"l",(function(){return h})),n.d(e,"k",(function(){return v})),n.d(e,"m",(function(){return b})),n.d(e,"g",(function(){return g})),n.d(e,"c",(function(){return _})),n.d(e,"b",(function(){return x})),n.d(e,"i",(function(){return O})),n.d(e,"d",(function(){return k})),n.d(e,"j",(function(){return A})),n.d(e,"n",(function(){return S})),n.d(e,"h",(function(){return C}));const a={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function s(t){return String(t).replace(/[&<>"']/g,t=>a[t])}function c(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function l(t){t=Math.max(0,t||1);const e=[];let n;if(window.crypto&&window.crypto.getRandomValues){const r=new Uint32Array(t);for(window.crypto.getRandomValues(r),n=0;ne[t%e.length]).join(""):null}function v(t){return t.match(/.*[^aeiou]y$/i)?t.substr(0,t.length-1)+"ies":t.endsWith("ics")?t:t.endsWith("s")?t+"es":t+"s"}function b(t,e,n){return t.reduce((r,o,i)=>(i>=5||(r+=`${s(o)}`,i===t.length-1?r+=e:r+=i===t.length-2?n("generic.and"):n("generic.comma")),r),"")}function g(t,e=2,n=" ",r=null){t="string"===typeof t?t.split(/\n/):t||[];const o=new Array(e+1).join(n),i=t.map(t=>{let e="",n=t;if(r){const o=t.match(r);o&&(e=o[o.length-1],n=t.substr(o[0].length))}return`${e}${o}${n}`}),a=i.join("\n");return a}const m=/([a-z\d])([A-Z])/g;function y(t){return t.replace(m,"$1_$2").toLowerCase()}const w=/[ _]/g;function _(t){return y(t).replace(w,"-")}function x(t,e){return"float"===e?t=parseFloat(t)||null:"int"===e?(t=parseInt(t,10),isNaN(t)&&(t=null)):"boolean"===e&&("true"===t.toLowerCase()?t=!0:"false"===t.toLowerCase()&&(t=!1)),t}function O(t,e=[]){return e.some(e=>{const n=t||"",r=k(e);return n.match(r)})}function k(t,e=!0){return"string"===typeof t?e?new RegExp(`^${c(t)}$`,"i"):new RegExp(""+c(t),"i"):t}function A(t){return s(t||"").replace(/(\r\n|\r|\n)/g,"
\n")}const E=/[^."']+|"([^"]*)"|'([^']*)'/g;function S(t){return t.includes('"')||t.includes("'")?t.match(E).map(t=>t.replace(/['"]/g,"")):t.split(".")}function C(t){let e="";for(const n of t)n.includes(".")?e+=`."${n}"`:e+="."+n;return e.startsWith(".")&&(e=e.substr(1)),e}},"2cbd":function(t,e){function n(t,e){if(("constructor"!==e||"function"!==typeof t[e])&&"__proto__"!=e)return t[e]}t.exports=n},"2e63":function(t,e){function n(t,e){var n=-1,r=null==t?0:t.length;while(++nli[data-v-c0d726ac]{position:relative}.icon-li[data-v-c0d726ac]{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.icon-li.icon-lg[data-v-c0d726ac]{left:-1.8571428571em}.icon-rotate-90[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);transform:rotate(90deg)}.icon-rotate-180[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.icon-rotate-270[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);transform:rotate(270deg)}.icon-flip-horizontal[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);transform:scaleX(-1)}.icon-flip-vertical[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:scaleY(-1)}.app-launcher-card[data-v-c0d726ac] .card-body{overflow:hidden!important}.icon-button[data-v-c0d726ac]{cursor:pointer}.icon-button[data-v-c0d726ac],.icon-only[data-v-c0d726ac]{background:none;border:none;padding:0;color:var(--primary);font-size:1.8rem;margin-right:1rem}.icon-only[data-v-c0d726ac]{margin-top:.5rem}',""]),t.exports=e},"330a":function(t,e,n){var r=n("e2e2"),o=n("9243"),i=n("6efc"),a=n("c316"),s=n("f72d"),c=n("dda8"),l=n("09b2"),u=n("41dd"),d="[object Map]",p="[object Set]",f=Object.prototype,h=f.hasOwnProperty;function v(t){if(null==t)return!0;if(s(t)&&(a(t)||"string"==typeof t||"function"==typeof t.splice||c(t)||u(t)||i(t)))return!t.length;var e=o(t);if(e==d||e==p)return!t.size;if(l(t))return!r(t).length;for(var n in t)if(h.call(t,n))return!1;return!0}t.exports=v},3336:function(t,e,n){var r=n("1ec9"),o=n("6a68"),i=n("51db"),a=n("71bd"),s=n("b506"),c=n("cc7f"),l=n("2cbd");function u(t,e,n,d,p){t!==e&&i(e,(function(i,c){if(p||(p=new r),s(i))a(t,e,c,n,u,d,p);else{var f=d?d(l(t,c),i,c+"",t,e,p):void 0;void 0===f&&(f=i),o(t,c,f)}}),c)}t.exports=u},"356f":function(t,e,n){var r=n("2589"),o=n("cfe4");function i(t,e){return null!=t&&o(t,e,r)}t.exports=i},3584:function(t,e,n){var r=n("06a5"),o=n("b4b4");function i(t,e,n,a,s){return t===e||(null==t||null==e||!o(t)&&!o(e)?t!==t&&e!==e:r(t,e,n,a,i,s))}t.exports=i},"35bb":function(t,e,n){var r=n("8045"),o=n("494f"),i=n("4fab"),a=i&&i.isMap,s=a?o(a):r;t.exports=s},"35d9":function(t,e,n){var r=n("f72d"),o=n("b4b4");function i(t){return o(t)&&r(t)}t.exports=i},"379a":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,'.filter-select .vs__selected-options .vs__selected{text-align:left}.sortable-table{border-collapse:collapse;min-width:400px;border-radius:5px 5px 0 0;outline:1px solid var(--border);overflow:hidden;background:var(--sortable-table-bg);border-radius:4px}.sortable-table.overflow-x{overflow-x:visible}.sortable-table.overflow-y{overflow-y:visible}.sortable-table td{padding:8px 5px;border:0}.sortable-table td:first-child{padding-left:10px}.sortable-table td:last-child{padding-right:10px}.sortable-table td.row-check{padding-top:12px}.sortable-table tbody tr{border-bottom:1px solid var(--sortable-table-top-divider);background-color:var(--sortable-table-row-bg)}.sortable-table tbody tr.main-row.has-sub-row{border-bottom:0}.sortable-table tbody tr.main-row:not(.row-selected):hover+.sub-row{background-color:var(--sortable-table-hover-bg)}.sortable-table tbody tr:last-of-type{border-bottom:0}.sortable-table tbody tr.sub-row-hovered,.sortable-table tbody tr:hover{background-color:var(--sortable-table-hover-bg)}.sortable-table tbody tr.state-description>td{font-size:13px;padding-top:0;overflow-wrap:anywhere}.sortable-table tbody tr.active-row{color:var(--sortable-table-header-bg)}.sortable-table tbody tr.row-selected{background:var(--sortable-table-selected-bg)}.sortable-table tbody .no-rows td{padding:30px 0;text-align:center}.sortable-table tbody .no-results:hover,.sortable-table tbody .no-rows:hover{background-color:var(--body-bg)}.sortable-table tbody.group:before{content:"";display:block;height:20px;background-color:transparent}.sortable-table tbody tr.group-row{background-color:initial}.sortable-table tbody tr.group-row:first-child{border-bottom:2px solid var(--sortable-table-row-bg)}.sortable-table tbody tr.group-row:not(:first-child){margin-top:20px}.sortable-table tbody tr.group-row td{padding:0}.sortable-table tbody tr.group-row td:first-of-type{border-left:1px solid var(--sortable-table-accent-bg)}.sortable-table tbody tr.group-row .group-tab{height:40px;line-height:40px;padding:0 10px;border-radius:4px 4px 0 0;background-color:var(--sortable-table-row-bg);position:relative;top:1px;display:inline-block;z-index:10;min-width:72px}.sortable-table tbody tr.group-row .group-tab:after,.sortable-table tbody tr.group-row .group-tab:before{content:" ";display:table}.sortable-table tbody tr.group-row .group-tab:after{clear:both}.sortable-table tbody tr.group-row .group-tab>SPAN{color:var(--sortable-table-group-label)}.sortable-table tbody tr.group-row .group-tab:after{height:40px;width:70px;border-radius:5px 5px 0 0;background-color:var(--sortable-table-row-bg);content:"";position:absolute;right:-15px;top:0;transform:skewX(40deg);z-index:-1}.for-inputs TABLE.sortable-table{width:100%;border-collapse:collapse;margin-bottom:10px}.for-inputs TABLE.sortable-table>TBODY>TR>TD,.for-inputs TABLE.sortable-table>THEAD>TR>TH{padding-right:10px;padding-bottom:10px}.for-inputs TABLE.sortable-table>TBODY>TR>TD:last-of-type,.for-inputs TABLE.sortable-table>THEAD>TR>TH:last-of-type{padding-right:0}.for-inputs TABLE.sortable-table>TBODY>TR:first-of-type>TD{padding-top:10px}.for-inputs TABLE.sortable-table>TBODY>TR:last-of-type>TD{padding-bottom:0}.for-inputs.clone TABLE.sortable-table>THEAD>TR>TH,.for-inputs.create TABLE.sortable-table>THEAD>TR>TH,.for-inputs.edit TABLE.sortable-table>THEAD>TR>TH{border-color:transparent}.sortable-table-header{position:relative;z-index:11}.sortable-table-header.titled{display:flex;align-items:center}.fixed-header-actions.button{grid-template-columns:[bulk] auto [middle] min-content [search] minmax(min-content,350px)}.fixed-header-actions{padding:0 0 20px 0;width:100%;z-index:11;background:transparent;display:grid;grid-template-columns:[bulk] auto [middle] min-content [search] minmax(min-content,200px);grid-column-gap:10px}.fixed-header-actions.advanced-filtering{grid-template-columns:[bulk] auto [middle] minmax(min-content,auto) [search] minmax(min-content,auto)}.fixed-header-actions .bulk{grid-area:bulk}.fixed-header-actions .bulk>BUTTON{display:none}.fixed-header-actions .bulk>BUTTON:not(:last-of-type){margin-right:10px}.fixed-header-actions .bulk .action-availability{display:none;margin-left:10px;vertical-align:middle;margin-top:2px}.fixed-header-actions .bulk .dropdown-button li.disabled{color:var(--disabled-text);cursor:not-allowed}.fixed-header-actions .bulk .dropdown-button li.disabled:hover{color:var(--disabled-text);background-color:unset;cursor:not-allowed}.fixed-header-actions .bulk .bulk-action .icon{vertical-align:-10%}.fixed-header-actions .middle{grid-area:middle;white-space:nowrap}.fixed-header-actions .middle .icon.icon-backup.animate{animation-name:spin;animation-duration:1s;animation-iteration-count:infinite;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fixed-header-actions .search{grid-area:search;text-align:right;justify-content:flex-end}.fixed-header-actions .bulk-actions-dropdown{display:none}.fixed-header-actions .bulk-actions-dropdown .dropdown-button{background-color:var(--primary)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button:hover{background-color:var(--primary-hover-bg);color:var(--primary-hover-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button .icon-chevron-down,.fixed-header-actions .bulk-actions-dropdown .dropdown-button>*{color:var(--primary-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button .button-divider{border-color:var(--primary-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled{border-color:var(--disabled-bg)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled .icon-chevron-down{color:var(--disabled-text)!important}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled .button-divider{border-color:var(--disabled-text)}.paging{margin-top:10px;text-align:center}.paging SPAN{display:inline-block;min-width:200px}',""]),t.exports=e},3819:function(t,e,n){var r=n("bf10"),o=n("201b"),i=r(o,"Set");t.exports=i},3973:function(t,e,n){"use strict";n("4914")},"39f2":function(t,e,n){var r=n("73b4");function o(t,e){var n=null==t?0:t.length;return!!n&&r(t,e,0)>-1}t.exports=o},"3ac3":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".labeled-select[data-v-0abf511e]{position:relative;padding-bottom:1px}.labeled-select.no-label.compact-input[data-v-0abf511e] .vs__actions:after{top:-2px}.labeled-select.no-label.compact-input .labeled-container[data-v-0abf511e]{padding:5px 0 1px 10px}.labeled-select.no-label[data-v-0abf511e]:not(.compact-input){height:61px;padding-top:4px}.labeled-select.no-label[data-v-0abf511e]:not(.compact-input) .vs__actions:after{top:0}.labeled-select .icon-spinner[data-v-0abf511e]{position:absolute;left:calc(50% - .5em);top:calc(50% - .5em)}.labeled-select .labeled-container[data-v-0abf511e]{padding:7px 0 0 10px;padding:10px 0 0 10px}.labeled-select .labeled-container label[data-v-0abf511e]{margin:0}.labeled-select .labeled-container .selected[data-v-0abf511e]{background-color:transparent}.labeled-select.view.labeled-input .labeled-container[data-v-0abf511e]{padding:0}.labeled-select.taggable.compact-input[data-v-0abf511e]{min-height:40px}.labeled-select.taggable.compact-input[data-v-0abf511e] .vs__selected-options{padding-top:8px!important}.labeled-select.taggable[data-v-0abf511e]:not(.compact-input){min-height:61px}.labeled-select.taggable[data-v-0abf511e]:not(.compact-input) .vs__selected-options{margin-top:0}.labeled-select[data-v-0abf511e]:not(.taggable) .vs__selected-options .vs__selected{width:100%}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options{padding:3px 0}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected{border-color:var(--accent-btn);height:20px;min-height:unset!important;padding:0 0 0 7px!important}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button{height:20px;line-height:14px}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button:hover{background-color:var(--primary);border-radius:0}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button:hover:after{color:#fff}.labeled-select[data-v-0abf511e] .vs__selected-options{margin-top:-5px}.labeled-select[data-v-0abf511e] .v-select:not(.vs--single) .vs__selected-options{padding:5px 0}.labeled-select[data-v-0abf511e] .vs__actions:after{position:relative;top:-10px}.labeled-select[data-v-0abf511e] .v-select.vs--open .vs__dropdown-toggle{color:var(--outline)!important}[data-v-0abf511e] .labeled-select.disabled .labeled-container,[data-v-0abf511e] .labeled-select.disabled .vs__dropdown-toggle,[data-v-0abf511e] .labeled-select.disabled input,[data-v-0abf511e] .labeled-select.disabled label{cursor:not-allowed}.labeled-select .no-label[data-v-0abf511e].v-select:not(.vs--single){min-height:33px}.labeled-select .no-label[data-v-0abf511e].selected{padding-top:8px;padding-bottom:9px;position:relative;max-height:2.3em;overflow:hidden}.labeled-select .no-label[data-v-0abf511e] .vs__selected-options{padding:8px 0 7px 0}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group[data-v-0abf511e]{display:flex}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group>b[data-v-0abf511e]{flex:1}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group>div[data-v-0abf511e]{background-color:var(--primary);border-radius:4px;color:var(--primary-text);font-size:12px;height:18px;line-height:18px;margin-top:1px;padding:0 10px}.vs__dropdown-option>.option-kind-highlighted[data-v-0abf511e]{color:var(--dropdown-highlight-text)}.vs__dropdown-option.vs__dropdown-option--highlight>.option-kind-highlighted[data-v-0abf511e],.vs__dropdown-option.vs__dropdown-option--selected>.option-kind-highlighted[data-v-0abf511e],.vs__dropdown-option>.option-kind-highlighted[data-v-0abf511e]:hover{color:var(--dropdown-hover-text)}",""]),t.exports=e},"3ad3":function(t,e,n){var r=n("4c0b"),o=r(Object.keys,Object);t.exports=o},"3b54":function(t,e,n){var r=n("c364"),o=n("cb86"),i=n("c68c");function a(t,e,n){var a=-1,s=e.length,c={};while(++a=e||n<0||g&&r>=d}function O(){var t=o();if(x(t))return k(t);f=setTimeout(O,_(t))}function k(t){return f=void 0,m&&l?y(t):(l=u=void 0,p)}function A(){void 0!==f&&clearTimeout(f),v=0,l=h=u=f=void 0}function E(){return void 0===f?p:k(o())}function S(){var t=o(),n=x(t);if(l=arguments,u=this,h=t,n){if(void 0===f)return w(h);if(g)return clearTimeout(f),f=setTimeout(O,e),y(h)}return void 0===f&&(f=setTimeout(O,e)),p}return e=i(e)||0,r(n)&&(b=!!n.leading,g="maxWait"in n,d=g?s(i(n.maxWait)||0,e):d,m="trailing"in n?!!n.trailing:m),S.cancel=A,S.flush=E,S}t.exports=l},"45d2":function(t){t.exports=JSON.parse('{"hasStylesheet":"false"}')},"462f":function(t,e,n){"use strict";n.d(e,"H",(function(){return a})),n.d(e,"s",(function(){return s})),n.d(e,"J",(function(){return c})),n.d(e,"I",(function(){return l})),n.d(e,"x",(function(){return u})),n.d(e,"w",(function(){return d})),n.d(e,"t",(function(){return f})),n.d(e,"u",(function(){return h})),n.d(e,"b",(function(){return v})),n.d(e,"c",(function(){return b})),n.d(e,"e",(function(){return g})),n.d(e,"f",(function(){return m})),n.d(e,"y",(function(){return y})),n.d(e,"z",(function(){return w})),n.d(e,"n",(function(){return _})),n.d(e,"N",(function(){return x})),n.d(e,"O",(function(){return O})),n.d(e,"Q",(function(){return k})),n.d(e,"P",(function(){return A})),n.d(e,"M",(function(){return E})),n.d(e,"K",(function(){return S})),n.d(e,"g",(function(){return C})),n.d(e,"o",(function(){return T})),n.d(e,"B",(function(){return R})),n.d(e,"v",(function(){return I})),n.d(e,"C",(function(){return L})),n.d(e,"A",(function(){return j})),n.d(e,"q",(function(){return N})),n.d(e,"k",(function(){return D})),n.d(e,"l",(function(){return P})),n.d(e,"m",(function(){return $})),n.d(e,"G",(function(){return M})),n.d(e,"L",(function(){return F})),n.d(e,"F",(function(){return B})),n.d(e,"T",(function(){return U})),n.d(e,"R",(function(){return G})),n.d(e,"S",(function(){return H})),n.d(e,"j",(function(){return V})),n.d(e,"r",(function(){return q})),n.d(e,"p",(function(){return z})),n.d(e,"d",(function(){return K})),n.d(e,"i",(function(){return W})),n.d(e,"a",(function(){return X})),n.d(e,"E",(function(){return J})),n.d(e,"h",(function(){return Q})),n.d(e,"D",(function(){return Z}));var r=n("4ac6"),o=n("907c"),i=n("0fb1");const a={name:"state",labelKey:"tableHeaders.state",sort:["stateSort","nameSort"],value:"stateDisplay",getValue:t=>t.stateDisplay,width:100,default:"unknown",formatter:"BadgeStateFormatter"},s={name:"name",labelKey:"tableHeaders.name",value:"nameDisplay",getValue:t=>t.nameDisplay,sort:["nameSort"],formatter:"LinkDetail",canBeVariable:!0},c={name:"storage_class_provisioner",labelKey:"tableHeaders.storage_class_provisioner",value:"provisionerDisplay",sort:["provisioner"]},l={name:"storage_class_default",labelKey:"tableHeaders.default",value:"isDefault",sort:["isDefault"],formatter:"Checked"},u={name:"persistent_volume_source",labelKey:"tableHeaders.persistentVolumeSource",value:"source",sort:["provisioner"]},d={name:"persistent-volume-claim",labelKey:"tableHeaders.persistentVolumeClaim",sort:["nameSort"],value:"claimName",formatter:"LinkDetail",formatterOpts:{reference:"claim.detailLocation"}},p={name:"localOutputRefs",labelKey:"tableHeaders.output",value:"outputs",sort:["outputsSortable"],formatter:"ListLink",formatterOpts:{options:{internal:!0}}},f={name:"namespace",labelKey:"tableHeaders.namespace",value:"namespace",getValue:t=>t.namespace,sort:"namespace",dashIfEmpty:!0},h={name:"node",labelKey:"tableHeaders.node",value:"spec.nodeName",getValue:t=>{var e;return null===(e=t.spec)||void 0===e?void 0:e.nodeName},sort:"spec.nodeName",formatter:"LinkName",formatterOpts:{type:o["n"]}},v={name:"age",labelKey:"tableHeaders.age",value:"creationTimestamp",getValue:t=>t.creationTimestamp,sort:"creationTimestamp:desc",search:!1,formatter:"LiveDate",width:100,align:"left"},b={...v,getValue:t=>t.created,value:"created",sort:"created:desc"},g={name:"description",labelKey:"tableHeaders.description",align:"left",sort:["description"],width:300},m={name:"duration",labelKey:"tableHeaders.duration",value:"duration.value",sort:"duration.seconds",formatter:"LiveDuration"},y={name:"pod_images",labelKey:"tableHeaders.podImages",value:"imageNames",getValue:t=>t.imageNames,sort:"imageNames",formatter:"PodImages"},w={name:"pod_restarts",labelKey:"tableHeaders.podRestarts",formatter:"LivePodRestarts",delayLoading:!0,value:"restartCount",getValue:t=>t.restartCount,search:!1,liveUpdates:!0},_={name:"keys",labelKey:"tableHeaders.keys",sort:!1,value:"keysDisplay"},x={name:"username",labelKey:"tableHeaders.username",value:"username",dashIfEmpty:!0,sort:"username"},O={name:"name",labelKey:"tableHeaders.name",value:"nameDisplay",sort:["nameSort"],dashIfEmpty:!0},k={name:"provider",labelKey:"tableHeaders.provider",value:"providerDisplay",dashIfEmpty:!0,sort:"providerDisplay"},A={name:"user-id",labelKey:"tableHeaders.userId",value:"id",formatter:"LinkDetail",canBeVariable:!0,sort:"id"},E={name:"type",labelKey:"tableHeaders.type",value:"typeDisplay",getValue:t=>t.typeDisplay,sort:["typeDisplay"],width:100},S={name:"subType",labelKey:"tableHeaders.subType",value:"subTypeDisplay",sort:["subTypeDisplay"],width:120},C={name:"type",labelKey:"tableHeaders.type",value:"eventType",sort:"eventType"},T={name:"lastSeen",labelKey:"tableHeaders.lastSeen",value:"lastSeen",sort:"lastTimestamp:desc",tooltip:"tableHeaders.lastSeenTooltip"},R={name:"reason",labelKey:"tableHeaders.reason",value:"reason",sort:["reason"]},I={name:"object",labelKey:"tableHeaders.object",value:"involvedObject",sort:["involvedObject.kind","involvedObject.name"],canBeVariable:!0,formatter:"InvolvedObjectLink"},L={name:"reclaimPolicy",labelKey:"tableHeaders.reclaimPolicy",value:"spec.persistentVolumeReclaimPolicy",sort:["spec.persistentVolumeReclaimPolicy"]},j={name:"pvReason",labelKey:"tableHeaders.reason",value:"status.reason",sort:["status.reason"]},N={name:"message",labelKey:"tableHeaders.message",value:"message",sort:["message"]},D={name:"ingressClassName",labelKey:"tableHeaders.ingressClass",value:"$['spec']['ingressClassName']",sort:"$['spec']['ingressClassName']"},P={name:"ingressDefaultBackend",labelKey:"tableHeaders.ingressDefaultBackend",value:"hasDefaultBackend",sort:["hasDefaultBackend:desc"],formatter:"Checked",width:75,align:"center"},$={name:"ingressTarget",labelKey:"tableHeaders.ingressTarget",value:"$['spec']",formatter:"IngressTarget",sort:"$['spec']['rules'][0].host"},M={name:"type",labelKey:"tableHeaders.type",value:"$['spec']['type']",sort:"$['spec']['type']",formatter:"ServiceType"},F={formatter:"ServiceTargets",labelKey:"tableHeaders.targetPort",name:"targetPort",sort:"$['spec']['targetPort']",value:"$['spec']['targetPort']"},B={formatter:"KeyValue",name:"selector",labelKey:"tableHeaders.selector",value:"$['spec']['selector']",sort:"$['spec']['selector']"},U={...y,value:"",breakpoint:i["a"].LAPTOP},G={name:"workloadEndpoints",labelKey:"tableHeaders.endpoints",value:`$['metadata']['annotations']['${r["b"]}']`,getValue:t=>{var e,n;return null===(e=t.metadata)||void 0===e||null===(n=e.annotations)||void 0===n?void 0:n[r["b"]]},formatter:"Endpoints",dashIfEmpty:!0,breakpoint:i["a"].DESKTOP,maxPageSize:25},H={name:"workloadHealthScale",labelKey:"tableHeaders.health",formatter:"WorkloadHealthScale",getValue:()=>{},width:150,skipSelect:!0,delayLoading:!0,search:!1,liveUpdates:!0},V={name:"reference",labelKey:"tableHeaders.hpaReference",value:"spec.scaleTargetRef.name",sort:"spec.scaleTargetRef.name"},q={name:"minimum-replica",labelKey:"tableHeaders.minReplicas",value:"spec.minReplicas",sort:"spec.minReplicas"},z={name:"maximum-replica",labelKey:"tableHeaders.maxReplicas",value:"spec.maxReplicas",sort:"spec.maxReplicas"},K={name:"current-replica",labelKey:"tableHeaders.currentReplicas",value:"status.currentReplicas",sort:"status.currentReplicas"},W={...a,value:"$",formatter:"LiveExpiryBadgeState"},X={name:"id",labelKey:"tableHeaders.accessKey",align:"left",sort:["name"],width:200},Y={name:"scope",value:"clusterName",labelKey:"tableHeaders.scope",dashIfEmpty:!0,align:"left",sort:["scope"],width:100},J={...Y,value:"clusterId",sort:["clusterId"]},Q={name:"expires",value:"expiresAt",labelKey:"tableHeaders.expires",align:"left",sort:["expiresAt"],width:200,formatter:"LiveExpiryDate"},Z={name:"role",value:"roleDisplay",labelKey:"tableHeaders.role"}},4638:function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".labeled-tooltip{position:absolute;width:100%;height:100%;left:0;top:0}.labeled-tooltip.hoverable{height:0%}.labeled-tooltip .status-icon{position:absolute;right:30px;top:18px;z-index:3}.labeled-tooltip .tooltip{position:absolute;width:calc(100% + 2px);top:calc(100% + 6px)}.labeled-tooltip .tooltip .tooltip-arrow{right:30px}.labeled-tooltip .tooltip .tooltip-inner{padding:10px}.labeled-tooltip.error .status-icon{color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-inner{color:var(--input-bg);background:var(--error);border-color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-arrow{border-bottom-color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-arrow:after{border:none}.labeled-tooltip.error .status-icon{top:7px;right:5px}.labeled-tooltip.warning .status-icon{color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-inner{color:var(--input-bg);background:var(--warning);border-color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-arrow{border-bottom-color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-arrow:after{border:none}.labeled-tooltip.success .status-icon{color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-inner{color:var(--input-bg);background:var(--success);border-color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-arrow{border-bottom-color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-arrow:after{border:none}.tooltip .tooltip-inner>pre{padding:2px;vertical-align:middle}",""]),t.exports=e},4774:function(t,e,n){var r=n("cd68"),o=n("500b"),i=n("ecf6");function a(t,e){return i(o(t,e,r),t+"")}t.exports=a},4778:function(t,e,n){var r=n("4b2c"),o=n("986c"),i=n("a4fc"),a=n("659f"),s=n("6944"),c=n("5e52"),l=1,u=2,d="[object Boolean]",p="[object Date]",f="[object Error]",h="[object Map]",v="[object Number]",b="[object RegExp]",g="[object Set]",m="[object String]",y="[object Symbol]",w="[object ArrayBuffer]",_="[object DataView]",x=r?r.prototype:void 0,O=x?x.valueOf:void 0;function k(t,e,n,r,x,k,A){switch(n){case _:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case w:return!(t.byteLength!=e.byteLength||!k(new o(t),new o(e)));case d:case p:case v:return i(+t,+e);case f:return t.name==e.name&&t.message==e.message;case b:case m:return t==e+"";case h:var E=s;case g:var S=r&l;if(E||(E=c),t.size!=e.size&&!S)return!1;var C=A.get(t);if(C)return C==e;r|=u,A.set(t,e);var T=a(E(t),E(e),r,x,k,A);return A["delete"](t),T;case y:if(O)return O.call(t)==O.call(e)}return!1}t.exports=k},"479b":function(t,e,n){var r=n("a4fc"),o=n("f72d"),i=n("a67c"),a=n("b506");function s(t,e,n){if(!a(n))return!1;var s=typeof e;return!!("number"==s?o(n)&&i(e,n.length):"string"==s&&e in n)&&r(n[e],t)}t.exports=s},"47be":function(t,e,n){"use strict";n("867e")},"489a":function(t,e){var n=Object.prototype,r=n.hasOwnProperty;function o(t,e){return null!=t&&r.call(t,e)}t.exports=o},4914:function(t,e,n){var r=n("8683");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("462656a4",r,!0,{sourceMap:!1,shadowMode:!1})},"494f":function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},"4a83":function(t,e,n){var r=n("d3e6"),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,a=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,(function(t,n,r,o){e.push(r?o.replace(i,"$1"):n||t)})),e}));t.exports=a},"4a8f":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));const r="backTo"},"4ac6":function(t,e,n){"use strict";n.d(e,"f",(function(){return r})),n.d(e,"c",(function(){return o})),n.d(e,"g",(function(){return i})),n.d(e,"b",(function(){return a})),n.d(e,"e",(function(){return c})),n.d(e,"a",(function(){return l})),n.d(e,"d",(function(){return u}));const r="field.cattle.io/name",o="field.cattle.io/description",i="field.cattle.io/projectId",a="field.cattle.io/publicEndpoints",s=/cattle\.io\//,c=[s],l=[s],u={CLOUD_INIT:"harvesterhci.io/cloud-init-template",CLOUD_PROVIDER_IPAM:"cloudprovider.harvesterhci.io/ipam",NETWORK_ROUTE:"network.harvesterhci.io/route",IMAGE_NAME:"harvesterhci.io/image-name",NETWORK_TYPE:"network.harvesterhci.io/type",PRIMARY_SERVICE:"cloudprovider.harvesterhci.io/primary-service"}},"4b12":function(t,e,n){var r=n("379a");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("125435f2",r,!0,{sourceMap:!1,shadowMode:!1})},"4b2c":function(t,e,n){var r=n("201b"),o=r.Symbol;t.exports=o},"4b48":function(t,e){function n(t,e){return t.has(e)}t.exports=n},"4b7a":function(t,e,n){var r=n("effc"),o=n("280a"),i=n("cd68"),a=n("c316"),s=n("d440");function c(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?a(t)?o(t[0],t[1]):r(t):s(t)}t.exports=c},"4b91":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".delete-warning[data-v-3a26ac99]{color:var(--error)}.remove-project-dialog[data-v-3a26ac99]{border:1px solid var(--border);padding:10px;border-radius:5px}.remove-project-dialog .display-name[data-v-3a26ac99]{font-weight:700}",""]),t.exports=e},"4c0b":function(t,e){function n(t,e){return function(n){return t(e(n))}}t.exports=n},"4efd":function(t,e,n){var r=n("d856"),o=n("54f6"),i=n("f9f5"),a=n("40cc"),s=n("994b");function c(t){var e=-1,n=null==t?0:t.length;this.clear();while(++et.replace(/^ui-/,""),mangleWrite:t=>"ui-"+t}),o("pcs","",{asCookie:a,asUserPreference:!1}),o("locale","en-us",{asCookie:a}),o("keymap","sublime",{options:["sublime","emacs","vim"]}),o("per-page",100,{options:[10,25,50,100],parseJSON:i})),d=(o("logs-wrap",!0,{parseJSON:i}),o("logs-time",!0,{parseJSON:i}),o("logs-range","30 minutes",{parseJSON:i}),o("hide-repos",[],{parseJSON:i}),o("hide-desc",[],{parseJSON:i}),o("hide-sensitive",!0,{options:[!0,!1],parseJSON:i}),o("show-pre-release",!1,{options:[!1,!0],parseJSON:i}),o("chart-mode","featured",{parseJSON:i}),o("date-format","ddd, MMM D YYYY",{options:["ddd, MMM D YYYY","ddd, D MMM YYYY","D/M/YYYY","M/D/YYYY","YYYY-MM-DD"]}),o("time-format","h:mm:ss a",{options:["h:mm:ss a","HH:mm:ss"]}),o("time-zone","local"),o("dev",!1,{parseJSON:i})),p=o("view-in-api",!1,{parseJSON:i,inheritFrom:d}),f=(o("all-namespaces",!1,{parseJSON:i,inheritFrom:d}),o("theme-shortcut",!1,{parseJSON:i,inheritFrom:d}),o("last-visited","home",{parseJSON:i}),o("seen-whatsnew","",{parseJSON:i}),o("read-whatsnew","",{parseJSON:i}),o("after-login-route","home",{parseJSON:i})),h=(o("home-page-cards",{},{parseJSON:i}),o("plugin-developer",!1,{parseJSON:i,inheritFrom:d}),"rke1"),v="rke2";o("provisioner",v,{options:[h,v]}),o("hide-psp-deprecation-banner",!1,{parseJSON:i}),o("menu-max-clusters",4,{options:[2,3,4,5,6,7,8,9,10],parseJSON:i}),o("scale-pool-prompt",null,{parseJSON:i})}).call(this,n("07d9"))},"500b":function(t,e,n){var r=n("cda3"),o=Math.max;function i(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){var i=arguments,a=-1,s=o(i.length-e,0),c=Array(s);while(++a0&&t.canSeeProjectlessNamespaces?e("div",{staticClass:"mt-20 remove-project-dialog"},[e("Checkbox",{attrs:{label:t.t("promptRemove.deleteAssociatedNamespaces")},model:{value:t.deleteProjectNamespaces,callback:function(e){t.deleteProjectNamespaces=e},expression:"deleteProjectNamespaces"}}),e("div",{staticClass:"mt-10 ml-20"},[e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.resourceNames(t.names,t.plusMore,t.t),expression:"resourceNames(names, plusMore, t)"}]})])],1):t._e()])])},o=[],i=n("9ce4"),a=n("4ac6"),s=n("907c"),c=n("0df0"),l=n("2cb5"),u={name:"ProjectAndNamespacesPromptRemove",components:{Checkbox:c["a"]},props:{value:{type:Array,default:()=>[]},type:{type:String,required:!0}},async fetch(){this.allNamespaces=await this.$store.dispatch("cluster/findAll",{type:s["l"]}),this.allProjects=await this.$store.dispatch("management/findAll",{type:s["j"].PROJECT})},data(){return{deleteProjectNamespaces:!1,allNamespaces:[],allProjects:[]}},computed:{...Object(i["b"])("action-menu",["toRemove"]),...Object(i["a"])({t:"i18n/t"}),...Object(i["a"])(["currentCluster"]),currentProject(){return this.allProjects?this.value[0]:{}},filteredNamespaces(){return this.currentProject?this.allNamespaces.filter(t=>{var e;return t.metadata.labels[a["g"]]===(null===(e=this.currentProject.metadata)||void 0===e?void 0:e.name)}):[]},plusMore(){const t=this.filteredNamespaces.length>5?this.filteredNamespaces.length-5:0;return this.t("promptRemove.andOthers",{count:t})},displayName(){var t,e;return null===(t=this.currentProject)||void 0===t||null===(e=t.spec)||void 0===e?void 0:e.displayName},names(){return this.filteredNamespaces.map(t=>t.nameDisplay).slice(0,5)},canSeeProjectlessNamespaces(){return this.currentCluster.canUpdate}},methods:{resourceNames:l["m"],remove(){return!(!this.deleteProjectNamespaces&&this.canSeeProjectlessNamespaces)&&Promise.all(this.filteredNamespaces.map(t=>t.remove())).then(()=>!1)}}},d=u,p=(n("dd58"),n("d802")),f=Object(p["a"])(d,r,o,!1,null,"3a26ac99",null);e["default"]=f.exports},5622:function(t,e,n){"use strict";n("98b4")},"573c":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]{background-color:transparent;border:none;font-size:18px}.table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]:focus,.table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]:hover{background-color:var(--accent-btn);box-shadow:none}.table-options-group .table-options-container[data-v-96d8a090]{width:350px;border:1px solid var(--primary);background-color:var(--body-bg);padding:20px;z-index:1}.table-options-group .table-options-container .table-options-grouping[data-v-96d8a090]{display:flex;align-items:center;margin-bottom:20px}.table-options-group .table-options-container .table-options-grouping span[data-v-96d8a090]{white-space:nowrap;margin-right:10px}.table-options-group .table-options-container ul[data-v-96d8a090]{list-style:none;margin:0;padding:0;max-height:200px;overflow-y:auto}.table-options-group .table-options-container ul li[data-v-96d8a090]{margin:0;padding:0}.table-options-group .table-options-container ul li.visible[data-v-96d8a090]{margin:0 0 10px 0}.sortable>SPAN[data-v-96d8a090]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.sortable>SPAN[data-v-96d8a090]:active,.sortable>SPAN[data-v-96d8a090]:hover{text-decoration:underline;color:var(--body-text)}thead tr[data-v-96d8a090]{background-color:var(--sortable-table-header-bg);color:var(--body-text);text-align:left}thead tr[data-v-96d8a090]:not(.loading){border-bottom:1px solid var(--sortable-table-top-divider)}th[data-v-96d8a090]{padding:8px 5px;font-weight:400;border:0;color:var(--body-text)}th .table-header-container[data-v-96d8a090]{display:inherit}th .table-header-container>span[data-v-96d8a090]{display:flex;align-items:center}th .table-header-container.not-filterable[data-v-96d8a090],th .table-header-container.not-filterable .icon-stack[data-v-96d8a090]{margin-top:-2px}th .table-header-container .not-filter-icon[data-v-96d8a090]{font-size:16px;color:var(--primary);vertical-align:super}th[data-v-96d8a090]:first-child{padding-left:10px}th[data-v-96d8a090]:last-child{padding-right:10px}th:not(.sortable)>SPAN[data-v-96d8a090]{display:block;margin-bottom:2px}th A[data-v-96d8a090]{color:var(--body-text)}@media only screen and (max-width:480px){th.desktop[data-v-96d8a090],th.laptop[data-v-96d8a090],th.tablet[data-v-96d8a090]{display:none}}@media only screen and (max-width:992px){th.desktop[data-v-96d8a090],th.laptop[data-v-96d8a090]{display:none}}@media only screen and (max-width:1281px){th.desktop[data-v-96d8a090]{display:none}}.icon-stack[data-v-96d8a090]{width:12px}.icon-sort.faded[data-v-96d8a090]{opacity:.3}",""]),t.exports=e},5801:function(t,e,n){"use strict";n.r(e);var r=function(){var t=this,e=t._self._c;return e("div",{staticClass:"mt-10"},[e("div",{staticClass:"mb-30"},[t._v(" "+t._s(t.t("promptRemove.attemptingToRemove",{type:t.type}))+" "),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.podNames,expression:"podNames"}],staticClass:"machine-name"})]),e("div",{staticClass:"mb-30"},[e("Checkbox",{attrs:{label:t.t("promptForceRemove.forceDelete")},model:{value:t.forceDelete,callback:function(e){t.forceDelete=e},expression:"forceDelete"}})],1),e("Banner",{attrs:{color:"warning","label-key":"promptForceRemove.podRemoveWarning"}}),t._l(t.errors,(function(t,n){return e("Banner",{key:n,attrs:{color:"error",label:t}})}))],2)},o=[],i=function(){var t=this,e=t._self._c;t._self._setupProxy;return e("div",{staticClass:"banner",class:{[t.color]:!0}},[t.icon?e("div",{staticClass:"banner__icon",attrs:{"data-testid":"banner-icon"}},[e("i",{staticClass:"icon icon-2x",class:t.icon})]):t._e(),e("div",{staticClass:"banner__content",class:{closable:t.closable,stacked:t.stacked,icon:t.icon},attrs:{"data-testid":"banner-content"}},[t._t("default",(function(){return[t.labelKey?e("t",{attrs:{k:t.labelKey,raw:!0}}):t.messageLabel?e("span",[t._v(t._s(t.messageLabel))]):e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.nlToBr(t.label),expression:"nlToBr(label)"}]})]})),t.closable?e("div",{staticClass:"banner__content__closer",on:{click:function(e){return t.$emit("close")}}},[e("i",{staticClass:"icon icon-close closer-icon",attrs:{"data-testid":"banner-close"}})]):t._e()],2)])},a=[],s=n("8bbf"),c=n.n(s),l=n("2cb5"),u=n("3e9d"),d=c.a.extend({props:{color:{type:String,default:"secondary"},label:{type:[String,Error,Object],default:null},labelKey:{type:String,default:null},icon:{type:String,default:null},closable:{type:Boolean,default:!1},stacked:{type:Boolean,default:!1}},computed:{messageLabel(){return"string"!==typeof this.label?Object(u["b"])(this.label):void 0}},methods:{nlToBr:l["j"]}}),p=d,f=(n("0843"),n("d802")),h=Object(f["a"])(p,i,a,!1,null,"02d86e5d",null),v=h.exports,b=n("1032"),g=n("9ce4"),m=n("9ec3"),y={name:"PromptRemovePodDialog",components:{Banner:v,Checkbox:b["a"]},props:{value:{type:Array,default:()=>[]},names:{type:Array,default:()=>[]},type:{type:String,required:!0}},data(){return{errors:[],forceDelete:!1}},computed:{...Object(g["b"])("action-menu",["toRemove"]),...Object(g["a"])({t:"i18n/t"}),plusMore(){const t=this.names.length-this.names.length;return this.t("promptRemove.andOthers",{count:t})},podNames(){return this.names.reduce((t,e,n)=>(n>=5||(t+=`${e}`,n===this.names.length-1?t+=this.plusMore:t+=n===this.toRemove.length-2?" and ":", "),t),"")}},methods:{async remove(t){const e=this.$parent.$parent.$parent;let n;e.doneLocation&&(n={...e.doneLocation});try{await Promise.all(this.value.map(t=>this.removePod(t))),n&&!Object(m["isEmpty"])(n)&&e.currentRouter.push(n),e.close()}catch(r){e.error=r,t(!1)}},removePod(t){const e=this.forceDelete?{data:{gracePeriod:0,force:!0}}:void 0;return t.remove(e)}}},w=y,_=(n("c210"),Object(f["a"])(w,r,o,!1,null,"db441fb2",null));e["default"]=_.exports},5877:function(e,n){e.exports=t},"5b4b":function(t,e){function n(t,e){var n=-1,r=null==t?0:t.length,o=0,i=[];while(++n*{flex:0}.card-container.card-sticky .card-wrap .card-body{flex:1}",""]),t.exports=e},"5f84":function(t,e){function n(){return[]}t.exports=n},"5fe6":function(t,e,n){var r=n("2419"),o=n("39f2"),i=n("b022"),a=n("1fce"),s=n("494f"),c=n("4b48"),l=200;function u(t,e,n,u){var d=-1,p=o,f=!0,h=t.length,v=[],b=e.length;if(!h)return v;n&&(e=a(e,s(n))),u?(p=i,f=!1):e.length>=l&&(p=c,f=!1,e=new r(e));t:while(++d0&&n(u)?e>1?i(u,e-1,n,a,s):r(s,u):a||(s[s.length]=u)}return s}t.exports=i},"629b":function(t,e,n){var r=n("6bcf"),o=1/0;function i(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-o?"-0":e}t.exports=i},"640c":function(t,e,n){"use strict";n.d(e,"a",(function(){return h}));var r=n("4ac6"),o=n("8eaf"),i=n.n(o),a=n("7fd6"),s=n.n(a),c=n("8bbf"),l=n.n(c),u=n("2cb5"),d=n("9c09");function p(t){const e=["state","name","description","labels","annotations"];return e.forEach(e=>delete t[e]),t}class f extends d["b"]{constructor(t,e,n=null,r=!1){const o=p(t);super(o,e,n,r)}get labels(){var t;const e=(null===(t=this.metadata)||void 0===t?void 0:t.labels)||{};return i()(e,(t,e)=>Object(u["i"])(e,r["e"]))}setLabels(t){this.metadata||(this.metadata={});const e=this.metadata.labels||{},n=s()(e,(t,e)=>Object(u["i"])(e,r["e"]));l.a.set(this.metadata,"labels",{...n,...t})}setLabel(t,e){var n;e?(this.metadata||(this.metadata={}),this.metadata.labels||(this.metadata.labels={}),l.a.set(this.metadata.labels,t,e)):null!==(n=this.metadata)&&void 0!==n&&n.labels&&(l.a.set(this.metadata.labels,t,void 0),delete this.metadata.labels[t])}get annotations(){var t;const e=(null===(t=this.metadata)||void 0===t?void 0:t.annotations)||{};return i()(e,(t,e)=>Object(u["i"])(e,r["a"]))}setAnnotations(t){this.metadata||(this.metadata={});const e=this.metadata.annotations||{},n=s()(e,(t,e)=>Object(u["i"])(e,r["a"]));l.a.set(this.metadata,"annotations",{...n,...t})}setAnnotation(t,e){var n;e?(this.metadata||(this.metadata={}),this.metadata.annotations||(this.metadata.annotations={}),l.a.set(this.metadata.annotations,t,e)):null!==(n=this.metadata)&&void 0!==n&&n.annotations&&(l.a.set(this.metadata.annotations,t,void 0),delete this.metadata.annotations[t])}get state(){var t;return(null===(t=this.stateObj)||void 0===t?void 0:t.name)||"unknown"}}class h extends f{get name(){var t;return(null===(t=this.metadata)||void 0===t?void 0:t.name)||this._name}get namespace(){var t;return null===(t=this.metadata)||void 0===t?void 0:t.namespace}get description(){var t,e,n;return(null===(t=this.metadata)||void 0===t||null===(e=t.annotations)||void 0===e?void 0:e[r["c"]])||(null===(n=this.spec)||void 0===n?void 0:n.description)||this._description}set description(t){var e;null!==(e=this.metadata)&&void 0!==e&&e.annotations&&(this.metadata.annotations[r["c"]]=t),this.spec&&(this.spec.description=t),this._description=t}}},6444:function(t,e,n){"use strict";t.exports=function(t,e){return e||(e={}),t=t&&t.__esModule?t.default:t,"string"!==typeof t?t:(/^['"].*['"]$/.test(t)&&(t=t.slice(1,-1)),e.hash&&(t+=e.hash),/["'() \t\n]/.test(t)||e.needQuotes?'"'.concat(t.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):t)}},"653d":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));const r="R_REDIRECTED"},6552:function(t,e,n){var r=n("51db"),o=n("0f8f"),i=n("cc7f");function a(t,e){return null==t?t:r(t,o(e),i)}t.exports=a},"659f":function(t,e,n){var r=n("2419"),o=n("9b25"),i=n("4b48"),a=1,s=2;function c(t,e,n,c,l,u){var d=n&a,p=t.length,f=e.length;if(p!=f&&!(d&&f>p))return!1;var h=u.get(t),v=u.get(e);if(h&&v)return h==e&&v==t;var b=-1,g=!0,m=n&s?new r:void 0;u.set(t,e),u.set(e,t);while(++b{const{name:a,nodePort:c,port:l,targetPort:u}=t,d=r+1;if(i.length>1&&o()(a)&&n.push(e["i18n/t"]("validation.service.ports.name.required",{position:d})),!o()(a)){const t=Object(s["d"])(a,"name",e,void 0,n);o()(t)||(n=n.length&&n.length>0?[...n,...t]:t)}if(c){const t=parseInt(c,10);isNaN(t)&&n.push(e["i18n/t"]("validation.service.ports.nodePort.requiredInt",{position:d}))}if(l){const t=parseInt(l,10);isNaN(t)&&n.push(e["i18n/t"]("validation.service.ports.port.requiredInt",{position:d}))}else n.push(e["i18n/t"]("validation.service.ports.port.required",{position:d}));if(u){const t=e["i18n/t"]("validation.service.ports.targetPort.ianaAt",{position:d}),r=parseInt(u,10),i=new RegExp("^\\d+$"),a=i.test(u);if(a)(r<1||r>65535)&&n.push(e["i18n/t"]("validation.service.ports.targetPort.between",{position:d}));else{const r={ianaServiceName:!0,maxLength:15,validChars:"A-Za-z0-9-"},i=Object(s["d"])(u,t,e,r,n);o()(i)||n.push(...i)}}else n.push(e["i18n/t"]("validation.service.ports.targetPort.required",{position:d}))}),n)}function l(t,e,n,r){const o=["ClusterIP","NodePort","LoadBalancer"],i=null===t||void 0===t?void 0:t.type;return o.includes(i),n}function u(t,e,n,r){if("ExternalName"===(null===t||void 0===t?void 0:t.type))if(o()(null===t||void 0===t?void 0:t.externalName))n.push(e["i18n/t"]("validation.service.externalName.none"));else{const r=Object(s["f"])(t.externalName,"ExternalName",e,void 0,n);o()(r)||(n=n.length&&n.length>0?[...n,...r]:r)}return n}var d=n("d66a"),p=n.n(d);function f(t,e,n,r){return o()(null===t||void 0===t?void 0:t.groups)&&n.push(e["i18n/t"]("validation.prometheusRule.groups.required")),n}function h(t=[],e,n,r){return t.forEach((t,r)=>{const i=r+1;o()(null===t||void 0===t?void 0:t.name)&&n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.name",{index:i})),o()(null===t||void 0===t?void 0:t.rules)?n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.singleEntry",{index:i})):t.rules.forEach((t,r)=>{const a=r+1;p()(t,"alert")&&o()(null===t||void 0===t?void 0:t.alert)?n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.rule.alertName",{groupIndex:i,ruleIndex:a})):p()(t,"record")&&o()(null===t||void 0===t?void 0:t.record)&&n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.rule.recordName",{groupIndex:i,ruleIndex:a})),(p()(t,"expr")&&o()(t.expr)||!p()(t,"expr"))&&n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.rule.expr",{groupIndex:i,ruleIndex:a})),p()(t,"alert")&&(p()(t,"labels")&&o()(t.labels)||!p()(t,"labels"))&&n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.rule.labels",{groupIndex:i,ruleIndex:a}))})}),n}function v(t,e,n,r){o()(null===t||void 0===t?void 0:t.match)&&o()(null===t||void 0===t?void 0:t["match_re"])&&n.push(e["i18n/t"]("validation.monitoring.route.match"))}function b(t,e,n,r,o){/^\d+[hms]$/.test(t)||n.push(e["i18n/t"]("validation.monitoring.route.interval",{key:o}))}var g=n("e24b");function m(t,e,n){let r;r=t.jobTemplate?Object(g["f"])(t,"jobTemplate.spec.template.spec"):Object(g["f"])(t,"template.spec"),r.containers&&r.containers.length?r.containers.forEach(t=>{t&&!t.image&&n.push(e["i18n/t"]("workload.validation.containerImage",{name:t.name}))}):n.push(e["i18n/t"]("validation.required",{key:e["i18n/t"]("workload.container.titles.containers")}))}var y=n("2105"),w=n.n(y);function _(t="",e,n){try{w.a.toString(t)}catch(r){n.push(e["i18n/t"]("validation.invalidCron"))}}function x(t,e,n){if(!t)return;const{podAffinity:r,podAntiAffinity:o}=t;if(r&&!Object(g["g"])(r)){const{preferredDuringSchedulingIgnoredDuringExecution:t=[],requiredDuringSchedulingIgnoredDuringExecution:o=[]}=r;t.forEach((t,r)=>{const o={index:r,group:e["i18n/t"]("validation.podAffinity.affinityTitle"),rules:e["i18n/t"]("validation.podAffinity.preferredDuringSchedulingIgnoredDuringExecution")};O(t,o,e,n);const{podAffinityTerm:i={}}=t;k(i,o,e,n),A(i,o,e,n)}),o.forEach((t,r)=>{const o={index:r,group:e["i18n/t"]("validation.podAffinity.affinityTitle"),rules:e["i18n/t"]("validation.podAffinity.requiredDuringSchedulingIgnoredDuringExecution")};k(t,o,e,n),A(t,o,e,n)})}if(o&&!Object(g["g"])(o)){const{preferredDuringSchedulingIgnoredDuringExecution:t=[],requiredDuringSchedulingIgnoredDuringExecution:r=[]}=o;t.forEach((t,r)=>{const o={index:r,group:e["i18n/t"]("validation.podAffinity.antiAffinityTitle"),rules:e["i18n/t"]("validation.podAffinity.preferredDuringSchedulingIgnoredDuringExecution")};O(t,o,e,n);const{podAffinityTerm:i={}}=t;k(i,o,e,n),A(i,o,e,n)}),r.forEach((t,r)=>{const o={index:r,group:e["i18n/t"]("validation.podAffinity.antiAffinityTitle"),rules:e["i18n/t"]("validation.podAffinity.requiredDuringSchedulingIgnoredDuringExecution")};k(t,o,e,n),A(t,o,e,n)})}}function O(t,e,n,r){const{weight:o=1}=t;("number"!==typeof o||o>100||o<1)&&r.push(n["i18n/t"]("validation.number.between",{key:n["i18n/t"]("workload.scheduling.matchExpressions.weight"),min:1,max:100,...e}))}function k(t,e,n,r){const{topologyKey:o}=t,i=RegExp("([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]");o&&i.test(o)||r.push(n["i18n/t"]("validation.podAffinity.topologyKey",e))}function A(t,e,n,r){const o=["In","NotIn","Exists","DoesNotExist"],{labelSelector:i}=t;if(i&&!Object(g["g"])(i)){const{matchExpressions:t=[]}=i;t.forEach((t,i)=>{const{operator:a,values:s}=t;o.includes(a)||r.push(n["i18n/t"]("validation.podAffinity.matchExpressions.operator",e)),"In"===a||"NotIn"===a?s&&s.length||r.push(n["i18n/t"]("validation.podAffinity.matchExpressions.valuesMustBeDefined",e)):s&&s.length&&r.push(n["i18n/t"]("validation.podAffinity.matchExpressions.valueMustBeEmpty",e))})}}var E=n("907c");function S(t=[],e,n,r=[]){t.some(t=>o()(t.verbs))&&n.push(e["i18n/t"]("validation.roleTemplate.roleTemplateRules.missingVerb")),r[0]===E["t"].ROLE?(t.some(t=>o()(t.resources))&&n.push(e["i18n/t"]("validation.roleTemplate.roleTemplateRules.missingResource")),t.some(t=>o()(t.apiGroups))&&n.push(e["i18n/t"]("validation.roleTemplate.roleTemplateRules.missingApiGroup"))):t.some(t=>o()(t.resources)&&o()(t.nonResourceURLs)&&o()(t.apiGroups))&&n.push(e["i18n/t"]("validation.roleTemplate.roleTemplateRules.missingOneResource"))}function C(t,e,n,r,o){const i="true"===r[0];return i&&(t||"").match(/^(c-.{5}|local)$/i)&&n.push(e["i18n/t"]("validation.cluster.name")),n}const T=["server-url"];function R(t,e,n,r,o){const i=r[0];return T.includes(i)&&!t.toLowerCase().startsWith("https://")&&n.push(e["i18n/t"]("validation.setting.serverUrl.https")),n}e["a"]={clusterName:C,clusterIp:l,externalName:u,flowOutput:i,groupsAreValid:h,logdna:a,ruleGroups:f,interval:b,servicePort:c,matching:v,containerImages:m,cronSchedule:_,podAffinity:x,roleTemplateRules:S,isHttps:R}},7049:function(t,e){function n(t){return this.__data__.has(t)}t.exports=n},7083:function(t,e,n){"use strict";var r,o,i,a,s,c;n.d(e,"c",(function(){return r})),n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return s})),function(t){t["ACTION"]="Action",t["TAB"]="Tab",t["PANEL"]="Panel",t["CARD"]="Card",t["TABLE_COL"]="TableColumn"}(r||(r={})),function(t){t["HEADER"]="header-action",t["TABLE"]="table-action"}(o||(o={})),function(t){t["DETAILS_MASTHEAD"]="details-masthead",t["DETAIL_TOP"]="detail-top",t["RESOURCE_LIST"]="resource-list"}(i||(i={})),function(t){t["RESOURCE_DETAIL"]="tab",t["CLUSTER_CREATE_RKE2"]="cluster-create-rke2"}(a||(a={})),function(t){t["CLUSTER_DASHBOARD_CARD"]="cluster-dashboard-card"}(s||(s={})),function(t){t["RESOURCE"]="resource-list"}(c||(c={}))},7195:function(t,e,n){var r=n("2e63"),o=n("bc61"),i=n("cca9"),a=n("4b7a"),s=n("ff00"),c=n("c316"),l=n("dda8"),u=n("daaf"),d=n("b506"),p=n("41dd");function f(t,e,n){var f=c(t),h=f||l(t)||p(t);if(e=a(e,4),null==n){var v=t&&t.constructor;n=h?f?new v:[]:d(t)&&u(v)?o(s(t)):{}}return(h?r:i)(t,(function(t,r,o){return e(n,t,r,o)})),n}t.exports=f},"71bd":function(t,e,n){var r=n("6a68"),o=n("1ab6"),i=n("e91b"),a=n("413d"),s=n("b03d"),c=n("6efc"),l=n("c316"),u=n("35d9"),d=n("dda8"),p=n("daaf"),f=n("b506"),h=n("2a46"),v=n("41dd"),b=n("2cbd"),g=n("e127");function m(t,e,n,m,y,w,_){var x=b(t,n),O=b(e,n),k=_.get(O);if(k)r(t,n,k);else{var A=w?w(x,O,n+"",t,e,_):void 0,E=void 0===A;if(E){var S=l(O),C=!S&&d(O),T=!S&&!C&&v(O);A=O,S||C||T?l(x)?A=x:u(x)?A=a(x):C?(E=!1,A=o(O,!0)):T?(E=!1,A=i(O,!0)):A=[]:h(O)||c(O)?(A=x,c(x)?A=g(x):f(x)&&!p(x)||(A=s(O))):E=!1}E&&(_.set(O,A),y(A,O,m,w,_),_["delete"](O)),r(t,n,A)}}t.exports=m},"71d2":function(t,e,n){var r=n("6290"),o=1/0;function i(t){var e=null==t?0:t.length;return e?r(t,o):[]}t.exports=i},7212:function(t,e,n){var r=n("122c");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("6a92afb8",r,!0,{sourceMap:!1,shadowMode:!1})},"735f":function(t,e){var n=Function.prototype,r=n.toString;function o(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}t.exports=o},"736a":function(t,e,n){var r=n("927d"),o=1,i=4;function a(t){return r(t,o|i)}t.exports=a},"73b4":function(t,e,n){var r=n("0ee5"),o=n("cfd2"),i=n("9f54");function a(t,e,n){return e===e?i(t,e,n):r(t,o,n)}t.exports=a},"73bd":function(t,e,n){var r=n("c02d"),o=n("a4fc"),i=Object.prototype,a=i.hasOwnProperty;function s(t,e,n){var i=t[e];a.call(t,e)&&o(i,n)&&(void 0!==n||e in t)||r(t,e,n)}t.exports=s},"760b":function(t,e,n){"use strict";var r=n("907c"),o=n("4ac6"),i=n("330a"),a=n.n(i),s=n("d66a"),c=n.n(s),l=n("2105"),u=n.n(l);class d{constructor(t){this.string=String(t),this.int=parseInt(this.string,10),this.empty=!t&&0!==this.int,this.isNumber=!isNaN(this.int)&&!this.string.includes("e"),this.isInt=this.isNumber&&!this.string.includes(".")}}const p=["server-url"],f=(t,e)=>{for(const n of e){const e=n(t);if(e)return e}};e["a"]=function(t,{key:e="Value"}){const n=n=>r=>"."===(null===r||void 0===r?void 0:r.slice(0,1))?t(`validation.dns.${n}.startDot`,{key:e}):void 0,i=n=>r=>"."===(null===r||void 0===r?void 0:r.slice(-1))?t(`validation.dns.${n}.endDot`,{key:e}):void 0,s=n=>r=>{var o;return null!==r&&void 0!==r&&null!==(o=r.slice(0,1))&&void 0!==o&&o.match(/[0-9]/)?t(`validation.dns.${n}.startNumber`,{key:e}):void 0},l=n=>r=>"-"===(null===r||void 0===r?void 0:r.slice(0,1))?t(`validation.dns.${n}.startHyphen`,{key:e}):void 0,h=n=>r=>"-"===(null===r||void 0===r?void 0:r.slice(-1))?t(`validation.dns.${n}.endHyphen`,{key:e}):void 0,v=n=>r=>Number(r)r=>Number(r)>Number(n)?t("validation.maxValue",{key:e,max:n}):void 0,g=([n,r])=>o=>v(n)(o)||b(r)(o)?t("validation.betweenValues",{key:e,min:n,max:r}):void 0,m=n=>r=>r.lengthr=>r.length>Number(n)?t("validation.maxLength",{key:e,max:n}):void 0,w=([n,r])=>o=>m(n)(o)||y(r)(o)?t("validation.betweenLengths",{key:e,min:n,max:r}):void 0,_=n=>isNaN(parseInt(n,10))?t("validation.number.requiredInt",{key:e}):void 0,x=n=>!Number.isInteger(+n)||(""+n).match(/\.+/g)?t("validation.number.requiredInt",{key:e}):void 0,O=n=>+n<0?t("validation.number.isPositive",{key:e}):void 0,k=n=>{const r=""+n,o=r.match(/(^0+)(.+)/);return o?t("validation.number.isOctal",{key:e}):void 0},A=n=>parseInt(n,10)<1||parseInt(n,10)>65535?t("validation.number.between",{key:e,min:"1",max:"65535"}):void 0,E=n=>{const r=null===n||void 0===n?void 0:n.match(/[^${'A-Za-z0-9-'}]/g);if(r)return t("validation.chars",{key:e,count:r.length,chars:r.map(t=>" "===t?"Space":`"${t}"`).join(", ")})},S=n=>"--"===(null===n||void 0===n?void 0:n.substr(2,2))&&"xn"!==(null===n||void 0===n?void 0:n.substr(0,2))?t("validation.dns.doubleHyphen",{key:e}):void 0,C=n=>"--"===(null===n||void 0===n?void 0:n.substr(2,2))&&"xn"!==(null===n||void 0===n?void 0:n.substr(0,2))?t("validation.dns.doubleHyphen",{key:e}):void 0,T=n=>(r="")=>0===r.length?t(`validation.dns.${n}.emptyLabel`,{key:e,min:1}):void 0,R=(n,r=63)=>(o="")=>o.length>r?t(`validation.dns.${n}.tooLongLabel`,{key:e,max:r}):void 0,I=(n="")=>n.length>253?t("validation.dns.hostname.tooLong",{key:e,max:253}):void 0,L=(n="")=>"/"!==n[0]&&n.length>0?t("validation.path",{key:e}):void 0,j=n=>n||!1===n?void 0:t("validation.required",{key:e}),N=(n="")=>n.toLowerCase()!==n?t("validation.noUpperCase",{key:e}):void 0,D=e=>{try{u.a.toString(e)}catch(n){return t("validation.invalidCron")}},P=e=>{const n=n=>p.includes(e)&&!n.toLowerCase().startsWith("https://")?t("validation.setting.serverUrl.https"):void 0;return n},$=n=>/^\d+[hms]$/.test(n)?void 0:t("validation.monitoring.route.interval",{key:e}),M=e=>null!==e&&void 0!==e&&e.image?void 0:t("workload.validation.containerImage",{name:e.name}),F=e=>{var n,r,o,i,a,s;const c=e.jobTemplate?null===e||void 0===e||null===(n=e.jobTemplate)||void 0===n||null===(r=n.spec)||void 0===r||null===(o=r.template)||void 0===o||null===(i=o.spec)||void 0===i?void 0:i.containers:null===e||void 0===e||null===(a=e.template)||void 0===a||null===(s=a.spec)||void 0===s?void 0:s.containers;return c&&c.length?c.map(t=>M(t)).find(t=>t):t("validation.required",{key:t("workload.container.titles.containers")})},B=t=>{const e=[E,l("label"),h("label"),S,R("label")];return f(t,e)},U=t=>{const e=[E,l("label"),h("label"),C,T("label"),R("label",15)];return f(t,e)},G=t=>{const e=[E,s("label"),l("label"),h("label"),S,T("label"),R("label")];return f(t,e)},H=t=>{if(t){const e=[n("hostname"),I,i("hostname")],r=f(t,e);if(r)return r;const o=t.split("."),a=[E,l("hostname"),h("hostname"),S,T("hostname"),R("hostname")];for(let t=0;t(t=t?t.replace(/^\*\./,""):t,H(t)),q=e=>a()(e)?t("validation.service.externalName.none"):H(e),z=t=>"This is an error returned by the testRule validator",K=e=>a()(null===e||void 0===e?void 0:e.groups)?t("validation.prometheusRule.groups.required"):void 0,W=e=>n=>{var r;return e&&null!==(r=n||"")&&void 0!==r&&r.match(/^(c-.{5}|local)$/i)?t("validation.cluster.name"):void 0},X=e=>{const{name:n,idx:r}=e,o=new d(e.nodePort),i=new d(e.port),s=new d(e.targetPort);if(a()(n))return t("validation.service.ports.name.required",{position:r+1});if(!o.empty){if(!o.isInt)return t("validation.service.ports.nodePort.requiredInt",{position:r+1});if(o.int<1||o.int>65535)return t("validation.service.ports.nodePort.between",{position:r+1})}if(i.empty)return t("validation.service.ports.port.required",{position:r+1});var c;if(!i.isInt)return t("validation.service.ports.port.requiredInt",{position:r+1});if(i.int<1||i.int>65535)return t("validation.service.ports.port.between",{position:r+1});if(null!==(c=i.string)&&void 0!==c&&c.includes("."))return i;if(s.empty)return t("validation.service.ports.targetPort.required",{position:r+1});if(s.isInt){if(s.int<1||s.int>65535)return t("validation.service.ports.targetPort.between",{position:r+1})}else{const t=U(s.string);if(t)return t}},Y=(e,n)=>{let r;return a()(null===e||void 0===e?void 0:e.name)?t("validation.prometheusRule.groups.valid.name",{index:n}):a()(e.rules)?t("validation.prometheusRule.groups.valid.singleEntry",{index:n}):(e.rules.forEach((e,o)=>{const i=o+1;c()(e,"alert")&&a()(null===e||void 0===e?void 0:e.alert)&&!r?r=t("validation.prometheusRule.groups.valid.rule.alertName",{groupIndex:n,ruleIndex:i}):c()(e,"record")&&a()(null===e||void 0===e?void 0:e.record)&&(r=t("validation.prometheusRule.groups.valid.rule.recordName",{groupIndex:n,ruleIndex:i})),(c()(e,"expr")&&a()(e.expr)&&!r||!c()(e,"expr")&&!r)&&(r=t("validation.prometheusRule.groups.valid.rule.expr",{groupIndex:n,ruleIndex:i})),c()(e,"alert")&&(c()(e,"labels")&&a()(e.labels)&&!r||!c()(e,"labels")&&!r)&&(r=t("validation.prometheusRule.groups.valid.rule.labels",{groupIndex:n,ruleIndex:i}))}),r)},J=t=>{const e=[...t];let n;return e.forEach((t,e,r)=>{n=Y(t,e+1),n&&(r.length=e+1)}),n},Q=e=>{if(a()(null===e||void 0===e?void 0:e.match)&&a()(null===e||void 0===e?void 0:e["match_re"]))return t("validation.monitoring.route.match")},Z=e=>(n=[])=>{if(n.some(t=>a()(t.verbs)))return t("validation.roleTemplate.roleTemplateRules.missingVerb");if(e===r["t"].ROLE){if(n.some(t=>a()(t.resources)))return t("validation.roleTemplate.roleTemplateRules.missingResource");if(n.some(t=>a()(t.apiGroups)))return t("validation.roleTemplate.roleTemplateRules.missingApiGroup")}else if(n.some(t=>a()(t.resources)&&a()(t.nonResourceURLs)&&a()(t.apiGroups)))return t("validation.roleTemplate.roleTemplateRules.missingOneResource")},tt=t=>{},et=e=>{const n=JSON.parse(e),r=n.type;if(!r)return t("validation.required",{key:"Type"});if("s3"===r){if(!n.accessKeyId)return t("validation.required",{key:"accessKeyId"});if(!n.secretAccessKey)return t("validation.required",{key:"secretAccessKey"});if(!n.bucketRegion)return t("validation.required",{key:"bucketRegion"});if(!n.bucketName)return t("validation.required",{key:"bucketName"})}},nt=e=>{const n=["qcow","qcow2","raw","img","iso"];if(!e||""===e)return;const r=e.split("/").pop(),o=r.split(".").pop().toLowerCase();return n.includes(o)?void 0:t("harvester.validation.image.ruleTip")},rt=(e={})=>{if(!e[o["d"].IMAGE_NAME])return t("validation.required",{key:t("harvester.image.fileName")})},ot=r=>{const o=null===r||void 0===r?void 0:r.match(/[^a-z0-9.-]/g);return o?t("validation.chars",{key:e,count:o.length,chars:o.map(t=>" "===t?"Space":`"${t}"`).join(", ")}):f(r,[l("label"),h("label"),n("label"),i("label"),j])};return{absolutePath:L,backupTarget:et,betweenLengths:w,betweenValues:g,clusterIp:tt,clusterName:W,containerImage:M,containerImages:F,cronSchedule:D,dnsLabel:B,dnsLabelIanaServiceName:U,dnsLabelRestricted:G,externalName:q,fileRequired:rt,groupsAreValid:J,hostname:H,imageUrl:nt,interval:$,isHttps:P,matching:Q,maxLength:y,maxValue:b,minLength:m,minValue:v,noUpperCase:N,portNumber:A,required:j,requiredInt:_,isInteger:x,isPositive:O,isOctal:k,roleTemplateRules:Z,ruleGroups:K,servicePort:X,subDomain:ot,testRule:z,wildcardHostname:V}}},"770e":function(t,e,n){var r=n("25c2");function o(t){return null==t?"":r(t)}t.exports=o},7745:function(t,e,n){var r=n("24da");function o(t){var e=r(this,t)["delete"](t);return this.size-=e?1:0,e}t.exports=o},"779b":function(t,e,n){t.exports=n.p+"fonts/icons.e89f53cc.woff"},7838:function(t,n){t.exports=e},"78bc":function(t,e,n){"use strict";n.r(e);var r=function(){var t=this,e=t._self._c;return e("div",[[t._v(" "+t._s(t.t("promptRemove.attemptingToRemove",{type:t.type}))+" "),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.resourceNames(t.names,t.plusMore,t.t),expression:"resourceNames(names, plusMore, t)"}]})],t.info?e("div",{staticClass:"text info mb-10 mt-20"},[e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.info,expression:"info"}]})]):t._e(),t.warning?e("div",{staticClass:"text-warning mb-10 mt-20"},[t._v(" "+t._s(t.warning)+" ")]):t._e()],2)},o=[],i=n("060c"),a={name:"GlobalRolePromptRemove",mixins:[i["default"]],props:{value:{type:Array,default:()=>[]},type:{type:String,required:!0}}},s=a,c=(n("3973"),n("d802")),l=Object(c["a"])(s,r,o,!1,null,"effd72b0",null);e["default"]=l.exports},"78dd":function(t,e){function n(t){return function(){return t}}t.exports=n},"78e0":function(t,e,n){"use strict";n("51be")},"79ab":function(t,e,n){var r=n("24da");function o(t){return r(this,t).get(t)}t.exports=o},"79ad":function(t,e,n){"use strict";(function(t){n.d(e,"d",(function(){return c})),n.d(e,"c",(function(){return l})),n.d(e,"b",(function(){return d})),n.d(e,"a",(function(){return p})),n.d(e,"e",(function(){return h}));n("462f"),n("907c"),n("5000");var r=n("bddd"),o=(n("e24b"),n("2cb5")),i=n("d5fb"),a=(n("bcb3"),n("b506")),s=n.n(a);n("0788"),n("1d19"),n("f390"),n("e336");const c="__[[spoofed]]__",l="__[[spoofedapi]]__",u={},d={V1_MONITORING:"v1-monitoring",V2_MONITORING:"v2-monitoring",PROJECT:"project",NO_PROJECT:"no-project",NOT_V1_ISTIO:"not-v1-istio",MULTI_CLUSTER:"multi-cluster",NEUVECTOR_NAMESPACE:"neuvector-namespace",ADMIN:"admin-user",MCM_DISABLED:"mcm-disabled",NOT_STANDALONE_HARVESTER:"not-standalone-harvester"};function p(t,e,n="type-map"){return{product(r){const i={name:e,weight:1,inStore:"cluster",inExplorer:!1,removable:!0,showClusterSwitcher:!0,showNamespaceFilter:!1,public:!0,filterMode:"namespaces",...r};for(const t of["ifHaveGroup","ifHaveType"])i[t]&&(i[t]=v(Object(o["d"])(i[t])));t.commit(n+"/product",i)},basicType(o,i){!Object(r["f"])(o)&&o&&s()(o)&&(o=Object.values(o)),t.commit(n+"/basicType",{product:e,types:o,group:i})},groupBy(e,r){t.commit(n+"/groupBy",{type:e,field:r})},headers(e,r){r.forEach(t=>{t.getValue&&(t.valueProp=t.value,t.value=t.getValue),delete t.getValue}),t.commit(n+"/headers",{type:e,headers:r})},hideBulkActions(e,r){t.commit(n+"/hideBulkActions",{type:e,field:r})},configureType(e,r){r.graphConfig&&(u[e]=r.graphConfig,delete r.graphConfig),t.commit(n+"/configureType",{...r,match:e})},componentForType(e,r){t.commit(n+"/componentForType",{match:e,replace:r})},ignoreType(e){t.commit(n+"/ignoreType",e)},ignoreGroup(e,r){t.commit(n+"/ignoreGroup",{regexOrString:e,cb:r})},weightGroup(e,o,i){Object(r["f"])(e)?t.commit(n+"/weightGroup",{groups:e,weight:o,forBasic:i}):t.commit(n+"/weightGroup",{group:e,weight:o,forBasic:i})},setGroupDefaultType(e,o){Object(r["f"])(e)?t.commit(n+"/setGroupDefaultType",{groups:e,defaultType:o}):t.commit(n+"/setGroupDefaultType",{group:e,defaultType:o})},weightType(e,o,i){Object(r["f"])(e)?t.commit(n+"/weightType",{types:e,weight:o,forBasic:i}):t.commit(n+"/weightType",{type:e,weight:o,forBasic:i})},mapGroup(e,r,o=5,i=!1){t.commit(n+"/mapGroup",{match:e,replace:r,weight:o,continueOnMatch:i})},mapType(e,r,o=5,i=!1){t.commit(n+"/mapType",{match:e,replace:r,weight:o,continueOnMatch:i})},moveType(e,r,o=5,i=!1){t.commit(n+"/moveType",{match:e,group:r,weight:o})},virtualType(r){t.commit(n+"/virtualType",{product:e,obj:r})},spoofedType(r){t.commit(n+"/spoofedType",{product:e,obj:r})}}}let f=!1;async function h(t,e){if(!f){f=!0;for(const e of Object(i["k"])()){const n=await Object(i["l"])(e);null!==n&&void 0!==n&&n.init&&n.init(t)}e.loadProducts()}}function v(t){return t.source}}).call(this,n("07d9"))},"7bad":function(t,e,n){var r=n("24da");function o(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}t.exports=o},"7bdd":function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n("7d15"))},"7d15":function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}t.exports=n},"7dbf":function(t,e,n){var r=n("2c98");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("7df6f714",r,!0,{sourceMap:!1,shadowMode:!1})},"7e5c":function(t,e,n){"use strict";n("9c73")},"7f57":function(t){t.exports=JSON.parse('{"hasStylesheet":"true"}')},"7fd6":function(t,e,n){var r=n("1fce"),o=n("4b7a"),i=n("3b54"),a=n("cc5e");function s(t,e){if(null==t)return{};var n=r(a(t),(function(t){return[t]}));return e=o(e),i(t,n,(function(t,n){return e(t,n[0])}))}t.exports=s},8001:function(t,e,n){var r=n("5fe6"),o=n("6290"),i=n("b3e4");function a(t,e,n){var a=t.length;if(a<2)return a?i(t[0]):[];var s=-1,c=Array(a);while(++sspan[data-v-effd72b0]{margin-right:5px}",""]),t.exports=e},"86a1":function(t,e,n){"use strict";n.r(e);var r=function(){var t=this,e=t._self._c;return e("div",[[t._v(" "+t._s(t.t("promptRemove.attemptingToRemove",{type:t.type}))+" "),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.resourceNames(t.names,t.plusMore,t.t),expression:"resourceNames(names, plusMore, t)"}]})],t.info?e("div",{staticClass:"text info mb-10 mt-20"},[e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.info,expression:"info"}]})]):t._e(),t.warning?e("div",{staticClass:"text-warning mb-10 mt-20"},[t._v(" "+t._s(t.warning)+" ")]):t._e()],2)},o=[],i=n("060c"),a={name:"RoleTemplatePromptRemove",mixins:[i["default"]],props:{value:{type:Array,default:()=>[]},type:{type:String,required:!0}}},s=a,c=(n("18ae"),n("d802")),l=Object(c["a"])(s,r,o,!1,null,"5050d908",null);e["default"]=l.exports},"86eb":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".text.info[data-v-5050d908]{display:flex;align-items:center}.text.info>span[data-v-5050d908]{margin-right:5px}",""]),t.exports=e},"872c":function(t,e,n){var r=n("9b9a"),o=n("7745"),i=n("79ab"),a=n("f522"),s=n("7bad");function c(t){var e=-1,n=null==t?0:t.length;this.clear();while(++e0){if(++e>=n)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}t.exports=i},"907a":function(t,e){var n=Object.prototype,r=n.toString;function o(t){return r.call(t)}t.exports=o},"907c":function(t,e,n){"use strict";n.d(e,"y",(function(){return r})),n.d(e,"o",(function(){return o})),n.d(e,"b",(function(){return i})),n.d(e,"c",(function(){return a})),n.d(e,"e",(function(){return s})),n.d(e,"g",(function(){return c})),n.d(e,"h",(function(){return l})),n.d(e,"i",(function(){return u})),n.d(e,"l",(function(){return d})),n.d(e,"n",(function(){return p})),n.d(e,"m",(function(){return f})),n.d(e,"p",(function(){return h})),n.d(e,"q",(function(){return v})),n.d(e,"r",(function(){return b})),n.d(e,"s",(function(){return g})),n.d(e,"u",(function(){return m})),n.d(e,"v",(function(){return y})),n.d(e,"x",(function(){return w})),n.d(e,"w",(function(){return _})),n.d(e,"z",(function(){return x})),n.d(e,"t",(function(){return O})),n.d(e,"B",(function(){return k})),n.d(e,"C",(function(){return A})),n.d(e,"a",(function(){return R})),n.d(e,"k",(function(){return I})),n.d(e,"j",(function(){return L})),n.d(e,"f",(function(){return j})),n.d(e,"A",(function(){return N})),n.d(e,"d",(function(){return D}));const r={PREFERENCE:"userpreference"},o={APP:"app",AUTH_CONFIG:"authconfig",ETCD_BACKUP:"etcdbackup",CLUSTER:"cluster",CLUSTER_TOKEN:"clusterregistrationtoken",CLUSTER_ROLE_TEMPLATE_BINDING:"clusterRoleTemplateBinding",CLOUD_CREDENTIAL:"cloudcredential",FLEET_WORKSPACES:"fleetworkspace",GLOBAL_ROLE:"globalRole",GLOBAL_ROLE_BINDING:"globalRoleBinding",NODE_POOL:"nodePool",NODE:"node",PRINCIPAL:"principal",PROJECT:"project",PROJECT_ROLE_TEMPLATE_BINDING:"projectroletemplatebinding",SPOOFED:{GROUP_PRINCIPAL:"group.principal"},ROLE_TEMPLATE:"roleTemplate",TOKEN:"token",USER:"user"},i="configmap",a="count",s="event",c="autoscaling.horizontalpodautoscaler",l="networking.k8s.io.ingress",u="limitrange",d="namespace",p="node",f="networking.k8s.io.networkpolicy",h="pod",v="policy.poddisruptionbudget",b="persistentvolume",g="persistentvolumeclaim",m="resourcequota",y="schema",w="service",_="secret",x="storage.k8s.io.storageclass",O={ROLE:"rbac.authorization.k8s.io.role",CLUSTER_ROLE:"rbac.authorization.k8s.io.clusterrole",ROLE_BINDING:"rbac.authorization.k8s.io.rolebinding",CLUSTER_ROLE_BINDING:"rbac.authorization.k8s.io.clusterrolebinding"},k="workload",A={DEPLOYMENT:"apps.deployment",CRON_JOB:"batch.cronjob",DAEMON_SET:"apps.daemonset",JOB:"batch.job",STATEFUL_SET:"apps.statefulset",REPLICA_SET:"apps.replicaset",REPLICATION_CONTROLLER:"replicationcontroller"},{DAEMON_SET:E,CRON_JOB:S,JOB:C,...T}=A,R={CLUSTER_REPO:"catalog.cattle.io.clusterrepo",OPERATION:"catalog.cattle.io.operation",APP:"catalog.cattle.io.app",REPO:"catalog.cattle.io.repo"},I={ALERTMANAGER:"monitoring.coreos.com.alertmanager",ALERTMANAGERCONFIG:"monitoring.coreos.com.alertmanagerconfig",PODMONITOR:"monitoring.coreos.com.podmonitor",PROMETHEUS:"monitoring.coreos.com.prometheus",PROMETHEUSRULE:"monitoring.coreos.com.prometheusrule",SERVICEMONITOR:"monitoring.coreos.com.servicemonitor",THANOSRULER:"monitoring.coreos.com.thanosruler",SPOOFED:{RECEIVER:"monitoring.coreos.com.receiver",RECEIVER_SPEC:"monitoring.coreos.com.receiver.spec",RECEIVER_EMAIL:"monitoring.coreos.com.receiver.email",RECEIVER_SLACK:"monitoring.coreos.com.receiver.slack",RECEIVER_WEBHOOK:"monitoring.coreos.com.receiver.webhook",RECEIVER_PAGERDUTY:"monitoring.coreos.com.receiver.pagerduty",RECEIVER_OPSGENIE:"monitoring.coreos.com.receiver.opsgenie",RECEIVER_HTTP_CONFIG:"monitoring.coreos.com.receiver.httpconfig",RESPONDER:"monitoring.coreos.com.receiver.responder",ROUTE:"monitoring.coreos.com.route",ROUTE_SPEC:"monitoring.coreos.com.route.spec",ALERTMANAGERCONFIG_RECEIVER_SPEC:"monitoring.coreos.com.v1alpha1.alertmanagerconfig.spec.receivers",ALERTMANAGERCONFIG_ROUTE_SPEC:"monitoring.coreos.com.v1alpha1.alertmanagerconfig.spec.route"}},L={AUTH_CONFIG:"management.cattle.io.authconfig",CATALOG_TEMPLATE:"management.cattle.io.catalogtemplate",CLUSTER:"management.cattle.io.cluster",CLUSTER_ROLE_TEMPLATE_BINDING:"management.cattle.io.clusterroletemplatebinding",FEATURE:"management.cattle.io.feature",KONTAINER_DRIVER:"management.cattle.io.kontainerdriver",MULTI_CLUSTER_APP:"management.cattle.io.multiclusterapp",NODE:"management.cattle.io.node",NODE_DRIVER:"management.cattle.io.nodedriver",NODE_POOL:"management.cattle.io.nodepool",NODE_TEMPLATE:"management.cattle.io.nodetemplate",PROJECT:"management.cattle.io.project",PROJECT_ROLE_TEMPLATE_BINDING:"management.cattle.io.projectroletemplatebinding",ROLE_TEMPLATE:"management.cattle.io.roletemplate",SETTING:"management.cattle.io.setting",USER:"management.cattle.io.user",TOKEN:"management.cattle.io.token",GLOBAL_ROLE:"management.cattle.io.globalrole",GLOBAL_ROLE_BINDING:"management.cattle.io.globalrolebinding",POD_SECURITY_POLICY_TEMPLATE:"management.cattle.io.podsecuritypolicytemplate",PSP_TEMPLATE_BINDING:"management.cattle.io.podsecuritypolicytemplateprojectbinding",PSA:"management.cattle.io.podsecurityadmissionconfigurationtemplate",MANAGED_CHART:"management.cattle.io.managedchart",USER_NOTIFICATION:"management.cattle.io.rancherusernotification",GLOBAL_DNS_PROVIDER:"management.cattle.io.globaldnsprovider",RKE_TEMPLATE:"management.cattle.io.clustertemplate",RKE_TEMPLATE_REVISION:"management.cattle.io.clustertemplaterevision"},j={BUNDLE:"fleet.cattle.io.bundle",BUNDLE_DEPLOYMENT:"fleet.cattle.io.bundledeployment",CLUSTER:"fleet.cattle.io.cluster",CLUSTER_GROUP:"fleet.cattle.io.clustergroup",DASHBOARD:"fleet.cattle.io.dashboard",GIT_REPO:"fleet.cattle.io.gitrepo",WORKSPACE:"management.cattle.io.fleetworkspace",TOKEN:"fleet.cattle.io.clusterregistrationtoken",BUNDLE_NAMESPACE_MAPPING:"fleet.cattle.io.bundlenamespacemapping",GIT_REPO_RESTRICTION:"fleet.cattle.io.gitreporestriction"},N={CLUSTER_MEMBERS:"cluster-members",PROJECT_NAMESPACES:"projects-namespaces",NAMESPACES:"namespaces"},D="fleet-default"},"90dd":function(t,e,n){"use strict";n.d(e,"a",(function(){return u})),n.d(e,"g",(function(){return d})),n.d(e,"c",(function(){return p})),n.d(e,"f",(function(){return f})),n.d(e,"d",(function(){return h})),n.d(e,"e",(function(){return v})),n.d(e,"b",(function(){return b}));var r=n("330a"),o=n.n(r),i=n("8cb9"),a=n.n(i),s=n("e24b"),c=n("2cb5");function l(t,e,n,r,o=[]){r=r||{};const{invalidChars:i,forHostname:a=!1,errorKey:s=(a?"hostname":"label"),maxLength:c=63,minLength:l=1,validChars:u="A-Za-z0-9-"}=r;p(t,{validChars:u,invalidChars:i},e,n,o),"-"===t.slice(0,1)&&o.push(n["i18n/t"](`validation.dns.${s}.startHyphen`,{key:e})),"-"===t.slice(-1)&&o.push(n["i18n/t"](`validation.dns.${s}.endHyphen`,{key:e}));const d=l,f=c;return t.lengthf&&o.push(n["i18n/t"](`validation.dns.${s}.tooLongLabel`,{key:e,max:f})),o}function u(t,e,n){const r=`model.${t}.${e}`,o=r+".label";return n["i18n/exists"](r+".label")?n["i18n/t"](o):n["i18n/exists"](r)?n["i18n/t"](r):e.match(/.Id$/)?Object(c["a"])(e.replace(/Id$/,"")):Object(c["a"])(e)}function d(t,e,n,r,i=[]){const{nullable:a,required:c,type:l="",minLength:u,maxLength:d,min:p,max:f}=e,h=t?Object(s["f"])(t,"length"):0;if(!a&&c&&("object"===typeof t&&o()(t)||!t&&0!==t))return i.push(r["i18n/t"]("validation.required",{key:n})),i;if(null===t)return i;const v=0===l.indexOf("array[")?"arrayLength":"stringLength";let b=u,g=d;return b&&g?(hg)&&(b===g?i.push(r["i18n/t"](`validation.${v}.exactly`,{key:n,count:b})):i.push(r["i18n/t"](`validation.${v}.between`,{key:n,min:b,max:g}))):b&&hg&&i.push(r["i18n/t"](`validation.${v}.max`,{key:n,count:g})),b=p,g=f,null!==t&&b&&g?(tg)&&(b===g?i.push(r["i18n/t"]("validation.number.exactly",{key:n,val:g})):i.push(r["i18n/t"]("validation.number.between",{key:n,min:b,max:g}))):b&&tg&&i.push(r["i18n/t"]("validation.number.max",{key:n,val:g})),i}function p(t,e,n,r,o=[]){const{validChars:i,invalidChars:s}=e,c=[];if(i&&c.push(`[^${e.validChars}]`),s&&c.push(`[${e.invalidChars}]`),c.length){const e=new RegExp(`(${c.join("|")})`,"g");let i=t.match(e);i&&(i=a()(i).map(t=>" "===t?"[space]":t),o.push(r["i18n/t"]("validation.chars",{key:n,count:i.length,chars:i.join(" ")})))}return o}function f(t,e,n,r,o=[]){r=r||{};const{max:i=253,restricted:a=!1}=r;"."===t.slice(0,1)&&o.push(n["i18n/t"]("validation.dns.hostname.startDot",{key:e})),a&&t.length>1&&"."===t.slice(-1)&&o.push(n["i18n/t"]("validation.dns.hostname.endDot",{key:e})),0===t.length&&o.push(n["i18n/t"]("validation.dns.hostname.empty",{key:e})),t.length>i&&o.push(n["i18n/t"]("validation.dns.hostname.tooLong",{key:e,max:i}));const s=t.split(/\./);let c;for(let l=0;l= v2.7.9","catalog.cattle.io/kube-version":">= v1.16.0-0 < v1.29.0-0","catalog.cattle.io/display-name":"Krum Platform Tools: App Launcher"}},"icon":"https://raw.githubusercontent.com/krumIO/krum-rancher-extensions/main/pkg/app-launcher/icon.svg","scripts":{"dev":"./node_modules/.bin/nuxt dev","nuxt":"./node_modules/.bin/nuxt"},"engines":{"node":">=12"},"devDependencies":{"@vue/cli-plugin-babel":"4.5.18","@vue/cli-service":"4.5.18","@vue/cli-plugin-typescript":"4.5.18"},"browserslist":["> 1%","last 2 versions","not dead"]}')},9243:function(t,e,n){var r=n("405d"),o=n("a9e0"),i=n("212d"),a=n("3819"),s=n("e3e5"),c=n("0e19"),l=n("735f"),u="[object Map]",d="[object Object]",p="[object Promise]",f="[object Set]",h="[object WeakMap]",v="[object DataView]",b=l(r),g=l(o),m=l(i),y=l(a),w=l(s),_=c;(r&&_(new r(new ArrayBuffer(1)))!=v||o&&_(new o)!=u||i&&_(i.resolve())!=p||a&&_(new a)!=f||s&&_(new s)!=h)&&(_=function(t){var e=c(t),n=e==d?t.constructor:void 0,r=n?l(n):"";if(r)switch(r){case b:return v;case g:return u;case m:return p;case y:return f;case w:return h}return e}),t.exports=_},"927d":function(t,e,n){var r=n("1ec9"),o=n("2e63"),i=n("73bd"),a=n("b4f4"),s=n("42b6"),c=n("1ab6"),l=n("413d"),u=n("0233"),d=n("0634"),p=n("b650"),f=n("cc5e"),h=n("9243"),v=n("dd09"),b=n("ecda"),g=n("b03d"),m=n("c316"),y=n("dda8"),w=n("35bb"),_=n("b506"),x=n("fe22"),O=n("0652"),k=n("cc7f"),A=1,E=2,S=4,C="[object Arguments]",T="[object Array]",R="[object Boolean]",I="[object Date]",L="[object Error]",j="[object Function]",N="[object GeneratorFunction]",D="[object Map]",P="[object Number]",$="[object Object]",M="[object RegExp]",F="[object Set]",B="[object String]",U="[object Symbol]",G="[object WeakMap]",H="[object ArrayBuffer]",V="[object DataView]",q="[object Float32Array]",z="[object Float64Array]",K="[object Int8Array]",W="[object Int16Array]",X="[object Int32Array]",Y="[object Uint8Array]",J="[object Uint8ClampedArray]",Q="[object Uint16Array]",Z="[object Uint32Array]",tt={};function et(t,e,n,T,R,I){var L,D=e&A,P=e&E,M=e&S;if(n&&(L=R?n(t,T,R,I):n(t)),void 0!==L)return L;if(!_(t))return t;var F=m(t);if(F){if(L=v(t),!D)return l(t,L)}else{var B=h(t),U=B==j||B==N;if(y(t))return c(t,D);if(B==$||B==C||U&&!R){if(L=P||U?{}:g(t),!D)return P?d(t,s(L,t)):u(t,a(L,t))}else{if(!tt[B])return R?t:{};L=b(t,B,D)}}I||(I=new r);var G=I.get(t);if(G)return G;I.set(t,L),x(t)?t.forEach((function(r){L.add(et(r,e,n,r,t,I))})):w(t)&&t.forEach((function(r,o){L.set(o,et(r,e,n,o,t,I))}));var H=M?P?f:p:P?k:O,V=F?void 0:H(t);return o(V||t,(function(r,o){V&&(o=r,r=t[o]),i(L,o,et(r,e,n,o,t,I))})),L}tt[C]=tt[T]=tt[H]=tt[V]=tt[R]=tt[I]=tt[q]=tt[z]=tt[K]=tt[W]=tt[X]=tt[D]=tt[P]=tt[$]=tt[M]=tt[F]=tt[B]=tt[U]=tt[Y]=tt[J]=tt[Q]=tt[Z]=!0,tt[L]=tt[j]=tt[G]=!1,t.exports=et},"930a":function(t,e,n){var r=n("e902"),o=Array.prototype,i=o.splice;function a(t){var e=this.__data__,n=r(e,t);if(n<0)return!1;var o=e.length-1;return n==o?e.pop():i.call(e,n,1),--this.size,!0}t.exports=a},9373:function(t,e,n){"use strict";n("bab9")},"93ee":function(t,e,n){var r=n("3164");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("4481d3f7",r,!0,{sourceMap:!1,shadowMode:!1})},"94a3":function(t,e,n){var r=n("5fe6"),o=n("6290"),i=n("4774"),a=n("35d9"),s=i((function(t,e){return a(t)?r(t,o(e,1,a,!0)):[]}));t.exports=s},"94dd":function(t,e,n){var r=n("1001");function o(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}t.exports=o},"986c":function(t,e,n){var r=n("201b"),o=r.Uint8Array;t.exports=o},"98b4":function(t,e,n){var r=n("5eea");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("32461f31",r,!0,{sourceMap:!1,shadowMode:!1})},"98d3":function(t,e,n){"use strict";n.d(e,"b",(function(){return i})),n.d(e,"a",(function(){return l})),n.d(e,"c",(function(){return u})),n.d(e,"d",(function(){return d})),n.d(e,"e",(function(){return p}));const r="undefined"===typeof window?"server":window.navigator.platform.toLowerCase(),o="undefined"===typeof window?"server":window.navigator.userAgent,i=(r.includes("linux")||r.includes("unix"),r.includes("mac")),a=(r.includes("win"),i?"metaKey":"ctrlKey"),s=a,c="shiftKey";function l(t){return!!t[a]}function u(t){return!!t[s]}function d(t){return!!t[c]}function p(t){return t.ctrlKey&&2===t.button}o.includes("Gecko/");const f=o.includes("Chrome/");!f&&o.includes("AppleWebKit/"),!f&&o.includes("Safari/"),/Android|webOS|iPhone|iPad|iPod|IEMobile/i.test(o)},"994b":function(t,e,n){var r=n("e697"),o="__lodash_hash_undefined__";function i(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?o:e,this}t.exports=i},"9b25":function(t,e){function n(t,e){var n=-1,r=null==t?0:t.length;while(++nt.apply(this),e,n||F,r||M,!0)}waitForState(t,e,n){return this.waitForTestFn(()=>(this.state||"").toLowerCase()===t.toLowerCase(),"state="+t,e,n)}waitForTransition(){return this.waitForTestFn(()=>!this.transitioning,"transition completion",void 0,void 0)}waitForAction(t){return this.waitForTestFn(()=>this.hasAction(t),"action="+t,void 0,void 0)}waitForLink(t){return this.waitForTestFn(()=>this.hasLink(t),"link="+t,void 0,void 0)}hasCondition(t){return this.isCondition(t,null)}isCondition(t,e="True"){if(!this.status||!this.status.conditions)return!1;const n=Object(a["d"])(this.status.conditions||[],"type",t);return!!n&&(!e||(n.status||"").toLowerCase()===(""+e).toLowerCase())}waitForCondition(t,e="True",n=F,r=M){return this.waitForTestFn(()=>this.isCondition(t,e),`condition ${t}=${e}`,n,r)}get availableActions(){const t=this._availableActions;let e=null;const n=t.filter(t=>{if(!1===t.enabled)return!1;const n=t.divider,r=!n||n&&!e;return e=n,r});while(n.length&&n[0].divider)n.shift();while(n.length&&n[n.length-1].divider)n.pop();for(let r=1;r{const e={...t},r=e.enabled,o=typeof r;switch(o){case"undefined":e.enabled=!0;break;case"function":Object.defineProperty(e,"enabled",{get:()=>r(this)});break;case"boolean":break;default:console.warn("Unsupported 'enabled' property type for action: "+(t.label||t.labelKey)),delete e.enabled;break}n.push(e)})),n}get canDelete(){return this._canDelete}get _canDelete(){return this.hasLink("remove")&&this.$rootGetters["type-map/optionsFor"](this.type).isRemovable}get canClone(){return!0}get canUpdate(){return this.hasLink("update")&&this.$rootGetters["type-map/optionsFor"](this.type).isEditable}get canCustomEdit(){return this.$rootGetters["type-map/hasCustomEdit"](this.type,this.id)}get canCreate(){var t;return!(this.schema&&(null===(t=this.schema)||void 0===t||!t.collectionMethods.find(t=>"post"===t.toLowerCase())))&&this.$rootGetters["type-map/optionsFor"](this.type).isCreatable}get canViewInApi(){return this.hasLink("self")&&this.$rootGetters["prefs/get"](i["e"])}get canYaml(){return this.hasLink("view")}get canEditYaml(){var t,e;return(null===(t=this.schema)||void 0===t||null===(e=t.resourceMethods)||void 0===e||!e.find(t=>"blocked-PUT"===t))&&this.canUpdate}hasLink(t){return!!this.linkFor(t)}linkFor(t){return(this.links||{})[t]}followLink(t,e={}){if(e.url||(e.url=(this.links||{})[t]),e.urlSuffix&&(e.url+=e.urlSuffix),!e.url)throw new Error(`Unknown link ${t} on ${this.type} ${this.id}`);return this.$dispatch("request",{opt:e,type:this.type})}hasAction(t){return!!this.actionLinkFor(t)}actionLinkFor(t){return(this.actions||this.actionLinks||{})[t]}doAction(t,e,n={}){return this.$dispatch("resourceAction",{resource:this,actionName:t,body:e,opt:n})}async doActionGrowl(t,e,n={}){try{await this.$dispatch("resourceAction",{resource:this,actionName:t,body:e,opt:n})}catch(r){this.$dispatch("growl/fromError",{title:this.$rootGetters["i18n/t"]("generic.notification.title.error"),err:r.data||r},{root:!0})}}patch(t,e={},n=!1,r=!1){if(e.url||(e.url=this.linkFor("view")||this.linkFor("self")),e.method="patch",e.headers=e.headers||{},!e.headers["content-type"]){const t=n?"application/strategic-merge-patch+json":"application/json-patch+json";e.headers["content-type"]=t}e.data=t;const o=this.$dispatch("request",{opt:e,type:this.type});return r?o.catch(t=>{const e=this.t("resource.errors.update",{name:this.name});console.error(e,t),this.$dispatch("growl/error",{title:e,message:null===t||void 0===t?void 0:t.message,timeout:5e3},{root:!0})}):o}save(){return this._save(...arguments)}processSaveResponse(t){}async _save(t={}){var e;delete this.__rehydrate,delete this.__clone;const n=!this.id,r=await this.validationErrors(this,t.ignoreFields);if(!_()(r))return Promise.reject(r);if(null!==(e=this.metadata)&&void 0!==e&&e.resourceVersion&&(this.metadata.resourceVersion=""+this.metadata.resourceVersion),!t.url)if(n){const e=this.$getters["schemaFor"](this.type);let n=e.linkFor("collection");e.attributes&&e.attributes.namespaced&&this.metadata&&this.metadata.namespace&&(n+="/"+this.metadata.namespace),t.url=n}else t.url=this.linkFor("update")||this.linkFor("self");if(t.method||(t.method=n?"post":"put"),t.headers||(t.headers={}),t.headers["content-type"]||(t.headers["content-type"]="application/json"),t.headers["accept"]||(t.headers["accept"]="application/json"),t.data=this.toSave()||{...this},null!==t&&void 0!==t&&t.data._type&&(t.data.type=t.data._type),null!==t&&void 0!==t&&t.data._name&&(t.data.name=t.data._name),null!==t&&void 0!==t&&t.data._labels&&(t.data.labels=t.data._labels),null!==t&&void 0!==t&&t.data._annotations&&(t.data.annotations=t.data._annotations),null!==t&&void 0!==t&&t.replace&&"put"===t.method){const e=t.url.includes("?")?"&":"?";t.url=`${t.url}${e}_replace=true`,delete t.replace}try{const e=await this.$dispatch("request",{opt:t,type:this.type});this.processSaveResponse(e),e&&"Table"!==e.kind&&await this.$dispatch("load",{data:e,existing:n?this:void 0})}catch(o){return this.type&&this.id&&409===(null===o||void 0===o?void 0:o._status)&&await this.$dispatch("find",{type:this.type,id:this.id,opt:{force:!0}}),Promise.reject(o)}return this}remove(){return this._remove(...arguments)}async _remove(t={}){t.url||(t.url=this.linkFor("self")),t.method="delete";const e=await this.$dispatch("request",{opt:t,type:this.type});204===(null===e||void 0===e?void 0:e._status)&&await this.$dispatch("ws.resource.remove",{data:this})}currentRoute(){return t.server?this.$rootState.$route:window.$nuxt.$route}currentRouter(){return t.server?this.$rootState.$router:window.$nuxt.$router}get listLocation(){return{name:"c-cluster-product-resource",params:{product:this.$rootGetters["productId"],cluster:this.$rootGetters["clusterId"],resource:this.type}}}get _detailLocation(){var t,e,n;const r=this.$getters["schemaFor"](this.type),o=null===(t=this.id)||void 0===t?void 0:t.replace(/.*\//,"");return{name:`c-cluster-product-resource${null!==r&&void 0!==r&&null!==(e=r.attributes)&&void 0!==e&&e.namespaced?"-namespace":""}-id`,params:{product:this.$rootGetters["productId"],cluster:this.$rootGetters["clusterId"],resource:this.type,namespace:null===(n=this.metadata)||void 0===n?void 0:n.namespace,id:o}}}get detailLocation(){return this._detailLocation}goToDetail(){this.currentRouter().push(this.detailLocation)}goToClone(t={}){const e=this.detailLocation;e.query={...e.query,[o["b"]]:o["f"],[o["a"]]:o["l"],...t},this.currentRouter().push(e)}goToEdit(t={}){const e=this.detailLocation;e.query={...e.query,[o["b"]]:o["i"],[o["a"]]:o["l"],...t},this.currentRouter().push(e)}goToViewConfig(t={}){const e=this.detailLocation;e.query={...e.query,[o["b"]]:o["m"],[o["a"]]:o["g"],...t},this.currentRouter().push(e)}goToEditYaml(){const t=this.detailLocation;t.query={...t.query,[o["b"]]:o["i"],[o["a"]]:o["n"]},this.currentRouter().push(t)}goToViewYaml(){const t=this.detailLocation;t.query={...t.query,[o["b"]]:o["m"],[o["a"]]:o["n"]},this.currentRouter().push(t)}cloneYaml(t={}){const e=this.detailLocation;e.query={...e.query,[o["b"]]:o["f"],[o["a"]]:o["n"],...t},this.currentRouter().push(e)}async download(){const t=await this.followLink("view",{headers:{accept:"application/yaml"}}),e=await this.$dispatch("cleanForDownload",t.data);Object(c["a"])(this.nameDisplay+".yaml",e,"application/yaml")}async downloadBulk(t){const e={},n=[];for(const o of t){let t=o.nameDisplay+".yaml",e=2;while(n.includes(t))t=`${o.nameDisplay}_${e++}.yaml`;n.push(t)}await Object(u["a"])(t,10,(t,r)=>t.followLink("view",{headers:{accept:"application/yaml"}}).then(async t=>{const o=t.data||t,i=await this.$dispatch("cleanForDownload",o);e["resources/"+n[r]]=i}));const r=await Object(c["b"])(e);Object(c["a"])("resources.zip",r,"application/zip")}viewInApi(){window.open(this.links.self,"_blank")}promptRemove(t){t||(t=this),this.$dispatch("promptRemove",t)}get confirmRemove(){return!1}applyDefaults(){}get urlFromAttrs(){const t=this.$getters["schemaFor"](this.type),{metadata:{namespace:e="default"}}=this;let n=t.links.collection;const r=null===t||void 0===t?void 0:t.attributes;if(!r)throw new Error("Attributes must be present on the schema");const{group:o,resource:i}=r;return n=`${n.slice(0,n.indexOf("/v1"))}/apis/${o}/namespaces/${e}/${i}`,n}cleanYaml(t,e="edit"){try{const n=g.a.load(t);"edit"!==e&&this.$dispatch("cleanForNew",n),n._type&&(n.type=n._type,delete n._type);const r=g.a.dump(n,{skipInvalid:!0});return r}catch(n){return null}}cleanForNew(){this.$dispatch("cleanForNew",this)}cleanForDiff(){this.$dispatch("cleanForDiff",this.toJSON())}yamlForSave(t){try{const e=g.a.load(t);if(e)return this._type&&(e._type=e.type),g.a.dump(e)}catch(e){return null}}async saveYaml(t){var e,n;const r=g.a.load(t);if(null!==(e=this.schema)&&void 0!==e&&null!==(n=e.attributes)&&void 0!==n&&n.namespaced&&!r.metadata.namespace){const t=this.$rootGetters["i18n/t"]("resourceYaml.errors.namespaceRequired");throw t}let o;const i=!this.id,a={"content-type":"application/yaml",accept:"application/json"};o=i?await this.schema.followLink("collection",{method:"POST",headers:a,data:t}):await this.followLink("update",{method:"PUT",headers:a,data:t}),await this.$dispatch("load",{data:o,existing:i?this:void 0}),this.isSpoofed&&await this.$dispatch("cluster/findAll",{type:this.type,opt:{force:!0}},{root:!0})}get modelValidationRules(){const t=[],e=null===this||void 0===this?void 0:this.customValidationRules.filter(t=>!!t.validators||!!t.required).map(t=>{const e=Object(h["a"])(this.t,{displayKey:null!==t&&void 0!==t&&t.translationKey?this.t(t.translationKey):"Value"});return{path:t.path,rules:[...t.validators||[],...t.required?["required"]:[],...["dnsLabel","dnsLabelRestricted","hostname"].includes(t.type)?[t.type]:[]].map(t=>{if(t.includes(":")){const[n,r]=t.split(":");return e[n](r)}return e[t]}).filter(t=>!!t)}}).filter(t=>t.rules.length>0);return t.push(...e),t}customValidationErrors(t,e=[]){const n=[];let{customValidationRules:r}=this;return _()(r)||(O()(r)&&(r=r()),r.filter(t=>!e.includes(t.path)).forEach(e=>{const{path:r,requiredIf:o,validators:i=[],type:a}=e;let c=Object(l["f"])(t,r);const u=y()(i||[]);let d=r;if(e.translationKey&&this.$rootGetters["i18n/exists"](e.translationKey)&&(d=this.t(e.translationKey)),A()(c)&&(c=c.trim()),o){const e=Object(l["f"])(t,o);!_()(e)&&_()(c)&&0!==c&&n.push(this.t("validation.required",{key:d}))}if(Object(f["g"])(c,e,d,this.$rootGetters,n),Object(f["c"])(c,e,d,this.$rootGetters,n),!_()(c)&&N.includes(a)){const e=(c||"").toLowerCase();e!==c&&(c=e,T.a.set(t,r,c)),n.push(...Object(f["e"])(c,a,d,this.$rootGetters,n))}u.forEach(e=>{const r=e.split(":"),o=r.slice(0,1),i=r.slice(1)||null,a=Object.prototype.hasOwnProperty.call(s["a"],o);if(!_()(o)&&a)s["a"][o](c,this.$rootGetters,n,i,d,t);else if(!_()(o)&&!a){var l;const e=null===(l=this.$rootState.$plugin)||void 0===l?void 0:l.getValidator(o);e?e(c,this.$rootGetters,n,i,d,t):console.warn(this.t("validation.custom.missing",{validatorName:o}))}})})),n}validationErrors(t=this,e){const n=[],{type:r,schema:o}=t,i=Object(R["a"])(r);if(!r)return console.warn(this.t("validation.noType"),t),n;if(!o)return n;const a=o.resourceFields||{},s=Object.keys(a);let c,u,d,h;for(let b=0;b0)r.push(this.t("validation.required",{key:h})),n.push(...r);else{if("id"!==u&&!_()(d)&&N.includes(o)){const e=(d||"").toLowerCase();e!==d&&(d=e,T.a.set(t,u,d)),r.push(...Object(f["e"])(d,o,h,this.$rootGetters,r))}n.push(...r)}}return S()([...n,...this.customValidationErrors(t)])}get ownersByType(){var t;const e=(null===(t=this.metadata)||void 0===t?void 0:t.ownerReferences)||[],n={};return e.forEach(t=>{n[t.kind]?n[t.kind].push(t):n[t.kind]=[t]}),n}get owners(){const t=[];for(const e in this.ownersByType){const n=this.$rootGetters["cluster/schema"](e);if(n){const r=n.id,o=this.$rootGetters["cluster/all"](r);this.ownersByType[e].forEach((e,n)=>{const r=o.find(t=>{var n;return(null===t||void 0===t||null===(n=t.metadata)||void 0===n?void 0:n.uid)===e.uid});r&&t.push(r)})}}return t}get details(){return this._details}get _details(){var t;const e=[];return(null===(t=this.owners)||void 0===t?void 0:t.length)>0&&e.push({label:this.t("resourceDetail.detailTop.ownerReferences",{count:this.owners.length}),formatter:"ListLinkDetail",content:this.owners.map(t=>({key:t.id,row:t,col:{},value:t.metadata.name}))}),Object(l["f"])(this,"metadata.deletionTimestamp")&&e.push({label:this.t("resourceDetail.detailTop.deleted"),formatter:"LiveDate",formatterOpts:{addSuffix:!0},content:Object(l["f"])(this,"metadata.deletionTimestamp")}),e}get t(){return this.$rootGetters["i18n/t"]}findOwners(){return this._getRelationship("owner","from")}getOwners(){return this._getRelationship("owner","from")}findOwned(){return this._findRelationship("owner","to")}_relationshipsFor(t,e){var n,r;const o={selectors:[],ids:[]};if(null===(n=this.metadata)||void 0===n||null===(r=n.relationships)||void 0===r||!r.length)return o;for(const i of this.metadata.relationships)if(("any"===t||i.rel===t)&&i[e+"Type"])if(i.selector)Object(a["b"])(o.selectors,{type:i.toType,namespace:i.toNamespace,selector:i.selector});else{const t=i[e+"Type"];let n=i[e+"Namespace"],r=i[e+"Id"];if(!n&&r.includes("/")){const t=r.indexOf("/");n=r.substr(0,t),r=r.substr(t+1)}const s=(n?n+"/":"")+r;Object(a["a"])(o.ids,{type:t,namespace:n,name:r,id:s})}return o}_getRelationship(t,e){var n;const r=this._relationshipsFor(t,e);return null!==(n=r.selectors)&&void 0!==n&&n.length&&console.warn("Sync request for a relationship that is a selector"),r.ids||[]}async _findRelationship(t,e){const{selectors:n,ids:r}=this._relationshipsFor(t,e),o=[];for(const i of n){const t=await this.$dispatch("findMatching",i);Object(a["b"])(o,t.data)}for(const i of r){const{type:t,id:e}=i;let n=this.$getters["byId"](t,e);if(!n)try{n=await this.$dispatch("find",{type:t,id:e})}catch{}n&&Object(a["a"])(o,n)}return o}get shortId(){const t=this.id.split("/");return t.length>1?t[1]:t[0]}toJSON(){const t={},e=Object.keys(this);for(const r of e){var n;null!==(n=this[r])&&void 0!==n&&n.toJSON?t[r]=this[r].toJSON():t[r]=Object(l["e"])(this[r])}return t}toSave(){}get creationTimestamp(){var t;return null===(t=this.metadata)||void 0===t?void 0:t.creationTimestamp}}}).call(this,n("07d9"))},"9c21":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".dropdown-button-group .no-left-border-radius{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-button-group .no-right-border-radius{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-button-group .btn{line-height:normal;border:0}.dropdown-button-group .btn-group-xs>.btn,.dropdown-button-group .btn-xs,.dropdown-button-group .btn-xs .btn-label{padding:2px 3px;font-size:13px}.dropdown-button-group .v-popover .text-right{margin-top:5px}.dropdown-button-group .v-popover .trigger{height:100%}.dropdown-button-group .v-popover .trigger .icon-container{height:100%;padding:10px 10px 10px 10px}.dropdown-button-group .v-popover .trigger .icon-container i{transform:scale(1)}.dropdown-button-group .v-popover .trigger .icon-container.btn-xs{padding:2px 4px 4px 4px}.dropdown-button-group .v-popover .trigger .icon-container.btn-sm{padding:10px 10px 10px 10px}.dropdown-button-group .v-popover .trigger .icon-container.btn-lg{padding:18px 10px 10px 10px}.dropdown-button-group .v-popover .trigger .icon-container:focus{outline-style:none;box-shadow:none;border-color:transparent}.dropdown-button-group .dropdown-button{background:var(--tooltip-bg);color:var(--link-text);padding:0;display:inline-flex}.dropdown-button-group .dropdown-button .wrapper-content button{border-right:0}.dropdown-button-group .dropdown-button .icon-chevron-down,.dropdown-button-group .dropdown-button>*{color:var(--primary);background-color:transparent}.dropdown-button-group .dropdown-button.bg-primary:hover{background:var(--accent-btn-hover)}.dropdown-button-group .dropdown-button.one-action{position:relative}.dropdown-button-group .dropdown-button.one-action>.btn{padding:15px 35px 15px 15px}.dropdown-button-group .dropdown-button.one-action .v-popover .trigger{position:absolute;top:0;right:0;left:0;bottom:0}.dropdown-button-group .dropdown-button.one-action .v-popover .trigger BUTTON{position:absolute;right:0}.dropdown-button-group .popover{border:none}.dropdown-button-group .tooltip{margin-top:0}.dropdown-button-group .tooltip[x-placement^=bottom] .tooltip-arrow{border-bottom-color:var(--dropdown-border)}.dropdown-button-group .tooltip[x-placement^=bottom] .tooltip-arrow:after{border-bottom-color:var(--dropdown-bg)}.dropdown-button-group .tooltip .tooltip-inner{color:var(--dropdown-text);background-color:var(--dropdown-bg);border:1px solid var(--dropdown-border);padding:0;text-align:left}.dropdown-button-group .tooltip .tooltip-inner LI{padding:10px}.dropdown-button-group .tooltip .tooltip-inner LI.divider{padding-top:0;padding-bottom:0}.dropdown-button-group .tooltip .tooltip-inner LI.divider>.divider-inner{padding:0;border-bottom:1px solid var(--dropdown-divider);width:125%;margin:0 auto}.dropdown-button-group .tooltip .tooltip-inner LI:not(.divider):hover{background-color:var(--dropdown-hover-bg);color:var(--dropdown-hover-text);cursor:pointer}.dropdown-button-group .user-info{border-bottom:1px solid var(--border);display:block}",""]),t.exports=e},"9c38":function(t,e,n){var r=n("0e19"),o=n("c316"),i=n("b4b4"),a="[object String]";function s(t){return"string"==typeof t||!o(t)&&i(t)&&r(t)==a}t.exports=s},"9c73":function(t,e,n){var r=n("1a93");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("f5bc6e06",r,!0,{sourceMap:!1,shadowMode:!1})},"9ce4":function(t,e,n){"use strict";(function(t){ +(function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e(require("__jszip"),require("__jsyaml"),require("vue")):"function"===typeof define&&define.amd?define(["__jszip","__jsyaml"],e):"object"===typeof exports?exports["app-launcher-0.1.27"]=e(require("__jszip"),require("__jsyaml"),require("vue")):t["app-launcher-0.1.27"]=e(t["__jszip"],t["__jsyaml"],t["Vue"])})("undefined"!==typeof self?self:this,(function(t,e,n){return function(t){function e(e){for(var n,o,i=e[0],a=e[1],s=0,c=[];st.nameDisplay).slice(0,5)},plusMore(){const t=this.toRemove.length-this.names.length;return this.t("promptRemove.andOthers",{count:t})}},watch:{value:{handler(t){this.handleRoleDeletionCheck(t,t[0].type,this.$route.hash)},immediate:!0}},methods:{resourceNames:o["m"],async handleRoleDeletionCheck(t,e,n){let r,o;this.warning="";let a=0;const s=new Set;switch(this.info=this.t("rbac.globalRoles.waiting",{count:t.length}),e){case i["j"].GLOBAL_ROLE:r=i["j"].GLOBAL_ROLE_BINDING,o="globalRoleName";break;default:r=n.includes(c)?i["j"].CLUSTER_ROLE_TEMPLATE_BINDING:i["j"].PROJECT_ROLE_TEMPLATE_BINDING,o="roleTemplateName";break}try{var l;const e=await this.$store.dispatch("management/request",{url:"/v1/"+r,method:"get"},{root:!0}),n=await this.$store.dispatch("management/request",{url:"/v1/"+i["j"].USER,method:"get"},{root:!0}),c=null===(l=n.data)||void 0===l?void 0:l.reduce((t,e)=>(e.username&&(t[e.id]=e),t),{});e.data&&e.data.length?(t.forEach(t=>{const n=e.data.filter(e=>e[o]===t.id);if(n.length){const t=[...new Set(n.map(t=>t.userName).filter(t=>c[t]))];t.length&&(a++,t.forEach(t=>s.add(t)))}}),a&&s.size?(this.info="",this.warning=this.t("rbac.globalRoles.usersBound",{count:s.size})):this.info=this.t("rbac.globalRoles.notBound",null,!0)):this.info=this.t("rbac.globalRoles.notBound",null,!0)}catch(u){this.info=this.t("rbac.globalRoles.unableToCheck")}}}}},"0634":function(t,e,n){var r=n("2ed5"),o=n("5e27");function i(t,e){return r(t,o(t),e)}t.exports=i},"0652":function(t,e,n){var r=n("ae68"),o=n("e2e2"),i=n("f72d");function a(t){return i(t)?r(t):o(t)}t.exports=a},"06a5":function(t,e,n){var r=n("1ec9"),o=n("659f"),i=n("4778"),a=n("c991"),s=n("9243"),c=n("c316"),l=n("dda8"),u=n("41dd"),d=1,p="[object Arguments]",f="[object Array]",h="[object Object]",v=Object.prototype,b=v.hasOwnProperty;function g(t,e,n,v,g,m){var y=c(t),w=c(e),_=y?f:s(t),x=w?f:s(e);_=_==p?h:_,x=x==p?h:x;var O=_==h,k=x==h,A=_==x;if(A&&l(t)){if(!l(e))return!1;y=!0,O=!1}if(A&&!O)return m||(m=new r),y||u(t)?o(t,e,n,v,g,m):i(t,e,_,n,v,g,m);if(!(n&d)){var E=O&&b.call(t,"__wrapped__"),S=k&&b.call(e,"__wrapped__");if(E||S){var C=E?t.value():t,T=S?e.value():e;return m||(m=new r),g(C,T,n,v,m)}}return!!A&&(m||(m=new r),a(t,e,n,v,g,m))}t.exports=g},"06cb":function(t,e){var n=/\w*$/;function r(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}t.exports=r},"0788":function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n("907c");n("e24b");r["v"];function o(t){var e;return t=((null===(e=t)||void 0===e?void 0:e.type)||t||"").toLowerCase(),t}},"07d9":function(t,e,n){e.nextTick=function(t){var e=Array.prototype.slice.call(arguments);e.shift(),setTimeout((function(){t.apply(null,e)}),0)},e.platform=e.arch=e.execPath=e.title="browser",e.pid=1,e.browser=!0,e.env={},e.argv=[],e.binding=function(t){throw new Error("No such module. (Possibly not yet loaded)")},function(){var t,r="/";e.cwd=function(){return r},e.chdir=function(e){t||(t=n("a0d5")),r=t.resolve(e,r)}}(),e.exit=e.kill=e.umask=e.dlopen=e.uptime=e.memoryUsage=e.uvCounters=function(){},e.features={}},"0843":function(t,e,n){"use strict";n("be67")},"084c":function(t,e,n){var r=n("c364");function o(t){return function(e){return r(e,t)}}t.exports=o},"09b2":function(t,e){var n=Object.prototype;function r(t){var e=t&&t.constructor,r="function"==typeof e&&e.prototype||n;return t===r}t.exports=r},"0a87":function(t,e,n){var r=n("e902");function o(t){return r(this.__data__,t)>-1}t.exports=o},"0c0f":function(t,e,n){var r=n("86eb");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("464d0db1",r,!0,{sourceMap:!1,shadowMode:!1})},"0d63":function(t,e,n){var r=n("3ac3");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("3fc7d1e6",r,!0,{sourceMap:!1,shadowMode:!1})},"0d7f":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,'.checkbox-outer-container{display:inline-flex;flex-direction:column}.checkbox-outer-container-description{color:var(--input-label);font-size:14px;margin-left:19px;margin-top:5px;opacity:.8}.checkbox-container{position:relative;display:inline-flex;align-items:center;margin:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border-radius:var(--border-radius)}.checkbox-container .checkbox-label{color:var(--input-label);display:inline-flex;margin:0 10px 0 5px}.checkbox-container .checkbox-label.checkbox-primary{color:inherit;font-weight:600}.checkbox-container .checkbox-info{line-height:normal;margin-left:2px}.checkbox-container .checkbox-custom{height:14px;width:14px;background-color:var(--body-bg);border-radius:var(--border-radius);transition:all .3s ease-out;border:1px solid var(--border)}.checkbox-container input{opacity:0;position:absolute;z-index:-1}.checkbox-container input:checked~.checkbox-custom{background-color:var(--primary);transform:rotate(0deg) scale(1);opacity:1;border:1px solid var(--primary)}.checkbox-container .checkbox-custom:after{position:absolute;content:"";left:0;top:0;height:0;width:0;border-radius:var(--border-radius);border:solid;border-color:var(--input-text);border-width:0 3px 3px 0;transform:rotate(0deg) scale(0);opacity:1}.checkbox-container input:checked~.checkbox-custom:after{transform:rotate(45deg) scale(1);opacity:1;left:4px;width:4px;height:10px;border:solid;border-color:var(--checkbox-tick);border-width:0 2px 2px 0;background-color:transparent}.checkbox-container input:checked~.checkbox-custom.indeterminate:after{transform:scale(1);opacity:1;left:3px;top:2px;width:6px;height:5px;border:solid;border-color:var(--checkbox-tick);border-width:0 0 2px 0;background-color:transparent}.checkbox-container.disabled .checkbox-custom,.checkbox-container.disabled input:checked~.checkbox-custom{background-color:var(--checkbox-disabled-bg);border-color:var(--checkbox-disabled-bg)}.checkbox-container.disabled input:checked~.checkbox-custom:after{border-color:var(--checkbox-tick-disabled)}.checkbox-container.disabled{cursor:not-allowed}.checkbox-container .checkbox-view{display:flex;flex-direction:column}.checkbox-container .checkbox-view LABEL{color:var(--input-label)}',""]),t.exports=e},"0df0":function(t,e,n){"use strict";var r=n("1032");n.d(e,"a",(function(){return r["a"]}))},"0e19":function(t,e,n){var r=n("4b2c"),o=n("2822"),i=n("907a"),a="[object Null]",s="[object Undefined]",c=r?r.toStringTag:void 0;function l(t){return null==t?void 0===t?s:a:c&&c in Object(t)?o(t):i(t)}t.exports=l},"0e30":function(t,e){function n(){return!1}t.exports=n},"0ed3":function(t,e,n){"use strict";function r(t,e){for(var n=[],r={},o=0;on.parts.length&&(r.parts.length=n.parts.length)}else{var a=[];for(o=0;ot.advFilterSelectedLabel=e.label},model:{value:t.advFilterSelectedProp,callback:function(e){t.advFilterSelectedProp=e},expression:"advFilterSelectedProp"}})],1),e("div",{staticClass:"bottom-block"},[e("button",{staticClass:"btn role-secondary",attrs:{disabled:!t.advancedFilteringValues.length},on:{click:t.clearAllAdvancedFilters}},[t._v(" "+t._s(t.t("sortableTable.resetFilters"))+" ")]),e("button",{staticClass:"btn role-primary",on:{click:t.addAdvancedFilter}},[t._v(" "+t._s(t.t("sortableTable.add"))+" ")])])])]):t.search?e("input",{directives:[{name:"model",rawName:"v-model",value:t.eventualSearchQuery,expression:"eventualSearchQuery"}],ref:"searchQuery",staticClass:"input-sm search-box",attrs:{type:"search",placeholder:t.t("sortableTable.search")},domProps:{value:t.eventualSearchQuery},on:{input:function(e){e.target.composing||(t.eventualSearchQuery=e.target.value)}}}):t._e(),t._t("header-button")],2):t._e()]):t._e()],2),e("table",{staticClass:"sortable-table",class:t.classObject,attrs:{width:"100%"}},[t.showHeaders?e("THead",{attrs:{"label-for":t.labelFor,columns:t.columns,group:t.group,"group-options":t.advGroupOptions,"has-advanced-filtering":t.hasAdvancedFiltering,"adv-filter-hide-labels-as-cols":t.advFilterHideLabelsAsCols,"table-actions":t.tableActions,"table-cols-options":t.columnOptions,"row-actions":t.rowActions,"sub-expand-column":t.subExpandColumn,"row-actions-width":t.rowActionsWidth,"how-much-selected":t.howMuchSelected,"sort-by":t.sortBy,"default-sort-by":t._defaultSortBy,descending:t.descending,"no-rows":t.noRows,loading:t.loading&&!t.loadingDelay,"no-results":t.noResults},on:{"on-toggle-all":t.onToggleAll,"on-sort-change":t.changeSort,"col-visibility-change":t.changeColVisibility,"group-value-change":e=>t.$emit("group-value-change",e),"update-cols-options":t.updateColsOptions}}):t._e(),t.loading&&!t.loadingDelay?e("div"):t.loading?e("tbody",[t._t("loading",(function(){return[e("tr",[e("td",{attrs:{colspan:t.fullColspan}},[e("div",{staticClass:"data-loading"},[e("i",{staticClass:"icon-spin icon icon-spinner"}),e("t",{attrs:{k:"generic.loading",raw:!0}})],1)])])]}))],2):t.noRows?e("tbody",[t._t("no-rows",(function(){return[e("tr",{staticClass:"no-rows"},[e("td",{attrs:{colspan:t.fullColspan}},[t.showNoRows?e("t",{attrs:{k:t.noRowsKey}}):t._e()],1)])]}))],2):t.noResults?e("tbody",[t._t("no-results",(function(){return[e("tr",{staticClass:"no-results"},[e("td",{staticClass:"text-center",attrs:{colspan:t.fullColspan}},[e("t",{attrs:{k:t.noDataKey}})],1)])]}))],2):t._l(t.displayRows,(function(n){return e("tbody",{key:n.key,class:{group:t.groupBy}},[t.groupBy?t._t("group-row",(function(){return[e("tr",{staticClass:"group-row"},[e("td",{attrs:{colspan:t.fullColspan}},[t._t("group-by",(function(){return[e("div",{directives:[{name:"trim-whitespace",rawName:"v-trim-whitespace"}],staticClass:"group-tab"},[t._v(" "+t._s(n.ref)+" ")])]}),{group:n.grp})],2)])]}),{group:n,fullColspan:t.fullColspan}):t._e(),t._l(n.rows,(function(n,r){return[t._t("main-row",(function(){return[t._t("main-row:"+(n.row.mainRowKey||r),(function(){return[e("tr",{key:n.key,staticClass:"main-row",class:{"has-sub-row":n.showSubRow},attrs:{"data-testid":t.componentTestid+"-"+r+"-row","data-node-id":n.key,"data-cant-run-bulk-action-of-interest":t.actionOfInterest&&!n.canRunBulkActionOfInterest}},[t.tableActions?e("td",{staticClass:"row-check",attrs:{align:"middle"}},[t._v(" "+t._s(n.mainRowKey)),e("Checkbox",{staticClass:"selection-checkbox",attrs:{"data-node-id":n.key,"data-testid":t.componentTestid+"-"+r+"-checkbox",value:t.selectedRows.includes(n.row)}})],1):t._e(),t.subExpandColumn?e("td",{staticClass:"row-expand",attrs:{align:"middle"}},[e("i",{class:{icon:!0,"icon-chevron-right":!t.expanded[n.row[t.keyField]],"icon-chevron-down":!!t.expanded[n.row[t.keyField]]},attrs:{"data-title":"Toggle Expand"},on:{click:function(e){return e.stopPropagation(),t.toggleExpand(n.row)}}})]):t._e(),t._l(n.columns,(function(o,i){return[t._t("col:"+o.col.name,(function(){return[e("td",{directives:[{name:"show",rawName:"v-show",value:!t.hasAdvancedFiltering||t.hasAdvancedFiltering&&o.col.isColVisible,expression:"!hasAdvancedFiltering || (hasAdvancedFiltering && col.col.isColVisible)"}],key:o.col.name,class:{["col-"+o.dasherize]:!!o.col.formatter,[o.col.breakpoint]:!!o.col.breakpoint,["skip-select"]:o.col.skipSelect},attrs:{"data-title":o.col.label,"data-testid":`sortable-cell-${r}-${i}`,align:o.col.align||"left",width:o.col.width}},[t._t("cell:"+o.col.name,(function(){return[o.component&&o.needRef?e(o.component,t._b({ref:"column",refInFor:!0,tag:"component",attrs:{value:o.value,row:n.row,col:o.col,"row-key":n.key,"get-custom-detail-link":t.getCustomDetailLink}},"component",o.col.formatterOpts,!1)):o.component?e(o.component,t._b({tag:"component",attrs:{value:o.value,row:n.row,col:o.col,"row-key":n.key}},"component",o.col.formatterOpts,!1)):o.col.formatter?e(o.col.formatter,t._b({tag:"component",attrs:{value:o.value,row:n.row,col:o.col,"row-key":n.key}},"component",o.col.formatterOpts,!1)):""!==o.value?[t._v(" "+t._s(o.formatted)+" ")]:o.col.dashIfEmpty?[e("span",{staticClass:"text-muted"},[t._v("—")])]:t._e()]}),{row:n.row,col:o.col,value:o.value})],2)]}),{row:n.row,col:o.col,dt:t.dt,expanded:t.expanded,rowKey:n.key})]})),t.rowActions?e("td",{attrs:{align:"middle"}},[t._t("row-actions",(function(){return[e("button",{ref:"actionButton"+r,refInFor:!0,staticClass:"btn btn-sm role-multi-action actions",attrs:{id:`actionButton+${r}+${n.row&&n.row.name?n.row.name:""}`,"data-testid":t.componentTestid+"-"+r+"-action-button","aria-haspopup":"true","aria-expanded":"false",type:"button"},on:{click:function(e){return t.handleActionButtonClick(r,e)}}},[e("i",{staticClass:"icon icon-actions"})])]}),{row:n.row})],2):t._e()],2)]}),{fullColspan:t.fullColspan})]}),{row:n.row}),n.showSubRow?t._t("sub-row",(function(){return[n.row.stateDescription?e("tr",{key:n.row[t.keyField]+"-description",staticClass:"state-description sub-row",attrs:{"data-testid":t.componentTestid+"-"+r+"-row-description"},on:{mouseenter:t.onRowMouseEnter,mouseleave:t.onRowMouseLeave}},[t.tableActions?e("td",{staticClass:"row-check",attrs:{align:"middle"}}):t._e(),e("td",{class:{"text-error":n.row.stateObj.error},attrs:{colspan:t.fullColspan-(t.tableActions?1:0)}},[t._v(" "+t._s(n.row.stateDescription)+" ")])]):t._e()]}),{fullColspan:t.fullColspan,row:n.row,subMatches:t.subMatches,keyField:t.keyField,componentTestid:t.componentTestid,i:r,onRowMouseEnter:t.onRowMouseEnter,onRowMouseLeave:t.onRowMouseLeave}):t._e()]}))],2)}))],2),t.showPaging?e("div",{staticClass:"paging"},[e("button",{staticClass:"btn btn-sm role-multi-action",attrs:{type:"button",disabled:1==t.page},on:{click:function(e){return t.goToPage("first")}}},[e("i",{staticClass:"icon icon-chevron-beginning"})]),e("button",{staticClass:"btn btn-sm role-multi-action",attrs:{type:"button",disabled:1==t.page},on:{click:function(e){return t.goToPage("prev")}}},[e("i",{staticClass:"icon icon-chevron-left"})]),e("span",[t._v(" "+t._s(t.pagingDisplay)+" ")]),e("button",{staticClass:"btn btn-sm role-multi-action",attrs:{type:"button",disabled:t.page==t.totalPages},on:{click:function(e){return t.goToPage("next")}}},[e("i",{staticClass:"icon icon-chevron-right"})]),e("button",{staticClass:"btn btn-sm role-multi-action",attrs:{type:"button",disabled:t.page==t.totalPages},on:{click:function(e){return t.goToPage("last")}}},[e("i",{staticClass:"icon icon-chevron-end"})])]):t._e(),t.search?e("button",{directives:[{name:"shortkey",rawName:"v-shortkey.once",value:["/"],expression:"['/']",modifiers:{once:!0}}],staticClass:"hide",on:{shortkey:function(e){return t.focusSearch()}}}):t._e(),t.tableActions?[e("button",{directives:[{name:"shortkey",rawName:"v-shortkey",value:["j"],expression:"['j']"}],staticClass:"hide",on:{shortkey:function(e){return t.focusNext(e)}}}),e("button",{directives:[{name:"shortkey",rawName:"v-shortkey",value:["k"],expression:"['k']"}],staticClass:"hide",on:{shortkey:function(e){return t.focusPrevious(e)}}}),e("button",{directives:[{name:"shortkey",rawName:"v-shortkey",value:["shift","j"],expression:"['shift','j']"}],staticClass:"hide",on:{shortkey:function(e){return t.focusNext(e,!0)}}}),e("button",{directives:[{name:"shortkey",rawName:"v-shortkey",value:["shift","k"],expression:"['shift','k']"}],staticClass:"hide",on:{shortkey:function(e){return t.focusPrevious(e,!0)}}}),t._t("shortkeys")]:t._e()],2)},o=[],i=n("9ce4"),a=n("b48b"),s=n.n(a),c=n("2cb5"),l=n("e24b"),u=n("bddd"),d=n("0df0"),p=function(){var t=this,e=t._self._c;t._self._setupProxy;return e("button",{ref:"btn",class:t.classes,attrs:{name:t.name,type:t.type,disabled:t.isDisabled,"tab-index":t.tabIndex,"data-testid":t.componentTestid+"-async-button"},on:{click:t.clicked}},[t.displayIcon?e("i",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip,expression:"tooltip"}],class:{icon:!0,"icon-lg":!0,[t.displayIcon]:!0}}):t._e(),"text"===t.labelAs&&t.displayLabel?e("span",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip,expression:"tooltip"},{name:"clean-html",rawName:"v-clean-html",value:t.displayLabel,expression:"displayLabel"}]}):t._e()])},f=[],h=n("8bbf"),v=n.n(h),b={memberOfObject:(t,e)=>Object.entries(t||{}).find(([t])=>t===e),memberOfComponent:(t,e)=>t[e]};const g={ACTION:"action",WAITING:"waiting",SUCCESS:"success",ERROR:"error"},m="text",y="tooltip";var w=v.a.extend({props:{mode:{type:String,default:"edit"},delay:{type:Number,default:5e3},name:{type:String,default:null},disabled:{type:Boolean,default:!1},type:{type:String,default:"button"},tabIndex:{type:Number,default:null},actionColor:{type:String,default:"role-primary"},waitingColor:{type:String,default:"bg-primary"},successColor:{type:String,default:"bg-success"},errorColor:{type:String,default:"bg-error"},actionLabel:{type:String,default:null},waitingLabel:{type:String,default:null},successLabel:{type:String,default:null},errorLabel:{type:String,default:null},icon:{type:String,default:null},labelAs:{type:String,default:m},size:{type:String,default:""},currentPhase:{type:String,default:g.ACTION},componentTestid:{type:String,default:"action-button"},manual:{type:Boolean,default:!1}},data(){return{phase:this.currentPhase}},watch:{currentPhase(t){this.phase=t}},computed:{classes(){const t=this.phase+"Color",e=b.memberOfComponent(this,t),n={btn:!0,[e]:!0};return this.size&&(n["btn-"+this.size]=!0),n},displayIcon(){const t=this.$store.getters["i18n/exists"],e=this.$store.getters["i18n/t"],n=`asyncButton.${this.mode}.${this.phase}Icon`,r=`asyncButton.default.${this.phase}Icon`;let o="";return this.icon?o=this.icon:t(n)?o="icon-"+e(n):t(r)&&(o="icon-"+e(r)),this.isSpinning&&(o||(o="icon-spinner"),o+=" icon-spin"),o},displayLabel(){const t=b.memberOfComponent(this,this.phase+"Label"),e=this.$store.getters["i18n/exists"],n=this.$store.getters["i18n/t"],r=`asyncButton.${this.mode}.${this.phase}`,o="asyncButton.default."+this.phase;return t||(e(r)?n(r):e(o)?n(o):"")},isSpinning(){return this.phase===g.WAITING},isDisabled(){return this.disabled||this.phase===g.WAITING},tooltip(){return this.labelAs===y?{content:this.displayLabel,hideOnTargetClick:!1}:null}},beforeDestroy(){this.timer&&clearTimeout(this.timer)},methods:{clicked(t){if(t&&(t.stopPropagation(),t.preventDefault()),this.isDisabled)return;this.timer&&clearTimeout(this.timer),this.manual||(this.phase=g.WAITING);const e=t=>{this.done(t)};this.$emit("click",e)},done(t){"cancelled"===t?this.phase=g.ACTION:(this.phase=t?g.SUCCESS:g.ERROR,this.timer=setTimeout(()=>{this.timerDone()},this.delay))},timerDone(){this.phase!==g.SUCCESS&&this.phase!==g.ERROR||(this.phase=g.ACTION)},focus(){this.$refs.btn.focus()}}}),_=w,x=n("d802"),O=Object(x["a"])(_,p,f,!1,null,null,null),k=O.exports,A=function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-button-group"},[e("div",{staticClass:"dropdown-button bg-primary",class:{"one-action":!t.dualAction,[t.buttonSize]:!0,disabled:t.disableButton}},[e("v-popover",{attrs:{placement:"bottom",container:!1,disabled:t.disableButton,"popper-options":{modifiers:{flip:{enabled:!1}}}},scopedSlots:t._u([{key:"popover",fn:function(){return[t._t("popover-content")]},proxy:!0}],null,!0)},[t._t("button-content",(function(){return[e("button",{ref:"popoverButton",staticClass:"icon-container bg-primary no-left-border-radius",class:t.buttonSize,attrs:{disabled:t.disableButton,type:"button"}},[t._v(" Button "),e("i",{staticClass:"icon icon-chevron-down"})])]}),{buttonSize:t.buttonSize})],2)],1)])},E=[],S={name:"ActionDropdown",props:{size:{type:String,default:""},dualAction:{type:Boolean,default:!0},disableButton:{type:Boolean,default:!1}},computed:{buttonSize(){const{size:t}=this;let e;switch(t){case"":e="btn";break;case"xs":e="btn btn-xs";break;case"sm":e="btn btn-sm";break;case"lg":e="btn btn-lg";break;default:}return e}},methods:{hasSlot(t="default"){return!!this.$slots[t]||!!this.$scopedSlots[t]},togglePopover(){}}},C=S,T=(n("78e0"),Object(x["a"])(C,A,E,!1,null,null,null)),R=T.exports,I=n("05ca"),L=n.n(I),j=n("44db"),N=n.n(j),D=function(){var t=this,e=t._self._c;return e("thead",[e("tr",{class:{loading:t.loading}},[t.tableActions?e("th",{attrs:{width:t.checkWidth,align:"middle"}},[e("Checkbox",{staticClass:"check",attrs:{"data-testid":"sortable-table_check_select_all",indeterminate:t.isIndeterminate,disabled:t.noRows||t.noResults},model:{value:t.isAll,callback:function(e){t.isAll=e},expression:"isAll"}})],1):t._e(),t.subExpandColumn?e("th",{attrs:{width:t.expandWidth}}):t._e(),t._l(t.columns,(function(n){return e("th",{directives:[{name:"show",rawName:"v-show",value:!t.hasAdvancedFiltering||t.hasAdvancedFiltering&&n.isColVisible,expression:"!hasAdvancedFiltering || (hasAdvancedFiltering && col.isColVisible)"}],key:n.name,class:{sortable:n.sort,[n.breakpoint]:!!n.breakpoint},attrs:{align:n.align||"left",width:n.width},on:{click:function(e){return e.preventDefault(),t.changeSort(e,n)}}},[e("div",{staticClass:"table-header-container",class:{"not-filterable":t.hasAdvancedFiltering&&!n.isFilter}},[n.sort?e("span",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip(n),expression:"tooltip(col)"}]},[e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.labelFor(n),expression:"labelFor(col)"}]}),e("i",{directives:[{name:"show",rawName:"v-show",value:t.hasAdvancedFiltering&&!n.isFilter,expression:"hasAdvancedFiltering && !col.isFilter"},{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.t("sortableTable.tableHeader.noFilter"),expression:"t('sortableTable.tableHeader.noFilter')"}],staticClass:"icon icon-info not-filter-icon"}),e("span",{staticClass:"icon-stack"},[e("i",{staticClass:"icon icon-sort icon-stack-1x faded"}),t.isCurrent(n)&&!t.descending?e("i",{staticClass:"icon icon-sort-down icon-stack-1x"}):t._e(),t.isCurrent(n)&&t.descending?e("i",{staticClass:"icon icon-sort-up icon-stack-1x"}):t._e()])]):e("span",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip(n),expression:"tooltip(col)"}]},[t._v(t._s(t.labelFor(n)))])])])})),t.rowActions&&t.hasAdvancedFiltering&&t.tableColsOptions.length?e("th",{attrs:{width:t.rowActionsWidth}},[e("div",{ref:"table-options",staticClass:"table-options-group"},[e("button",{staticClass:"btn btn-sm role-multi-action table-options-btn",attrs:{"aria-haspopup":"true","aria-expanded":"false",type:"button"},on:{click:t.tableColsOptionsClick}},[e("i",{staticClass:"icon icon-actions"})]),e("div",{directives:[{name:"show",rawName:"v-show",value:t.tableColsOptionsVisibility,expression:"tableColsOptionsVisibility"}],staticClass:"table-options-container",style:t.tableColsMenuPosition},[t.hasAdvGrouping?e("div",{staticClass:"table-options-grouping"},[e("span",{staticClass:"table-options-col-subtitle"},[t._v(t._s(t.t("sortableTable.tableHeader.groupBy"))+":")]),e("LabeledSelect",{staticClass:"table-options-grouping-select",attrs:{clearable:!0,options:t.groupOptions,disabled:!1,searchable:!1,mode:"edit",multiple:!1,taggable:!1},model:{value:t.advGroup,callback:function(e){t.advGroup=e},expression:"advGroup"}})],1):t._e(),e("p",{staticClass:"table-options-col-subtitle mb-20"},[t._v(" "+t._s(t.t("sortableTable.tableHeader.show"))+": ")]),e("ul",t._l(t.tableColsOptions,(function(n,r){return e("li",{directives:[{name:"show",rawName:"v-show",value:n.isTableOption,expression:"col.isTableOption"}],key:r,class:{visible:!n.preventColToggle}},[e("Checkbox",{directives:[{name:"show",rawName:"v-show",value:!n.preventColToggle,expression:"!col.preventColToggle"}],staticClass:"table-options-checkbox",attrs:{label:n.label},on:{input:function(e){return t.tableOptionsCheckbox(e,n.label)}},model:{value:n.isColVisible,callback:function(e){t.$set(n,"isColVisible",e)},expression:"col.isColVisible"}})],1)})),0)])])]):t.rowActions?e("th",{attrs:{width:t.rowActionsWidth}}):t._e()],2)])},P=[],$=n("98d3");function M(t,e){var n;if(t=null===(n=t)||void 0===n?void 0:n.parentElement,!t)return null;const r=t.matches||t.matchesSelector;return r.call(t,e)?t:M(t,e)}const F="all",B="some",U="none";var G={mounted(){const t=this.$el.querySelector("TABLE");this._onRowClickBound=this.onRowClick.bind(this),this._onRowMousedownBound=this.onRowMousedown.bind(this),this._onRowContextBound=this.onRowContext.bind(this),t.addEventListener("click",this._onRowClickBound),t.addEventListener("mousedown",this._onRowMousedownBound),t.addEventListener("contextmenu",this._onRowContextBound)},beforeDestroy(){const t=this.$el.querySelector("TABLE");t.removeEventListener("click",this._onRowClickBound),t.removeEventListener("mousedown",this._onRowMousedownBound),t.removeEventListener("contextmenu",this._onRowContextBound)},computed:{howMuchSelected(){const t=this.pagedRows.length,e=this.selectedRows.length;return e>=t&&t>0?F:e>0?B:U},bulkActionsForSelection(){let t=!1;const e=this.pagedRows,n=this.arrangedRows;let r=this.selectedRows;if(!this.selectedRows.length){if(!n)return[];const e=n[0];r=e?[e]:[],t=!0}const o={};for(const a of e)if(a.availableActions)for(const t of a.availableActions)t.bulkable&&V(o,t,!1);for(const a of r)if(a.availableActions)for(const t of a.availableActions)t.bulkable&&t.enabled&&V(o,t,!1);const i=q(o,t);return i.forEach(t=>{const e=this.selectedRows.some(e=>{const n=e.availableActions||[];return n.some(e=>e.action===t.action&&e.enabled)});t.enabled=this.selectedRows.length>0&&e}),i.sort((t,e)=>(e.weight||0)-(t.weight||0))}},data(){return{selectedRows:[],prevNode:null}},watch:{pagedRows(){const t=this.pagedRows,e=[];for(const n of this.selectedRows)t.includes(n)||e.push(n);this.update([],e)}},methods:{onToggleAll(t){return t?(this.update(this.pagedRows,[]),!0):(this.update([],this.pagedRows),!1)},onRowMousedown(t){(Object($["d"])(t)||this.isSelectionCheckbox(t.target))&&t.preventDefault()},onRowMouseEnter(t){const e=t.target.closest("TR");if(e.classList.contains("sub-row")){const t=e.previousElementSibling;t.classList.add("sub-row-hovered")}},onRowMouseLeave(t){const e=t.target.closest("TR");if(e.classList.contains("sub-row")){const t=e.previousElementSibling;t.classList.remove("sub-row-hovered")}},nodeForEvent(t){const e=t.target.tagName,n=t.target,r=n.closest(".actions");if(n.classList.contains("select-all-check"))return;if(!r&&("A"===e||"BUTTON"===e||M(n,".btn")))return;const o=t.target.closest("TR");return this.nodeForRow(o)},nodeForRow(t){var e;if(null!==(e=t)&&void 0!==e&&e.classList.contains("separator-row"))return;while(t&&!t.classList.contains("main-row"))t=t.previousElementSibling;if(!t)return;const n=t.dataset.nodeId;if(!n)return;const r=this.pagedRows.find(t=>Object(l["f"])(t,this.keyField)===n);return r},async onRowClick(t){const e=this.nodeForEvent(t),n=t.target.closest("TD"),r=null===n||void 0===n?void 0:n.classList.contains("skip-select");if(r)return;const o=this.selectedRows,i=this.isSelectionCheckbox(t.target)||(null===n||void 0===n?void 0:n.classList.contains("row-check")),a=null===n||void 0===n?void 0:n.classList.contains("row-expand"),s=this.pagedRows;if(this.$emit("rowClick",t),!e)return;if(a)return void this.toggleExpand(e);const c=t.target.closest(".actions");if(c){let n=[e];if(this.mangleActionResources){const t=c.querySelector("i");t.classList.remove("icon-actions"),t.classList.add("icon-spinner"),t.classList.add("icon-spin");try{n=await this.mangleActionResources(n)}finally{t.classList.remove("icon-spinner"),t.classList.remove("icon-spin"),t.classList.add("icon-actions")}}return void this.$store.commit("action-menu/show",{resources:n,event:t,elem:c})}const l=o.includes(e);let u=this.prevNode;if(u&&s.includes(u)||(u=e),Object($["c"])(t))this.toggle(e);else if(Object($["d"])(t)){const t=this.nodesBetween(u,e);l?this.update([],t):this.update(t,[])}else i?this.toggle(e):this.update([e],s);this.prevNode=e},async onRowContext(t){const e=this.nodeForEvent(t);if(Object($["e"])(t))return;if(!e)return;t.preventDefault(),t.stopPropagation(),this.prevNode=e;const n=this.selectedRows.includes(e);n||this.update([e],this.selectedRows.slice());let r=this.selectedRows;this.mangleActionResources&&(r=await this.mangleActionResources(r)),this.$store.commit("action-menu/show",{resources:r,event:t})},keySelectRow(t,e=!1){const n=this.nodeForRow(t),r=this.pagedRows;n&&(e?this.update([n],[]):this.update([n],r),this.prevNode=n)},isSelectionCheckbox(t){return"INPUT"===t.tagName&&"checkbox"===t.type&&null!==t.closest(".selection-checkbox")},nodesBetween(t,e){let n=[];const r=this.groupBy;if(r){const r=this.groupedRows;let o=this.groupIdx(t),i=this.groupIdx(e);if(!o||!i)return[];(o.group>i.group||o.group===i.group&&o.item>i.item)&&([o,i]=[i,o]);for(let t=o.group;t<=i.group;t++){const e=r[t].rows;let a=o.group===t?o.item:0;while(e[a]&&(t!this.selectedRows.includes(t)),n},groupIdx(t){const e=this.groupedRows;for(let n=0;n{const e=this.selectedRows.findIndex(e=>e===t);-1!==e&&this.selectedRows.splice(e,1)}),t&&this.selectedRows.push(...t),e.length&&this.$nextTick(()=>{for(let t=0;t{for(let e=0;e{this.$emit("selection",this.selectedRows)})},updateInput(t,e,n){const r=Object(l["f"])(t,n);if(r){const t=this.$el.querySelector(`div[data-checkbox-ctrl][data-node-id="${r}"]`);if(t&&!t.disabled){const n=t.querySelector("label");n&&(n.value=e);let r=t.closest("tr"),o=!0;while(r&&(o||r.classList.contains("sub-row")))e?r.classList.add("row-selected"):r.classList.remove("row-selected"),r=r.nextElementSibling,o=!1}}},select(t){t.forEach(t=>{const e=Object(l["f"])(t,this.keyField),n=this.$el.querySelector(`label[data-node-id="${e}"]`);n.dispatchEvent(new Event("click"))})},applyTableAction(t,e,n){const r={alt:n&&Object($["a"])(n),event:n},o=this.selectedRows.filter(e=>{const n=e.availableActions.find(e=>e.action===t.action);return null===n||void 0===n?void 0:n.enabled});z(o,t,e,r,this),this.actionOfInterest=null},clearSelection(){this.update([],this.selectedRows)}}};let H=0;function V(t,e,n=!0){let r=e.action;r||(r="anon"+H,H++);let o=t[r];return o||(o=Object.assign({},e),t[r]=o,o.allEnabled=!1),e.enabled?o.anyEnabled=!0:o.allEnabled=!1,n&&(o.available=(o.available||0)+(e.enabled?1:0),o.total=(o.total||0)+1),o}function q(t,e=!1){const n=Object(u["c"])(Object.values(t),"anyEnabled",!0);for(const r of n)r.enabled=!e&&r.available>=r.total;return n}function z(t,e,n,r={},o){if(n=n||[],e.invoke){const i={action:e,event:r.event,isAlt:!!r.alt};return e.invoke.apply(o,[i,t||[],n])}if(t.length>1&&e.bulkAction&&!r.alt){const r=t[0][e.bulkAction];if(r)return r.call(t[0],t,...n)}const i=[];for(const a of t){let t;t=r.alt&&e.altAction?a[e.altAction]:a[e.action],t&&i.push(t.apply(a,n))}return Promise.all(i)}const K="left",W="right",X="top",Y="center",J="center",Q="bottom",Z="auto";function tt(t){const e=t.getBoundingClientRect(),n=t.offsetWidth,r=t.offsetHeight;return{top:e.top,right:e.left+n,bottom:e.top+r,left:e.left,width:n,height:r}}function et(t){return{top:t.clientY,left:t.clientX,bottom:t.clientY,right:t.clientX,width:0,height:0}}function nt(){const t=window.innerWidth,e=window.innerHeight,n=window.pageYOffset,r=window.pageXOffset;return{top:n,right:r+t,bottom:n+e,left:r,width:t,height:e}}function rt(t,e,n,r){let{positionX:o=Z,positionY:i=Z}=n||{};const{fudgeX:a=0,fudgeY:s=0,overlapX:c=!0,overlapY:l=!1}=n||{},u=nt();let d;d=e instanceof Event?et(e):tt(e);let p={};t&&(p=tt(t)),r&&(p={top:0,right:147,bottom:163,left:0,width:147,height:80});const f={position:"absolute"},h={left:c?d.left:d.right,center:(d.left+d.right)/2,right:c?d.right:d.left,top:l?d.bottom:d.top,middle:(d.top+d.bottom)/2,bottom:l?d.top:d.bottom},v={left:u.right-p.width-h.left,center:Math.min(u.right-p.width/2-h.center,h.center-p.width/2-u.left),right:h.right-p.width-u.left,top:h.bottom-p.height-u.top,middle:Math.min(h.middle-p.height/2-u.top,u.bottom-p.height/2-h.middle),bottom:u.bottom-p.height-h.top};switch(o===Y&&v.center<0&&(o=Z),o===Z?o=v.left<0||1.5*v.right>v.left?W:K:i===K&&v.left<0?o=W:i===W&&v.right<0&&(o=K),o){case K:f.left=h.left-a+"px";break;case Y:f.left=(h.left+h.right)/2-p.width/2-a+"px";break;case W:f.left=h.right+a-p.width+"px";break}switch(i===J&&v.middle<0&&(i=Z),i===Z?i=v.top<0||1.5*v.bottom>v.top?Q:X:i===X&&v.top<0?i=Q:i===Q&&v.bottom<0&&(i=X),i){case X:f.top=h.top+s-p.height+"px";break;case Y:f.top=(h.top+h.bottom)/2+s-p.height+"px";break;case Q:f.top=h.bottom-s+"px";break}return f}var ot=function(){var t=this,e=t._self._c;return e("div",{ref:"select",staticClass:"labeled-select",class:{disabled:t.isView||t.disabled,focused:t.focused,[t.mode]:!0,[t.status]:t.status,taggable:t.$attrs.taggable,taggable:t.$attrs.multiple,hoverable:t.hoverTooltip,"compact-input":t.isCompact,"no-label":!t.hasLabel},on:{click:t.focusSearch,focus:t.focusSearch}},[e("div",{class:{"labeled-container":!0,raised:t.raised,empty:t.empty,[t.mode]:!0},style:{border:"none"}},[t.hasLabel?e("label",[t.labelKey?e("t",{attrs:{k:t.labelKey}}):t.label?[t._v(t._s(t.label))]:t._e(),t.requiredField?e("span",{staticClass:"required"},[t._v("*")]):t._e()],2):t._e()]),e("v-select",t._g(t._b({ref:"select-input",staticClass:"inline",class:{"no-label":!(t.label||"").length},attrs:{"append-to-body":t.appendToBody,"calculate-position":t.positionDropdown,clearable:t.clearable,disabled:t.isView||t.disabled||t.loading,"get-option-key":t.getOptionKey,"get-option-label":e=>t.getOptionLabel(e),label:t.optionLabel,options:t.options,"map-keydown":t.mappedKeys,placeholder:t.placeholder,reduce:e=>t.reduce(e),searchable:t.isSearchable,selectable:t.selectable,value:null==t.value||t.loading?"":t.value,"dropdown-should-open":t.dropdownShouldOpen},on:{"search:blur":t.onBlur,"search:focus":t.onFocus,search:t.onSearch,open:t.onOpen,close:t.onClose,"option:selected":function(e){return t.$emit("selecting",e)}},scopedSlots:t._u([{key:"option",fn:function(n){return["group"===n.kind?[e("div",{staticClass:"vs__option-kind-group"},[e("b",[t._v(t._s(t.getOptionLabel(n)))]),n.badge?e("div",[t._v(" "+t._s(n.badge)+" ")]):t._e()])]:"divider"===n.kind?[e("hr")]:"highlighted"===n.kind?[e("div",{staticClass:"option-kind-highlighted"},[t._v(" "+t._s(n.label)+" ")])]:e("div",{on:{mousedown:e=>t.onClickOption(n,e)}},[t._v(" "+t._s(t.getOptionLabel(n))+" "),n.error?e("i",{staticClass:"icon icon-warning pull-right",staticStyle:{"font-size":"20px"}}):t._e()])]}},t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(e){return[t._t(n,null,null,e)]}}}))],null,!0)},"v-select",t.$attrs,!1),t.$listeners)),t.loading?e("i",{staticClass:"icon icon-spinner icon-spin icon-lg"}):t._e(),t.tooltip&&!t.focused?e("LabeledTooltip",{attrs:{hover:t.hoverTooltip,value:t.tooltip,status:t.status}}):t._e(),t.validationMessage?e("LabeledTooltip",{attrs:{hover:t.hoverTooltip,value:t.validationMessage}}):t._e()],1)},it=[],at=v.a.extend({props:{compact:{type:Boolean,default:null},label:{type:String,default:null},labelKey:{type:String,default:null}},computed:{isCompact(){return null!==this.compact?this.compact:!(this.label||this.labelKey)}}}),st=n("da25");function ct(t,e){t&&("function"===typeof e&&(e=e()),t.style.width="string"!==typeof e?e+"px":e)}function lt(t){if(t&&t.length)return t.length?parseFloat(getComputedStyle(t[0]).width.replace("px","")):parseFloat(getComputedStyle(t).width.replace("px",""))}var ut=v.a.extend({inheritAttrs:!1,props:{mode:{type:String,default:st["i"]},label:{type:String,default:null},labelKey:{type:String,default:null},placeholderKey:{type:String,default:null},tooltip:{type:[String,Object],default:null},hoverTooltip:{type:Boolean,default:!0},tooltipKey:{type:String,default:null},required:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},placeholder:{type:[String,Number],default:""},value:{type:[String,Number,Object],default:""},options:{default:null,type:Array},searchable:{default:!1,type:Boolean},rules:{default:()=>[],type:Array,validator:t=>t.every(t=>["function"].includes(typeof t))}},data(){return{raised:this.mode===st["m"]||!!(""+this.value),focused:!1,blurred:null}},computed:{requiredField(){return this.required||this.rules.some(t=>"required"===(null===t||void 0===t?void 0:t.name))},empty(){return!!(""+this.value)},isView(){return this.mode===st["m"]},isDisabled(){return this.disabled||this.isView},isSearchable(){const{searchable:t}=this,e=this.options||[];return!!(t||e.length>=10)},validationMessage(){const t=this.rules.find(t=>"required"===(null===t||void 0===t?void 0:t.name)),e=[],n=null===this||void 0===this?void 0:this.value;if(t&&this.blurred&&!this.focused){const e=t(n);if(e)return e}for(const r of this.rules){const t=r(n);t&&"required"!==r.name&&e.push(t)}return e.length>0&&(this.blurred||this.focused)?e.join(", "):void 0}},methods:{resizeHandler(){this.$nextTick(()=>{const t=this.$refs.select.querySelector("ul.vs__dropdown-menu"),e=lt(this.$refs.select)||0,n=lt(t)||0;nthis.optionKey?this.get(t,this.optionKey):this.getOptionLabel(t),r=n(t),o=this.value||[],i=o.findIndex(t=>n(t)===r);i<0||(this.value.splice(i,1),this.$emit("input",this.value),e.preventDefault(),e.stopPropagation(),this.closeOnSelect&&this.$refs["select-input"].closeSearchOptions())}function yt(t,e,n,r){const o=e.$parent.$el,i=o.getBoundingClientRect(),a=r||"bottom-start",s=document.body.offsetHeight,c=s-window.scrollY-i.y-1;let l;if(!a.includes("top")){l=i.y+i.height-1;const e=l+t.offsetHeight;e>window.innerHeight?l=void 0:l+=window.scrollY}l?(t.style.top=l+"px",t.classList.remove("vs__dropdown-up"),o.classList.remove("vs__dropdown-up")):(t.style.bottom=c+"px",t.classList.add("vs__dropdown-up"),o.classList.add("vs__dropdown-up")),t.style.left=i.x+"px",t.style.width="min-content",t.style.minWidth=i.width+"px"}var wt=n("9e74"),_t=n.n(wt),xt={name:"LabeledSelect",components:{LabeledTooltip:bt},mixins:[at,ut,gt["a"]],props:{appendToBody:{default:!0,type:Boolean},clearable:{default:!1,type:Boolean},disabled:{default:!1,type:Boolean},required:{default:!1,type:Boolean},hoverTooltip:{default:!0,type:Boolean},loading:{default:!1,type:Boolean},localizedLabel:{default:!1,type:Boolean},optionKey:{default:null,type:String},optionLabel:{default:"label",type:String},placement:{default:null,type:String},reduce:{default:t=>t&&"object"===typeof t&&void 0!==t.value?t.value:t,type:Function},selectable:{default:t=>!t||!t.disabled&&"group"!==t.kind&&"divider"!==t.kind&&!t.loading,type:Function},status:{default:null,type:String},tooltip:{default:null,type:[String,Object]},value:{default:null,type:[String,Object,Number,Array,Boolean]},closeOnSelect:{type:Boolean,default:!0}},data(){return{selectedVisibility:"visible",shouldOpen:!0}},computed:{hasLabel(){return!this.isCompact&&(!!this.label||!!this.labelKey||!!this.$slots.label)}},methods:{focusSearch(){const t=Date.now()-this.blurred;!this.focused&&t<250||this.$nextTick(()=>{var t;const e=null===(t=this.$refs["select-input"])||void 0===t?void 0:t.searchEl;e&&e.focus()})},onFocus(){this.selectedVisibility="hidden",this.onFocusLabeled()},onBlur(){this.selectedVisibility="visible",this.onBlurLabeled()},onOpen(){this.$emit("on-open"),this.resizeHandler()},onClose(){this.$emit("on-close")},getOptionLabel(t){if(!t)return;const e=!this.options.find(e=>t[this.optionLabel]===e[this.optionLabel]);if(e&&this.options){const e=this.options.find(e=>_t()(this.reduce(t),this.reduce(e)));if(e){const t=Object(l["f"])(e,this.optionLabel);return this.localizedLabel&&this.$store.getters["i18n/t"](t)||t}}if(this.$attrs["get-option-label"])return this.$attrs["get-option-label"](t);if(Object(l["f"])(t,this.optionLabel)){if(this.localizedLabel){const e=Object(l["f"])(t,this.optionLabel);return this.$store.getters["i18n/t"](e)||e}return Object(l["f"])(t,this.optionLabel)}return t},positionDropdown(t,e,{width:n}){yt(t,e,n,this.placement)},get:l["f"],onClickOption(t,e){mt.call(this,t,e)},dropdownShouldOpen(t,e=!1){const{noDrop:n,mutableLoading:r}=t,{open:o}=t,i=this.shouldOpen;return e?(t.open=!0,!0):(!1===i&&(this.shouldOpen=!0,t.closeSearchOptions()),!n&&(o&&i&&!r))},onSearch(t){t&&this.dropdownShouldOpen(this.$refs["select-input"],!0)},getOptionKey(t){return this.optionKey?Object(l["f"])(t,this.optionKey):this.getOptionLabel(t)}}},Ot=xt,kt=(n("a805"),Object(x["a"])(Ot,ot,it,!1,null,"0abf511e",null)),At=kt.exports,Et={components:{Checkbox:d["a"],LabeledSelect:At},props:{columns:{type:Array,required:!0},sortBy:{type:String,required:!0},defaultSortBy:{type:String,default:""},group:{type:String,default:""},groupOptions:{type:Array,default:()=>[]},descending:{type:Boolean,required:!0},hasAdvancedFiltering:{type:Boolean,required:!1},tableColsOptions:{type:Array,default:()=>[]},tableActions:{type:Boolean,required:!0},rowActions:{type:Boolean,required:!0},howMuchSelected:{type:String,required:!0},checkWidth:{type:Number,default:30},rowActionsWidth:{type:Number,required:!0},subExpandColumn:{type:Boolean,default:!1},expandWidth:{type:Number,default:30},labelFor:{type:Function,required:!0},noRows:{type:Boolean,default:!0},noResults:{type:Boolean,default:!0},loading:{type:Boolean,required:!1}},data(){return{tableColsOptionsVisibility:!1,tableColsMenuPosition:null}},watch:{advancedFilteringValues(){this.watcherUpdateLiveAndDelayed(!0,!1)},tableColsOptionsVisibility(t){t?(window.addEventListener("click",this.onClickOutside),this.$emit("update-cols-options")):window.removeEventListener("click",this.onClickOutside)}},computed:{isAll:{get(){return this.howMuchSelected!==U},set(t){this.$emit("on-toggle-all",t)}},hasAdvGrouping(){var t,e;return(null===(t=this.group)||void 0===t?void 0:t.length)&&(null===(e=this.groupOptions)||void 0===e?void 0:e.length)},advGroup:{get(){return this.group||this.advGroup},set(t){this.$emit("group-value-change",t)}},isIndeterminate(){return this.howMuchSelected===B}},methods:{changeSort(t,e){if(!e.sort)return;let n=!1;this.sortBy===e.name&&(n=!this.descending),this.$emit("on-sort-change",e.name,n)},isCurrent(t){return t.name===this.sortBy},tableColsOptionsClick(t){const e=document.querySelector(".table-options-container"),n=document.querySelector(".table-options-btn");this.tableColsMenuPosition||(this.tableColsMenuPosition=rt(e,t||n,{overlapX:!0,fudgeX:26,fudgeY:-22,positionX:Y,positionY:Z})),this.tableColsOptionsVisibility=!this.tableColsOptionsVisibility},onClickOutside(t){const e=this.$refs["table-options"];e&&!e.contains(t.target)&&(this.tableColsOptionsVisibility=!1)},tableOptionsCheckbox(t,e){this.$emit("col-visibility-change",{label:e,value:t})},tooltip(t){if(!t.tooltip)return null;const e=this.$store.getters["i18n/exists"];return e(t.tooltip)?this.t(t.tooltip):t.tooltip}}},St=Et,Ct=(n("d6e7"),n("c310"),Object(x["a"])(St,D,P,!1,null,"96d8a090",null)),Tt=Ct.exports;const Rt="allcols",It="All Columns",Lt=":::islabel";var jt={data(){return{searchQuery:null,previousFilter:null,previousResult:null}},computed:{searchFields(){const t=Nt(this.columns);return this.extraSearchFields&&Object(u["b"])(t,this.extraSearchFields),t},filteredRows(){return this.hasAdvancedFiltering?this.handleAdvancedFiltering():this.handleFiltering()}},methods:{handleAdvancedFiltering(){if(this.subMatches=null,this.searchQuery.length){const t=(this.arrangedRows||[]).slice(),e=t.filter(t=>this.searchQuery.every(e=>{if(e.prop===Rt){const n=this.advFilterSelectOptions.slice(1);let r=[];return n.forEach(t=>{if(t.value.includes("[")&&t.value.includes("]"))r=r.concat(JSON.parse(t.value));else{const e=t.isLabel?`${t.label}${Lt}`:t.value;r.push(e)}}),Pt(r,[e.value],t)}{if(e.prop.includes("[")&&e.prop.includes("]"))return Pt(JSON.parse(e.prop),[e.value],t);let n=e.prop;return e.prop.includes("metadata.labels")&&(n=`${e.label}${Lt}`),Pt([n],[e.value],t)}}));return e}return this.arrangedRows},handleFiltering(){const t=(this.searchQuery||"").trim().toLowerCase();let e;if(t&&this.previousResult&&t.startsWith(this.previousFilter)?e=this.previousResult.slice():(this.previousResult=null,e=(this.arrangedRows||[]).slice()),this.previousFilter=t,!t.length)return this.subMatches=null,this.previousResult=null,e;const n=this.searchFields,r=t.split(/\s*[, ]\s*/),o=this.subSearch,i=this.subFields,a={};for(let s=e.length-1;s>=0;s--){const t=e[s];let c=0,d=!0;if(d=Pt(n,r,t),i&&o){const e=t[o]||[];for(let n=e.length-1;n>=0;n--){let e=!0;e=Pt(i,r,t),e&&c++}a[Object(l["f"])(t,this.keyField)]=c}d||0!==c||Object(u["g"])(e,s)}return this.subMatches=a,this.previousResult=e,e}},watch:{arrangedRows(t){this.previousResult=null}}};function Nt(t){const e=[];return(t||[]).forEach(t=>{const n=t.search;n?"string"===typeof n?Object(u["a"])(e,n):Object(u["f"])(n)&&Object(u["b"])(e,n):!1===n||Object(u["a"])(e,t.value||t.name)}),e.filter(t=>!!t)}const Dt=/^[0-9a-f\.:]+$/i;function Pt(t,e,n){for(let r=0;r0&&(t=r.substr(e+1),r=r.substr(0,e)),o=r.includes(".")?Object(l["f"])(n,r):n[r]}if(void 0!==o&&(o=(""+o).toLowerCase(),o))if(t){if("exact"===t){if(o===e)return!0}else if("ip"===t){const t=Dt.test(e);if(t){const t=new RegExp(`(?:^|\\.)${e}(?:\\.|$)`);if(t.test(o))return!0}}else if("prefix"===t&&0===o.indexOf(e))return!0}else if(o.includes((""+e).toLowerCase()))return!0}return!1}var Mt=n("1d19"),Ft={computed:{sortFields(){let t=(this.groupBy?this.groupSort||this.groupBy:null)||[],e=[];const n=(this.columns||this.headers).find(t=>t&&t.name&&t.name.toLowerCase()===this.sortBy.toLowerCase());this.sortBy&&n&&n.sort&&(e=n.sort),Array.isArray(t)||(t=[t]),Array.isArray(e)||(e=[e]);const r=[...t,...e];return Object(u["a"])(r,"nameSort"),Object(u["a"])(r,"id"),r},arrangedRows(){let t;if(this.sortGenerationFn&&(t=`${this.sortGenerationFn.apply(this)}/${this.rows.length}/${this.descending}/${this.sortFields.join(",")}`,this.cacheKey===t))return this.cachedRows;const e=Object(Mt["a"])(this.rows,this.sortFields,this.descending);return t&&(this.cacheKey=t,this.cachedRows=e),e}},data(){let t=null;if(this._defaultSortBy=this.defaultSortBy,!this._defaultSortBy){const t=this.headers.find(t=>!!t.defaultSort),e=this.headers.find(t=>"name"===t.name);if(t)this._defaultSortBy=t.name;else if(e)this._defaultSortBy=e.name;else{const t=this.headers.filter(t=>"state"!==t.name)[0];this._defaultSortBy=t?t.name:"id"}}return t&&this.headers.find(e=>e.name===t)||(t=this._defaultSortBy),{sortBy:t,descending:!1,cachedRows:null,cacheKey:null}},methods:{changeSort(t,e){this.sortBy=t,this.descending=e,this.setPage(1)}}},Bt=n("5000"),Ut={computed:{indexFrom(){return Math.max(0,1+this.perPage*(this.page-1))},indexTo(){return Math.min(this.filteredRows.length,this.indexFrom+this.perPage-1)},totalPages(){return Math.ceil(this.filteredRows.length/this.perPage)},showPaging(){return!this.loading&&this.paging&&this.totalPages>1},pagingDisplay(){const t={...this.pagingParams||{},count:this.filteredRows.length,pages:this.totalPages,from:this.indexFrom,to:this.indexTo};return this.$store.getters["i18n/t"](this.pagingLabel,t)},pagedRows(){return this.paging?this.filteredRows.slice(this.indexFrom-1,this.indexTo):this.filteredRows}},data(){const t=this.getPerPage();return{page:1,perPage:t}},watch:{pagedRows(){const t=this.indexFrom,e=this.filteredRows.length;this.totalPages>0&&this.page>1&&t>e&&this.setPage(this.totalPages)}},methods:{getPerPage(){let t=this.rowsPerPage||0;return t<=0&&(t=parseInt(this.$store.getters["prefs/get"](Bt["d"]),10)||0),t<=0&&(t=10),t},setPage(t){this.page!==t&&(this.page=t)},goToPage(t){let e;switch(t){case"first":e=1;break;case"prev":e=Math.max(1,this.page-1);break;case"next":e=Math.min(this.totalPages,this.page+1);break;case"last":e=this.totalPages;break}this.setPage(e)}}},Gt={computed:{groupedRows(){const t=this.groupBy,e=this.groupRef||t;if(!t)return[{key:"default",ref:"default",rows:this.pagedRows}];const n=[],r={};for(const o of this.pagedRows){const i=Object(l["f"])(o,t)||"",a=Object(l["f"])(o,e);let s=r[i];s?s.rows.push(o):(s={key:i,ref:a,rows:[o]},r[i]=s,n.push(s))}return n}}};const Ht="inline-block";var Vt={data(){return{bulkActionsClass:"bulk",bulkActionClass:"bulk-action",bulkActionsDropdownClass:"bulk-actions-dropdown",bulkActionAvailabilityClass:"action-availability",hiddenActions:[],updateHiddenBulkActions:N()(this.protectedUpdateHiddenBulkActions,10)}},beforeDestroy(){window.removeEventListener("resize",this.onWindowResize)},mounted(){window.addEventListener("resize",this.onWindowResize),this.updateHiddenBulkActions()},watch:{selectedRows(){this.updateHiddenBulkActions()},keyedAvailableActions(){this.updateHiddenBulkActions()}},computed:{availableActions(){return this.bulkActionsForSelection.filter(t=>!t.external)},keyedAvailableActions(){return this.availableActions.map(t=>t.action)},selectedRowsText(){return this.selectedRows.length?this.t("sortableTable.actionAvailability.selected",{actionable:this.selectedRows.length}):null},actionTooltip(){if(!this.selectedRows.length||!this.actionOfInterest)return null;const t=this.selectedRows.filter(this.canRunBulkActionOfInterest).length;return t===this.selectedRows.length?null:this.t("sortableTable.actionAvailability.some",{actionable:t,total:this.selectedRows.length})}},methods:{onWindowResize(){this.updateHiddenBulkActions(),this.onScroll()},protectedUpdateHiddenBulkActions(){if(!this.$refs.container)return;const t=this.$refs.container.querySelector("."+this.bulkActionsClass),e=this.$refs.container.querySelector("."+this.bulkActionsDropdownClass);if(!t||!e)return;const n=t.offsetWidth,r=this.$refs.container.querySelectorAll("."+this.bulkActionClass),o=Array.from(r||[]),i=this.$refs.container.querySelector("."+this.bulkActionAvailabilityClass);let a=0;this.selectedRowsText&&(i?(i.style.display=Ht,a=i.offsetWidth):i.style.display="none;"),this.hiddenActions=[];let s=0,c=!1,l=n-a;for(let u=0;u=l)if(c){const e=t.attributes.getNamedItem("id").value;this.hiddenActions.push(this.availableActions.find(t=>t.action===e)),t.style.display="none"}else e.style.display=Ht,u=-1,s=0,c=!0,l=n-e.offsetWidth-a}c||(e.style.display="none")}}};const qt=Rt;var zt={props:{group:{type:String,default:()=>""},groupOptions:{type:Array,default:()=>[]},hasAdvancedFiltering:{type:Boolean,default:!1},advFilterHideLabelsAsCols:{type:Boolean,default:!1},advFilterPreventFilteringLabels:{type:Boolean,default:!1}},data(){return{columnOptions:[],colOptionsWatcher:null,advancedFilteringVisibility:!1,advancedFilteringValues:[],advFilterSearchTerm:null,advFilterSelectedProp:qt,advFilterSelectedLabel:It,column:null}},mounted(){this.hasAdvancedFiltering&&this.updateColsOptions()},watch:{advancedFilteringValues(){this.watcherUpdateLiveAndDelayed(!0,!1)},advancedFilteringVisibility(t){t?(window.addEventListener("click",this.onClickOutside),this.updateColsOptions()):window.removeEventListener("click",this.onClickOutside)}},computed:{advFilterSelectOptions(){return this.columnOptions.filter(t=>t.isFilter&&!t.preventFiltering)},advGroupOptions(){return this.groupOptions.map(t=>({label:this.t(t.tooltipKey),value:t.value}))}},methods:{handleColsVisibilyAndFiltering(t){const e=t;return this.columnOptions.forEach(t=>{if(t.isTableOption){const n=e.findIndex(e=>e.name===t.name);-1!==n?(e[n].isColVisible=t.isColVisible,e[n].isFilter=t.isFilter):e.push(t)}}),e},setColsOptions(){let t=[];const e=[],n=[],r=this.headers.slice().filter(t=>!t.maxPageSize||t.maxPageSize&&t.maxPageSize>=this.perPage);return r.forEach(t=>{var e;const r=t.name,o=t.labelKey?this.t(""+t.labelKey):t.label,i=!(Object.keys(t).includes("search")&&!t.search);let a=t.sort;const s=t.valueProp||t.value;let c=null,l=!0;if(t.sort&&s?("string"===typeof t.sort&&(a=t.sort.includes(":")?[t.sort.split(":")[0]]:[t.sort]),c=a.includes(s)?JSON.stringify([s]):JSON.stringify(a.concat([s]))):c=s?JSON.stringify([s]):null,null!==(e=this.columnOptions)&&void 0!==e&&e.length){const t=this.columnOptions.find(t=>t.name===r&&t.label===o);t&&(l=t.isColVisible)}n.push({name:r,label:o,value:c,isFilter:i,isTableOption:!0,isColVisible:l})}),this.rows.length&&this.rows.forEach(t=>{var n,r,o;null!==(n=t.metadata)&&void 0!==n&&n.labels&&Object.keys(null===(r=t.metadata)||void 0===r?void 0:r.labels).length&&Object.keys(null===(o=t.metadata)||void 0===o?void 0:o.labels).forEach(t=>{var n;const r={name:t,label:t,value:"metadata.labels."+t,isFilter:!0,isTableOption:!0,isColVisible:!1,isLabel:!0,preventFiltering:this.advFilterPreventFilteringLabels,preventColToggle:this.advFilterHideLabelsAsCols};if(null!==(n=this.columnOptions)&&void 0!==n&&n.length){const e=this.columnOptions.find(e=>e.name===t&&e.label===t);e&&(r.isColVisible=e.isColVisible)}e.filter(e=>e.label===t).length||e.push(r)})}),t=n.concat(e),t.length&&t.unshift({name:It,label:It,value:Rt,isFilter:!0,isTableOption:!1}),t},addAdvancedFilter(){this.advFilterSelectedProp&&this.advFilterSearchTerm&&(this.advancedFilteringValues.push({prop:this.advFilterSelectedProp,value:this.advFilterSearchTerm,label:this.advFilterSelectedLabel}),this.eventualSearchQuery=this.advancedFilteringValues,this.advancedFilteringVisibility=!1,this.advFilterSelectedProp=qt,this.advFilterSelectedLabel=It,this.advFilterSearchTerm=null)},clearAllAdvancedFilters(){this.advancedFilteringValues=[],this.eventualSearchQuery=this.advancedFilteringValues,this.advancedFilteringVisibility=!1,this.advFilterSelectedProp=qt,this.advFilterSelectedLabel=It,this.advFilterSearchTerm=null},clearAdvancedFilter(t){this.advancedFilteringValues.splice(t,1),this.eventualSearchQuery=this.advancedFilteringValues},onClickOutside(t){const e=this.$refs["advanced-filter-group"];e&&!e.contains(t.target)&&(this.advancedFilteringVisibility=!1)},updateColsOptions(){this.columnOptions=this.setColsOptions()},changeColVisibility(t){const e=this.columnOptions.findIndex(e=>e.label===t.label);-1!==e&&(this.columnOptions[e].isColVisible=t.value)}}};const Kt={},Wt={TABLET:"tablet",LAPTOP:"laptop",DESKTOP:"desktop"};var Xt={name:"SortableTable",components:{THead:Tt,Checkbox:d["a"],AsyncButton:k,ActionDropdown:R,LabeledSelect:At},mixins:[jt,Ft,Ut,Gt,G,Vt,zt],props:{headers:{type:Array,required:!0},rows:{type:Array,required:!0},keyField:{type:String,default:"_key"},loading:{type:Boolean,required:!1},groupBy:{type:String,default:null},groupRef:{type:String,default:null},groupSort:{type:Array,default:null},defaultSortBy:{type:String,default:null},tableActions:{type:Boolean,default:!0},rowActions:{type:Boolean,default:!0},mangleActionResources:{type:Function,default:null},rowActionsWidth:{type:Number,default:40},search:{type:Boolean,default:!0},extraSearchFields:{type:Array,default:null},subRows:{type:Boolean,default:!1},subExpandable:{type:Boolean,default:!1},subExpandColumn:{type:Boolean,default:!1},subSearch:{type:String,default:null},subFields:{type:Array,default:null},topDivider:{type:Boolean,default:!0},bodyDividers:{type:Boolean,default:!1},overflowX:{type:Boolean,default:!1},overflowY:{type:Boolean,default:!1},paging:{type:Boolean,default:!1},pagingLabel:{type:String,default:"sortableTable.paging.generic"},pagingParams:{type:Object,default:null},rowsPerPage:{type:Number,default:null},noRowsKey:{type:String,default:"sortableTable.noRows"},showNoRows:{type:Boolean,default:!0},noDataKey:{type:String,default:"sortableTable.noData"},showHeaders:{type:Boolean,default:!0},sortGenerationFn:{type:Function,default:null},getCustomDetailLink:{type:Function,default:null},componentTestid:{type:String,default:"sortable-table"},useQueryParamsForSimpleFiltering:{type:Boolean,default:!1},forceUpdateLiveAndDelayed:{type:Number,default:0}},data(){var t;let e="",n="";var r,o;!this.hasAdvancedFiltering&&this.useQueryParamsForSimpleFiltering&&null!==(t=this.$route.query)&&void 0!==t&&t.q&&(e=null===(r=this.$route.query)||void 0===r?void 0:r.q,n=null===(o=this.$route.query)||void 0===o?void 0:o.q);return{currentPhase:g.WAITING,expanded:{},searchQuery:e,eventualSearchQuery:n,actionOfInterest:null,loadingDelay:!1}},mounted(){this._loadingDelayTimer=setTimeout(()=>{this.loadingDelay=!0},200);const t=document.querySelector("main");this._onScroll=this.onScroll.bind(this),null===t||void 0===t||t.addEventListener("scroll",this._onScroll)},beforeDestroy(){clearTimeout(this.loadingDelayTimer),clearTimeout(this._scrollTimer),clearTimeout(this._loadingDelayTimer),clearTimeout(this._liveColumnsTimer),clearTimeout(this._delayedColumnsTimer),clearTimeout(this.manualRefreshTimer);const t=document.querySelector("main");null===t||void 0===t||t.removeEventListener("scroll",this._onScroll)},watch:{eventualSearchQuery:N()((function(t){if(this.searchQuery=t,!this.hasAdvancedFiltering&&this.useQueryParamsForSimpleFiltering){var e;const n={name:this.$route.name,params:{...this.$route.params},query:{...this.$route.query,q:t}};!t&&null!==(e=this.$route.query)&&void 0!==e&&e.q&&(n.query={}),this.$router.replace(n)}}),200),descending(t,e){this.watcherUpdateLiveAndDelayed(t,e)},searchQuery(t,e){this.watcherUpdateLiveAndDelayed(t,e)},sortFields(t,e){this.watcherUpdateLiveAndDelayed(t,e)},groupBy(t,e){this.watcherUpdateLiveAndDelayed(t,e)},namespaces(t,e){this.watcherUpdateLiveAndDelayed(t,e)},page(t,e){this.watcherUpdateLiveAndDelayed(t,e)},forceUpdateLiveAndDelayed(t,e){this.watcherUpdateLiveAndDelayed(t,e)},initalLoad:{handler(t){t&&(this._didinit=!0,this.$nextTick(()=>this.updateLiveAndDelayed()))},immediate:!0},manualRefreshLoadingFinished:{handler(t,e){this.currentPhase=t?g.ACTION:g.WAITING,t&&t!==e&&this.$nextTick(()=>this.updateLiveAndDelayed())},immediate:!0}},created(){this.debouncedRefreshTableData=N()(this.refreshTableData,500)},computed:{...Object(i["a"])({isTooManyItemsToAutoUpdate:"resource-fetch/isTooManyItemsToAutoUpdate"}),...Object(i["a"])({isManualRefreshLoading:"resource-fetch/manualRefreshIsLoading"}),namespaces(){return this.$store.getters["activeNamespaceCache"]},initalLoad(){var t;return!(this.loading||this._didinit||null===(t=this.rows)||void 0===t||!t.length)},manualRefreshLoadingFinished(){var t;return!(this.loading||!this._didinit||null===(t=this.rows)||void 0===t||!t.length||this.isManualRefreshLoading)},fullColspan(){let t=0;for(let e=0;e!t.maxPageSize||t.maxPageSize&&t.maxPageSize>=this.perPage);if(this.groupBy){const e=t.find(t=>t.name===this.groupBy);e&&Object(u["h"])(t,e)}const e=t.find(t=>!t.width);if(!e){const e=t.find(t=>t.canBeVariable);if(e){const n=Object(l["e"])(e);delete n.width,t.splice(t.indexOf(e),1,n)}}if(this.hasAdvancedFiltering){const e=this.handleColsVisibilyAndFiltering(t);return e}return t},dt(){const t={check:"Select: ",actions:"Actions: "};return this.columns.forEach(e=>{t[e.name]=(e.label||e.name)+":"}),t},classObject(){return{"top-divider":this.topDivider,"body-dividers":this.bodyDividers,"overflow-y":this.overflowY,"overflow-x":this.overflowX}},hasLiveColumns(){const t=this.columns.find(t=>{var e;return(null===(e=t.formatter)||void 0===e?void 0:e.startsWith("Live"))||t.liveUpdates});return!!t},hasDelayedColumns(){const t=this.columns.find(t=>t.delayLoading);return!!t},columnFormmatterIDs(){const t={};return this.columns.forEach(e=>{e.formatter&&(t[e.formatter]=Object(c["c"])(e.formatter))}),t},displayRows(){const t=[],e=this.columnFormmatterIDs;return this.groupedRows.forEach(n=>{const r={grp:n,key:n.key,ref:n.ref,rows:[]};t.push(r),n.rows.forEach(t=>{const n={row:t,key:this.get(t,this.keyField),showSubRow:this.showSubRow(t,this.keyField),canRunBulkActionOfInterest:this.canRunBulkActionOfInterest(t),columns:[]};r.rows.push(n),this.columns.forEach(r=>{var o;const i=r.delayLoading?void 0:this.valueFor(t,r,r.isLabel);let a,s=i,c=!1;if(Array.isArray(i)&&(s=i.join(", ")),r.formatter)if(Kt[r.formatter])a=Kt[r.formatter],c=!0;else{var l;const t=null===(l=this.$plugin)||void 0===l?void 0:l.getDynamic("formatters",r.formatter);t&&(a=t,c=!0)}n.columns.push({col:r,value:i,formatted:s,component:a,needRef:c,delayed:r.delayLoading,live:(null===(o=r.formatter)||void 0===o?void 0:o.startsWith("Live"))||r.liveUpdates,label:this.labelFor(r),dasherize:e[r.formatter]||""})})})}),t}},methods:{refreshTableData(){this.$store.dispatch("resource-fetch/doManualRefresh")},get:l["f"],dasherize:c["c"],onScroll(){(this.hasLiveColumns||this.hasDelayedColumns)&&(clearTimeout(this._liveColumnsTimer),clearTimeout(this._scrollTimer),clearTimeout(this._delayedColumnsTimer),this._scrollTimer=setTimeout(()=>{this.updateLiveColumns(),this.updateDelayedColumns()},300))},watcherUpdateLiveAndDelayed(t,e){t!==e&&this.$nextTick(()=>this.updateLiveAndDelayed())},updateLiveAndDelayed(){this.hasLiveColumns&&this.updateLiveColumns(),this.hasDelayedColumns&&this.updateDelayedColumns()},updateDelayedColumns(){if(clearTimeout(this._delayedColumnsTimer),!this.$refs.column||0===this.pagedRows.length)return;const t=this.$refs.column.filter(t=>t.startDelayedLoading&&!t.__delayedLoading),e=(window.innerHeight||document.documentElement.clientHeight)+100;let n=0;for(let r=0;r=0&&i<=e&&(o.startDelayedLoading(!0),o.__delayedLoading=!0,n++,4===n))return void(this._delayedColumnsTimer=setTimeout(this.updateDelayedColumns,100))}},updateLiveColumns(){if(clearTimeout(this._liveColumnsTimer),!this.$refs.column||!this.hasLiveColumns||0===this.pagedRows.length)return;const t=window.innerHeight||document.documentElement.clientHeight,e=this.$refs.column.filter(t=>!!t.liveUpdate),n=s()();let r=Number.MAX_SAFE_INTEGER;for(let o=0;o=0&&a<=t){const t=i.liveUpdate(n);tthis.updateLiveColumns(),1e3*r)},labelFor(t){return t.labelKey?this.t(t.labelKey,void 0,!0):t.label?t.label:Object(c["p"])(t.name)},valueFor(t,e,n){if("function"===typeof e.value)return e.value(t);var r,o,i;if(n)return null!==(r=t.metadata)&&void 0!==r&&r.labels&&null!==(o=t.metadata)&&void 0!==o&&o.labels[e.label]?null===(i=t.metadata)||void 0===i?void 0:i.labels[e.label]:"";const a=e.value||e.name,s=Object(l["f"])(t,a);return null===s||void 0===s?"":s},isExpanded(t){const e=t[this.keyField];return!!this.expanded[e]},toggleExpand(t){const e=t[this.keyField],n=!this.expanded[e];return this.expanded[e]=n,this.expanded={...this.expanded},n},setBulkActionOfInterest(t){this.actionOfInterest=t},canRunBulkActionOfInterest(t){if(!this.actionOfInterest)return!1;const e=t.availableActions.find(t=>t.action===this.actionOfInterest.action);return null===e||void 0===e?void 0:e.enabled},focusSearch(){this.$refs.searchQuery&&(this.$refs.searchQuery.focus(),this.$refs.searchQuery.select())},nearestCheckbox(){var t;return null===(t=document.activeElement.closest("tr.main-row"))||void 0===t?void 0:t.querySelector(".checkbox-custom")},focusAdjacent(t=!0){const e=Array.from(this.$el.querySelectorAll(".checkbox-custom")),n=this.nearestCheckbox();let r=-1;return r=n?e.indexOf(n)+(t?1:-1):t?1:e.length-1,r<1?(r=1,null):r>=e.length?(r=e.length-1,null):e[r]?(e[r].focus(),e[r]):void 0},focusNext:L()((function(t,e=!1){const n=this.focusAdjacent(!0),r=M(n,"tr");null!==r&&void 0!==r&&r.classList.contains("row-selected")||this.keySelectRow(r,e)}),50),focusPrevious:L()((function(t,e=!1){const n=this.focusAdjacent(!1),r=M(n,"tr");null!==r&&void 0!==r&&r.classList.contains("row-selected")||this.keySelectRow(r,e)}),50),showSubRow(t,e){const n=this.subRows&&(!this.subExpandable||this.expanded[Object(l["f"])(t,e)]),r=t.stateDescription;return n||r},handleActionButtonClick(t,e){this.$emit("clickedActionButton",{event:e,targetElement:this.$refs["actionButton"+t][0]})}}},Yt=Xt,Jt=(n("7e5c"),n("9001"),Object(x["a"])(Yt,r,o,!1,null,"3b0138b8",null));e["b"]=Jt.exports},1001:function(t,e,n){var r=n("986c");function o(t){var e=new t.constructor(t.byteLength);return new r(e).set(new r(t)),e}t.exports=o},1032:function(t,e,n){"use strict";var r=function(){var t=this,e=t._self._c;t._self._setupProxy;return e("div",{staticClass:"checkbox-outer-container",attrs:{"data-checkbox-ctrl":""}},[e("label",{staticClass:"checkbox-container",class:{disabled:t.isDisabled},attrs:{for:t.id},on:{keydown:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:(e.preventDefault(),t.clicked(e))},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"space",32,e.key,[" ","Spacebar"])?null:(e.preventDefault(),t.clicked(e))}],click:function(e){return t.clicked(e)}}},[e("input",{attrs:{type:"checkbox",tabindex:-1,name:t.id},domProps:{checked:t.isChecked,value:t.valueWhenTrue},on:{click:function(t){t.stopPropagation(),t.preventDefault()}}}),e("span",{staticClass:"checkbox-custom",class:{indeterminate:t.indeterminate},attrs:{tabindex:t.isDisabled?-1:0,"aria-label":t.label,"aria-checked":!!t.value,role:"checkbox"}}),t.$slots.label||t.label||t.labelKey||t.tooltipKey||t.tooltip?e("span",{staticClass:"checkbox-label",class:{"checkbox-primary":t.primary}},[t._t("label",(function(){return[t.labelKey?e("t",{attrs:{k:t.labelKey,raw:!0}}):t.label?[t._v(t._s(t.label))]:t._e(),t.tooltipKey?e("i",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.t(t.tooltipKey),expression:"t(tooltipKey)"}],staticClass:"checkbox-info icon icon-info icon-lg"}):t.tooltip?e("i",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.tooltip,expression:"tooltip"}],staticClass:"checkbox-info icon icon-info icon-lg"}):t._e()]}))],2):t._e()]),t.descriptionKey||t.description?e("div",{staticClass:"checkbox-outer-container-description"},[t.descriptionKey?e("t",{attrs:{k:t.descriptionKey}}):t.description?[t._v(" "+t._s(t.description)+" ")]:t._e()],2):t._e()])},o=[],i=n("8bbf"),a=n.n(i),s=n("da25"),c=n("bddd"),l=n("736a"),u=n.n(l),d=a.a.extend({name:"Checkbox",props:{value:{type:[Boolean,Array,String],default:!1},label:{type:String,default:null},labelKey:{type:String,default:null},id:{type:String,default:String(1e3*Math.random())},disabled:{type:Boolean,default:!1},indeterminate:{type:Boolean,default:!1},mode:{type:String,default:s["i"]},tooltip:{type:[String,Object],default:null},tooltipKey:{type:String,default:null},valueWhenTrue:{type:[Boolean,String,Number],default:!0},descriptionKey:{type:String,default:null},description:{type:String,default:null},primary:{type:Boolean,default:!1}},computed:{isDisabled(){return this.disabled||this.mode===s["m"]},isChecked(){return this.isMulti(this.value)?this.findTrueValues(this.value):this.value===this.valueWhenTrue}},methods:{clicked(t){if("A"===t.target.tagName&&t.target.href)return!0;if(t.stopPropagation(),t.preventDefault(),this.isDisabled)return;const e={bubbles:!0,cancelable:!1,shiftKey:t.shiftKey,altKey:t.altKey,ctrlKey:t.ctrlKey,metaKey:t.metaKey},n=new CustomEvent("click",e),r=u()(this.value);this.isMulti(r)?(this.isChecked?Object(c["h"])(r,this.valueWhenTrue):Object(c["a"])(r,this.valueWhenTrue),this.$emit("input",r)):this.isString(this.valueWhenTrue)?this.isChecked?this.$emit("input",null):this.$emit("input",this.valueWhenTrue):(this.$emit("input",!r),this.$el.dispatchEvent(n))},isMulti(t){return Array.isArray(t)},isString(t){return"string"===typeof t},findTrueValues(t){return t.find(t=>t===this.valueWhenTrue)||!1}}}),p=d,f=(n("13cb"),n("d802")),h=Object(f["a"])(p,r,o,!1,null,null,null);e["a"]=h.exports},"108e":function(t,e){function n(t){return function(e){return null==e?void 0:e[t]}}t.exports=n},"10d1":function(t,e,n){var r=n("201b"),o=function(){return r.Date.now()};t.exports=o},"11fb":function(t,e,n){"use strict";n("7dbf")},"122c":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".cluster-list-view[data-v-56771e1c]{margin-bottom:2rem}.cluster-list-view .favorite-icon[data-v-56771e1c]{margin-right:1rem;background:none}",""]),t.exports=e},1386:function(t,e){function n(t){var e=this.__data__,n=e["delete"](t);return this.size=e.size,n}t.exports=n},"13cb":function(t,e,n){"use strict";n("806a")},1722:function(t,e,n){"use strict";n.d(e,"a",(function(){return p}));var r=n("7083"),o=n("98d3"),i=n("2cb5"),a=n("da25"),s=n("4fce"),c=n("e24b");function l({name:t,params:e,query:n},r){const o=Object(s["a"])({name:t,params:e,query:n});return"home"===r&&"home"===t||r===o}function u({name:t,query:e},n){return!(n!==a["i"]||!e.mode||e.mode!==a["i"])||(!(n!==a["g"]||!e.as||e.as!==a["g"])||(!(n!==a["h"]||!t.includes("-id"))||!(n!==a["k"]||t.includes("-id")||!t.includes("-resource"))))}function d(t,e,n){if(!Object.keys(e).length)return!0;const{params:r}=t,o=["product","resource","namespace","cluster","id","mode","queryParam","context"];let i=!0;for(let a=0;a{if(d(a,t.locationConfig,c||{})){if(e===r["c"].CARD)n===r["b"].CLUSTER_DASHBOARD_CARD&&t.labelKey&&(l[p].label=s.t(t.labelKey));else if(e===r["c"].ACTION&&(n===r["a"].TABLE&&(t.labelKey&&(l[p].label=s.t(t.labelKey)),l[p].bulkable=l[p].multiple||l[p].bulkable,l[p].action||(l[p].action="custom-table-action-"+Object(i["l"])(10).toLowerCase())),n===r["a"].HEADER&&t.shortcut))if("string"===typeof t.shortcut)l[p].shortcutLabel=()=>o["b"]?`(⌘-${t.shortcut.toUpperCase()})`:`(Ctrl-${t.shortcut.toUpperCase()})`,l[p].shortcutKey={windows:["ctrl",t.shortcut],mac:["meta",t.shortcut]};else if("object"===typeof t.shortcut&&!Array.isArray(t.shortcut)&&null!==t.shortcut){l[p].shortcutKey=t.shortcut;const e=o["b"]?l[p].shortcut.mac:l[p].shortcut.windows?l[p].shortcut.windows:[];let n="";e.forEach((t,r)=>{r`(${n})`}u.push(l[p])}})}return u}},"17c2":function(t,e,n){var r=n("2376");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("2d1d510e",r,!0,{sourceMap:!1,shadowMode:!1})},"18ae":function(t,e,n){"use strict";n("0c0f")},"1a93":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".manual-refresh[data-v-3b0138b8]{height:40px}.advanced-filter-group[data-v-3b0138b8]{position:relative;margin-left:10px}.advanced-filter-group .advanced-filter-container[data-v-3b0138b8]{position:absolute;top:38px;right:0;width:300px;border:1px solid var(--primary);background-color:var(--body-bg);padding:20px;z-index:2}.advanced-filter-group .advanced-filter-container .middle-block[data-v-3b0138b8]{display:flex;align-items:center;margin-top:20px}.advanced-filter-group .advanced-filter-container .middle-block span[data-v-3b0138b8]{margin-right:20px}.advanced-filter-group .advanced-filter-container .middle-block button[data-v-3b0138b8]{margin-left:20px}.advanced-filter-group .advanced-filter-container .bottom-block[data-v-3b0138b8]{display:flex;align-items:center;margin-top:40px;justify-content:space-between}.advanced-filters-applied[data-v-3b0138b8]{display:inline-flex;margin:0;padding:0;list-style:none;max-width:100%;flex-wrap:wrap;justify-content:flex-end}.advanced-filters-applied li[data-v-3b0138b8]{margin:0 20px 10px 0;padding:2px 5px;border:1px solid;display:flex;align-items:center;position:relative;height:20px}.advanced-filters-applied li[data-v-3b0138b8]:nth-child(4n+1){border-color:var(--success)}.advanced-filters-applied li:nth-child(4n+1) .bg[data-v-3b0138b8]{background-color:var(--success)}.advanced-filters-applied li[data-v-3b0138b8]:nth-child(4n+2){border-color:var(--warning)}.advanced-filters-applied li:nth-child(4n+2) .bg[data-v-3b0138b8]{background-color:var(--warning)}.advanced-filters-applied li[data-v-3b0138b8]:nth-child(4n+3){border-color:var(--info)}.advanced-filters-applied li:nth-child(4n+3) .bg[data-v-3b0138b8]{background-color:var(--info)}.advanced-filters-applied li[data-v-3b0138b8]:nth-child(4n+4){border-color:var(--error)}.advanced-filters-applied li:nth-child(4n+4) .bg[data-v-3b0138b8]{background-color:var(--error)}.advanced-filters-applied li .bg[data-v-3b0138b8]{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.2;z-index:-1}.advanced-filters-applied li .label[data-v-3b0138b8]{margin-right:10px;font-size:11px}.advanced-filters-applied li .cross[data-v-3b0138b8]{font-size:12px;font-weight:700;cursor:pointer}td .actions.role-multi-action[data-v-3b0138b8]{background-color:transparent;border:none}td .actions.role-multi-action[data-v-3b0138b8]:focus,td .actions.role-multi-action[data-v-3b0138b8]:hover{background-color:var(--accent-btn);box-shadow:none}@media only screen and (max-width:480px){td.desktop[data-v-3b0138b8],td.laptop[data-v-3b0138b8],td.tablet[data-v-3b0138b8]{display:none}}@media only screen and (max-width:992px){td.desktop[data-v-3b0138b8],td.laptop[data-v-3b0138b8]{display:none}}@media only screen and (max-width:1281px){td.desktop[data-v-3b0138b8]{display:none}}tr td div.data-loading[data-v-3b0138b8]{align-items:center;display:flex;justify-content:center;padding:20px 0}tr td div.data-loading>i[data-v-3b0138b8]{font-size:20px;height:20px;margin-right:5px;width:20px}.search-box[data-v-3b0138b8]{height:40px;margin-left:10px;min-width:180px}",""]),t.exports=e},"1ab6":function(t,e,n){(function(t){var r=n("201b"),o=e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o,s=a?r.Buffer:void 0,c=s?s.allocUnsafe:void 0;function l(t,e){if(e)return t.slice();var n=t.length,r=c?c(n):new t.constructor(n);return t.copy(r),r}t.exports=l}).call(this,n("6984")(t))},"1c25":function(t,e,n){"use strict";if(n.r(e),"undefined"!==typeof window){var r=window.document.currentScript,o=r&&r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);o&&(n.p=o[1])}function i(t){t.register("l10n","en-us",()=>n.e(2).then(n.t.bind(null,"1bb6",7)))}var a=function(){var t=this,e=t._self._c;return t.loading?e("Loading",{attrs:{label:t.$store.getters["i18n/t"]("appLauncher.loading")}}):e("div",{staticClass:"main-container"},[e("ClusterActions",{attrs:{"search-query":t.searchQuery,"is-grid-view":"grid"===t.selectedView,"selected-cluster":t.selectedCluster,"cluster-options":t.clusterOptions,"sort-order":t.tableHeaders[0].sortOrder},on:{"update:search-query":t.updateSearchQuery,"toggle-sort":t.toggleSortOrder,"update:selected-cluster":function(e){t.selectedCluster=e},"set-view":function(e){t.selectedView=e}}}),t.favoritedApps.length>0?e("div",[e("div",{staticClass:"cluster-header"},[e("h2",[t._v(t._s(t.t("appLauncher.globalApps")))])]),e("div",{staticClass:"services-by-cluster-grid"},t._l(t.sortedFavoritedApps,(function(n){return e("AppLauncherCard",{key:`${n.clusterId}-${n.id}-${n.kind}-fav`,attrs:{app:n,isInGlobalView:!0,"favorited-apps":t.favoritedApps},on:{"toggle-favorite":t.toggleFavorite}})})),1)]):t._e(),t.selectedCluster?e("div",["grid"===t.selectedView?e("div",t._l(t.displayedClusterData,(function(n){return e("div",{key:n.id},[e("ClusterGridView",{attrs:{"cluster-data":n,"favorited-apps":t.favoritedApps},on:{"toggle-favorite":t.toggleFavorite}})],1)})),0):"list"===t.selectedView?e("div",t._l(t.displayedClusterData,(function(n){return e("div",{key:n.id},[e("ClusterListView",{attrs:{"cluster-data":n,"favorited-apps":t.favoritedApps,"table-headers":t.tableHeaders},on:{"toggle-favorite":t.toggleFavorite}})],1)})),0):t._e()]):e("div",[e("p",[t._v(t._s(t.$store.getters["i18n/t"]("appLauncher.noClusterSelected")))])])],1)},s=[],c=n("907c"),l=function(){var t=this,e=t._self._c;return t.loading?e("div",{staticClass:"loading-indicator"},[t.showMessage?e("div",{staticClass:"overlay",class:{"overlay-content-mode":"content"===t.mode,"overlay-main-mode":"main"===t.mode}},[e("t",{attrs:{k:"generic.loading",raw:!0}})],1):t._e()]):e("div",[t._t("default")],2)},u=[],d={props:{loading:{type:Boolean,default:!0},mode:{type:String,default:"content"},noDelay:{type:Boolean,default:!1}},data(){return{timer:null,showMessage:this.noDelay}},mounted(){this.timer=setTimeout(()=>{this.showMessage=!0},250)},beforeDestroy(){clearTimeout(this.timer)}},p=d,f=(n("c6c1"),n("d802")),h=Object(f["a"])(p,l,u,!1,null,"e765d1f4",null),v=h.exports,b=function(){var t=this,e=t._self._c;return t.app?e("Card",{staticClass:"app-launcher-card",attrs:{"show-highlight-border":!1,sticky:!0},scopedSlots:t._u([{key:"title",fn:function(){var n,r,o,i,a;return[e("div",{staticStyle:{width:"100%"}},[e("p",{staticStyle:{"font-size":"1.2rem"}},[t._v(" "+t._s(null===(n=t.app.metadata)||void 0===n?void 0:n.name)+" ")]),e("div",{staticStyle:{color:"var(--input-label)",display:"flex","justify-content":"space-between","margin-top":"4px"}},["Service"===t.app.kind&&void 0!==(null===(r=t.app.metadata)||void 0===r||null===(o=r.labels)||void 0===o?void 0:o["app.kubernetes.io/version"])?e("p",[t._v(" "+t._s(t.kubernetesVersion)+" ")]):t._e(),"Service"===t.app.kind&&void 0!==(null===(i=t.app.metadata)||void 0===i||null===(a=i.labels)||void 0===a?void 0:a["helm.sh/chart"])?e("p",[t._v(" "+t._s(t.helmChart)+" ")]):t._e(),"Ingress"===t.app.kind?e("p",[t._v(" Ingress ")]):t._e()])])]},proxy:!0},{key:"body",fn:function(){return["Service"===t.app.kind?e("p",[t._v(" "+t._s((t.isGlobalApp||t.isFavorited)&&t.isInGlobalView?t.app.clusterName+"/":"")+t._s(t.namespace)+"/"+t._s(t.name)+" ")]):t._e(),"Ingress"===t.app.kind?e("p",[t._v(" "+t._s((t.isGlobalApp||t.isFavorited)&&t.isInGlobalView?t.app.clusterName+": ":"")+t._s(t.ingressPath)+" ")]):t._e()]},proxy:!0},{key:"actions",fn:function(){var n,r,o,i,a;return[t.isGlobalApp?e("i",{staticClass:"icon icon-globe icon-only"}):e("button",{staticClass:"icon-button",on:{click:t.toggleFavorite}},[e("i",{class:["icon",t.isFavorited?"icon-star":"icon-star-open"]})]),(null!==(n=null===(r=t.endpoints)||void 0===r?void 0:r.length)&&void 0!==n?n:0)<=1&&"Service"===t.app.kind?e("a",{staticClass:"btn role-primary",attrs:{disabled:!(null!==(o=t.endpoints)&&void 0!==o&&o.length),href:null===(i=t.endpoints[0])||void 0===i?void 0:i.value,target:"_blank",rel:"noopener noreferrer nofollow",title:0===(null===(a=t.endpoints)||void 0===a?void 0:a.length)?t.t("appLauncher.noEndpointFoundForApp"):t.t("appLauncher.launchEndpoint",{endpoint:t.endpoints[0].label})}},[t._v(" "+t._s(t.t("appLauncher.launch"))+" ")]):"Ingress"===t.app.kind?e("a",{staticClass:"btn role-primary",attrs:{href:t.ingressPath,target:"_blank",rel:"noopener noreferrer nofollow"}},[t._v(" "+t._s(t.t("appLauncher.launch"))+" ")]):e("ButtonDropDown",{attrs:{"button-label":t.t("appLauncher.launch"),"dropdown-options":t.endpoints,title:t.t("appLauncher.launchAnEndpointFromSelection")},on:{"click-action":e=>t.openLink(e.value)}})]},proxy:!0}],null,!1,345375573)}):t._e()},g=[],m=function(){var t=this,e=t._self._c;t._self._setupProxy;return e("div",{staticClass:"card-container",class:{"highlight-border":t.showHighlightBorder,"card-sticky":t.sticky},attrs:{"data-testid":"card"}},[e("div",{staticClass:"card-wrap"},[e("div",{staticClass:"card-title",attrs:{"data-testid":"card-title-slot"}},[t._t("title",(function(){return[t._v(" "+t._s(t.title)+" ")]}))],2),e("hr"),e("div",{staticClass:"card-body",attrs:{"data-testid":"card-body-slot"}},[t._t("body",(function(){return[t._v(" "+t._s(t.content)+" ")]}))],2),t.showActions?e("div",{staticClass:"card-actions",attrs:{"data-testid":"card-actions-slot"}},[t._t("actions",(function(){return[e("button",{staticClass:"btn role-primary",on:{click:t.buttonAction}},[t._v(" "+t._s(t.buttonText)+" ")])]}))],2):t._e()])])},y=[],w=n("8bbf"),_=n.n(w),x=_.a.extend({name:"Card",props:{title:{type:String,default:""},content:{type:String,default:""},buttonAction:{type:Function,default:()=>{}},buttonText:{type:String,default:"go"},showHighlightBorder:{type:Boolean,default:!0},showActions:{type:Boolean,default:!0},sticky:{type:Boolean,default:!1}}}),O=x,k=(n("5622"),Object(f["a"])(O,m,y,!1,null,null,null)),A=k.exports,E=function(){var t=this,e=t._self._c;return e("v-select",t._b({ref:"button-dropdown",staticClass:"button-dropdown btn",class:{disabled:t.disabled,focused:t.focused},attrs:{"append-to-body":!0,"calculate-position":t.withPopper,searchable:!1,clearable:!1,"close-on-select":t.closeOnSelect,filterable:!1,value:t.buttonLabel,options:t.dropdownOptions,"map-keydown":t.mappedKeys,"get-option-key":e=>t.optionKey?t.get(e,t.optionKey):t.getOptionLabel(e),"get-option-label":e=>t.getOptionLabel(e),selectable:t.selectable},on:{"search:blur":t.onBlur,"search:focus":t.onFocus,input:function(e){return t.$emit("click-action",e)}},scopedSlots:t._u([{key:"selected-option",fn:function(n){return[e("button",{staticClass:"dropdown-button-two btn",attrs:{tabindex:"-1",type:"button"},on:{click:function(e){return t.ddButtonAction(n)},focus:t.focusSearch}},[t._v(" "+t._s(n.label)+" ")])]}},t._l(t.$scopedSlots,(function(e,n){return{key:n,fn:function(e){return["selected-option"!==n?t._t(n,null,null,e):t._e()]}}}))],null,!0)},"v-select",t.$attrs,!1),[e("template",{slot:"no-options"},[t._t("no-options")],2)],2)},S=[];function C(t){var e=t.getBoundingClientRect();return{width:e.width,height:e.height,top:e.top,right:e.right,bottom:e.bottom,left:e.left,x:e.left,y:e.top}}function T(t){if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e?e.defaultView:window}return t}function R(t){var e=T(t),n=e.pageXOffset,r=e.pageYOffset;return{scrollLeft:n,scrollTop:r}}function I(t){var e=T(t).Element;return t instanceof e||t instanceof Element}function L(t){var e=T(t).HTMLElement;return t instanceof e||t instanceof HTMLElement}function j(t){return{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function N(t){return t!==T(t)&&L(t)?j(t):R(t)}function D(t){return t?(t.nodeName||"").toLowerCase():null}function P(t){return(I(t)?t.ownerDocument:t.document).documentElement}function $(t){return C(P(t)).left+R(t).scrollLeft}function M(t){return T(t).getComputedStyle(t)}function F(t){var e=M(t),n=e.overflow,r=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function B(t,e,n){void 0===n&&(n=!1);var r=P(e),o=C(t),i=L(e),a={scrollLeft:0,scrollTop:0},s={x:0,y:0};return(i||!i&&!n)&&(("body"!==D(e)||F(r))&&(a=N(e)),L(e)?(s=C(e),s.x+=e.clientLeft,s.y+=e.clientTop):r&&(s.x=$(r))),{x:o.left+a.scrollLeft-s.x,y:o.top+a.scrollTop-s.y,width:o.width,height:o.height}}function U(t){return{x:t.offsetLeft,y:t.offsetTop,width:t.offsetWidth,height:t.offsetHeight}}function G(t){return"html"===D(t)?t:t.assignedSlot||t.parentNode||t.host||P(t)}function H(t){return["html","body","#document"].indexOf(D(t))>=0?t.ownerDocument.body:L(t)&&F(t)?t:H(G(t))}function V(t,e){void 0===e&&(e=[]);var n=H(t),r="body"===D(n),o=T(n),i=r?[o].concat(o.visualViewport||[],F(n)?n:[]):n,a=e.concat(i);return r?a:a.concat(V(G(i)))}function q(t){return["table","td","th"].indexOf(D(t))>=0}function z(t){if(!L(t)||"fixed"===M(t).position)return null;var e=t.offsetParent;if(e){var n=P(e);if("body"===D(e)&&"static"===M(e).position&&"static"!==M(n).position)return n}return e}function K(t){var e=G(t);while(L(e)&&["html","body"].indexOf(D(e))<0){var n=M(e);if("none"!==n.transform||"none"!==n.perspective||n.willChange&&"auto"!==n.willChange)return e;e=e.parentNode}return null}function W(t){var e=T(t),n=z(t);while(n&&q(n)&&"static"===M(n).position)n=z(n);return n&&"body"===D(n)&&"static"===M(n).position?e:n||K(t)||e}var X="top",Y="bottom",J="right",Q="left",Z="auto",tt=[X,Y,J,Q],et="start",nt="end",rt="clippingParents",ot="viewport",it="popper",at="reference",st=tt.reduce((function(t,e){return t.concat([e+"-"+et,e+"-"+nt])}),[]),ct=[].concat(tt,[Z]).reduce((function(t,e){return t.concat([e,e+"-"+et,e+"-"+nt])}),[]),lt="beforeRead",ut="read",dt="afterRead",pt="beforeMain",ft="main",ht="afterMain",vt="beforeWrite",bt="write",gt="afterWrite",mt=[lt,ut,dt,pt,ft,ht,vt,bt,gt];function yt(t){var e=new Map,n=new Set,r=[];function o(t){n.add(t.name);var i=[].concat(t.requires||[],t.requiresIfExists||[]);i.forEach((function(t){if(!n.has(t)){var r=e.get(t);r&&o(r)}})),r.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){n.has(t.name)||o(t)})),r}function wt(t){var e=yt(t);return mt.reduce((function(t,n){return t.concat(e.filter((function(t){return t.phase===n})))}),[])}function _t(t){var e;return function(){return e||(e=new Promise((function(n){Promise.resolve().then((function(){e=void 0,n(t())}))}))),e}}function xt(t){var e=t.reduce((function(t,e){var n=t[e.name];return t[e.name]=n?Object.assign(Object.assign(Object.assign({},n),e),{},{options:Object.assign(Object.assign({},n.options),e.options),data:Object.assign(Object.assign({},n.data),e.data)}):e,t}),{});return Object.keys(e).map((function(t){return e[t]}))}var Ot={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),n=0;n=0?"x":"y"}function Lt(t){var e,n=t.reference,r=t.element,o=t.placement,i=o?Tt(o):null,a=o?Rt(o):null,s=n.x+n.width/2-r.width/2,c=n.y+n.height/2-r.height/2;switch(i){case X:e={x:s,y:n.y-r.height};break;case Y:e={x:s,y:n.y+n.height};break;case J:e={x:n.x+n.width,y:c};break;case Q:e={x:n.x-r.width,y:c};break;default:e={x:n.x,y:n.y}}var l=i?It(i):null;if(null!=l){var u="y"===l?"height":"width";switch(a){case et:e[l]=Math.floor(e[l])-Math.floor(n[u]/2-r[u]/2);break;case nt:e[l]=Math.floor(e[l])+Math.ceil(n[u]/2-r[u]/2);break;default:}}return e}function jt(t){var e=t.state,n=t.name;e.modifiersData[n]=Lt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}var Nt={name:"popperOffsets",enabled:!0,phase:"read",fn:jt,data:{}},Dt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Pt(t){var e=t.x,n=t.y,r=window,o=r.devicePixelRatio||1;return{x:Math.round(e*o)/o||0,y:Math.round(n*o)/o||0}}function $t(t){var e,n=t.popper,r=t.popperRect,o=t.placement,i=t.offsets,a=t.position,s=t.gpuAcceleration,c=t.adaptive,l=Pt(i),u=l.x,d=l.y,p=i.hasOwnProperty("x"),f=i.hasOwnProperty("y"),h=Q,v=X,b=window;if(c){var g=W(n);g===T(n)&&(g=P(n)),o===X&&(v=Y,d-=g.clientHeight-r.height,d*=s?1:-1),o===Q&&(h=J,u-=g.clientWidth-r.width,u*=s?1:-1)}var m,y=Object.assign({position:a},c&&Dt);return s?Object.assign(Object.assign({},y),{},(m={},m[v]=f?"0":"",m[h]=p?"0":"",m.transform=(b.devicePixelRatio||1)<2?"translate("+u+"px, "+d+"px)":"translate3d("+u+"px, "+d+"px, 0)",m)):Object.assign(Object.assign({},y),{},(e={},e[v]=f?d+"px":"",e[h]=p?u+"px":"",e.transform="",e))}function Mt(t){var e=t.state,n=t.options,r=n.gpuAcceleration,o=void 0===r||r,i=n.adaptive,a=void 0===i||i,s={placement:Tt(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign(Object.assign({},e.styles.popper),$t(Object.assign(Object.assign({},s),{},{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:a})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign(Object.assign({},e.styles.arrow),$t(Object.assign(Object.assign({},s),{},{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1})))),e.attributes.popper=Object.assign(Object.assign({},e.attributes.popper),{},{"data-popper-placement":e.placement})}var Ft={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Mt,data:{}};function Bt(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var n=e.styles[t]||{},r=e.attributes[t]||{},o=e.elements[t];L(o)&&D(o)&&(Object.assign(o.style,n),Object.keys(r).forEach((function(t){var e=r[t];!1===e?o.removeAttribute(t):o.setAttribute(t,!0===e?"":e)})))}))}function Ut(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach((function(t){var r=e.elements[t],o=e.attributes[t]||{},i=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:n[t]),a=i.reduce((function(t,e){return t[e]="",t}),{});L(r)&&D(r)&&(Object.assign(r.style,a),Object.keys(o).forEach((function(t){r.removeAttribute(t)})))}))}}var Gt={name:"applyStyles",enabled:!0,phase:"write",fn:Bt,effect:Ut,requires:["computeStyles"]};function Ht(t,e,n){var r=Tt(t),o=[Q,X].indexOf(r)>=0?-1:1,i="function"===typeof n?n(Object.assign(Object.assign({},e),{},{placement:t})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[Q,J].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}function Vt(t){var e=t.state,n=t.options,r=t.name,o=n.offset,i=void 0===o?[0,0]:o,a=ct.reduce((function(t,n){return t[n]=Ht(n,e.rects,i),t}),{}),s=a[e.placement],c=s.x,l=s.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=c,e.modifiersData.popperOffsets.y+=l),e.modifiersData[r]=a}var qt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Vt},zt={left:"right",right:"left",bottom:"top",top:"bottom"};function Kt(t){return t.replace(/left|right|bottom|top/g,(function(t){return zt[t]}))}var Wt={start:"end",end:"start"};function Xt(t){return t.replace(/start|end/g,(function(t){return Wt[t]}))}function Yt(t){var e=T(t),n=P(t),r=e.visualViewport,o=n.clientWidth,i=n.clientHeight,a=0,s=0;return r&&(o=r.width,i=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(a=r.offsetLeft,s=r.offsetTop)),{width:o,height:i,x:a+$(t),y:s}}function Jt(t){var e=P(t),n=R(t),r=t.ownerDocument.body,o=Math.max(e.scrollWidth,e.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),i=Math.max(e.scrollHeight,e.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),a=-n.scrollLeft+$(t),s=-n.scrollTop;return"rtl"===M(r||e).direction&&(a+=Math.max(e.clientWidth,r?r.clientWidth:0)-o),{width:o,height:i,x:a,y:s}}function Qt(t,e){var n=Boolean(e.getRootNode&&e.getRootNode().host);if(t.contains(e))return!0;if(n){var r=e;do{if(r&&t.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function Zt(t){return Object.assign(Object.assign({},t),{},{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function te(t){var e=C(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}function ee(t,e){return e===ot?Zt(Yt(t)):L(e)?te(e):Zt(Jt(P(t)))}function ne(t){var e=V(G(t)),n=["absolute","fixed"].indexOf(M(t).position)>=0,r=n&&L(t)?W(t):t;return I(r)?e.filter((function(t){return I(t)&&Qt(t,r)&&"body"!==D(t)})):[]}function re(t,e,n){var r="clippingParents"===e?ne(t):[].concat(e),o=[].concat(r,[n]),i=o[0],a=o.reduce((function(e,n){var r=ee(t,n);return e.top=Math.max(r.top,e.top),e.right=Math.min(r.right,e.right),e.bottom=Math.min(r.bottom,e.bottom),e.left=Math.max(r.left,e.left),e}),ee(t,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function oe(){return{top:0,right:0,bottom:0,left:0}}function ie(t){return Object.assign(Object.assign({},oe()),t)}function ae(t,e){return e.reduce((function(e,n){return e[n]=t,e}),{})}function se(t,e){void 0===e&&(e={});var n=e,r=n.placement,o=void 0===r?t.placement:r,i=n.boundary,a=void 0===i?rt:i,s=n.rootBoundary,c=void 0===s?ot:s,l=n.elementContext,u=void 0===l?it:l,d=n.altBoundary,p=void 0!==d&&d,f=n.padding,h=void 0===f?0:f,v=ie("number"!==typeof h?h:ae(h,tt)),b=u===it?at:it,g=t.elements.reference,m=t.rects.popper,y=t.elements[p?b:u],w=re(I(y)?y:y.contextElement||P(t.elements.popper),a,c),_=C(g),x=Lt({reference:_,element:m,strategy:"absolute",placement:o}),O=Zt(Object.assign(Object.assign({},m),x)),k=u===it?O:_,A={top:w.top-k.top+v.top,bottom:k.bottom-w.bottom+v.bottom,left:w.left-k.left+v.left,right:k.right-w.right+v.right},E=t.modifiersData.offset;if(u===it&&E){var S=E[o];Object.keys(A).forEach((function(t){var e=[J,Y].indexOf(t)>=0?1:-1,n=[X,Y].indexOf(t)>=0?"y":"x";A[t]+=S[n]*e}))}return A}function ce(t,e){void 0===e&&(e={});var n=e,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,c=n.allowedAutoPlacements,l=void 0===c?ct:c,u=Rt(r),d=u?s?st:st.filter((function(t){return Rt(t)===u})):tt,p=d.filter((function(t){return l.indexOf(t)>=0}));0===p.length&&(p=d);var f=p.reduce((function(e,n){return e[n]=se(t,{placement:n,boundary:o,rootBoundary:i,padding:a})[Tt(n)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}function le(t){if(Tt(t)===Z)return[];var e=Kt(t);return[Xt(t),e,Xt(e)]}function ue(t){var e=t.state,n=t.options,r=t.name;if(!e.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,c=n.fallbackPlacements,l=n.padding,u=n.boundary,d=n.rootBoundary,p=n.altBoundary,f=n.flipVariations,h=void 0===f||f,v=n.allowedAutoPlacements,b=e.options.placement,g=Tt(b),m=g===b,y=c||(m||!h?[Kt(b)]:le(b)),w=[b].concat(y).reduce((function(t,n){return t.concat(Tt(n)===Z?ce(e,{placement:n,boundary:u,rootBoundary:d,padding:l,flipVariations:h,allowedAutoPlacements:v}):n)}),[]),_=e.rects.reference,x=e.rects.popper,O=new Map,k=!0,A=w[0],E=0;E=0,I=R?"width":"height",L=se(e,{placement:S,boundary:u,rootBoundary:d,altBoundary:p,padding:l}),j=R?T?J:Q:T?Y:X;_[I]>x[I]&&(j=Kt(j));var N=Kt(j),D=[];if(i&&D.push(L[C]<=0),s&&D.push(L[j]<=0,L[N]<=0),D.every((function(t){return t}))){A=S,k=!1;break}O.set(S,D)}if(k)for(var P=h?3:1,$=function(t){var e=w.find((function(e){var n=O.get(e);if(n)return n.slice(0,t).every((function(t){return t}))}));if(e)return A=e,"break"},M=P;M>0;M--){var F=$(M);if("break"===F)break}e.placement!==A&&(e.modifiersData[r]._skip=!0,e.placement=A,e.reset=!0)}}var de={name:"flip",enabled:!0,phase:"main",fn:ue,requiresIfExists:["offset"],data:{_skip:!1}};function pe(t){return"x"===t?"y":"x"}function fe(t,e,n){return Math.max(t,Math.min(e,n))}function he(t){var e=t.state,n=t.options,r=t.name,o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0!==a&&a,c=n.boundary,l=n.rootBoundary,u=n.altBoundary,d=n.padding,p=n.tether,f=void 0===p||p,h=n.tetherOffset,v=void 0===h?0:h,b=se(e,{boundary:c,rootBoundary:l,padding:d,altBoundary:u}),g=Tt(e.placement),m=Rt(e.placement),y=!m,w=It(g),_=pe(w),x=e.modifiersData.popperOffsets,O=e.rects.reference,k=e.rects.popper,A="function"===typeof v?v(Object.assign(Object.assign({},e.rects),{},{placement:e.placement})):v,E={x:0,y:0};if(x){if(i){var S="y"===w?X:Q,C="y"===w?Y:J,T="y"===w?"height":"width",R=x[w],I=x[w]+b[S],L=x[w]-b[C],j=f?-k[T]/2:0,N=m===et?O[T]:k[T],D=m===et?-k[T]:-O[T],P=e.elements.arrow,$=f&&P?U(P):{width:0,height:0},M=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:oe(),F=M[S],B=M[C],G=fe(0,O[T],$[T]),H=y?O[T]/2-j-G-F-A:N-G-F-A,V=y?-O[T]/2+j+G+B+A:D+G+B+A,q=e.elements.arrow&&W(e.elements.arrow),z=q?"y"===w?q.clientTop||0:q.clientLeft||0:0,K=e.modifiersData.offset?e.modifiersData.offset[e.placement][w]:0,Z=x[w]+H-K-z,tt=x[w]+V-K,nt=fe(f?Math.min(I,Z):I,R,f?Math.max(L,tt):L);x[w]=nt,E[w]=nt-R}if(s){var rt="x"===w?X:Q,ot="x"===w?Y:J,it=x[_],at=it+b[rt],st=it-b[ot],ct=fe(at,it,st);x[_]=ct,E[_]=ct-it}e.modifiersData[r]=E}}var ve={name:"preventOverflow",enabled:!0,phase:"main",fn:he,requiresIfExists:["offset"]};function be(t){var e,n=t.state,r=t.name,o=n.elements.arrow,i=n.modifiersData.popperOffsets,a=Tt(n.placement),s=It(a),c=[Q,J].indexOf(a)>=0,l=c?"height":"width";if(o&&i){var u=n.modifiersData[r+"#persistent"].padding,d=U(o),p="y"===s?X:Q,f="y"===s?Y:J,h=n.rects.reference[l]+n.rects.reference[s]-i[s]-n.rects.popper[l],v=i[s]-n.rects.reference[s],b=W(o),g=b?"y"===s?b.clientHeight||0:b.clientWidth||0:0,m=h/2-v/2,y=u[p],w=g-d[l]-u[f],_=g/2-d[l]/2+m,x=fe(y,_,w),O=s;n.modifiersData[r]=(e={},e[O]=x,e.centerOffset=x-_,e)}}function ge(t){var e=t.state,n=t.options,r=t.name,o=n.element,i=void 0===o?"[data-popper-arrow]":o,a=n.padding,s=void 0===a?0:a;null!=i&&("string"!==typeof i||(i=e.elements.popper.querySelector(i),i))&&Qt(e.elements.popper,i)&&(e.elements.arrow=i,e.modifiersData[r+"#persistent"]={padding:ie("number"!==typeof s?s:ae(s,tt))})}var me={name:"arrow",enabled:!0,phase:"main",fn:be,effect:ge,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ye(t,e,n){return void 0===n&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function we(t){return[X,J,Y,Q].some((function(e){return t[e]>=0}))}function _e(t){var e=t.state,n=t.name,r=e.rects.reference,o=e.rects.popper,i=e.modifiersData.preventOverflow,a=se(e,{elementContext:"reference"}),s=se(e,{altBoundary:!0}),c=ye(a,r),l=ye(s,o,i),u=we(c),d=we(l);e.modifiersData[n]={referenceClippingOffsets:c,popperEscapeOffsets:l,isReferenceHidden:u,hasPopperEscaped:d},e.attributes.popper=Object.assign(Object.assign({},e.attributes.popper),{},{"data-popper-reference-hidden":u,"data-popper-escaped":d})}var xe={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:_e},Oe=[Ct,Nt,Ft,Gt,qt,de,ve,me,xe],ke=At({defaultModifiers:Oe}),Ae=n("e24b"),Ee=n("9c38"),Se=n.n(Ee),Ce=n("9f16"),Te={mixins:[Ce["a"]],props:{buttonLabel:{default:"",type:String},closeOnSelect:{default:!0,type:Boolean},disabled:{default:!1,type:Boolean},dropdownOptions:{default:()=>[],type:Array},optionKey:{default:null,type:String},optionLabel:{default:"label",type:String},size:{default:null,type:String},value:{default:null,type:String},placement:{default:"bottom-start",type:String},selectable:{default:t=>!t||!t.disabled&&"group"!==t.kind&&"divider"!==t.kind&&!t.loading,type:Function}},data(){return{focused:!1}},methods:{withPopper(t,e,{width:n}){const r=e.$refs.search.clientWidth,o=t.clientWidth;t.style.width=oi.destroy()},ddButtonAction(t){this.focusSearch(),this.$emit("dd-button-action",t)},getOptionLabel(t){return Se()(t)?t:this.$attrs["get-option-label"]?this.$attrs["get-option-label"](t):Object(Ae["f"])(t,this.optionLabel)?this.localizedLabel?this.$store.getters["i18n/t"](Object(Ae["f"])(t,this.optionLabel)):Object(Ae["f"])(t,this.optionLabel):t},onFocus(){return this.onFocusLabeled()},onFocusLabeled(){this.focused=!0},onBlur(){return this.onBlurLabeled()},onBlurLabeled(){this.focused=!1},focusSearch(){this.$nextTick(()=>{const t=this.$refs["button-dropdown"].searchEl;t&&t.focus()})},get:Ae["f"]}},Re=Te,Ie=(n("47be"),Object(f["a"])(Re,E,S,!1,null,"4b526572",null)),Le=Ie.exports;function je(t,e){const n=e.toLowerCase();return Ne([t],[443,8443],["443"])||"https"===n}function Ne(t,e,n){for(let r=0;r(n&&(r[e.q.name][n]=o),"")),r}De.options={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","queryStr","anchor"],q:{name:"query",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};n("b10f"),n("330a");var Pe=n("640c");function $e(t){const e=t.tls||[];return e.flatMap(t=>t.hosts||[])}function Me(t,e){return $e(t).includes(e)}function Fe(t,e,n={}){const r=t.spec,o=e.host||"",i=n.path||"";let a="";return o&&(a=Me(r,o)?"https://":"http://"),`${a}${o}${i}`}Pe["a"];var Be={components:{Card:A,ButtonDropDown:Le},props:{favoritedApps:{type:Array,required:!0},app:{type:Object,default:null},isInGlobalView:{type:Boolean,default:!1}},methods:{openLink(t){window.open(t)},toggleFavorite(){this.$emit("toggle-favorite",this.app)}},computed:{endpoints(){var t,e,n,r;return null!==(t=null===(e=this.app)||void 0===e||null===(n=e.spec)||void 0===n||null===(r=n.ports)||void 0===r?void 0:r.map(t=>{var e;const n=`${je(t.port,t.protocol)?"https":"http"}:${null===(e=this.app.metadata)||void 0===e?void 0:e.name}:${t.port}`;return{label:`${n}${"UDP"===t.protocol?" (UDP)":""}`,value:`/k8s/clusters/${this.app.clusterId}/api/v1/namespaces/${this.app.metadata.namespace}/services/${n}/proxy`}}))&&void 0!==t?t:[]},computedServiceName(){var t,e,n,r,o,i;return null!==(t=null===(e=this.app)||void 0===e||null===(n=e.metadata)||void 0===n||null===(r=n.labels)||void 0===r?void 0:r["app.kubernetes.io/component"])&&void 0!==t?t:null===(o=this.app)||void 0===o||null===(i=o.metadata)||void 0===i?void 0:i.name},helmChart(){var t,e,n;return null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e||null===(n=e.labels)||void 0===n?void 0:n["helm.sh/chart"]},kubernetesVersion(){var t,e,n;return null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e||null===(n=e.labels)||void 0===n?void 0:n["app.kubernetes.io/version"]},name(){var t,e;return null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e?void 0:e.name},namespace(){var t,e;return null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e?void 0:e.namespace},isFavorited(){return this.favoritedApps.some(t=>(null===t||void 0===t?void 0:t.id)===this.app.id&&(null===t||void 0===t?void 0:t.kind)===this.app.kind)},isGlobalApp(){var t,e,n;return"true"===(null===(t=this.app)||void 0===t||null===(e=t.metadata)||void 0===e||null===(n=e.annotations)||void 0===n?void 0:n["extensions.applauncher/global-app"])},ingressPath(){var t,e,n;return Fe(this.app,null===(t=this.app)||void 0===t||null===(e=t.spec)||void 0===e||null===(n=e.rules)||void 0===n?void 0:n[0])}},name:"AppLauncherCard",layout:"plain"},Ue=Be,Ge=(n("ba48"),Object(f["a"])(Ue,b,g,!1,null,"862d5938",null)),He=Ge.exports,Ve=function(){var t=this,e=t._self._c;return e("div",{staticClass:"cluster-actions"},[e("div",{staticClass:"search-input"},[e("input",{attrs:{placeholder:t.$store.getters["i18n/t"]("appLauncher.filter")},domProps:{value:t.searchQuery},on:{input:function(e){return t.$emit("update:search-query",e.target.value)}}})]),t.isGridView?e("div",{staticClass:"sort-buttons",on:{click:function(e){return t.$emit("toggle-sort")}}},[e("div",{staticClass:"sort-button",class:{active:"asc"===t.sortOrder},attrs:{disabled:"asc"===t.sortOrder}},[e("i",{staticClass:"icon-chevron-up"})]),e("div",{staticClass:"sort-label"},[e("p",[t._v(t._s(t.aToZorZtoA))])]),e("div",{staticClass:"sort-button",class:{active:"desc"===t.sortOrder},attrs:{disabled:"desc"===t.sortOrder}},[e("i",{staticClass:"icon-chevron-down"})])]):t._e(),e("div",{staticClass:"select-wrapper"},[e("select",{staticClass:"cluster-select",domProps:{value:t.selectedCluster},on:{change:function(e){return t.$emit("update:selected-cluster",e.target.value)}}},t._l(t.clusterOptions,(function(n){return e("option",{key:n.value,domProps:{value:n.value}},[t._v(" "+t._s(n.label)+" ")])})),0)]),e("button",{staticClass:"icon-button",on:{click:function(e){return t.$emit("set-view","grid")}}},[e("i",{staticClass:"icon icon-apps"})]),e("button",{staticClass:"icon-button",on:{click:function(e){return t.$emit("set-view","list")}}},[e("i",{staticClass:"icon icon-list-flat"})])])},qe=[],ze={name:"ClusterActions",props:{searchQuery:{type:String,required:!0},isGridView:{type:Boolean,required:!0},sortOrder:{type:String,required:!0},selectedCluster:{type:String,required:!0},clusterOptions:{type:Array,required:!0}},computed:{aToZorZtoA(){return console.log(this.$store.getters["i18n/t"]("appLauncher.aToZ")),"asc"===this.sortOrder?this.$store.getters["i18n/t"]("appLauncher.aToZ"):this.$store.getters["i18n/t"]("appLauncher.zToA")}},emits:["update:search-query","toggle-sort","update:selected-cluster","set-view"]},Ke=ze,We=(n("01fc"),Object(f["a"])(Ke,Ve,qe,!1,null,"88f0655a",null)),Xe=We.exports,Ye=function(){var t=this,e=t._self._c;return e("div",{staticClass:"cluster-grid-view"},[e("div",{staticClass:"cluster-header"},[e("h1",[t._v(" "+t._s(t.clusterData.name)+" ")])]),e("div",{staticClass:"services-by-cluster-grid"},t._l(t.clusterData.filteredApps,(function(n){return e("AppLauncherCard",{key:`${n.clusterId}-${n.id}-${n.kind}`,attrs:{app:n,isInGlobalView:!1,"favorited-apps":t.favoritedApps},on:{"toggle-favorite":function(e){return t.$emit("toggle-favorite",e)}}})})),1)])},Je=[],Qe={name:"ClusterGridView",components:{AppLauncherCard:He},props:{clusterData:{type:Object,required:!0},favoritedApps:{type:Array,required:!0}},emits:["toggle-favorite"]},Ze=Qe,tn=(n("11fb"),Object(f["a"])(Ze,Ye,Je,!1,null,"1dd06ec8",null)),en=tn.exports,nn=function(){var t=this,e=t._self._c;return e("div",{staticClass:"cluster-list-view"},[e("div",{staticClass:"cluster-header"},[e("h1",[t._v(" "+t._s(t.clusterData.name)+" ")])]),e("SortableTable",{attrs:{rows:t.clusterData.filteredApps,headers:t.tableHeaders,"row-key":"uniqueId",search:!1,"table-actions":!1,"row-actions":!1,"no-rows-text":t.$store.getters["i18n/t"]("appLauncher.noAppsFound")},scopedSlots:t._u([{key:"cell:name",fn:function({row:e}){return[t._v(" "+t._s(e.metadata.name)+" ")]}},{key:"cell:namespace",fn:function({row:e}){return[t._v(" "+t._s(e.metadata.namespace)+" ")]}},{key:"cell:version",fn:function({row:e}){var n;return[t._v(" "+t._s(null===(n=e.metadata.labels)||void 0===n?void 0:n["app.kubernetes.io/version"])+" ")]}},{key:"cell:helmChart",fn:function({row:e}){var n;return[t._v(" "+t._s(null===(n=e.metadata.labels)||void 0===n?void 0:n["helm.sh/chart"])+" ")]}},{key:"cell:actions",fn:function({row:n}){var r,o;return[e("div",{staticStyle:{display:"flex","justify-content":"flex-end"}},[e("button",{staticClass:"icon-button favorite-icon",on:{click:function(e){return t.$emit("toggle-favorite",n)}}},[e("i",{class:["icon",t.isFavorited(n,t.favoritedApps)?"icon-star":"icon-star-open"]})]),(null===(r=t.getEndpoints(n))||void 0===r?void 0:r.length)<=1?e("a",{staticClass:"btn role-primary",attrs:{href:null===(o=t.getEndpoints(n)[0])||void 0===o?void 0:o.value,target:"_blank",rel:"noopener noreferrer nofollow"}},[t._v(" "+t._s(t.t("appLauncher.launch"))+" ")]):e("ButtonDropDown",{attrs:{"button-label":t.t("appLauncher.launch"),"dropdown-options":t.getEndpoints(n),title:t.t("appLauncher.launchAnEndpointFromSelection")},on:{"click-action":t.openLink}})],1)]}}])})],1)},rn=[],on=n("0fb1"),an={name:"ClusterListView",components:{SortableTable:on["b"],ButtonDropDown:Le},props:{clusterData:{type:Object,required:!0},favoritedApps:{type:Array,required:!0},tableHeaders:{type:Array,required:!0}},methods:{isFavorited(t,e){return e.some(e=>e.id===t.id&&e.kind===t.kind)},getEndpoints(t){var e,n;return null!==(e=null===t||void 0===t||null===(n=t.spec.ports)||void 0===n?void 0:n.map(e=>{const n=`${je(e.port,e.protocol)?"https":"http"}:${t.metadata.name}:${e.port}`;return{label:`${n}${"UDP"===e.protocol?" (UDP)":""}`,value:`/k8s/clusters/${t.clusterId}/api/v1/namespaces/${t.metadata.namespace}/services/${n}/proxy`}}))&&void 0!==e?e:[]},openLink(t){window.open(t.value,"_blank")}},emits:["toggle-favorite"]},sn=an,cn=(n("8ccc"),Object(f["a"])(sn,nn,rn,!1,null,"56771e1c",null)),ln=cn.exports,un={components:{Loading:v,AppLauncherCard:He,ClusterActions:Xe,ClusterGridView:en,ClusterListView:ln},data(){return{servicesByCluster:[],ingressesByCluster:[],loading:!0,selectedCluster:null,clusterOptions:[],selectedView:"grid",favoritedApps:[],searchQuery:"",tableHeaders:[{name:"name",label:"Name",value:"metadata.name",sort:"metadata.name",sortOrder:"asc"},{name:"namespace",label:"Namespace",value:"metadata.namespace"},{name:"version",label:"Version",value:'metadata.labels["app.kubernetes.io/version"]'},{name:"helmChart",label:"Helm Chart",value:'metadata.labels["helm.sh/chart"]'},{name:"actions",label:"Actions",value:"actions",align:"right"}]}},async mounted(){try{const t=await this.getClusters();this.servicesByCluster=await this.getServicesByCluster(t),this.ingressesByCluster=await this.getIngressesByCluster(t),this.selectedCluster="ALL_CLUSTERS",this.generateClusterOptions(),this.servicesByCluster.forEach(t=>{t.services.forEach(e=>{var n,r;"true"===(null===(n=e.metadata)||void 0===n||null===(r=n.annotations)||void 0===r?void 0:r["extensions.applauncher/global-app"])&&this.favoritedApps.push({...e,clusterId:t.id,clusterName:t.name})})}),this.ingressesByCluster.forEach(t=>{t.ingresses.forEach(e=>{var n,r;"true"===(null===(n=e.metadata)||void 0===n||null===(r=n.annotations)||void 0===r?void 0:r["extensions.applauncher/global-app"])&&this.favoritedApps.push({...e,clusterId:t.id,clusterName:t.name})})});const e=localStorage.getItem("favoritedApps");e&&this.favoritedApps.push(...JSON.parse(e))}catch(t){console.error("Error fetching clusters",t)}finally{this.loading=!1}},methods:{async getClusters(){return await this.$store.dispatch("management/findAll",{type:c["j"].CLUSTER})},getCluster(t){return this.servicesByCluster.find(e=>e.id===t)||null},async getServicesByCluster(t){return await Promise.all(t.filter(t=>t.isReady).map(async t=>{const e={name:t.spec.displayName,id:t.id,services:[],loading:!0,error:!1};try{const n=(await this.$store.dispatch("cluster/request",{url:`/k8s/clusters/${t.id}/v1/services`})).data;e.services=n.map(e=>({...e,clusterId:t.id,clusterName:t.spec.displayName}))}catch(n){console.error(`Error fetching services for cluster ${t.id}:`,n),e.error=!0}finally{e.loading=!1}return e}))},async getIngressesByCluster(t){return Promise.all(t.filter(t=>t.isReady).map(async t=>{const e={name:t.spec.displayName,id:t.id,ingresses:[],loading:!0,error:!1};try{const n=(await this.$store.dispatch("cluster/request",{url:`/k8s/clusters/${t.id}/v1/networking.k8s.io.ingresses`})).data;e.ingresses=n.map(e=>({...e,clusterId:t.id,clusterName:t.spec.displayName}))}catch(n){console.error(`Error fetching ingresses for cluster ${t.id}:`,n),e.error=!0}finally{e.loading=!1}return e}))},generateClusterOptions(){this.clusterOptions=[{label:"All Clusters",value:"ALL_CLUSTERS"},...this.servicesByCluster.map(t=>({label:t.name,value:t.id}))]},toggleSortOrder(){this.tableHeaders[0].sortOrder="asc"===this.tableHeaders[0].sortOrder?"desc":"asc"},toggleFavorite(t){const e=this.favoritedApps.findIndex(e=>e.id===t.id&&e.kind===t.kind);-1!==e?this.favoritedApps.splice(e,1):this.favoritedApps.push({...t});const n=JSON.stringify(this.favoritedApps.filter(t=>{var e;return"true"!==(null===(e=t.metadata.annotations)||void 0===e?void 0:e["extensions.applauncher/global-app"])}));localStorage.setItem("favoritedApps",n)},updateSearchQuery(t){this.searchQuery=t}},computed:{aToZorZtoA(){return"asc"===this.tableHeaders[0].sortOrder?"A-Z":"Z-A"},displayedClusterData(){if("ALL_CLUSTERS"===this.selectedCluster){const t=this.servicesByCluster.map(t=>{var e,n;return{...t,ingresses:(null===(e=this.ingressesByCluster.find(e=>e.id===t.id))||void 0===e?void 0:e.ingresses)||[],filteredApps:this.filteredApps(t.services,(null===(n=this.ingressesByCluster.find(e=>e.id===t.id))||void 0===n?void 0:n.ingresses)||[])}});return t}{const e=this.getCluster(this.selectedCluster);if(e){var t;const n=(null===(t=this.ingressesByCluster.find(t=>t.id===e.id))||void 0===t?void 0:t.ingresses)||[],r=e.services,o=this.filteredApps(r,n);return[{...e,ingresses:n,filteredApps:o}]}console.error("Cluster not found:",this.selectedCluster)}return[]},sortedFavoritedApps(){return this.favoritedApps.sort((t,e)=>{const n=t.metadata.name.toLowerCase(),r=e.metadata.name.toLowerCase();return"asc"===this.tableHeaders[0].sortOrder?n.localeCompare(r):r.localeCompare(n)})},filteredApps(){return(t,e)=>{const n=[...t||[],...e||[]].sort((t,e)=>{const n=t.metadata.name.toLowerCase(),r=e.metadata.name.toLowerCase();return"asc"===this.tableHeaders[0].sortOrder?n.localeCompare(r):r.localeCompare(n)});if(""===this.searchQuery.trim())return n;{const t=this.searchQuery.trim().toLowerCase();return n.filter(e=>{var n,r,o,i;return e.metadata.name.toLowerCase().includes(t)||e.metadata.namespace.toLowerCase().includes(t)||(null===(n=e.metadata.labels)||void 0===n||null===(r=n["app.kubernetes.io/version"])||void 0===r?void 0:r.toLowerCase().includes(t))||(null===(o=e.metadata.labels)||void 0===o||null===(i=o["helm.sh/chart"])||void 0===i?void 0:i.toLowerCase().includes(t))||e.metadata.fields.includes(t)})}}}},layout:"plain"},dn=un,pn=(n("9373"),Object(f["a"])(dn,a,s,!1,null,"3b920c85",null)),fn=pn.exports,hn=n("2902");const vn=[{name:hn["b"]+"-c-cluster",path:`/${hn["b"]}/c/:cluster`,component:fn,meta:{product:hn["b"],cluster:hn["a"],pkg:hn["b"]}}];var bn=vn,gn=function(t){i(t),t.metadata=n("9224"),t.addProduct(n("85d6")),t.addRoutes(bn)};e["default"]=gn},"1d19":function(t,e,n){"use strict";n.d(e,"a",(function(){return p})),n.d(e,"b",(function(){return v}));var r=n("e24b"),o=n("2cb5");const i={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object","[object FileList]":"filelist"},{toString:a}=Object.prototype;function s(t){if(null===t)return"null";if(void 0===t)return"undefined";let e=i[a.call(t)]||"object";return"object"===e&&(t instanceof Error?e="error":t instanceof Date&&(e="date")),e}function c(t,e){const n=t-e;return(n>0)-(n<0)}const l={undefined:0,null:1,boolean:2,number:3,string:4,array:5,object:6,instance:7,function:8,class:9,date:10};function u(t,e){const n=s(t),r=s(e),o=c(l[n],l[r]);if(o)return o;switch(n){case"boolean":case"number":return c(t,e);case"string":return c(t.localeCompare(e),0);case"array":{const n=t.length,r=e.length,o=Math.min(n,r);for(let i=0;i{for(let i=0;it.match(h)?Object(o["o"])(t,10,"0"):t).join("").trim()}},"1d5f":function(t){t.exports=JSON.parse('{"hasStylesheet":"true"}')},"1db5":function(t,e,n){"use strict";n("8dcd")},"1ec9":function(t,e,n){var r=n("fa8a"),o=n("44d9"),i=n("1386"),a=n("052a"),s=n("2fab"),c=n("e3f8");function l(t){var e=this.__data__=new r(t);this.size=e.size}l.prototype.clear=o,l.prototype["delete"]=i,l.prototype.get=a,l.prototype.has=s,l.prototype.set=c,t.exports=l},"1fcb":function(t,e,n){var r=n("3336"),o=n("c294"),i=o((function(t,e,n){r(t,e,n)}));t.exports=i},"1fce":function(t,e){function n(t,e){var n=-1,r=null==t?0:t.length,o=Array(r);while(++n-1)||n.indexOf(",")>-1||n.indexOf("/")>-1||r.StringUtilities.containsAny(o,t.specialCharacters))if(!e&&o.indexOf(",")>-1&&-1==o.indexOf("-")&&-1==o.indexOf("/")&&!r.StringUtilities.containsAny(n,t.specialCharacters)){var a=o.split(",");i+=this.i18n.at();for(var s=0;s0&&l.length>0&&(i+=", "),i+=l,i.length>0&&u.length>0&&(i+=", "),i+=u}else{var d=n.split("-");i+=r.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(),this.formatTime(o,d[0],""),this.formatTime(o,d[1],""))}else i+=this.i18n.atSpace()+this.formatTime(o,n,e);return i},t.prototype.getSecondsDescription=function(){var t=this,e=this.getSegmentDescription(this.expressionParts[0],this.i18n.everySecond(),(function(t){return t}),(function(e){return r.StringUtilities.format(t.i18n.everyX0Seconds(),e)}),(function(e){return t.i18n.secondsX0ThroughX1PastTheMinute()}),(function(e){return"0"==e?"":parseInt(e)<20?t.i18n.atX0SecondsPastTheMinute():t.i18n.atX0SecondsPastTheMinuteGt20()||t.i18n.atX0SecondsPastTheMinute()}));return e},t.prototype.getMinutesDescription=function(){var t=this,e=this.expressionParts[0],n=this.expressionParts[2],o=this.getSegmentDescription(this.expressionParts[1],this.i18n.everyMinute(),(function(t){return t}),(function(e){return r.StringUtilities.format(t.i18n.everyX0Minutes(),e)}),(function(e){return t.i18n.minutesX0ThroughX1PastTheHour()}),(function(r){try{return"0"==r&&-1==n.indexOf("/")&&""==e?t.i18n.everyHour():parseInt(r)<20?t.i18n.atX0MinutesPastTheHour():t.i18n.atX0MinutesPastTheHourGt20()||t.i18n.atX0MinutesPastTheHour()}catch(o){return t.i18n.atX0MinutesPastTheHour()}}));return o},t.prototype.getHoursDescription=function(){var t=this,e=this.expressionParts[2],n=this.getSegmentDescription(e,this.i18n.everyHour(),(function(e){return t.formatTime(e,"0","")}),(function(e){return r.StringUtilities.format(t.i18n.everyX0Hours(),e)}),(function(e){return t.i18n.betweenX0AndX1()}),(function(e){return t.i18n.atX0()}));return n},t.prototype.getDayOfWeekDescription=function(){var t=this,e=this.i18n.daysOfTheWeek(),n=null;return n="*"==this.expressionParts[5]?"":this.getSegmentDescription(this.expressionParts[5],this.i18n.commaEveryDay(),(function(t){var n=t;return t.indexOf("#")>-1?n=t.substr(0,t.indexOf("#")):t.indexOf("L")>-1&&(n=n.replace("L","")),e[parseInt(n)]}),(function(e){return 1==parseInt(e)?"":r.StringUtilities.format(t.i18n.commaEveryX0DaysOfTheWeek(),e)}),(function(e){return t.i18n.commaX0ThroughX1()}),(function(e){var n=null;if(e.indexOf("#")>-1){var r=e.substring(e.indexOf("#")+1),o=null;switch(r){case"1":o=t.i18n.first();break;case"2":o=t.i18n.second();break;case"3":o=t.i18n.third();break;case"4":o=t.i18n.fourth();break;case"5":o=t.i18n.fifth();break}n=t.i18n.commaOnThe()+o+t.i18n.spaceX0OfTheMonth()}else if(e.indexOf("L")>-1)n=t.i18n.commaOnTheLastX0OfTheMonth();else{var i="*"!=t.expressionParts[3];n=i?t.i18n.commaAndOnX0():t.i18n.commaOnlyOnX0()}return n})),n},t.prototype.getMonthDescription=function(){var t=this,e=this.i18n.monthsOfTheYear(),n=this.getSegmentDescription(this.expressionParts[4],"",(function(t){return e[parseInt(t)-1]}),(function(e){return 1==parseInt(e)?"":r.StringUtilities.format(t.i18n.commaEveryX0Months(),e)}),(function(e){return t.i18n.commaMonthX0ThroughMonthX1()||t.i18n.commaX0ThroughX1()}),(function(e){return t.i18n.commaOnlyInMonthX0?t.i18n.commaOnlyInMonthX0():t.i18n.commaOnlyInX0()}));return n},t.prototype.getDayOfMonthDescription=function(){var t=this,e=null,n=this.expressionParts[3];switch(n){case"L":e=this.i18n.commaOnTheLastDayOfTheMonth();break;case"WL":case"LW":e=this.i18n.commaOnTheLastWeekdayOfTheMonth();break;default:var o=n.match(/(\d{1,2}W)|(W\d{1,2})/);if(o){var i=parseInt(o[0].replace("W","")),a=1==i?this.i18n.firstWeekday():r.StringUtilities.format(this.i18n.weekdayNearestDayX0(),i.toString());e=r.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(),a);break}var s=n.match(/L-(\d{1,2})/);if(s){var c=s[1];e=r.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(),c);break}if("*"==n&&"*"!=this.expressionParts[5])return"";e=this.getSegmentDescription(n,this.i18n.commaEveryDay(),(function(e){return"L"==e?t.i18n.lastDay():t.i18n.dayX0?r.StringUtilities.format(t.i18n.dayX0(),e):e}),(function(e){return"1"==e?t.i18n.commaEveryDay():t.i18n.commaEveryX0Days()}),(function(e){return t.i18n.commaBetweenDayX0AndX1OfTheMonth()}),(function(e){return t.i18n.commaOnDayX0OfTheMonth()}));break}return e},t.prototype.getYearDescription=function(){var t=this,e=this.getSegmentDescription(this.expressionParts[6],"",(function(t){return/^\d+$/.test(t)?new Date(parseInt(t),1).getFullYear().toString():t}),(function(e){return r.StringUtilities.format(t.i18n.commaEveryX0Years(),e)}),(function(e){return t.i18n.commaYearX0ThroughYearX1()||t.i18n.commaX0ThroughX1()}),(function(e){return t.i18n.commaOnlyInYearX0?t.i18n.commaOnlyInYearX0():t.i18n.commaOnlyInX0()}));return e},t.prototype.getSegmentDescription=function(t,e,n,o,i,a){var s=this,c=null;if(t)if("*"===t)c=e;else if(r.StringUtilities.containsAny(t,["/","-",","]))if(t.indexOf("/")>-1){var l=t.split("/");if(c=r.StringUtilities.format(o(l[1]),l[1]),l[0].indexOf("-")>-1){var u=this.generateBetweenSegmentDescription(l[0],i,n);0!=u.indexOf(", ")&&(c+=", "),c+=u}else if(!r.StringUtilities.containsAny(l[0],["*",","])){var d=r.StringUtilities.format(a(l[0]),n(l[0]));d=d.replace(", ",""),c+=r.StringUtilities.format(this.i18n.commaStartingX0(),d)}}else if(t.indexOf(",")>-1){l=t.split(",");for(var p="",f=0;f0&&l.length>2&&(p+=",",f0&&l.length>1&&(f==l.length-1||2==l.length)&&(p+=this.i18n.spaceAnd()+" "),l[f].indexOf("-")>-1){u=this.generateBetweenSegmentDescription(l[f],(function(t){return s.i18n.commaX0ThroughX1()}),n);u=u.replace(", ",""),p+=u}else p+=n(l[f]);c=r.StringUtilities.format(a(t),p)}else t.indexOf("-")>-1&&(c=this.generateBetweenSegmentDescription(t,i,n));else c=r.StringUtilities.format(a(t),n(t));else c="";return c},t.prototype.generateBetweenSegmentDescription=function(t,e,n){var o="",i=t.split("-"),a=n(i[0]),s=n(i[1]);s=s.replace(":00",":59");var c=e(t);return o+=r.StringUtilities.format(c,a,s),o},t.prototype.formatTime=function(t,e,n){var r=parseInt(t),o="",i=!1;this.options.use24HourTimeFormat||(i=this.i18n.setPeriodBeforeTime&&this.i18n.setPeriodBeforeTime(),o=i?this.getPeriod(r)+" ":" "+this.getPeriod(r),r>12&&(r-=12),0===r&&(r=12));var a=e,s="";return n&&(s=":"+("00"+n).substring(n.length)),""+(i?o:"")+("00"+r.toString()).substring(r.toString().length)+":"+("00"+a.toString()).substring(a.toString().length)+s+(i?"":o)},t.prototype.transformVerbosity=function(t,e){return e||(t=t.replace(new RegExp(", "+this.i18n.everyMinute(),"g"),""),t=t.replace(new RegExp(", "+this.i18n.everyHour(),"g"),""),t=t.replace(new RegExp(this.i18n.commaEveryDay(),"g"),""),t=t.replace(/\, ?$/,"")),t},t.prototype.getPeriod=function(t){return t>=12?this.i18n.pm&&this.i18n.pm()||"PM":this.i18n.am&&this.i18n.am()||"AM"},t.locales={},t}();e.ExpressionDescriptor=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){}return t.format=function(t){for(var e=[],n=1;n-1}))},t}();e.StringUtilities=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){void 0===e&&(e=!0),this.expression=t,this.dayOfWeekStartIndexZero=e}return t.prototype.parse=function(){var t=this.extractParts(this.expression);return this.normalize(t),this.validate(t),t},t.prototype.extractParts=function(t){if(!this.expression)throw new Error("Expression is empty");var e=t.trim().split(/[ ]+/);if(e.length<5)throw new Error("Expression has only "+e.length+" part"+(1==e.length?"":"s")+". At least 5 parts are required.");if(5==e.length)e.unshift(""),e.push("");else if(6==e.length)/\d{4}$/.test(e[5])?e.unshift(""):e.push("");else if(e.length>7)throw new Error("Expression has "+e.length+" parts; too many!");return e},t.prototype.normalize=function(t){var e=this;if(t[3]=t[3].replace("?","*"),t[5]=t[5].replace("?","*"),t[2]=t[2].replace("?","*"),0==t[0].indexOf("0/")&&(t[0]=t[0].replace("0/","*/")),0==t[1].indexOf("0/")&&(t[1]=t[1].replace("0/","*/")),0==t[2].indexOf("0/")&&(t[2]=t[2].replace("0/","*/")),0==t[3].indexOf("1/")&&(t[3]=t[3].replace("1/","*/")),0==t[4].indexOf("1/")&&(t[4]=t[4].replace("1/","*/")),0==t[5].indexOf("1/")&&(t[5]=t[5].replace("1/","*/")),0==t[6].indexOf("1/")&&(t[6]=t[6].replace("1/","*/")),t[5]=t[5].replace(/(^\d)|([^#/\s]\d)/g,(function(t){var n=t.replace(/\D/,""),r=n;return e.dayOfWeekStartIndexZero?"7"==n&&(r="0"):r=(parseInt(n)-1).toString(),t.replace(n,r)})),"L"==t[5]&&(t[5]="6"),"?"==t[3]&&(t[3]="*"),t[3].indexOf("W")>-1&&(t[3].indexOf(",")>-1||t[3].indexOf("-")>-1))throw new Error("The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.");var n={SUN:0,MON:1,TUE:2,WED:3,THU:4,FRI:5,SAT:6};for(var r in n)t[5]=t[5].replace(new RegExp(r,"gi"),n[r].toString());var o={JAN:1,FEB:2,MAR:3,APR:4,MAY:5,JUN:6,JUL:7,AUG:8,SEP:9,OCT:10,NOV:11,DEC:12};for(var i in o)t[4]=t[4].replace(new RegExp(i,"gi"),o[i].toString());"0"==t[0]&&(t[0]=""),/\*|\-|\,|\//.test(t[2])||!/\*|\//.test(t[1])&&!/\*|\//.test(t[0])||(t[2]+="-"+t[2]);for(var a=0;a-1&&!/^\*|\-|\,/.test(t[a])){var s=null;switch(a){case 4:s="12";break;case 5:s="6";break;case 6:s="9999";break;default:s=null;break}if(null!=s){var c=t[a].split("/");t[a]=c[0]+"-"+s+"/"+c[1]}}},t.prototype.validate=function(t){this.assertNoInvalidCharacters("DOW",t[5]),this.assertNoInvalidCharacters("DOM",t[3])},t.prototype.assertNoInvalidCharacters=function(t,e){var n=e.match(/[A-KM-VX-Z]+/gi);if(n&&n.length)throw new Error(t+" part contains invalid values: '"+n.toString()+"'")},t}();e.CronParser=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){}return t.prototype.atX0SecondsPastTheMinuteGt20=function(){return null},t.prototype.atX0MinutesPastTheHourGt20=function(){return null},t.prototype.commaMonthX0ThroughMonthX1=function(){return null},t.prototype.commaYearX0ThroughYearX1=function(){return null},t.prototype.use24HourTimeFormatByDefault=function(){return!1},t.prototype.anErrorOccuredWhenGeneratingTheExpressionD=function(){return"An error occured when generating the expression description. Check the cron expression syntax."},t.prototype.everyMinute=function(){return"every minute"},t.prototype.everyHour=function(){return"every hour"},t.prototype.atSpace=function(){return"At "},t.prototype.everyMinuteBetweenX0AndX1=function(){return"Every minute between %s and %s"},t.prototype.at=function(){return"At"},t.prototype.spaceAnd=function(){return" and"},t.prototype.everySecond=function(){return"every second"},t.prototype.everyX0Seconds=function(){return"every %s seconds"},t.prototype.secondsX0ThroughX1PastTheMinute=function(){return"seconds %s through %s past the minute"},t.prototype.atX0SecondsPastTheMinute=function(){return"at %s seconds past the minute"},t.prototype.everyX0Minutes=function(){return"every %s minutes"},t.prototype.minutesX0ThroughX1PastTheHour=function(){return"minutes %s through %s past the hour"},t.prototype.atX0MinutesPastTheHour=function(){return"at %s minutes past the hour"},t.prototype.everyX0Hours=function(){return"every %s hours"},t.prototype.betweenX0AndX1=function(){return"between %s and %s"},t.prototype.atX0=function(){return"at %s"},t.prototype.commaEveryDay=function(){return", every day"},t.prototype.commaEveryX0DaysOfTheWeek=function(){return", every %s days of the week"},t.prototype.commaX0ThroughX1=function(){return", %s through %s"},t.prototype.first=function(){return"first"},t.prototype.second=function(){return"second"},t.prototype.third=function(){return"third"},t.prototype.fourth=function(){return"fourth"},t.prototype.fifth=function(){return"fifth"},t.prototype.commaOnThe=function(){return", on the "},t.prototype.spaceX0OfTheMonth=function(){return" %s of the month"},t.prototype.lastDay=function(){return"the last day"},t.prototype.commaOnTheLastX0OfTheMonth=function(){return", on the last %s of the month"},t.prototype.commaOnlyOnX0=function(){return", only on %s"},t.prototype.commaAndOnX0=function(){return", and on %s"},t.prototype.commaEveryX0Months=function(){return", every %s months"},t.prototype.commaOnlyInX0=function(){return", only in %s"},t.prototype.commaOnTheLastDayOfTheMonth=function(){return", on the last day of the month"},t.prototype.commaOnTheLastWeekdayOfTheMonth=function(){return", on the last weekday of the month"},t.prototype.commaDaysBeforeTheLastDayOfTheMonth=function(){return", %s days before the last day of the month"},t.prototype.firstWeekday=function(){return"first weekday"},t.prototype.weekdayNearestDayX0=function(){return"weekday nearest day %s"},t.prototype.commaOnTheX0OfTheMonth=function(){return", on the %s of the month"},t.prototype.commaEveryX0Days=function(){return", every %s days"},t.prototype.commaBetweenDayX0AndX1OfTheMonth=function(){return", between day %s and %s of the month"},t.prototype.commaOnDayX0OfTheMonth=function(){return", on day %s of the month"},t.prototype.commaEveryHour=function(){return", every hour"},t.prototype.commaEveryX0Years=function(){return", every %s years"},t.prototype.commaStartingX0=function(){return", starting %s"},t.prototype.daysOfTheWeek=function(){return["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},t.prototype.monthsOfTheYear=function(){return["January","February","March","April","May","June","July","August","September","October","November","December"]},t}();e.en=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(0),o=n(5);r.ExpressionDescriptor.initialize(new o.enLocaleLoader),e.default=r.ExpressionDescriptor;var i=r.ExpressionDescriptor.toString;e.toString=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),o=function(){function t(){}return t.prototype.load=function(t){t["en"]=new r.en},t}();e.enLocaleLoader=o}])}))},"212d":function(t,e,n){var r=n("bf10"),o=n("201b"),i=r(o,"Promise");t.exports=i},2357:function(t,e,n){var r=n("e972"),o=/^\s+/;function i(t){return t?t.slice(0,r(t)+1).replace(o,""):t}t.exports=i},2376:function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".cluster-actions[data-v-88f0655a]{display:flex;align-items:center;gap:1rem;position:fixed;right:5.8%;top:4.3rem;z-index:2;padding-bottom:.425rem;padding-right:4.4rem;background:inherit;border-bottom:var(--header-border-size) solid var(--header-border)}.icon-button[data-v-88f0655a]{padding:0;color:var(--primary);font-size:1.8rem}.icon-button[data-v-88f0655a],.sort-button[data-v-88f0655a]{background:none;border:none;cursor:pointer}.sort-button[data-v-88f0655a]{padding:none;color:#555;font-size:1.3rem;display:flex;align-items:center}.sort-label[data-v-88f0655a]{color:var(--primary);font-size:1rem;cursor:pointer}.sort-buttons[data-v-88f0655a]{display:flex;gap:1rem;align-items:center}.sort-button[data-v-88f0655a]:hover{color:var(--primary-hover)}.sort-button.active[data-v-88f0655a]{color:var(--primary)}.search-input[data-v-88f0655a]{text-align:right;justify-content:flex-end;display:flex;input[data-v-88f0655a]{width:190px;padding:11px;font-size:1rem;border:1px solid var(--border);border-radius:4px}}.select-wrapper select[data-v-88f0655a]{padding:.8rem;border:1px solid #ccc;border-radius:4px}",""]),t.exports=e},2419:function(t,e,n){var r=n("872c"),o=n("aa31"),i=n("7049");function a(t){var e=-1,n=null==t?0:t.length;this.__data__=new r;while(++e{return i("Starting wait for",e),new Promise((o,a)=>{t()&&(i("Wait for",e||"unknown","done immediately"),o(void 0));const s=setTimeout(()=>{if(i("Wait for",e,"timed out"),clearInterval(c),clearTimeout(s),!e)throw new Error(`waitFor timed out after ${n/1e3} seconds`);a(new Error("Failed waiting for: "+e))},n),c=setInterval(()=>{t()?(i("Wait for",e,"done"),clearInterval(c),clearTimeout(s),o(void 0)):e&&i("Wait for",e,"not done yet")},r)});function i(...t){o&&console.log(...t)}}},"2c98":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".services-by-cluster-grid[data-v-1dd06ec8]{display:grid;grid-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.cluster-header[data-v-1dd06ec8]{display:flex;align-items:center;justify-content:space-between;margin:1rem 0;background:var(--header-bg);border-bottom:var(--header-border-size) solid var(--header-border);height:var(--header-height);position:sticky;top:0;z-index:1}.favorite-icon[data-v-1dd06ec8]{margin-right:1rem}",""]),t.exports=e},"2cb5":function(t,e,n){"use strict";function r(t){return _(t||"").split("-").map(t=>o(t)).join(" ")}function o(t){return t=t||"",t.substr(0,1).toUpperCase()+t.substr(1)}function i(t,e,n=" ",r=!1){if(t=""+t,t.length>=e)return t;const o=e-t.length+1,i=new Array(o).join(n).substr(0,o);return r?t+i:i+t}n.d(e,"a",(function(){return r})),n.d(e,"p",(function(){return o})),n.d(e,"o",(function(){return i})),n.d(e,"e",(function(){return s})),n.d(e,"f",(function(){return c})),n.d(e,"l",(function(){return h})),n.d(e,"k",(function(){return v})),n.d(e,"m",(function(){return b})),n.d(e,"g",(function(){return g})),n.d(e,"c",(function(){return _})),n.d(e,"b",(function(){return x})),n.d(e,"i",(function(){return O})),n.d(e,"d",(function(){return k})),n.d(e,"j",(function(){return A})),n.d(e,"n",(function(){return S})),n.d(e,"h",(function(){return C}));const a={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function s(t){return String(t).replace(/[&<>"']/g,t=>a[t])}function c(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function l(t){t=Math.max(0,t||1);const e=[];let n;if(window.crypto&&window.crypto.getRandomValues){const r=new Uint32Array(t);for(window.crypto.getRandomValues(r),n=0;ne[t%e.length]).join(""):null}function v(t){return t.match(/.*[^aeiou]y$/i)?t.substr(0,t.length-1)+"ies":t.endsWith("ics")?t:t.endsWith("s")?t+"es":t+"s"}function b(t,e,n){return t.reduce((r,o,i)=>(i>=5||(r+=`${s(o)}`,i===t.length-1?r+=e:r+=i===t.length-2?n("generic.and"):n("generic.comma")),r),"")}function g(t,e=2,n=" ",r=null){t="string"===typeof t?t.split(/\n/):t||[];const o=new Array(e+1).join(n),i=t.map(t=>{let e="",n=t;if(r){const o=t.match(r);o&&(e=o[o.length-1],n=t.substr(o[0].length))}return`${e}${o}${n}`}),a=i.join("\n");return a}const m=/([a-z\d])([A-Z])/g;function y(t){return t.replace(m,"$1_$2").toLowerCase()}const w=/[ _]/g;function _(t){return y(t).replace(w,"-")}function x(t,e){return"float"===e?t=parseFloat(t)||null:"int"===e?(t=parseInt(t,10),isNaN(t)&&(t=null)):"boolean"===e&&("true"===t.toLowerCase()?t=!0:"false"===t.toLowerCase()&&(t=!1)),t}function O(t,e=[]){return e.some(e=>{const n=t||"",r=k(e);return n.match(r)})}function k(t,e=!0){return"string"===typeof t?e?new RegExp(`^${c(t)}$`,"i"):new RegExp(""+c(t),"i"):t}function A(t){return s(t||"").replace(/(\r\n|\r|\n)/g,"
\n")}const E=/[^."']+|"([^"]*)"|'([^']*)'/g;function S(t){return t.includes('"')||t.includes("'")?t.match(E).map(t=>t.replace(/['"]/g,"")):t.split(".")}function C(t){let e="";for(const n of t)n.includes(".")?e+=`."${n}"`:e+="."+n;return e.startsWith(".")&&(e=e.substr(1)),e}},"2cbd":function(t,e){function n(t,e){if(("constructor"!==e||"function"!==typeof t[e])&&"__proto__"!=e)return t[e]}t.exports=n},"2e63":function(t,e){function n(t,e){var n=-1,r=null==t?0:t.length;while(++ntd{font-size:13px;padding-top:0;overflow-wrap:anywhere}.sortable-table tbody tr.active-row{color:var(--sortable-table-header-bg)}.sortable-table tbody tr.row-selected{background:var(--sortable-table-selected-bg)}.sortable-table tbody .no-rows td{padding:30px 0;text-align:center}.sortable-table tbody .no-results:hover,.sortable-table tbody .no-rows:hover{background-color:var(--body-bg)}.sortable-table tbody.group:before{content:"";display:block;height:20px;background-color:transparent}.sortable-table tbody tr.group-row{background-color:initial}.sortable-table tbody tr.group-row:first-child{border-bottom:2px solid var(--sortable-table-row-bg)}.sortable-table tbody tr.group-row:not(:first-child){margin-top:20px}.sortable-table tbody tr.group-row td{padding:0}.sortable-table tbody tr.group-row td:first-of-type{border-left:1px solid var(--sortable-table-accent-bg)}.sortable-table tbody tr.group-row .group-tab{height:40px;line-height:40px;padding:0 10px;border-radius:4px 4px 0 0;background-color:var(--sortable-table-row-bg);position:relative;top:1px;display:inline-block;z-index:10;min-width:72px}.sortable-table tbody tr.group-row .group-tab:after,.sortable-table tbody tr.group-row .group-tab:before{content:" ";display:table}.sortable-table tbody tr.group-row .group-tab:after{clear:both}.sortable-table tbody tr.group-row .group-tab>SPAN{color:var(--sortable-table-group-label)}.sortable-table tbody tr.group-row .group-tab:after{height:40px;width:70px;border-radius:5px 5px 0 0;background-color:var(--sortable-table-row-bg);content:"";position:absolute;right:-15px;top:0;transform:skewX(40deg);z-index:-1}.for-inputs TABLE.sortable-table{width:100%;border-collapse:collapse;margin-bottom:10px}.for-inputs TABLE.sortable-table>TBODY>TR>TD,.for-inputs TABLE.sortable-table>THEAD>TR>TH{padding-right:10px;padding-bottom:10px}.for-inputs TABLE.sortable-table>TBODY>TR>TD:last-of-type,.for-inputs TABLE.sortable-table>THEAD>TR>TH:last-of-type{padding-right:0}.for-inputs TABLE.sortable-table>TBODY>TR:first-of-type>TD{padding-top:10px}.for-inputs TABLE.sortable-table>TBODY>TR:last-of-type>TD{padding-bottom:0}.for-inputs.clone TABLE.sortable-table>THEAD>TR>TH,.for-inputs.create TABLE.sortable-table>THEAD>TR>TH,.for-inputs.edit TABLE.sortable-table>THEAD>TR>TH{border-color:transparent}.sortable-table-header{position:relative;z-index:11}.sortable-table-header.titled{display:flex;align-items:center}.fixed-header-actions.button{grid-template-columns:[bulk] auto [middle] min-content [search] minmax(min-content,350px)}.fixed-header-actions{padding:0 0 20px 0;width:100%;z-index:11;background:transparent;display:grid;grid-template-columns:[bulk] auto [middle] min-content [search] minmax(min-content,200px);grid-column-gap:10px}.fixed-header-actions.advanced-filtering{grid-template-columns:[bulk] auto [middle] minmax(min-content,auto) [search] minmax(min-content,auto)}.fixed-header-actions .bulk{grid-area:bulk}.fixed-header-actions .bulk>BUTTON{display:none}.fixed-header-actions .bulk>BUTTON:not(:last-of-type){margin-right:10px}.fixed-header-actions .bulk .action-availability{display:none;margin-left:10px;vertical-align:middle;margin-top:2px}.fixed-header-actions .bulk .dropdown-button li.disabled{color:var(--disabled-text);cursor:not-allowed}.fixed-header-actions .bulk .dropdown-button li.disabled:hover{color:var(--disabled-text);background-color:unset;cursor:not-allowed}.fixed-header-actions .bulk .bulk-action .icon{vertical-align:-10%}.fixed-header-actions .middle{grid-area:middle;white-space:nowrap}.fixed-header-actions .middle .icon.icon-backup.animate{animation-name:spin;animation-duration:1s;animation-iteration-count:infinite;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fixed-header-actions .search{grid-area:search;text-align:right;justify-content:flex-end}.fixed-header-actions .bulk-actions-dropdown{display:none}.fixed-header-actions .bulk-actions-dropdown .dropdown-button{background-color:var(--primary)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button:hover{background-color:var(--primary-hover-bg);color:var(--primary-hover-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button .icon-chevron-down,.fixed-header-actions .bulk-actions-dropdown .dropdown-button>*{color:var(--primary-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button .button-divider{border-color:var(--primary-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled{border-color:var(--disabled-bg)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled .icon-chevron-down{color:var(--disabled-text)!important}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled .button-divider{border-color:var(--disabled-text)}.paging{margin-top:10px;text-align:center}.paging SPAN{display:inline-block;min-width:200px}',""]),t.exports=e},3819:function(t,e,n){var r=n("bf10"),o=n("201b"),i=r(o,"Set");t.exports=i},3973:function(t,e,n){"use strict";n("4914")},"39f2":function(t,e,n){var r=n("73b4");function o(t,e){var n=null==t?0:t.length;return!!n&&r(t,e,0)>-1}t.exports=o},"3ac3":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".labeled-select[data-v-0abf511e]{position:relative;padding-bottom:1px}.labeled-select.no-label.compact-input[data-v-0abf511e] .vs__actions:after{top:-2px}.labeled-select.no-label.compact-input .labeled-container[data-v-0abf511e]{padding:5px 0 1px 10px}.labeled-select.no-label[data-v-0abf511e]:not(.compact-input){height:61px;padding-top:4px}.labeled-select.no-label[data-v-0abf511e]:not(.compact-input) .vs__actions:after{top:0}.labeled-select .icon-spinner[data-v-0abf511e]{position:absolute;left:calc(50% - .5em);top:calc(50% - .5em)}.labeled-select .labeled-container[data-v-0abf511e]{padding:7px 0 0 10px;padding:10px 0 0 10px}.labeled-select .labeled-container label[data-v-0abf511e]{margin:0}.labeled-select .labeled-container .selected[data-v-0abf511e]{background-color:transparent}.labeled-select.view.labeled-input .labeled-container[data-v-0abf511e]{padding:0}.labeled-select.taggable.compact-input[data-v-0abf511e]{min-height:40px}.labeled-select.taggable.compact-input[data-v-0abf511e] .vs__selected-options{padding-top:8px!important}.labeled-select.taggable[data-v-0abf511e]:not(.compact-input){min-height:61px}.labeled-select.taggable[data-v-0abf511e]:not(.compact-input) .vs__selected-options{margin-top:0}.labeled-select[data-v-0abf511e]:not(.taggable) .vs__selected-options .vs__selected{width:100%}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options{padding:3px 0}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected{border-color:var(--accent-btn);height:20px;min-height:unset!important;padding:0 0 0 7px!important}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button{height:20px;line-height:14px}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button:hover{background-color:var(--primary);border-radius:0}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button:hover:after{color:#fff}.labeled-select[data-v-0abf511e] .vs__selected-options{margin-top:-5px}.labeled-select[data-v-0abf511e] .v-select:not(.vs--single) .vs__selected-options{padding:5px 0}.labeled-select[data-v-0abf511e] .vs__actions:after{position:relative;top:-10px}.labeled-select[data-v-0abf511e] .v-select.vs--open .vs__dropdown-toggle{color:var(--outline)!important}[data-v-0abf511e] .labeled-select.disabled .labeled-container,[data-v-0abf511e] .labeled-select.disabled .vs__dropdown-toggle,[data-v-0abf511e] .labeled-select.disabled input,[data-v-0abf511e] .labeled-select.disabled label{cursor:not-allowed}.labeled-select .no-label[data-v-0abf511e].v-select:not(.vs--single){min-height:33px}.labeled-select .no-label[data-v-0abf511e].selected{padding-top:8px;padding-bottom:9px;position:relative;max-height:2.3em;overflow:hidden}.labeled-select .no-label[data-v-0abf511e] .vs__selected-options{padding:8px 0 7px 0}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group[data-v-0abf511e]{display:flex}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group>b[data-v-0abf511e]{flex:1}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group>div[data-v-0abf511e]{background-color:var(--primary);border-radius:4px;color:var(--primary-text);font-size:12px;height:18px;line-height:18px;margin-top:1px;padding:0 10px}.vs__dropdown-option>.option-kind-highlighted[data-v-0abf511e]{color:var(--dropdown-highlight-text)}.vs__dropdown-option.vs__dropdown-option--highlight>.option-kind-highlighted[data-v-0abf511e],.vs__dropdown-option.vs__dropdown-option--selected>.option-kind-highlighted[data-v-0abf511e],.vs__dropdown-option>.option-kind-highlighted[data-v-0abf511e]:hover{color:var(--dropdown-hover-text)}",""]),t.exports=e},"3ad3":function(t,e,n){var r=n("4c0b"),o=r(Object.keys,Object);t.exports=o},"3b54":function(t,e,n){var r=n("c364"),o=n("cb86"),i=n("c68c");function a(t,e,n){var a=-1,s=e.length,c={};while(++a=e||n<0||g&&r>=d}function O(){var t=o();if(x(t))return k(t);f=setTimeout(O,_(t))}function k(t){return f=void 0,m&&l?y(t):(l=u=void 0,p)}function A(){void 0!==f&&clearTimeout(f),v=0,l=h=u=f=void 0}function E(){return void 0===f?p:k(o())}function S(){var t=o(),n=x(t);if(l=arguments,u=this,h=t,n){if(void 0===f)return w(h);if(g)return clearTimeout(f),f=setTimeout(O,e),y(h)}return void 0===f&&(f=setTimeout(O,e)),p}return e=i(e)||0,r(n)&&(b=!!n.leading,g="maxWait"in n,d=g?s(i(n.maxWait)||0,e):d,m="trailing"in n?!!n.trailing:m),S.cancel=A,S.flush=E,S}t.exports=l},"45d2":function(t){t.exports=JSON.parse('{"hasStylesheet":"false"}')},"462f":function(t,e,n){"use strict";n.d(e,"H",(function(){return a})),n.d(e,"s",(function(){return s})),n.d(e,"J",(function(){return c})),n.d(e,"I",(function(){return l})),n.d(e,"x",(function(){return u})),n.d(e,"w",(function(){return d})),n.d(e,"t",(function(){return f})),n.d(e,"u",(function(){return h})),n.d(e,"b",(function(){return v})),n.d(e,"c",(function(){return b})),n.d(e,"e",(function(){return g})),n.d(e,"f",(function(){return m})),n.d(e,"y",(function(){return y})),n.d(e,"z",(function(){return w})),n.d(e,"n",(function(){return _})),n.d(e,"N",(function(){return x})),n.d(e,"O",(function(){return O})),n.d(e,"Q",(function(){return k})),n.d(e,"P",(function(){return A})),n.d(e,"M",(function(){return E})),n.d(e,"K",(function(){return S})),n.d(e,"g",(function(){return C})),n.d(e,"o",(function(){return T})),n.d(e,"B",(function(){return R})),n.d(e,"v",(function(){return I})),n.d(e,"C",(function(){return L})),n.d(e,"A",(function(){return j})),n.d(e,"q",(function(){return N})),n.d(e,"k",(function(){return D})),n.d(e,"l",(function(){return P})),n.d(e,"m",(function(){return $})),n.d(e,"G",(function(){return M})),n.d(e,"L",(function(){return F})),n.d(e,"F",(function(){return B})),n.d(e,"T",(function(){return U})),n.d(e,"R",(function(){return G})),n.d(e,"S",(function(){return H})),n.d(e,"j",(function(){return V})),n.d(e,"r",(function(){return q})),n.d(e,"p",(function(){return z})),n.d(e,"d",(function(){return K})),n.d(e,"i",(function(){return W})),n.d(e,"a",(function(){return X})),n.d(e,"E",(function(){return J})),n.d(e,"h",(function(){return Q})),n.d(e,"D",(function(){return Z}));var r=n("4ac6"),o=n("907c"),i=n("0fb1");const a={name:"state",labelKey:"tableHeaders.state",sort:["stateSort","nameSort"],value:"stateDisplay",getValue:t=>t.stateDisplay,width:100,default:"unknown",formatter:"BadgeStateFormatter"},s={name:"name",labelKey:"tableHeaders.name",value:"nameDisplay",getValue:t=>t.nameDisplay,sort:["nameSort"],formatter:"LinkDetail",canBeVariable:!0},c={name:"storage_class_provisioner",labelKey:"tableHeaders.storage_class_provisioner",value:"provisionerDisplay",sort:["provisioner"]},l={name:"storage_class_default",labelKey:"tableHeaders.default",value:"isDefault",sort:["isDefault"],formatter:"Checked"},u={name:"persistent_volume_source",labelKey:"tableHeaders.persistentVolumeSource",value:"source",sort:["provisioner"]},d={name:"persistent-volume-claim",labelKey:"tableHeaders.persistentVolumeClaim",sort:["nameSort"],value:"claimName",formatter:"LinkDetail",formatterOpts:{reference:"claim.detailLocation"}},p={name:"localOutputRefs",labelKey:"tableHeaders.output",value:"outputs",sort:["outputsSortable"],formatter:"ListLink",formatterOpts:{options:{internal:!0}}},f={name:"namespace",labelKey:"tableHeaders.namespace",value:"namespace",getValue:t=>t.namespace,sort:"namespace",dashIfEmpty:!0},h={name:"node",labelKey:"tableHeaders.node",value:"spec.nodeName",getValue:t=>{var e;return null===(e=t.spec)||void 0===e?void 0:e.nodeName},sort:"spec.nodeName",formatter:"LinkName",formatterOpts:{type:o["n"]}},v={name:"age",labelKey:"tableHeaders.age",value:"creationTimestamp",getValue:t=>t.creationTimestamp,sort:"creationTimestamp:desc",search:!1,formatter:"LiveDate",width:100,align:"left"},b={...v,getValue:t=>t.created,value:"created",sort:"created:desc"},g={name:"description",labelKey:"tableHeaders.description",align:"left",sort:["description"],width:300},m={name:"duration",labelKey:"tableHeaders.duration",value:"duration.value",sort:"duration.seconds",formatter:"LiveDuration"},y={name:"pod_images",labelKey:"tableHeaders.podImages",value:"imageNames",getValue:t=>t.imageNames,sort:"imageNames",formatter:"PodImages"},w={name:"pod_restarts",labelKey:"tableHeaders.podRestarts",formatter:"LivePodRestarts",delayLoading:!0,value:"restartCount",getValue:t=>t.restartCount,search:!1,liveUpdates:!0},_={name:"keys",labelKey:"tableHeaders.keys",sort:!1,value:"keysDisplay"},x={name:"username",labelKey:"tableHeaders.username",value:"username",dashIfEmpty:!0,sort:"username"},O={name:"name",labelKey:"tableHeaders.name",value:"nameDisplay",sort:["nameSort"],dashIfEmpty:!0},k={name:"provider",labelKey:"tableHeaders.provider",value:"providerDisplay",dashIfEmpty:!0,sort:"providerDisplay"},A={name:"user-id",labelKey:"tableHeaders.userId",value:"id",formatter:"LinkDetail",canBeVariable:!0,sort:"id"},E={name:"type",labelKey:"tableHeaders.type",value:"typeDisplay",getValue:t=>t.typeDisplay,sort:["typeDisplay"],width:100},S={name:"subType",labelKey:"tableHeaders.subType",value:"subTypeDisplay",sort:["subTypeDisplay"],width:120},C={name:"type",labelKey:"tableHeaders.type",value:"eventType",sort:"eventType"},T={name:"lastSeen",labelKey:"tableHeaders.lastSeen",value:"lastSeen",sort:"lastTimestamp:desc",tooltip:"tableHeaders.lastSeenTooltip"},R={name:"reason",labelKey:"tableHeaders.reason",value:"reason",sort:["reason"]},I={name:"object",labelKey:"tableHeaders.object",value:"involvedObject",sort:["involvedObject.kind","involvedObject.name"],canBeVariable:!0,formatter:"InvolvedObjectLink"},L={name:"reclaimPolicy",labelKey:"tableHeaders.reclaimPolicy",value:"spec.persistentVolumeReclaimPolicy",sort:["spec.persistentVolumeReclaimPolicy"]},j={name:"pvReason",labelKey:"tableHeaders.reason",value:"status.reason",sort:["status.reason"]},N={name:"message",labelKey:"tableHeaders.message",value:"message",sort:["message"]},D={name:"ingressClassName",labelKey:"tableHeaders.ingressClass",value:"$['spec']['ingressClassName']",sort:"$['spec']['ingressClassName']"},P={name:"ingressDefaultBackend",labelKey:"tableHeaders.ingressDefaultBackend",value:"hasDefaultBackend",sort:["hasDefaultBackend:desc"],formatter:"Checked",width:75,align:"center"},$={name:"ingressTarget",labelKey:"tableHeaders.ingressTarget",value:"$['spec']",formatter:"IngressTarget",sort:"$['spec']['rules'][0].host"},M={name:"type",labelKey:"tableHeaders.type",value:"$['spec']['type']",sort:"$['spec']['type']",formatter:"ServiceType"},F={formatter:"ServiceTargets",labelKey:"tableHeaders.targetPort",name:"targetPort",sort:"$['spec']['targetPort']",value:"$['spec']['targetPort']"},B={formatter:"KeyValue",name:"selector",labelKey:"tableHeaders.selector",value:"$['spec']['selector']",sort:"$['spec']['selector']"},U={...y,value:"",breakpoint:i["a"].LAPTOP},G={name:"workloadEndpoints",labelKey:"tableHeaders.endpoints",value:`$['metadata']['annotations']['${r["b"]}']`,getValue:t=>{var e,n;return null===(e=t.metadata)||void 0===e||null===(n=e.annotations)||void 0===n?void 0:n[r["b"]]},formatter:"Endpoints",dashIfEmpty:!0,breakpoint:i["a"].DESKTOP,maxPageSize:25},H={name:"workloadHealthScale",labelKey:"tableHeaders.health",formatter:"WorkloadHealthScale",getValue:()=>{},width:150,skipSelect:!0,delayLoading:!0,search:!1,liveUpdates:!0},V={name:"reference",labelKey:"tableHeaders.hpaReference",value:"spec.scaleTargetRef.name",sort:"spec.scaleTargetRef.name"},q={name:"minimum-replica",labelKey:"tableHeaders.minReplicas",value:"spec.minReplicas",sort:"spec.minReplicas"},z={name:"maximum-replica",labelKey:"tableHeaders.maxReplicas",value:"spec.maxReplicas",sort:"spec.maxReplicas"},K={name:"current-replica",labelKey:"tableHeaders.currentReplicas",value:"status.currentReplicas",sort:"status.currentReplicas"},W={...a,value:"$",formatter:"LiveExpiryBadgeState"},X={name:"id",labelKey:"tableHeaders.accessKey",align:"left",sort:["name"],width:200},Y={name:"scope",value:"clusterName",labelKey:"tableHeaders.scope",dashIfEmpty:!0,align:"left",sort:["scope"],width:100},J={...Y,value:"clusterId",sort:["clusterId"]},Q={name:"expires",value:"expiresAt",labelKey:"tableHeaders.expires",align:"left",sort:["expiresAt"],width:200,formatter:"LiveExpiryDate"},Z={name:"role",value:"roleDisplay",labelKey:"tableHeaders.role"}},4638:function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".labeled-tooltip{position:absolute;width:100%;height:100%;left:0;top:0}.labeled-tooltip.hoverable{height:0%}.labeled-tooltip .status-icon{position:absolute;right:30px;top:18px;z-index:3}.labeled-tooltip .tooltip{position:absolute;width:calc(100% + 2px);top:calc(100% + 6px)}.labeled-tooltip .tooltip .tooltip-arrow{right:30px}.labeled-tooltip .tooltip .tooltip-inner{padding:10px}.labeled-tooltip.error .status-icon{color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-inner{color:var(--input-bg);background:var(--error);border-color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-arrow{border-bottom-color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-arrow:after{border:none}.labeled-tooltip.error .status-icon{top:7px;right:5px}.labeled-tooltip.warning .status-icon{color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-inner{color:var(--input-bg);background:var(--warning);border-color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-arrow{border-bottom-color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-arrow:after{border:none}.labeled-tooltip.success .status-icon{color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-inner{color:var(--input-bg);background:var(--success);border-color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-arrow{border-bottom-color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-arrow:after{border:none}.tooltip .tooltip-inner>pre{padding:2px;vertical-align:middle}",""]),t.exports=e},4774:function(t,e,n){var r=n("cd68"),o=n("500b"),i=n("ecf6");function a(t,e){return i(o(t,e,r),t+"")}t.exports=a},4778:function(t,e,n){var r=n("4b2c"),o=n("986c"),i=n("a4fc"),a=n("659f"),s=n("6944"),c=n("5e52"),l=1,u=2,d="[object Boolean]",p="[object Date]",f="[object Error]",h="[object Map]",v="[object Number]",b="[object RegExp]",g="[object Set]",m="[object String]",y="[object Symbol]",w="[object ArrayBuffer]",_="[object DataView]",x=r?r.prototype:void 0,O=x?x.valueOf:void 0;function k(t,e,n,r,x,k,A){switch(n){case _:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case w:return!(t.byteLength!=e.byteLength||!k(new o(t),new o(e)));case d:case p:case v:return i(+t,+e);case f:return t.name==e.name&&t.message==e.message;case b:case m:return t==e+"";case h:var E=s;case g:var S=r&l;if(E||(E=c),t.size!=e.size&&!S)return!1;var C=A.get(t);if(C)return C==e;r|=u,A.set(t,e);var T=a(E(t),E(e),r,x,k,A);return A["delete"](t),T;case y:if(O)return O.call(t)==O.call(e)}return!1}t.exports=k},"479b":function(t,e,n){var r=n("a4fc"),o=n("f72d"),i=n("a67c"),a=n("b506");function s(t,e,n){if(!a(n))return!1;var s=typeof e;return!!("number"==s?o(n)&&i(e,n.length):"string"==s&&e in n)&&r(n[e],t)}t.exports=s},"47be":function(t,e,n){"use strict";n("867e")},"489a":function(t,e){var n=Object.prototype,r=n.hasOwnProperty;function o(t,e){return null!=t&&r.call(t,e)}t.exports=o},4914:function(t,e,n){var r=n("8683");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("462656a4",r,!0,{sourceMap:!1,shadowMode:!1})},"494f":function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},"4a83":function(t,e,n){var r=n("d3e6"),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,a=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,(function(t,n,r,o){e.push(r?o.replace(i,"$1"):n||t)})),e}));t.exports=a},"4a8f":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));const r="backTo"},"4ac6":function(t,e,n){"use strict";n.d(e,"f",(function(){return r})),n.d(e,"c",(function(){return o})),n.d(e,"g",(function(){return i})),n.d(e,"b",(function(){return a})),n.d(e,"e",(function(){return c})),n.d(e,"a",(function(){return l})),n.d(e,"d",(function(){return u}));const r="field.cattle.io/name",o="field.cattle.io/description",i="field.cattle.io/projectId",a="field.cattle.io/publicEndpoints",s=/cattle\.io\//,c=[s],l=[s],u={CLOUD_INIT:"harvesterhci.io/cloud-init-template",CLOUD_PROVIDER_IPAM:"cloudprovider.harvesterhci.io/ipam",NETWORK_ROUTE:"network.harvesterhci.io/route",IMAGE_NAME:"harvesterhci.io/image-name",NETWORK_TYPE:"network.harvesterhci.io/type",PRIMARY_SERVICE:"cloudprovider.harvesterhci.io/primary-service"}},"4b12":function(t,e,n){var r=n("379a");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("125435f2",r,!0,{sourceMap:!1,shadowMode:!1})},"4b2c":function(t,e,n){var r=n("201b"),o=r.Symbol;t.exports=o},"4b48":function(t,e){function n(t,e){return t.has(e)}t.exports=n},"4b7a":function(t,e,n){var r=n("effc"),o=n("280a"),i=n("cd68"),a=n("c316"),s=n("d440");function c(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?a(t)?o(t[0],t[1]):r(t):s(t)}t.exports=c},"4b91":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".delete-warning[data-v-3a26ac99]{color:var(--error)}.remove-project-dialog[data-v-3a26ac99]{border:1px solid var(--border);padding:10px;border-radius:5px}.remove-project-dialog .display-name[data-v-3a26ac99]{font-weight:700}",""]),t.exports=e},"4c0b":function(t,e){function n(t,e){return function(n){return t(e(n))}}t.exports=n},"4efd":function(t,e,n){var r=n("d856"),o=n("54f6"),i=n("f9f5"),a=n("40cc"),s=n("994b");function c(t){var e=-1,n=null==t?0:t.length;this.clear();while(++et.replace(/^ui-/,""),mangleWrite:t=>"ui-"+t}),o("pcs","",{asCookie:a,asUserPreference:!1}),o("locale","en-us",{asCookie:a}),o("keymap","sublime",{options:["sublime","emacs","vim"]}),o("per-page",100,{options:[10,25,50,100],parseJSON:i})),d=(o("logs-wrap",!0,{parseJSON:i}),o("logs-time",!0,{parseJSON:i}),o("logs-range","30 minutes",{parseJSON:i}),o("hide-repos",[],{parseJSON:i}),o("hide-desc",[],{parseJSON:i}),o("hide-sensitive",!0,{options:[!0,!1],parseJSON:i}),o("show-pre-release",!1,{options:[!1,!0],parseJSON:i}),o("chart-mode","featured",{parseJSON:i}),o("date-format","ddd, MMM D YYYY",{options:["ddd, MMM D YYYY","ddd, D MMM YYYY","D/M/YYYY","M/D/YYYY","YYYY-MM-DD"]}),o("time-format","h:mm:ss a",{options:["h:mm:ss a","HH:mm:ss"]}),o("time-zone","local"),o("dev",!1,{parseJSON:i})),p=o("view-in-api",!1,{parseJSON:i,inheritFrom:d}),f=(o("all-namespaces",!1,{parseJSON:i,inheritFrom:d}),o("theme-shortcut",!1,{parseJSON:i,inheritFrom:d}),o("last-visited","home",{parseJSON:i}),o("seen-whatsnew","",{parseJSON:i}),o("read-whatsnew","",{parseJSON:i}),o("after-login-route","home",{parseJSON:i})),h=(o("home-page-cards",{},{parseJSON:i}),o("plugin-developer",!1,{parseJSON:i,inheritFrom:d}),"rke1"),v="rke2";o("provisioner",v,{options:[h,v]}),o("hide-psp-deprecation-banner",!1,{parseJSON:i}),o("menu-max-clusters",4,{options:[2,3,4,5,6,7,8,9,10],parseJSON:i}),o("scale-pool-prompt",null,{parseJSON:i})}).call(this,n("07d9"))},"500b":function(t,e,n){var r=n("cda3"),o=Math.max;function i(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){var i=arguments,a=-1,s=o(i.length-e,0),c=Array(s);while(++a0&&t.canSeeProjectlessNamespaces?e("div",{staticClass:"mt-20 remove-project-dialog"},[e("Checkbox",{attrs:{label:t.t("promptRemove.deleteAssociatedNamespaces")},model:{value:t.deleteProjectNamespaces,callback:function(e){t.deleteProjectNamespaces=e},expression:"deleteProjectNamespaces"}}),e("div",{staticClass:"mt-10 ml-20"},[e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.resourceNames(t.names,t.plusMore,t.t),expression:"resourceNames(names, plusMore, t)"}]})])],1):t._e()])])},o=[],i=n("9ce4"),a=n("4ac6"),s=n("907c"),c=n("0df0"),l=n("2cb5"),u={name:"ProjectAndNamespacesPromptRemove",components:{Checkbox:c["a"]},props:{value:{type:Array,default:()=>[]},type:{type:String,required:!0}},async fetch(){this.allNamespaces=await this.$store.dispatch("cluster/findAll",{type:s["l"]}),this.allProjects=await this.$store.dispatch("management/findAll",{type:s["j"].PROJECT})},data(){return{deleteProjectNamespaces:!1,allNamespaces:[],allProjects:[]}},computed:{...Object(i["b"])("action-menu",["toRemove"]),...Object(i["a"])({t:"i18n/t"}),...Object(i["a"])(["currentCluster"]),currentProject(){return this.allProjects?this.value[0]:{}},filteredNamespaces(){return this.currentProject?this.allNamespaces.filter(t=>{var e;return t.metadata.labels[a["g"]]===(null===(e=this.currentProject.metadata)||void 0===e?void 0:e.name)}):[]},plusMore(){const t=this.filteredNamespaces.length>5?this.filteredNamespaces.length-5:0;return this.t("promptRemove.andOthers",{count:t})},displayName(){var t,e;return null===(t=this.currentProject)||void 0===t||null===(e=t.spec)||void 0===e?void 0:e.displayName},names(){return this.filteredNamespaces.map(t=>t.nameDisplay).slice(0,5)},canSeeProjectlessNamespaces(){return this.currentCluster.canUpdate}},methods:{resourceNames:l["m"],remove(){return!(!this.deleteProjectNamespaces&&this.canSeeProjectlessNamespaces)&&Promise.all(this.filteredNamespaces.map(t=>t.remove())).then(()=>!1)}}},d=u,p=(n("dd58"),n("d802")),f=Object(p["a"])(d,r,o,!1,null,"3a26ac99",null);e["default"]=f.exports},5622:function(t,e,n){"use strict";n("98b4")},"573c":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]{background-color:transparent;border:none;font-size:18px}.table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]:focus,.table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]:hover{background-color:var(--accent-btn);box-shadow:none}.table-options-group .table-options-container[data-v-96d8a090]{width:350px;border:1px solid var(--primary);background-color:var(--body-bg);padding:20px;z-index:1}.table-options-group .table-options-container .table-options-grouping[data-v-96d8a090]{display:flex;align-items:center;margin-bottom:20px}.table-options-group .table-options-container .table-options-grouping span[data-v-96d8a090]{white-space:nowrap;margin-right:10px}.table-options-group .table-options-container ul[data-v-96d8a090]{list-style:none;margin:0;padding:0;max-height:200px;overflow-y:auto}.table-options-group .table-options-container ul li[data-v-96d8a090]{margin:0;padding:0}.table-options-group .table-options-container ul li.visible[data-v-96d8a090]{margin:0 0 10px 0}.sortable>SPAN[data-v-96d8a090]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.sortable>SPAN[data-v-96d8a090]:active,.sortable>SPAN[data-v-96d8a090]:hover{text-decoration:underline;color:var(--body-text)}thead tr[data-v-96d8a090]{background-color:var(--sortable-table-header-bg);color:var(--body-text);text-align:left}thead tr[data-v-96d8a090]:not(.loading){border-bottom:1px solid var(--sortable-table-top-divider)}th[data-v-96d8a090]{padding:8px 5px;font-weight:400;border:0;color:var(--body-text)}th .table-header-container[data-v-96d8a090]{display:inherit}th .table-header-container>span[data-v-96d8a090]{display:flex;align-items:center}th .table-header-container.not-filterable[data-v-96d8a090],th .table-header-container.not-filterable .icon-stack[data-v-96d8a090]{margin-top:-2px}th .table-header-container .not-filter-icon[data-v-96d8a090]{font-size:16px;color:var(--primary);vertical-align:super}th[data-v-96d8a090]:first-child{padding-left:10px}th[data-v-96d8a090]:last-child{padding-right:10px}th:not(.sortable)>SPAN[data-v-96d8a090]{display:block;margin-bottom:2px}th A[data-v-96d8a090]{color:var(--body-text)}@media only screen and (max-width:480px){th.desktop[data-v-96d8a090],th.laptop[data-v-96d8a090],th.tablet[data-v-96d8a090]{display:none}}@media only screen and (max-width:992px){th.desktop[data-v-96d8a090],th.laptop[data-v-96d8a090]{display:none}}@media only screen and (max-width:1281px){th.desktop[data-v-96d8a090]{display:none}}.icon-stack[data-v-96d8a090]{width:12px}.icon-sort.faded[data-v-96d8a090]{opacity:.3}",""]),t.exports=e},5801:function(t,e,n){"use strict";n.r(e);var r=function(){var t=this,e=t._self._c;return e("div",{staticClass:"mt-10"},[e("div",{staticClass:"mb-30"},[t._v(" "+t._s(t.t("promptRemove.attemptingToRemove",{type:t.type}))+" "),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.podNames,expression:"podNames"}],staticClass:"machine-name"})]),e("div",{staticClass:"mb-30"},[e("Checkbox",{attrs:{label:t.t("promptForceRemove.forceDelete")},model:{value:t.forceDelete,callback:function(e){t.forceDelete=e},expression:"forceDelete"}})],1),e("Banner",{attrs:{color:"warning","label-key":"promptForceRemove.podRemoveWarning"}}),t._l(t.errors,(function(t,n){return e("Banner",{key:n,attrs:{color:"error",label:t}})}))],2)},o=[],i=function(){var t=this,e=t._self._c;t._self._setupProxy;return e("div",{staticClass:"banner",class:{[t.color]:!0}},[t.icon?e("div",{staticClass:"banner__icon",attrs:{"data-testid":"banner-icon"}},[e("i",{staticClass:"icon icon-2x",class:t.icon})]):t._e(),e("div",{staticClass:"banner__content",class:{closable:t.closable,stacked:t.stacked,icon:t.icon},attrs:{"data-testid":"banner-content"}},[t._t("default",(function(){return[t.labelKey?e("t",{attrs:{k:t.labelKey,raw:!0}}):t.messageLabel?e("span",[t._v(t._s(t.messageLabel))]):e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.nlToBr(t.label),expression:"nlToBr(label)"}]})]})),t.closable?e("div",{staticClass:"banner__content__closer",on:{click:function(e){return t.$emit("close")}}},[e("i",{staticClass:"icon icon-close closer-icon",attrs:{"data-testid":"banner-close"}})]):t._e()],2)])},a=[],s=n("8bbf"),c=n.n(s),l=n("2cb5"),u=n("3e9d"),d=c.a.extend({props:{color:{type:String,default:"secondary"},label:{type:[String,Error,Object],default:null},labelKey:{type:String,default:null},icon:{type:String,default:null},closable:{type:Boolean,default:!1},stacked:{type:Boolean,default:!1}},computed:{messageLabel(){return"string"!==typeof this.label?Object(u["b"])(this.label):void 0}},methods:{nlToBr:l["j"]}}),p=d,f=(n("0843"),n("d802")),h=Object(f["a"])(p,i,a,!1,null,"02d86e5d",null),v=h.exports,b=n("1032"),g=n("9ce4"),m=n("9ec3"),y={name:"PromptRemovePodDialog",components:{Banner:v,Checkbox:b["a"]},props:{value:{type:Array,default:()=>[]},names:{type:Array,default:()=>[]},type:{type:String,required:!0}},data(){return{errors:[],forceDelete:!1}},computed:{...Object(g["b"])("action-menu",["toRemove"]),...Object(g["a"])({t:"i18n/t"}),plusMore(){const t=this.names.length-this.names.length;return this.t("promptRemove.andOthers",{count:t})},podNames(){return this.names.reduce((t,e,n)=>(n>=5||(t+=`${e}`,n===this.names.length-1?t+=this.plusMore:t+=n===this.toRemove.length-2?" and ":", "),t),"")}},methods:{async remove(t){const e=this.$parent.$parent.$parent;let n;e.doneLocation&&(n={...e.doneLocation});try{await Promise.all(this.value.map(t=>this.removePod(t))),n&&!Object(m["isEmpty"])(n)&&e.currentRouter.push(n),e.close()}catch(r){e.error=r,t(!1)}},removePod(t){const e=this.forceDelete?{data:{gracePeriod:0,force:!0}}:void 0;return t.remove(e)}}},w=y,_=(n("c210"),Object(f["a"])(w,r,o,!1,null,"db441fb2",null));e["default"]=_.exports},5877:function(e,n){e.exports=t},"5b4b":function(t,e){function n(t,e){var n=-1,r=null==t?0:t.length,o=0,i=[];while(++n*{flex:0}.card-container.card-sticky .card-wrap .card-body{flex:1}",""]),t.exports=e},"5f84":function(t,e){function n(){return[]}t.exports=n},"5fe6":function(t,e,n){var r=n("2419"),o=n("39f2"),i=n("b022"),a=n("1fce"),s=n("494f"),c=n("4b48"),l=200;function u(t,e,n,u){var d=-1,p=o,f=!0,h=t.length,v=[],b=e.length;if(!h)return v;n&&(e=a(e,s(n))),u?(p=i,f=!1):e.length>=l&&(p=c,f=!1,e=new r(e));t:while(++d0&&n(u)?e>1?i(u,e-1,n,a,s):r(s,u):a||(s[s.length]=u)}return s}t.exports=i},"629b":function(t,e,n){var r=n("6bcf"),o=1/0;function i(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-o?"-0":e}t.exports=i},"640c":function(t,e,n){"use strict";n.d(e,"a",(function(){return h}));var r=n("4ac6"),o=n("8eaf"),i=n.n(o),a=n("7fd6"),s=n.n(a),c=n("8bbf"),l=n.n(c),u=n("2cb5"),d=n("9c09");function p(t){const e=["state","name","description","labels","annotations"];return e.forEach(e=>delete t[e]),t}class f extends d["b"]{constructor(t,e,n=null,r=!1){const o=p(t);super(o,e,n,r)}get labels(){var t;const e=(null===(t=this.metadata)||void 0===t?void 0:t.labels)||{};return i()(e,(t,e)=>Object(u["i"])(e,r["e"]))}setLabels(t){this.metadata||(this.metadata={});const e=this.metadata.labels||{},n=s()(e,(t,e)=>Object(u["i"])(e,r["e"]));l.a.set(this.metadata,"labels",{...n,...t})}setLabel(t,e){var n;e?(this.metadata||(this.metadata={}),this.metadata.labels||(this.metadata.labels={}),l.a.set(this.metadata.labels,t,e)):null!==(n=this.metadata)&&void 0!==n&&n.labels&&(l.a.set(this.metadata.labels,t,void 0),delete this.metadata.labels[t])}get annotations(){var t;const e=(null===(t=this.metadata)||void 0===t?void 0:t.annotations)||{};return i()(e,(t,e)=>Object(u["i"])(e,r["a"]))}setAnnotations(t){this.metadata||(this.metadata={});const e=this.metadata.annotations||{},n=s()(e,(t,e)=>Object(u["i"])(e,r["a"]));l.a.set(this.metadata,"annotations",{...n,...t})}setAnnotation(t,e){var n;e?(this.metadata||(this.metadata={}),this.metadata.annotations||(this.metadata.annotations={}),l.a.set(this.metadata.annotations,t,e)):null!==(n=this.metadata)&&void 0!==n&&n.annotations&&(l.a.set(this.metadata.annotations,t,void 0),delete this.metadata.annotations[t])}get state(){var t;return(null===(t=this.stateObj)||void 0===t?void 0:t.name)||"unknown"}}class h extends f{get name(){var t;return(null===(t=this.metadata)||void 0===t?void 0:t.name)||this._name}get namespace(){var t;return null===(t=this.metadata)||void 0===t?void 0:t.namespace}get description(){var t,e,n;return(null===(t=this.metadata)||void 0===t||null===(e=t.annotations)||void 0===e?void 0:e[r["c"]])||(null===(n=this.spec)||void 0===n?void 0:n.description)||this._description}set description(t){var e;null!==(e=this.metadata)&&void 0!==e&&e.annotations&&(this.metadata.annotations[r["c"]]=t),this.spec&&(this.spec.description=t),this._description=t}}},6444:function(t,e,n){"use strict";t.exports=function(t,e){return e||(e={}),t=t&&t.__esModule?t.default:t,"string"!==typeof t?t:(/^['"].*['"]$/.test(t)&&(t=t.slice(1,-1)),e.hash&&(t+=e.hash),/["'() \t\n]/.test(t)||e.needQuotes?'"'.concat(t.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):t)}},"653d":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));const r="R_REDIRECTED"},6552:function(t,e,n){var r=n("51db"),o=n("0f8f"),i=n("cc7f");function a(t,e){return null==t?t:r(t,o(e),i)}t.exports=a},"659f":function(t,e,n){var r=n("2419"),o=n("9b25"),i=n("4b48"),a=1,s=2;function c(t,e,n,c,l,u){var d=n&a,p=t.length,f=e.length;if(p!=f&&!(d&&f>p))return!1;var h=u.get(t),v=u.get(e);if(h&&v)return h==e&&v==t;var b=-1,g=!0,m=n&s?new r:void 0;u.set(t,e),u.set(e,t);while(++b{const{name:a,nodePort:c,port:l,targetPort:u}=t,d=r+1;if(i.length>1&&o()(a)&&n.push(e["i18n/t"]("validation.service.ports.name.required",{position:d})),!o()(a)){const t=Object(s["d"])(a,"name",e,void 0,n);o()(t)||(n=n.length&&n.length>0?[...n,...t]:t)}if(c){const t=parseInt(c,10);isNaN(t)&&n.push(e["i18n/t"]("validation.service.ports.nodePort.requiredInt",{position:d}))}if(l){const t=parseInt(l,10);isNaN(t)&&n.push(e["i18n/t"]("validation.service.ports.port.requiredInt",{position:d}))}else n.push(e["i18n/t"]("validation.service.ports.port.required",{position:d}));if(u){const t=e["i18n/t"]("validation.service.ports.targetPort.ianaAt",{position:d}),r=parseInt(u,10),i=new RegExp("^\\d+$"),a=i.test(u);if(a)(r<1||r>65535)&&n.push(e["i18n/t"]("validation.service.ports.targetPort.between",{position:d}));else{const r={ianaServiceName:!0,maxLength:15,validChars:"A-Za-z0-9-"},i=Object(s["d"])(u,t,e,r,n);o()(i)||n.push(...i)}}else n.push(e["i18n/t"]("validation.service.ports.targetPort.required",{position:d}))}),n)}function l(t,e,n,r){const o=["ClusterIP","NodePort","LoadBalancer"],i=null===t||void 0===t?void 0:t.type;return o.includes(i),n}function u(t,e,n,r){if("ExternalName"===(null===t||void 0===t?void 0:t.type))if(o()(null===t||void 0===t?void 0:t.externalName))n.push(e["i18n/t"]("validation.service.externalName.none"));else{const r=Object(s["f"])(t.externalName,"ExternalName",e,void 0,n);o()(r)||(n=n.length&&n.length>0?[...n,...r]:r)}return n}var d=n("d66a"),p=n.n(d);function f(t,e,n,r){return o()(null===t||void 0===t?void 0:t.groups)&&n.push(e["i18n/t"]("validation.prometheusRule.groups.required")),n}function h(t=[],e,n,r){return t.forEach((t,r)=>{const i=r+1;o()(null===t||void 0===t?void 0:t.name)&&n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.name",{index:i})),o()(null===t||void 0===t?void 0:t.rules)?n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.singleEntry",{index:i})):t.rules.forEach((t,r)=>{const a=r+1;p()(t,"alert")&&o()(null===t||void 0===t?void 0:t.alert)?n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.rule.alertName",{groupIndex:i,ruleIndex:a})):p()(t,"record")&&o()(null===t||void 0===t?void 0:t.record)&&n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.rule.recordName",{groupIndex:i,ruleIndex:a})),(p()(t,"expr")&&o()(t.expr)||!p()(t,"expr"))&&n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.rule.expr",{groupIndex:i,ruleIndex:a})),p()(t,"alert")&&(p()(t,"labels")&&o()(t.labels)||!p()(t,"labels"))&&n.push(e["i18n/t"]("validation.prometheusRule.groups.valid.rule.labels",{groupIndex:i,ruleIndex:a}))})}),n}function v(t,e,n,r){o()(null===t||void 0===t?void 0:t.match)&&o()(null===t||void 0===t?void 0:t["match_re"])&&n.push(e["i18n/t"]("validation.monitoring.route.match"))}function b(t,e,n,r,o){/^\d+[hms]$/.test(t)||n.push(e["i18n/t"]("validation.monitoring.route.interval",{key:o}))}var g=n("e24b");function m(t,e,n){let r;r=t.jobTemplate?Object(g["f"])(t,"jobTemplate.spec.template.spec"):Object(g["f"])(t,"template.spec"),r.containers&&r.containers.length?r.containers.forEach(t=>{t&&!t.image&&n.push(e["i18n/t"]("workload.validation.containerImage",{name:t.name}))}):n.push(e["i18n/t"]("validation.required",{key:e["i18n/t"]("workload.container.titles.containers")}))}var y=n("2105"),w=n.n(y);function _(t="",e,n){try{w.a.toString(t)}catch(r){n.push(e["i18n/t"]("validation.invalidCron"))}}function x(t,e,n){if(!t)return;const{podAffinity:r,podAntiAffinity:o}=t;if(r&&!Object(g["g"])(r)){const{preferredDuringSchedulingIgnoredDuringExecution:t=[],requiredDuringSchedulingIgnoredDuringExecution:o=[]}=r;t.forEach((t,r)=>{const o={index:r,group:e["i18n/t"]("validation.podAffinity.affinityTitle"),rules:e["i18n/t"]("validation.podAffinity.preferredDuringSchedulingIgnoredDuringExecution")};O(t,o,e,n);const{podAffinityTerm:i={}}=t;k(i,o,e,n),A(i,o,e,n)}),o.forEach((t,r)=>{const o={index:r,group:e["i18n/t"]("validation.podAffinity.affinityTitle"),rules:e["i18n/t"]("validation.podAffinity.requiredDuringSchedulingIgnoredDuringExecution")};k(t,o,e,n),A(t,o,e,n)})}if(o&&!Object(g["g"])(o)){const{preferredDuringSchedulingIgnoredDuringExecution:t=[],requiredDuringSchedulingIgnoredDuringExecution:r=[]}=o;t.forEach((t,r)=>{const o={index:r,group:e["i18n/t"]("validation.podAffinity.antiAffinityTitle"),rules:e["i18n/t"]("validation.podAffinity.preferredDuringSchedulingIgnoredDuringExecution")};O(t,o,e,n);const{podAffinityTerm:i={}}=t;k(i,o,e,n),A(i,o,e,n)}),r.forEach((t,r)=>{const o={index:r,group:e["i18n/t"]("validation.podAffinity.antiAffinityTitle"),rules:e["i18n/t"]("validation.podAffinity.requiredDuringSchedulingIgnoredDuringExecution")};k(t,o,e,n),A(t,o,e,n)})}}function O(t,e,n,r){const{weight:o=1}=t;("number"!==typeof o||o>100||o<1)&&r.push(n["i18n/t"]("validation.number.between",{key:n["i18n/t"]("workload.scheduling.matchExpressions.weight"),min:1,max:100,...e}))}function k(t,e,n,r){const{topologyKey:o}=t,i=RegExp("([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]");o&&i.test(o)||r.push(n["i18n/t"]("validation.podAffinity.topologyKey",e))}function A(t,e,n,r){const o=["In","NotIn","Exists","DoesNotExist"],{labelSelector:i}=t;if(i&&!Object(g["g"])(i)){const{matchExpressions:t=[]}=i;t.forEach((t,i)=>{const{operator:a,values:s}=t;o.includes(a)||r.push(n["i18n/t"]("validation.podAffinity.matchExpressions.operator",e)),"In"===a||"NotIn"===a?s&&s.length||r.push(n["i18n/t"]("validation.podAffinity.matchExpressions.valuesMustBeDefined",e)):s&&s.length&&r.push(n["i18n/t"]("validation.podAffinity.matchExpressions.valueMustBeEmpty",e))})}}var E=n("907c");function S(t=[],e,n,r=[]){t.some(t=>o()(t.verbs))&&n.push(e["i18n/t"]("validation.roleTemplate.roleTemplateRules.missingVerb")),r[0]===E["t"].ROLE?(t.some(t=>o()(t.resources))&&n.push(e["i18n/t"]("validation.roleTemplate.roleTemplateRules.missingResource")),t.some(t=>o()(t.apiGroups))&&n.push(e["i18n/t"]("validation.roleTemplate.roleTemplateRules.missingApiGroup"))):t.some(t=>o()(t.resources)&&o()(t.nonResourceURLs)&&o()(t.apiGroups))&&n.push(e["i18n/t"]("validation.roleTemplate.roleTemplateRules.missingOneResource"))}function C(t,e,n,r,o){const i="true"===r[0];return i&&(t||"").match(/^(c-.{5}|local)$/i)&&n.push(e["i18n/t"]("validation.cluster.name")),n}const T=["server-url"];function R(t,e,n,r,o){const i=r[0];return T.includes(i)&&!t.toLowerCase().startsWith("https://")&&n.push(e["i18n/t"]("validation.setting.serverUrl.https")),n}e["a"]={clusterName:C,clusterIp:l,externalName:u,flowOutput:i,groupsAreValid:h,logdna:a,ruleGroups:f,interval:b,servicePort:c,matching:v,containerImages:m,cronSchedule:_,podAffinity:x,roleTemplateRules:S,isHttps:R}},7049:function(t,e){function n(t){return this.__data__.has(t)}t.exports=n},7083:function(t,e,n){"use strict";var r,o,i,a,s,c;n.d(e,"c",(function(){return r})),n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return s})),function(t){t["ACTION"]="Action",t["TAB"]="Tab",t["PANEL"]="Panel",t["CARD"]="Card",t["TABLE_COL"]="TableColumn"}(r||(r={})),function(t){t["HEADER"]="header-action",t["TABLE"]="table-action"}(o||(o={})),function(t){t["DETAILS_MASTHEAD"]="details-masthead",t["DETAIL_TOP"]="detail-top",t["RESOURCE_LIST"]="resource-list"}(i||(i={})),function(t){t["RESOURCE_DETAIL"]="tab",t["CLUSTER_CREATE_RKE2"]="cluster-create-rke2"}(a||(a={})),function(t){t["CLUSTER_DASHBOARD_CARD"]="cluster-dashboard-card"}(s||(s={})),function(t){t["RESOURCE"]="resource-list"}(c||(c={}))},7195:function(t,e,n){var r=n("2e63"),o=n("bc61"),i=n("cca9"),a=n("4b7a"),s=n("ff00"),c=n("c316"),l=n("dda8"),u=n("daaf"),d=n("b506"),p=n("41dd");function f(t,e,n){var f=c(t),h=f||l(t)||p(t);if(e=a(e,4),null==n){var v=t&&t.constructor;n=h?f?new v:[]:d(t)&&u(v)?o(s(t)):{}}return(h?r:i)(t,(function(t,r,o){return e(n,t,r,o)})),n}t.exports=f},"71bd":function(t,e,n){var r=n("6a68"),o=n("1ab6"),i=n("e91b"),a=n("413d"),s=n("b03d"),c=n("6efc"),l=n("c316"),u=n("35d9"),d=n("dda8"),p=n("daaf"),f=n("b506"),h=n("2a46"),v=n("41dd"),b=n("2cbd"),g=n("e127");function m(t,e,n,m,y,w,_){var x=b(t,n),O=b(e,n),k=_.get(O);if(k)r(t,n,k);else{var A=w?w(x,O,n+"",t,e,_):void 0,E=void 0===A;if(E){var S=l(O),C=!S&&d(O),T=!S&&!C&&v(O);A=O,S||C||T?l(x)?A=x:u(x)?A=a(x):C?(E=!1,A=o(O,!0)):T?(E=!1,A=i(O,!0)):A=[]:h(O)||c(O)?(A=x,c(x)?A=g(x):f(x)&&!p(x)||(A=s(O))):E=!1}E&&(_.set(O,A),y(A,O,m,w,_),_["delete"](O)),r(t,n,A)}}t.exports=m},"71d2":function(t,e,n){var r=n("6290"),o=1/0;function i(t){var e=null==t?0:t.length;return e?r(t,o):[]}t.exports=i},7212:function(t,e,n){var r=n("122c");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("6a92afb8",r,!0,{sourceMap:!1,shadowMode:!1})},"735f":function(t,e){var n=Function.prototype,r=n.toString;function o(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}t.exports=o},"736a":function(t,e,n){var r=n("927d"),o=1,i=4;function a(t){return r(t,o|i)}t.exports=a},"73b4":function(t,e,n){var r=n("0ee5"),o=n("cfd2"),i=n("9f54");function a(t,e,n){return e===e?i(t,e,n):r(t,o,n)}t.exports=a},"73bd":function(t,e,n){var r=n("c02d"),o=n("a4fc"),i=Object.prototype,a=i.hasOwnProperty;function s(t,e,n){var i=t[e];a.call(t,e)&&o(i,n)&&(void 0!==n||e in t)||r(t,e,n)}t.exports=s},"760b":function(t,e,n){"use strict";var r=n("907c"),o=n("4ac6"),i=n("330a"),a=n.n(i),s=n("d66a"),c=n.n(s),l=n("2105"),u=n.n(l);class d{constructor(t){this.string=String(t),this.int=parseInt(this.string,10),this.empty=!t&&0!==this.int,this.isNumber=!isNaN(this.int)&&!this.string.includes("e"),this.isInt=this.isNumber&&!this.string.includes(".")}}const p=["server-url"],f=(t,e)=>{for(const n of e){const e=n(t);if(e)return e}};e["a"]=function(t,{key:e="Value"}){const n=n=>r=>"."===(null===r||void 0===r?void 0:r.slice(0,1))?t(`validation.dns.${n}.startDot`,{key:e}):void 0,i=n=>r=>"."===(null===r||void 0===r?void 0:r.slice(-1))?t(`validation.dns.${n}.endDot`,{key:e}):void 0,s=n=>r=>{var o;return null!==r&&void 0!==r&&null!==(o=r.slice(0,1))&&void 0!==o&&o.match(/[0-9]/)?t(`validation.dns.${n}.startNumber`,{key:e}):void 0},l=n=>r=>"-"===(null===r||void 0===r?void 0:r.slice(0,1))?t(`validation.dns.${n}.startHyphen`,{key:e}):void 0,h=n=>r=>"-"===(null===r||void 0===r?void 0:r.slice(-1))?t(`validation.dns.${n}.endHyphen`,{key:e}):void 0,v=n=>r=>Number(r)r=>Number(r)>Number(n)?t("validation.maxValue",{key:e,max:n}):void 0,g=([n,r])=>o=>v(n)(o)||b(r)(o)?t("validation.betweenValues",{key:e,min:n,max:r}):void 0,m=n=>r=>r.lengthr=>r.length>Number(n)?t("validation.maxLength",{key:e,max:n}):void 0,w=([n,r])=>o=>m(n)(o)||y(r)(o)?t("validation.betweenLengths",{key:e,min:n,max:r}):void 0,_=n=>isNaN(parseInt(n,10))?t("validation.number.requiredInt",{key:e}):void 0,x=n=>!Number.isInteger(+n)||(""+n).match(/\.+/g)?t("validation.number.requiredInt",{key:e}):void 0,O=n=>+n<0?t("validation.number.isPositive",{key:e}):void 0,k=n=>{const r=""+n,o=r.match(/(^0+)(.+)/);return o?t("validation.number.isOctal",{key:e}):void 0},A=n=>parseInt(n,10)<1||parseInt(n,10)>65535?t("validation.number.between",{key:e,min:"1",max:"65535"}):void 0,E=n=>{const r=null===n||void 0===n?void 0:n.match(/[^${'A-Za-z0-9-'}]/g);if(r)return t("validation.chars",{key:e,count:r.length,chars:r.map(t=>" "===t?"Space":`"${t}"`).join(", ")})},S=n=>"--"===(null===n||void 0===n?void 0:n.substr(2,2))&&"xn"!==(null===n||void 0===n?void 0:n.substr(0,2))?t("validation.dns.doubleHyphen",{key:e}):void 0,C=n=>"--"===(null===n||void 0===n?void 0:n.substr(2,2))&&"xn"!==(null===n||void 0===n?void 0:n.substr(0,2))?t("validation.dns.doubleHyphen",{key:e}):void 0,T=n=>(r="")=>0===r.length?t(`validation.dns.${n}.emptyLabel`,{key:e,min:1}):void 0,R=(n,r=63)=>(o="")=>o.length>r?t(`validation.dns.${n}.tooLongLabel`,{key:e,max:r}):void 0,I=(n="")=>n.length>253?t("validation.dns.hostname.tooLong",{key:e,max:253}):void 0,L=(n="")=>"/"!==n[0]&&n.length>0?t("validation.path",{key:e}):void 0,j=n=>n||!1===n?void 0:t("validation.required",{key:e}),N=(n="")=>n.toLowerCase()!==n?t("validation.noUpperCase",{key:e}):void 0,D=e=>{try{u.a.toString(e)}catch(n){return t("validation.invalidCron")}},P=e=>{const n=n=>p.includes(e)&&!n.toLowerCase().startsWith("https://")?t("validation.setting.serverUrl.https"):void 0;return n},$=n=>/^\d+[hms]$/.test(n)?void 0:t("validation.monitoring.route.interval",{key:e}),M=e=>null!==e&&void 0!==e&&e.image?void 0:t("workload.validation.containerImage",{name:e.name}),F=e=>{var n,r,o,i,a,s;const c=e.jobTemplate?null===e||void 0===e||null===(n=e.jobTemplate)||void 0===n||null===(r=n.spec)||void 0===r||null===(o=r.template)||void 0===o||null===(i=o.spec)||void 0===i?void 0:i.containers:null===e||void 0===e||null===(a=e.template)||void 0===a||null===(s=a.spec)||void 0===s?void 0:s.containers;return c&&c.length?c.map(t=>M(t)).find(t=>t):t("validation.required",{key:t("workload.container.titles.containers")})},B=t=>{const e=[E,l("label"),h("label"),S,R("label")];return f(t,e)},U=t=>{const e=[E,l("label"),h("label"),C,T("label"),R("label",15)];return f(t,e)},G=t=>{const e=[E,s("label"),l("label"),h("label"),S,T("label"),R("label")];return f(t,e)},H=t=>{if(t){const e=[n("hostname"),I,i("hostname")],r=f(t,e);if(r)return r;const o=t.split("."),a=[E,l("hostname"),h("hostname"),S,T("hostname"),R("hostname")];for(let t=0;t(t=t?t.replace(/^\*\./,""):t,H(t)),q=e=>a()(e)?t("validation.service.externalName.none"):H(e),z=t=>"This is an error returned by the testRule validator",K=e=>a()(null===e||void 0===e?void 0:e.groups)?t("validation.prometheusRule.groups.required"):void 0,W=e=>n=>{var r;return e&&null!==(r=n||"")&&void 0!==r&&r.match(/^(c-.{5}|local)$/i)?t("validation.cluster.name"):void 0},X=e=>{const{name:n,idx:r}=e,o=new d(e.nodePort),i=new d(e.port),s=new d(e.targetPort);if(a()(n))return t("validation.service.ports.name.required",{position:r+1});if(!o.empty){if(!o.isInt)return t("validation.service.ports.nodePort.requiredInt",{position:r+1});if(o.int<1||o.int>65535)return t("validation.service.ports.nodePort.between",{position:r+1})}if(i.empty)return t("validation.service.ports.port.required",{position:r+1});var c;if(!i.isInt)return t("validation.service.ports.port.requiredInt",{position:r+1});if(i.int<1||i.int>65535)return t("validation.service.ports.port.between",{position:r+1});if(null!==(c=i.string)&&void 0!==c&&c.includes("."))return i;if(s.empty)return t("validation.service.ports.targetPort.required",{position:r+1});if(s.isInt){if(s.int<1||s.int>65535)return t("validation.service.ports.targetPort.between",{position:r+1})}else{const t=U(s.string);if(t)return t}},Y=(e,n)=>{let r;return a()(null===e||void 0===e?void 0:e.name)?t("validation.prometheusRule.groups.valid.name",{index:n}):a()(e.rules)?t("validation.prometheusRule.groups.valid.singleEntry",{index:n}):(e.rules.forEach((e,o)=>{const i=o+1;c()(e,"alert")&&a()(null===e||void 0===e?void 0:e.alert)&&!r?r=t("validation.prometheusRule.groups.valid.rule.alertName",{groupIndex:n,ruleIndex:i}):c()(e,"record")&&a()(null===e||void 0===e?void 0:e.record)&&(r=t("validation.prometheusRule.groups.valid.rule.recordName",{groupIndex:n,ruleIndex:i})),(c()(e,"expr")&&a()(e.expr)&&!r||!c()(e,"expr")&&!r)&&(r=t("validation.prometheusRule.groups.valid.rule.expr",{groupIndex:n,ruleIndex:i})),c()(e,"alert")&&(c()(e,"labels")&&a()(e.labels)&&!r||!c()(e,"labels")&&!r)&&(r=t("validation.prometheusRule.groups.valid.rule.labels",{groupIndex:n,ruleIndex:i}))}),r)},J=t=>{const e=[...t];let n;return e.forEach((t,e,r)=>{n=Y(t,e+1),n&&(r.length=e+1)}),n},Q=e=>{if(a()(null===e||void 0===e?void 0:e.match)&&a()(null===e||void 0===e?void 0:e["match_re"]))return t("validation.monitoring.route.match")},Z=e=>(n=[])=>{if(n.some(t=>a()(t.verbs)))return t("validation.roleTemplate.roleTemplateRules.missingVerb");if(e===r["t"].ROLE){if(n.some(t=>a()(t.resources)))return t("validation.roleTemplate.roleTemplateRules.missingResource");if(n.some(t=>a()(t.apiGroups)))return t("validation.roleTemplate.roleTemplateRules.missingApiGroup")}else if(n.some(t=>a()(t.resources)&&a()(t.nonResourceURLs)&&a()(t.apiGroups)))return t("validation.roleTemplate.roleTemplateRules.missingOneResource")},tt=t=>{},et=e=>{const n=JSON.parse(e),r=n.type;if(!r)return t("validation.required",{key:"Type"});if("s3"===r){if(!n.accessKeyId)return t("validation.required",{key:"accessKeyId"});if(!n.secretAccessKey)return t("validation.required",{key:"secretAccessKey"});if(!n.bucketRegion)return t("validation.required",{key:"bucketRegion"});if(!n.bucketName)return t("validation.required",{key:"bucketName"})}},nt=e=>{const n=["qcow","qcow2","raw","img","iso"];if(!e||""===e)return;const r=e.split("/").pop(),o=r.split(".").pop().toLowerCase();return n.includes(o)?void 0:t("harvester.validation.image.ruleTip")},rt=(e={})=>{if(!e[o["d"].IMAGE_NAME])return t("validation.required",{key:t("harvester.image.fileName")})},ot=r=>{const o=null===r||void 0===r?void 0:r.match(/[^a-z0-9.-]/g);return o?t("validation.chars",{key:e,count:o.length,chars:o.map(t=>" "===t?"Space":`"${t}"`).join(", ")}):f(r,[l("label"),h("label"),n("label"),i("label"),j])};return{absolutePath:L,backupTarget:et,betweenLengths:w,betweenValues:g,clusterIp:tt,clusterName:W,containerImage:M,containerImages:F,cronSchedule:D,dnsLabel:B,dnsLabelIanaServiceName:U,dnsLabelRestricted:G,externalName:q,fileRequired:rt,groupsAreValid:J,hostname:H,imageUrl:nt,interval:$,isHttps:P,matching:Q,maxLength:y,maxValue:b,minLength:m,minValue:v,noUpperCase:N,portNumber:A,required:j,requiredInt:_,isInteger:x,isPositive:O,isOctal:k,roleTemplateRules:Z,ruleGroups:K,servicePort:X,subDomain:ot,testRule:z,wildcardHostname:V}}},"770e":function(t,e,n){var r=n("25c2");function o(t){return null==t?"":r(t)}t.exports=o},7745:function(t,e,n){var r=n("24da");function o(t){var e=r(this,t)["delete"](t);return this.size-=e?1:0,e}t.exports=o},"779b":function(t,e,n){t.exports=n.p+"fonts/icons.e89f53cc.woff"},7838:function(t,n){t.exports=e},"78bc":function(t,e,n){"use strict";n.r(e);var r=function(){var t=this,e=t._self._c;return e("div",[[t._v(" "+t._s(t.t("promptRemove.attemptingToRemove",{type:t.type}))+" "),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.resourceNames(t.names,t.plusMore,t.t),expression:"resourceNames(names, plusMore, t)"}]})],t.info?e("div",{staticClass:"text info mb-10 mt-20"},[e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.info,expression:"info"}]})]):t._e(),t.warning?e("div",{staticClass:"text-warning mb-10 mt-20"},[t._v(" "+t._s(t.warning)+" ")]):t._e()],2)},o=[],i=n("060c"),a={name:"GlobalRolePromptRemove",mixins:[i["default"]],props:{value:{type:Array,default:()=>[]},type:{type:String,required:!0}}},s=a,c=(n("3973"),n("d802")),l=Object(c["a"])(s,r,o,!1,null,"effd72b0",null);e["default"]=l.exports},"78dd":function(t,e){function n(t){return function(){return t}}t.exports=n},"78e0":function(t,e,n){"use strict";n("51be")},"79ab":function(t,e,n){var r=n("24da");function o(t){return r(this,t).get(t)}t.exports=o},"79ad":function(t,e,n){"use strict";(function(t){n.d(e,"d",(function(){return c})),n.d(e,"c",(function(){return l})),n.d(e,"b",(function(){return d})),n.d(e,"a",(function(){return p})),n.d(e,"e",(function(){return h}));n("462f"),n("907c"),n("5000");var r=n("bddd"),o=(n("e24b"),n("2cb5")),i=n("d5fb"),a=(n("bcb3"),n("b506")),s=n.n(a);n("0788"),n("1d19"),n("f390"),n("e336");const c="__[[spoofed]]__",l="__[[spoofedapi]]__",u={},d={V1_MONITORING:"v1-monitoring",V2_MONITORING:"v2-monitoring",PROJECT:"project",NO_PROJECT:"no-project",NOT_V1_ISTIO:"not-v1-istio",MULTI_CLUSTER:"multi-cluster",NEUVECTOR_NAMESPACE:"neuvector-namespace",ADMIN:"admin-user",MCM_DISABLED:"mcm-disabled",NOT_STANDALONE_HARVESTER:"not-standalone-harvester"};function p(t,e,n="type-map"){return{product(r){const i={name:e,weight:1,inStore:"cluster",inExplorer:!1,removable:!0,showClusterSwitcher:!0,showNamespaceFilter:!1,public:!0,filterMode:"namespaces",...r};for(const t of["ifHaveGroup","ifHaveType"])i[t]&&(i[t]=v(Object(o["d"])(i[t])));t.commit(n+"/product",i)},basicType(o,i){!Object(r["f"])(o)&&o&&s()(o)&&(o=Object.values(o)),t.commit(n+"/basicType",{product:e,types:o,group:i})},groupBy(e,r){t.commit(n+"/groupBy",{type:e,field:r})},headers(e,r){r.forEach(t=>{t.getValue&&(t.valueProp=t.value,t.value=t.getValue),delete t.getValue}),t.commit(n+"/headers",{type:e,headers:r})},hideBulkActions(e,r){t.commit(n+"/hideBulkActions",{type:e,field:r})},configureType(e,r){r.graphConfig&&(u[e]=r.graphConfig,delete r.graphConfig),t.commit(n+"/configureType",{...r,match:e})},componentForType(e,r){t.commit(n+"/componentForType",{match:e,replace:r})},ignoreType(e){t.commit(n+"/ignoreType",e)},ignoreGroup(e,r){t.commit(n+"/ignoreGroup",{regexOrString:e,cb:r})},weightGroup(e,o,i){Object(r["f"])(e)?t.commit(n+"/weightGroup",{groups:e,weight:o,forBasic:i}):t.commit(n+"/weightGroup",{group:e,weight:o,forBasic:i})},setGroupDefaultType(e,o){Object(r["f"])(e)?t.commit(n+"/setGroupDefaultType",{groups:e,defaultType:o}):t.commit(n+"/setGroupDefaultType",{group:e,defaultType:o})},weightType(e,o,i){Object(r["f"])(e)?t.commit(n+"/weightType",{types:e,weight:o,forBasic:i}):t.commit(n+"/weightType",{type:e,weight:o,forBasic:i})},mapGroup(e,r,o=5,i=!1){t.commit(n+"/mapGroup",{match:e,replace:r,weight:o,continueOnMatch:i})},mapType(e,r,o=5,i=!1){t.commit(n+"/mapType",{match:e,replace:r,weight:o,continueOnMatch:i})},moveType(e,r,o=5,i=!1){t.commit(n+"/moveType",{match:e,group:r,weight:o})},virtualType(r){t.commit(n+"/virtualType",{product:e,obj:r})},spoofedType(r){t.commit(n+"/spoofedType",{product:e,obj:r})}}}let f=!1;async function h(t,e){if(!f){f=!0;for(const e of Object(i["k"])()){const n=await Object(i["l"])(e);null!==n&&void 0!==n&&n.init&&n.init(t)}e.loadProducts()}}function v(t){return t.source}}).call(this,n("07d9"))},"7bad":function(t,e,n){var r=n("24da");function o(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}t.exports=o},"7bdd":function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n("7d15"))},"7d15":function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}t.exports=n},"7dbf":function(t,e,n){var r=n("2c98");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("7df6f714",r,!0,{sourceMap:!1,shadowMode:!1})},"7e5c":function(t,e,n){"use strict";n("9c73")},"7f57":function(t){t.exports=JSON.parse('{"hasStylesheet":"true"}')},"7fd6":function(t,e,n){var r=n("1fce"),o=n("4b7a"),i=n("3b54"),a=n("cc5e");function s(t,e){if(null==t)return{};var n=r(a(t),(function(t){return[t]}));return e=o(e),i(t,n,(function(t,n){return e(t,n[0])}))}t.exports=s},8001:function(t,e,n){var r=n("5fe6"),o=n("6290"),i=n("b3e4");function a(t,e,n){var a=t.length;if(a<2)return a?i(t[0]):[];var s=-1,c=Array(a);while(++sspan[data-v-effd72b0]{margin-right:5px}",""]),t.exports=e},"86a1":function(t,e,n){"use strict";n.r(e);var r=function(){var t=this,e=t._self._c;return e("div",[[t._v(" "+t._s(t.t("promptRemove.attemptingToRemove",{type:t.type}))+" "),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.resourceNames(t.names,t.plusMore,t.t),expression:"resourceNames(names, plusMore, t)"}]})],t.info?e("div",{staticClass:"text info mb-10 mt-20"},[e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:t.info,expression:"info"}]})]):t._e(),t.warning?e("div",{staticClass:"text-warning mb-10 mt-20"},[t._v(" "+t._s(t.warning)+" ")]):t._e()],2)},o=[],i=n("060c"),a={name:"RoleTemplatePromptRemove",mixins:[i["default"]],props:{value:{type:Array,default:()=>[]},type:{type:String,required:!0}}},s=a,c=(n("18ae"),n("d802")),l=Object(c["a"])(s,r,o,!1,null,"5050d908",null);e["default"]=l.exports},"86eb":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".text.info[data-v-5050d908]{display:flex;align-items:center}.text.info>span[data-v-5050d908]{margin-right:5px}",""]),t.exports=e},"872c":function(t,e,n){var r=n("9b9a"),o=n("7745"),i=n("79ab"),a=n("f522"),s=n("7bad");function c(t){var e=-1,n=null==t?0:t.length;this.clear();while(++e0){if(++e>=n)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}t.exports=i},"907a":function(t,e){var n=Object.prototype,r=n.toString;function o(t){return r.call(t)}t.exports=o},"907c":function(t,e,n){"use strict";n.d(e,"y",(function(){return r})),n.d(e,"o",(function(){return o})),n.d(e,"b",(function(){return i})),n.d(e,"c",(function(){return a})),n.d(e,"e",(function(){return s})),n.d(e,"g",(function(){return c})),n.d(e,"h",(function(){return l})),n.d(e,"i",(function(){return u})),n.d(e,"l",(function(){return d})),n.d(e,"n",(function(){return p})),n.d(e,"m",(function(){return f})),n.d(e,"p",(function(){return h})),n.d(e,"q",(function(){return v})),n.d(e,"r",(function(){return b})),n.d(e,"s",(function(){return g})),n.d(e,"u",(function(){return m})),n.d(e,"v",(function(){return y})),n.d(e,"x",(function(){return w})),n.d(e,"w",(function(){return _})),n.d(e,"z",(function(){return x})),n.d(e,"t",(function(){return O})),n.d(e,"B",(function(){return k})),n.d(e,"C",(function(){return A})),n.d(e,"a",(function(){return R})),n.d(e,"k",(function(){return I})),n.d(e,"j",(function(){return L})),n.d(e,"f",(function(){return j})),n.d(e,"A",(function(){return N})),n.d(e,"d",(function(){return D}));const r={PREFERENCE:"userpreference"},o={APP:"app",AUTH_CONFIG:"authconfig",ETCD_BACKUP:"etcdbackup",CLUSTER:"cluster",CLUSTER_TOKEN:"clusterregistrationtoken",CLUSTER_ROLE_TEMPLATE_BINDING:"clusterRoleTemplateBinding",CLOUD_CREDENTIAL:"cloudcredential",FLEET_WORKSPACES:"fleetworkspace",GLOBAL_ROLE:"globalRole",GLOBAL_ROLE_BINDING:"globalRoleBinding",NODE_POOL:"nodePool",NODE:"node",PRINCIPAL:"principal",PROJECT:"project",PROJECT_ROLE_TEMPLATE_BINDING:"projectroletemplatebinding",SPOOFED:{GROUP_PRINCIPAL:"group.principal"},ROLE_TEMPLATE:"roleTemplate",TOKEN:"token",USER:"user"},i="configmap",a="count",s="event",c="autoscaling.horizontalpodautoscaler",l="networking.k8s.io.ingress",u="limitrange",d="namespace",p="node",f="networking.k8s.io.networkpolicy",h="pod",v="policy.poddisruptionbudget",b="persistentvolume",g="persistentvolumeclaim",m="resourcequota",y="schema",w="service",_="secret",x="storage.k8s.io.storageclass",O={ROLE:"rbac.authorization.k8s.io.role",CLUSTER_ROLE:"rbac.authorization.k8s.io.clusterrole",ROLE_BINDING:"rbac.authorization.k8s.io.rolebinding",CLUSTER_ROLE_BINDING:"rbac.authorization.k8s.io.clusterrolebinding"},k="workload",A={DEPLOYMENT:"apps.deployment",CRON_JOB:"batch.cronjob",DAEMON_SET:"apps.daemonset",JOB:"batch.job",STATEFUL_SET:"apps.statefulset",REPLICA_SET:"apps.replicaset",REPLICATION_CONTROLLER:"replicationcontroller"},{DAEMON_SET:E,CRON_JOB:S,JOB:C,...T}=A,R={CLUSTER_REPO:"catalog.cattle.io.clusterrepo",OPERATION:"catalog.cattle.io.operation",APP:"catalog.cattle.io.app",REPO:"catalog.cattle.io.repo"},I={ALERTMANAGER:"monitoring.coreos.com.alertmanager",ALERTMANAGERCONFIG:"monitoring.coreos.com.alertmanagerconfig",PODMONITOR:"monitoring.coreos.com.podmonitor",PROMETHEUS:"monitoring.coreos.com.prometheus",PROMETHEUSRULE:"monitoring.coreos.com.prometheusrule",SERVICEMONITOR:"monitoring.coreos.com.servicemonitor",THANOSRULER:"monitoring.coreos.com.thanosruler",SPOOFED:{RECEIVER:"monitoring.coreos.com.receiver",RECEIVER_SPEC:"monitoring.coreos.com.receiver.spec",RECEIVER_EMAIL:"monitoring.coreos.com.receiver.email",RECEIVER_SLACK:"monitoring.coreos.com.receiver.slack",RECEIVER_WEBHOOK:"monitoring.coreos.com.receiver.webhook",RECEIVER_PAGERDUTY:"monitoring.coreos.com.receiver.pagerduty",RECEIVER_OPSGENIE:"monitoring.coreos.com.receiver.opsgenie",RECEIVER_HTTP_CONFIG:"monitoring.coreos.com.receiver.httpconfig",RESPONDER:"monitoring.coreos.com.receiver.responder",ROUTE:"monitoring.coreos.com.route",ROUTE_SPEC:"monitoring.coreos.com.route.spec",ALERTMANAGERCONFIG_RECEIVER_SPEC:"monitoring.coreos.com.v1alpha1.alertmanagerconfig.spec.receivers",ALERTMANAGERCONFIG_ROUTE_SPEC:"monitoring.coreos.com.v1alpha1.alertmanagerconfig.spec.route"}},L={AUTH_CONFIG:"management.cattle.io.authconfig",CATALOG_TEMPLATE:"management.cattle.io.catalogtemplate",CLUSTER:"management.cattle.io.cluster",CLUSTER_ROLE_TEMPLATE_BINDING:"management.cattle.io.clusterroletemplatebinding",FEATURE:"management.cattle.io.feature",KONTAINER_DRIVER:"management.cattle.io.kontainerdriver",MULTI_CLUSTER_APP:"management.cattle.io.multiclusterapp",NODE:"management.cattle.io.node",NODE_DRIVER:"management.cattle.io.nodedriver",NODE_POOL:"management.cattle.io.nodepool",NODE_TEMPLATE:"management.cattle.io.nodetemplate",PROJECT:"management.cattle.io.project",PROJECT_ROLE_TEMPLATE_BINDING:"management.cattle.io.projectroletemplatebinding",ROLE_TEMPLATE:"management.cattle.io.roletemplate",SETTING:"management.cattle.io.setting",USER:"management.cattle.io.user",TOKEN:"management.cattle.io.token",GLOBAL_ROLE:"management.cattle.io.globalrole",GLOBAL_ROLE_BINDING:"management.cattle.io.globalrolebinding",POD_SECURITY_POLICY_TEMPLATE:"management.cattle.io.podsecuritypolicytemplate",PSP_TEMPLATE_BINDING:"management.cattle.io.podsecuritypolicytemplateprojectbinding",PSA:"management.cattle.io.podsecurityadmissionconfigurationtemplate",MANAGED_CHART:"management.cattle.io.managedchart",USER_NOTIFICATION:"management.cattle.io.rancherusernotification",GLOBAL_DNS_PROVIDER:"management.cattle.io.globaldnsprovider",RKE_TEMPLATE:"management.cattle.io.clustertemplate",RKE_TEMPLATE_REVISION:"management.cattle.io.clustertemplaterevision"},j={BUNDLE:"fleet.cattle.io.bundle",BUNDLE_DEPLOYMENT:"fleet.cattle.io.bundledeployment",CLUSTER:"fleet.cattle.io.cluster",CLUSTER_GROUP:"fleet.cattle.io.clustergroup",DASHBOARD:"fleet.cattle.io.dashboard",GIT_REPO:"fleet.cattle.io.gitrepo",WORKSPACE:"management.cattle.io.fleetworkspace",TOKEN:"fleet.cattle.io.clusterregistrationtoken",BUNDLE_NAMESPACE_MAPPING:"fleet.cattle.io.bundlenamespacemapping",GIT_REPO_RESTRICTION:"fleet.cattle.io.gitreporestriction"},N={CLUSTER_MEMBERS:"cluster-members",PROJECT_NAMESPACES:"projects-namespaces",NAMESPACES:"namespaces"},D="fleet-default"},"90dd":function(t,e,n){"use strict";n.d(e,"a",(function(){return u})),n.d(e,"g",(function(){return d})),n.d(e,"c",(function(){return p})),n.d(e,"f",(function(){return f})),n.d(e,"d",(function(){return h})),n.d(e,"e",(function(){return v})),n.d(e,"b",(function(){return b}));var r=n("330a"),o=n.n(r),i=n("8cb9"),a=n.n(i),s=n("e24b"),c=n("2cb5");function l(t,e,n,r,o=[]){r=r||{};const{invalidChars:i,forHostname:a=!1,errorKey:s=(a?"hostname":"label"),maxLength:c=63,minLength:l=1,validChars:u="A-Za-z0-9-"}=r;p(t,{validChars:u,invalidChars:i},e,n,o),"-"===t.slice(0,1)&&o.push(n["i18n/t"](`validation.dns.${s}.startHyphen`,{key:e})),"-"===t.slice(-1)&&o.push(n["i18n/t"](`validation.dns.${s}.endHyphen`,{key:e}));const d=l,f=c;return t.lengthf&&o.push(n["i18n/t"](`validation.dns.${s}.tooLongLabel`,{key:e,max:f})),o}function u(t,e,n){const r=`model.${t}.${e}`,o=r+".label";return n["i18n/exists"](r+".label")?n["i18n/t"](o):n["i18n/exists"](r)?n["i18n/t"](r):e.match(/.Id$/)?Object(c["a"])(e.replace(/Id$/,"")):Object(c["a"])(e)}function d(t,e,n,r,i=[]){const{nullable:a,required:c,type:l="",minLength:u,maxLength:d,min:p,max:f}=e,h=t?Object(s["f"])(t,"length"):0;if(!a&&c&&("object"===typeof t&&o()(t)||!t&&0!==t))return i.push(r["i18n/t"]("validation.required",{key:n})),i;if(null===t)return i;const v=0===l.indexOf("array[")?"arrayLength":"stringLength";let b=u,g=d;return b&&g?(hg)&&(b===g?i.push(r["i18n/t"](`validation.${v}.exactly`,{key:n,count:b})):i.push(r["i18n/t"](`validation.${v}.between`,{key:n,min:b,max:g}))):b&&hg&&i.push(r["i18n/t"](`validation.${v}.max`,{key:n,count:g})),b=p,g=f,null!==t&&b&&g?(tg)&&(b===g?i.push(r["i18n/t"]("validation.number.exactly",{key:n,val:g})):i.push(r["i18n/t"]("validation.number.between",{key:n,min:b,max:g}))):b&&tg&&i.push(r["i18n/t"]("validation.number.max",{key:n,val:g})),i}function p(t,e,n,r,o=[]){const{validChars:i,invalidChars:s}=e,c=[];if(i&&c.push(`[^${e.validChars}]`),s&&c.push(`[${e.invalidChars}]`),c.length){const e=new RegExp(`(${c.join("|")})`,"g");let i=t.match(e);i&&(i=a()(i).map(t=>" "===t?"[space]":t),o.push(r["i18n/t"]("validation.chars",{key:n,count:i.length,chars:i.join(" ")})))}return o}function f(t,e,n,r,o=[]){r=r||{};const{max:i=253,restricted:a=!1}=r;"."===t.slice(0,1)&&o.push(n["i18n/t"]("validation.dns.hostname.startDot",{key:e})),a&&t.length>1&&"."===t.slice(-1)&&o.push(n["i18n/t"]("validation.dns.hostname.endDot",{key:e})),0===t.length&&o.push(n["i18n/t"]("validation.dns.hostname.empty",{key:e})),t.length>i&&o.push(n["i18n/t"]("validation.dns.hostname.tooLong",{key:e,max:i}));const s=t.split(/\./);let c;for(let l=0;l= v2.7.9","catalog.cattle.io/kube-version":">= v1.16.0-0 < v1.29.0-0","catalog.cattle.io/display-name":"Krum Platform Tools: App Launcher"}},"icon":"https://raw.githubusercontent.com/krumIO/krum-rancher-extensions/main/pkg/app-launcher/icon.svg","scripts":{"dev":"./node_modules/.bin/nuxt dev","nuxt":"./node_modules/.bin/nuxt"},"engines":{"node":">=12"},"devDependencies":{"@vue/cli-plugin-babel":"4.5.18","@vue/cli-service":"4.5.18","@vue/cli-plugin-typescript":"4.5.18"},"browserslist":["> 1%","last 2 versions","not dead"]}')},9243:function(t,e,n){var r=n("405d"),o=n("a9e0"),i=n("212d"),a=n("3819"),s=n("e3e5"),c=n("0e19"),l=n("735f"),u="[object Map]",d="[object Object]",p="[object Promise]",f="[object Set]",h="[object WeakMap]",v="[object DataView]",b=l(r),g=l(o),m=l(i),y=l(a),w=l(s),_=c;(r&&_(new r(new ArrayBuffer(1)))!=v||o&&_(new o)!=u||i&&_(i.resolve())!=p||a&&_(new a)!=f||s&&_(new s)!=h)&&(_=function(t){var e=c(t),n=e==d?t.constructor:void 0,r=n?l(n):"";if(r)switch(r){case b:return v;case g:return u;case m:return p;case y:return f;case w:return h}return e}),t.exports=_},"927d":function(t,e,n){var r=n("1ec9"),o=n("2e63"),i=n("73bd"),a=n("b4f4"),s=n("42b6"),c=n("1ab6"),l=n("413d"),u=n("0233"),d=n("0634"),p=n("b650"),f=n("cc5e"),h=n("9243"),v=n("dd09"),b=n("ecda"),g=n("b03d"),m=n("c316"),y=n("dda8"),w=n("35bb"),_=n("b506"),x=n("fe22"),O=n("0652"),k=n("cc7f"),A=1,E=2,S=4,C="[object Arguments]",T="[object Array]",R="[object Boolean]",I="[object Date]",L="[object Error]",j="[object Function]",N="[object GeneratorFunction]",D="[object Map]",P="[object Number]",$="[object Object]",M="[object RegExp]",F="[object Set]",B="[object String]",U="[object Symbol]",G="[object WeakMap]",H="[object ArrayBuffer]",V="[object DataView]",q="[object Float32Array]",z="[object Float64Array]",K="[object Int8Array]",W="[object Int16Array]",X="[object Int32Array]",Y="[object Uint8Array]",J="[object Uint8ClampedArray]",Q="[object Uint16Array]",Z="[object Uint32Array]",tt={};function et(t,e,n,T,R,I){var L,D=e&A,P=e&E,M=e&S;if(n&&(L=R?n(t,T,R,I):n(t)),void 0!==L)return L;if(!_(t))return t;var F=m(t);if(F){if(L=v(t),!D)return l(t,L)}else{var B=h(t),U=B==j||B==N;if(y(t))return c(t,D);if(B==$||B==C||U&&!R){if(L=P||U?{}:g(t),!D)return P?d(t,s(L,t)):u(t,a(L,t))}else{if(!tt[B])return R?t:{};L=b(t,B,D)}}I||(I=new r);var G=I.get(t);if(G)return G;I.set(t,L),x(t)?t.forEach((function(r){L.add(et(r,e,n,r,t,I))})):w(t)&&t.forEach((function(r,o){L.set(o,et(r,e,n,o,t,I))}));var H=M?P?f:p:P?k:O,V=F?void 0:H(t);return o(V||t,(function(r,o){V&&(o=r,r=t[o]),i(L,o,et(r,e,n,o,t,I))})),L}tt[C]=tt[T]=tt[H]=tt[V]=tt[R]=tt[I]=tt[q]=tt[z]=tt[K]=tt[W]=tt[X]=tt[D]=tt[P]=tt[$]=tt[M]=tt[F]=tt[B]=tt[U]=tt[Y]=tt[J]=tt[Q]=tt[Z]=!0,tt[L]=tt[j]=tt[G]=!1,t.exports=et},"930a":function(t,e,n){var r=n("e902"),o=Array.prototype,i=o.splice;function a(t){var e=this.__data__,n=r(e,t);if(n<0)return!1;var o=e.length-1;return n==o?e.pop():i.call(e,n,1),--this.size,!0}t.exports=a},9373:function(t,e,n){"use strict";n("bab9")},"94a3":function(t,e,n){var r=n("5fe6"),o=n("6290"),i=n("4774"),a=n("35d9"),s=i((function(t,e){return a(t)?r(t,o(e,1,a,!0)):[]}));t.exports=s},"94dd":function(t,e,n){var r=n("1001");function o(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}t.exports=o},"986c":function(t,e,n){var r=n("201b"),o=r.Uint8Array;t.exports=o},"98b4":function(t,e,n){var r=n("5eea");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("32461f31",r,!0,{sourceMap:!1,shadowMode:!1})},"98d3":function(t,e,n){"use strict";n.d(e,"b",(function(){return i})),n.d(e,"a",(function(){return l})),n.d(e,"c",(function(){return u})),n.d(e,"d",(function(){return d})),n.d(e,"e",(function(){return p}));const r="undefined"===typeof window?"server":window.navigator.platform.toLowerCase(),o="undefined"===typeof window?"server":window.navigator.userAgent,i=(r.includes("linux")||r.includes("unix"),r.includes("mac")),a=(r.includes("win"),i?"metaKey":"ctrlKey"),s=a,c="shiftKey";function l(t){return!!t[a]}function u(t){return!!t[s]}function d(t){return!!t[c]}function p(t){return t.ctrlKey&&2===t.button}o.includes("Gecko/");const f=o.includes("Chrome/");!f&&o.includes("AppleWebKit/"),!f&&o.includes("Safari/"),/Android|webOS|iPhone|iPad|iPod|IEMobile/i.test(o)},"994b":function(t,e,n){var r=n("e697"),o="__lodash_hash_undefined__";function i(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?o:e,this}t.exports=i},"9b25":function(t,e){function n(t,e){var n=-1,r=null==t?0:t.length;while(++nt.apply(this),e,n||F,r||M,!0)}waitForState(t,e,n){return this.waitForTestFn(()=>(this.state||"").toLowerCase()===t.toLowerCase(),"state="+t,e,n)}waitForTransition(){return this.waitForTestFn(()=>!this.transitioning,"transition completion",void 0,void 0)}waitForAction(t){return this.waitForTestFn(()=>this.hasAction(t),"action="+t,void 0,void 0)}waitForLink(t){return this.waitForTestFn(()=>this.hasLink(t),"link="+t,void 0,void 0)}hasCondition(t){return this.isCondition(t,null)}isCondition(t,e="True"){if(!this.status||!this.status.conditions)return!1;const n=Object(a["d"])(this.status.conditions||[],"type",t);return!!n&&(!e||(n.status||"").toLowerCase()===(""+e).toLowerCase())}waitForCondition(t,e="True",n=F,r=M){return this.waitForTestFn(()=>this.isCondition(t,e),`condition ${t}=${e}`,n,r)}get availableActions(){const t=this._availableActions;let e=null;const n=t.filter(t=>{if(!1===t.enabled)return!1;const n=t.divider,r=!n||n&&!e;return e=n,r});while(n.length&&n[0].divider)n.shift();while(n.length&&n[n.length-1].divider)n.pop();for(let r=1;r{const e={...t},r=e.enabled,o=typeof r;switch(o){case"undefined":e.enabled=!0;break;case"function":Object.defineProperty(e,"enabled",{get:()=>r(this)});break;case"boolean":break;default:console.warn("Unsupported 'enabled' property type for action: "+(t.label||t.labelKey)),delete e.enabled;break}n.push(e)})),n}get canDelete(){return this._canDelete}get _canDelete(){return this.hasLink("remove")&&this.$rootGetters["type-map/optionsFor"](this.type).isRemovable}get canClone(){return!0}get canUpdate(){return this.hasLink("update")&&this.$rootGetters["type-map/optionsFor"](this.type).isEditable}get canCustomEdit(){return this.$rootGetters["type-map/hasCustomEdit"](this.type,this.id)}get canCreate(){var t;return!(this.schema&&(null===(t=this.schema)||void 0===t||!t.collectionMethods.find(t=>"post"===t.toLowerCase())))&&this.$rootGetters["type-map/optionsFor"](this.type).isCreatable}get canViewInApi(){return this.hasLink("self")&&this.$rootGetters["prefs/get"](i["e"])}get canYaml(){return this.hasLink("view")}get canEditYaml(){var t,e;return(null===(t=this.schema)||void 0===t||null===(e=t.resourceMethods)||void 0===e||!e.find(t=>"blocked-PUT"===t))&&this.canUpdate}hasLink(t){return!!this.linkFor(t)}linkFor(t){return(this.links||{})[t]}followLink(t,e={}){if(e.url||(e.url=(this.links||{})[t]),e.urlSuffix&&(e.url+=e.urlSuffix),!e.url)throw new Error(`Unknown link ${t} on ${this.type} ${this.id}`);return this.$dispatch("request",{opt:e,type:this.type})}hasAction(t){return!!this.actionLinkFor(t)}actionLinkFor(t){return(this.actions||this.actionLinks||{})[t]}doAction(t,e,n={}){return this.$dispatch("resourceAction",{resource:this,actionName:t,body:e,opt:n})}async doActionGrowl(t,e,n={}){try{await this.$dispatch("resourceAction",{resource:this,actionName:t,body:e,opt:n})}catch(r){this.$dispatch("growl/fromError",{title:this.$rootGetters["i18n/t"]("generic.notification.title.error"),err:r.data||r},{root:!0})}}patch(t,e={},n=!1,r=!1){if(e.url||(e.url=this.linkFor("view")||this.linkFor("self")),e.method="patch",e.headers=e.headers||{},!e.headers["content-type"]){const t=n?"application/strategic-merge-patch+json":"application/json-patch+json";e.headers["content-type"]=t}e.data=t;const o=this.$dispatch("request",{opt:e,type:this.type});return r?o.catch(t=>{const e=this.t("resource.errors.update",{name:this.name});console.error(e,t),this.$dispatch("growl/error",{title:e,message:null===t||void 0===t?void 0:t.message,timeout:5e3},{root:!0})}):o}save(){return this._save(...arguments)}processSaveResponse(t){}async _save(t={}){var e;delete this.__rehydrate,delete this.__clone;const n=!this.id,r=await this.validationErrors(this,t.ignoreFields);if(!_()(r))return Promise.reject(r);if(null!==(e=this.metadata)&&void 0!==e&&e.resourceVersion&&(this.metadata.resourceVersion=""+this.metadata.resourceVersion),!t.url)if(n){const e=this.$getters["schemaFor"](this.type);let n=e.linkFor("collection");e.attributes&&e.attributes.namespaced&&this.metadata&&this.metadata.namespace&&(n+="/"+this.metadata.namespace),t.url=n}else t.url=this.linkFor("update")||this.linkFor("self");if(t.method||(t.method=n?"post":"put"),t.headers||(t.headers={}),t.headers["content-type"]||(t.headers["content-type"]="application/json"),t.headers["accept"]||(t.headers["accept"]="application/json"),t.data=this.toSave()||{...this},null!==t&&void 0!==t&&t.data._type&&(t.data.type=t.data._type),null!==t&&void 0!==t&&t.data._name&&(t.data.name=t.data._name),null!==t&&void 0!==t&&t.data._labels&&(t.data.labels=t.data._labels),null!==t&&void 0!==t&&t.data._annotations&&(t.data.annotations=t.data._annotations),null!==t&&void 0!==t&&t.replace&&"put"===t.method){const e=t.url.includes("?")?"&":"?";t.url=`${t.url}${e}_replace=true`,delete t.replace}try{const e=await this.$dispatch("request",{opt:t,type:this.type});this.processSaveResponse(e),e&&"Table"!==e.kind&&await this.$dispatch("load",{data:e,existing:n?this:void 0})}catch(o){return this.type&&this.id&&409===(null===o||void 0===o?void 0:o._status)&&await this.$dispatch("find",{type:this.type,id:this.id,opt:{force:!0}}),Promise.reject(o)}return this}remove(){return this._remove(...arguments)}async _remove(t={}){t.url||(t.url=this.linkFor("self")),t.method="delete";const e=await this.$dispatch("request",{opt:t,type:this.type});204===(null===e||void 0===e?void 0:e._status)&&await this.$dispatch("ws.resource.remove",{data:this})}currentRoute(){return t.server?this.$rootState.$route:window.$nuxt.$route}currentRouter(){return t.server?this.$rootState.$router:window.$nuxt.$router}get listLocation(){return{name:"c-cluster-product-resource",params:{product:this.$rootGetters["productId"],cluster:this.$rootGetters["clusterId"],resource:this.type}}}get _detailLocation(){var t,e,n;const r=this.$getters["schemaFor"](this.type),o=null===(t=this.id)||void 0===t?void 0:t.replace(/.*\//,"");return{name:`c-cluster-product-resource${null!==r&&void 0!==r&&null!==(e=r.attributes)&&void 0!==e&&e.namespaced?"-namespace":""}-id`,params:{product:this.$rootGetters["productId"],cluster:this.$rootGetters["clusterId"],resource:this.type,namespace:null===(n=this.metadata)||void 0===n?void 0:n.namespace,id:o}}}get detailLocation(){return this._detailLocation}goToDetail(){this.currentRouter().push(this.detailLocation)}goToClone(t={}){const e=this.detailLocation;e.query={...e.query,[o["b"]]:o["f"],[o["a"]]:o["l"],...t},this.currentRouter().push(e)}goToEdit(t={}){const e=this.detailLocation;e.query={...e.query,[o["b"]]:o["i"],[o["a"]]:o["l"],...t},this.currentRouter().push(e)}goToViewConfig(t={}){const e=this.detailLocation;e.query={...e.query,[o["b"]]:o["m"],[o["a"]]:o["g"],...t},this.currentRouter().push(e)}goToEditYaml(){const t=this.detailLocation;t.query={...t.query,[o["b"]]:o["i"],[o["a"]]:o["n"]},this.currentRouter().push(t)}goToViewYaml(){const t=this.detailLocation;t.query={...t.query,[o["b"]]:o["m"],[o["a"]]:o["n"]},this.currentRouter().push(t)}cloneYaml(t={}){const e=this.detailLocation;e.query={...e.query,[o["b"]]:o["f"],[o["a"]]:o["n"],...t},this.currentRouter().push(e)}async download(){const t=await this.followLink("view",{headers:{accept:"application/yaml"}}),e=await this.$dispatch("cleanForDownload",t.data);Object(c["a"])(this.nameDisplay+".yaml",e,"application/yaml")}async downloadBulk(t){const e={},n=[];for(const o of t){let t=o.nameDisplay+".yaml",e=2;while(n.includes(t))t=`${o.nameDisplay}_${e++}.yaml`;n.push(t)}await Object(u["a"])(t,10,(t,r)=>t.followLink("view",{headers:{accept:"application/yaml"}}).then(async t=>{const o=t.data||t,i=await this.$dispatch("cleanForDownload",o);e["resources/"+n[r]]=i}));const r=await Object(c["b"])(e);Object(c["a"])("resources.zip",r,"application/zip")}viewInApi(){window.open(this.links.self,"_blank")}promptRemove(t){t||(t=this),this.$dispatch("promptRemove",t)}get confirmRemove(){return!1}applyDefaults(){}get urlFromAttrs(){const t=this.$getters["schemaFor"](this.type),{metadata:{namespace:e="default"}}=this;let n=t.links.collection;const r=null===t||void 0===t?void 0:t.attributes;if(!r)throw new Error("Attributes must be present on the schema");const{group:o,resource:i}=r;return n=`${n.slice(0,n.indexOf("/v1"))}/apis/${o}/namespaces/${e}/${i}`,n}cleanYaml(t,e="edit"){try{const n=g.a.load(t);"edit"!==e&&this.$dispatch("cleanForNew",n),n._type&&(n.type=n._type,delete n._type);const r=g.a.dump(n,{skipInvalid:!0});return r}catch(n){return null}}cleanForNew(){this.$dispatch("cleanForNew",this)}cleanForDiff(){this.$dispatch("cleanForDiff",this.toJSON())}yamlForSave(t){try{const e=g.a.load(t);if(e)return this._type&&(e._type=e.type),g.a.dump(e)}catch(e){return null}}async saveYaml(t){var e,n;const r=g.a.load(t);if(null!==(e=this.schema)&&void 0!==e&&null!==(n=e.attributes)&&void 0!==n&&n.namespaced&&!r.metadata.namespace){const t=this.$rootGetters["i18n/t"]("resourceYaml.errors.namespaceRequired");throw t}let o;const i=!this.id,a={"content-type":"application/yaml",accept:"application/json"};o=i?await this.schema.followLink("collection",{method:"POST",headers:a,data:t}):await this.followLink("update",{method:"PUT",headers:a,data:t}),await this.$dispatch("load",{data:o,existing:i?this:void 0}),this.isSpoofed&&await this.$dispatch("cluster/findAll",{type:this.type,opt:{force:!0}},{root:!0})}get modelValidationRules(){const t=[],e=null===this||void 0===this?void 0:this.customValidationRules.filter(t=>!!t.validators||!!t.required).map(t=>{const e=Object(h["a"])(this.t,{displayKey:null!==t&&void 0!==t&&t.translationKey?this.t(t.translationKey):"Value"});return{path:t.path,rules:[...t.validators||[],...t.required?["required"]:[],...["dnsLabel","dnsLabelRestricted","hostname"].includes(t.type)?[t.type]:[]].map(t=>{if(t.includes(":")){const[n,r]=t.split(":");return e[n](r)}return e[t]}).filter(t=>!!t)}}).filter(t=>t.rules.length>0);return t.push(...e),t}customValidationErrors(t,e=[]){const n=[];let{customValidationRules:r}=this;return _()(r)||(O()(r)&&(r=r()),r.filter(t=>!e.includes(t.path)).forEach(e=>{const{path:r,requiredIf:o,validators:i=[],type:a}=e;let c=Object(l["f"])(t,r);const u=y()(i||[]);let d=r;if(e.translationKey&&this.$rootGetters["i18n/exists"](e.translationKey)&&(d=this.t(e.translationKey)),A()(c)&&(c=c.trim()),o){const e=Object(l["f"])(t,o);!_()(e)&&_()(c)&&0!==c&&n.push(this.t("validation.required",{key:d}))}if(Object(f["g"])(c,e,d,this.$rootGetters,n),Object(f["c"])(c,e,d,this.$rootGetters,n),!_()(c)&&N.includes(a)){const e=(c||"").toLowerCase();e!==c&&(c=e,T.a.set(t,r,c)),n.push(...Object(f["e"])(c,a,d,this.$rootGetters,n))}u.forEach(e=>{const r=e.split(":"),o=r.slice(0,1),i=r.slice(1)||null,a=Object.prototype.hasOwnProperty.call(s["a"],o);if(!_()(o)&&a)s["a"][o](c,this.$rootGetters,n,i,d,t);else if(!_()(o)&&!a){var l;const e=null===(l=this.$rootState.$plugin)||void 0===l?void 0:l.getValidator(o);e?e(c,this.$rootGetters,n,i,d,t):console.warn(this.t("validation.custom.missing",{validatorName:o}))}})})),n}validationErrors(t=this,e){const n=[],{type:r,schema:o}=t,i=Object(R["a"])(r);if(!r)return console.warn(this.t("validation.noType"),t),n;if(!o)return n;const a=o.resourceFields||{},s=Object.keys(a);let c,u,d,h;for(let b=0;b0)r.push(this.t("validation.required",{key:h})),n.push(...r);else{if("id"!==u&&!_()(d)&&N.includes(o)){const e=(d||"").toLowerCase();e!==d&&(d=e,T.a.set(t,u,d)),r.push(...Object(f["e"])(d,o,h,this.$rootGetters,r))}n.push(...r)}}return S()([...n,...this.customValidationErrors(t)])}get ownersByType(){var t;const e=(null===(t=this.metadata)||void 0===t?void 0:t.ownerReferences)||[],n={};return e.forEach(t=>{n[t.kind]?n[t.kind].push(t):n[t.kind]=[t]}),n}get owners(){const t=[];for(const e in this.ownersByType){const n=this.$rootGetters["cluster/schema"](e);if(n){const r=n.id,o=this.$rootGetters["cluster/all"](r);this.ownersByType[e].forEach((e,n)=>{const r=o.find(t=>{var n;return(null===t||void 0===t||null===(n=t.metadata)||void 0===n?void 0:n.uid)===e.uid});r&&t.push(r)})}}return t}get details(){return this._details}get _details(){var t;const e=[];return(null===(t=this.owners)||void 0===t?void 0:t.length)>0&&e.push({label:this.t("resourceDetail.detailTop.ownerReferences",{count:this.owners.length}),formatter:"ListLinkDetail",content:this.owners.map(t=>({key:t.id,row:t,col:{},value:t.metadata.name}))}),Object(l["f"])(this,"metadata.deletionTimestamp")&&e.push({label:this.t("resourceDetail.detailTop.deleted"),formatter:"LiveDate",formatterOpts:{addSuffix:!0},content:Object(l["f"])(this,"metadata.deletionTimestamp")}),e}get t(){return this.$rootGetters["i18n/t"]}findOwners(){return this._getRelationship("owner","from")}getOwners(){return this._getRelationship("owner","from")}findOwned(){return this._findRelationship("owner","to")}_relationshipsFor(t,e){var n,r;const o={selectors:[],ids:[]};if(null===(n=this.metadata)||void 0===n||null===(r=n.relationships)||void 0===r||!r.length)return o;for(const i of this.metadata.relationships)if(("any"===t||i.rel===t)&&i[e+"Type"])if(i.selector)Object(a["b"])(o.selectors,{type:i.toType,namespace:i.toNamespace,selector:i.selector});else{const t=i[e+"Type"];let n=i[e+"Namespace"],r=i[e+"Id"];if(!n&&r.includes("/")){const t=r.indexOf("/");n=r.substr(0,t),r=r.substr(t+1)}const s=(n?n+"/":"")+r;Object(a["a"])(o.ids,{type:t,namespace:n,name:r,id:s})}return o}_getRelationship(t,e){var n;const r=this._relationshipsFor(t,e);return null!==(n=r.selectors)&&void 0!==n&&n.length&&console.warn("Sync request for a relationship that is a selector"),r.ids||[]}async _findRelationship(t,e){const{selectors:n,ids:r}=this._relationshipsFor(t,e),o=[];for(const i of n){const t=await this.$dispatch("findMatching",i);Object(a["b"])(o,t.data)}for(const i of r){const{type:t,id:e}=i;let n=this.$getters["byId"](t,e);if(!n)try{n=await this.$dispatch("find",{type:t,id:e})}catch{}n&&Object(a["a"])(o,n)}return o}get shortId(){const t=this.id.split("/");return t.length>1?t[1]:t[0]}toJSON(){const t={},e=Object.keys(this);for(const r of e){var n;null!==(n=this[r])&&void 0!==n&&n.toJSON?t[r]=this[r].toJSON():t[r]=Object(l["e"])(this[r])}return t}toSave(){}get creationTimestamp(){var t;return null===(t=this.metadata)||void 0===t?void 0:t.creationTimestamp}}}).call(this,n("07d9"))},"9c21":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".dropdown-button-group .no-left-border-radius{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-button-group .no-right-border-radius{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-button-group .btn{line-height:normal;border:0}.dropdown-button-group .btn-group-xs>.btn,.dropdown-button-group .btn-xs,.dropdown-button-group .btn-xs .btn-label{padding:2px 3px;font-size:13px}.dropdown-button-group .v-popover .text-right{margin-top:5px}.dropdown-button-group .v-popover .trigger{height:100%}.dropdown-button-group .v-popover .trigger .icon-container{height:100%;padding:10px 10px 10px 10px}.dropdown-button-group .v-popover .trigger .icon-container i{transform:scale(1)}.dropdown-button-group .v-popover .trigger .icon-container.btn-xs{padding:2px 4px 4px 4px}.dropdown-button-group .v-popover .trigger .icon-container.btn-sm{padding:10px 10px 10px 10px}.dropdown-button-group .v-popover .trigger .icon-container.btn-lg{padding:18px 10px 10px 10px}.dropdown-button-group .v-popover .trigger .icon-container:focus{outline-style:none;box-shadow:none;border-color:transparent}.dropdown-button-group .dropdown-button{background:var(--tooltip-bg);color:var(--link-text);padding:0;display:inline-flex}.dropdown-button-group .dropdown-button .wrapper-content button{border-right:0}.dropdown-button-group .dropdown-button .icon-chevron-down,.dropdown-button-group .dropdown-button>*{color:var(--primary);background-color:transparent}.dropdown-button-group .dropdown-button.bg-primary:hover{background:var(--accent-btn-hover)}.dropdown-button-group .dropdown-button.one-action{position:relative}.dropdown-button-group .dropdown-button.one-action>.btn{padding:15px 35px 15px 15px}.dropdown-button-group .dropdown-button.one-action .v-popover .trigger{position:absolute;top:0;right:0;left:0;bottom:0}.dropdown-button-group .dropdown-button.one-action .v-popover .trigger BUTTON{position:absolute;right:0}.dropdown-button-group .popover{border:none}.dropdown-button-group .tooltip{margin-top:0}.dropdown-button-group .tooltip[x-placement^=bottom] .tooltip-arrow{border-bottom-color:var(--dropdown-border)}.dropdown-button-group .tooltip[x-placement^=bottom] .tooltip-arrow:after{border-bottom-color:var(--dropdown-bg)}.dropdown-button-group .tooltip .tooltip-inner{color:var(--dropdown-text);background-color:var(--dropdown-bg);border:1px solid var(--dropdown-border);padding:0;text-align:left}.dropdown-button-group .tooltip .tooltip-inner LI{padding:10px}.dropdown-button-group .tooltip .tooltip-inner LI.divider{padding-top:0;padding-bottom:0}.dropdown-button-group .tooltip .tooltip-inner LI.divider>.divider-inner{padding:0;border-bottom:1px solid var(--dropdown-divider);width:125%;margin:0 auto}.dropdown-button-group .tooltip .tooltip-inner LI:not(.divider):hover{background-color:var(--dropdown-hover-bg);color:var(--dropdown-hover-text);cursor:pointer}.dropdown-button-group .user-info{border-bottom:1px solid var(--border);display:block}",""]),t.exports=e},"9c38":function(t,e,n){var r=n("0e19"),o=n("c316"),i=n("b4b4"),a="[object String]";function s(t){return"string"==typeof t||!o(t)&&i(t)&&r(t)==a}t.exports=s},"9c73":function(t,e,n){var r=n("1a93");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("f5bc6e06",r,!0,{sourceMap:!1,shadowMode:!1})},"9ce4":function(t,e,n){"use strict";(function(t){ /*! * vuex v3.6.2 * (c) 2021 Evan You @@ -12,5 +12,5 @@ function r(t){var e=Number(t.version.split(".")[0]);if(e>=2)t.mixin({beforeCreat * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */(function(){var i,a="4.17.21",s=200,c="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",l="Expected a function",u="Invalid `variable` option passed into `_.template`",d="__lodash_hash_undefined__",p=500,f="__lodash_placeholder__",h=1,v=2,b=4,g=1,m=2,y=1,w=2,_=4,x=8,O=16,k=32,A=64,E=128,S=256,C=512,T=30,R="...",I=800,L=16,j=1,N=2,D=3,P=1/0,$=9007199254740991,M=17976931348623157e292,F=NaN,B=4294967295,U=B-1,G=B>>>1,H=[["ary",E],["bind",y],["bindKey",w],["curry",x],["curryRight",O],["flip",C],["partial",k],["partialRight",A],["rearg",S]],V="[object Arguments]",q="[object Array]",z="[object AsyncFunction]",K="[object Boolean]",W="[object Date]",X="[object DOMException]",Y="[object Error]",J="[object Function]",Q="[object GeneratorFunction]",Z="[object Map]",tt="[object Number]",et="[object Null]",nt="[object Object]",rt="[object Promise]",ot="[object Proxy]",it="[object RegExp]",at="[object Set]",st="[object String]",ct="[object Symbol]",lt="[object Undefined]",ut="[object WeakMap]",dt="[object WeakSet]",pt="[object ArrayBuffer]",ft="[object DataView]",ht="[object Float32Array]",vt="[object Float64Array]",bt="[object Int8Array]",gt="[object Int16Array]",mt="[object Int32Array]",yt="[object Uint8Array]",wt="[object Uint8ClampedArray]",_t="[object Uint16Array]",xt="[object Uint32Array]",Ot=/\b__p \+= '';/g,kt=/\b(__p \+=) '' \+/g,At=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Et=/&(?:amp|lt|gt|quot|#39);/g,St=/[&<>"']/g,Ct=RegExp(Et.source),Tt=RegExp(St.source),Rt=/<%-([\s\S]+?)%>/g,It=/<%([\s\S]+?)%>/g,Lt=/<%=([\s\S]+?)%>/g,jt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Nt=/^\w*$/,Dt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Pt=/[\\^$.*+?()[\]{}|]/g,$t=RegExp(Pt.source),Mt=/^\s+/,Ft=/\s/,Bt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ut=/\{\n\/\* \[wrapped with (.+)\] \*/,Gt=/,? & /,Ht=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Vt=/[()=,{}\[\]\/\s]/,qt=/\\(\\)?/g,zt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Kt=/\w*$/,Wt=/^[-+]0x[0-9a-f]+$/i,Xt=/^0b[01]+$/i,Yt=/^\[object .+?Constructor\]$/,Jt=/^0o[0-7]+$/i,Qt=/^(?:0|[1-9]\d*)$/,Zt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,te=/($^)/,ee=/['\n\r\u2028\u2029\\]/g,ne="\\ud800-\\udfff",re="\\u0300-\\u036f",oe="\\ufe20-\\ufe2f",ie="\\u20d0-\\u20ff",ae=re+oe+ie,se="\\u2700-\\u27bf",ce="a-z\\xdf-\\xf6\\xf8-\\xff",le="\\xac\\xb1\\xd7\\xf7",ue="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",de="\\u2000-\\u206f",pe=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",fe="A-Z\\xc0-\\xd6\\xd8-\\xde",he="\\ufe0e\\ufe0f",ve=le+ue+de+pe,be="['’]",ge="["+ne+"]",me="["+ve+"]",ye="["+ae+"]",we="\\d+",_e="["+se+"]",xe="["+ce+"]",Oe="[^"+ne+ve+we+se+ce+fe+"]",ke="\\ud83c[\\udffb-\\udfff]",Ae="(?:"+ye+"|"+ke+")",Ee="[^"+ne+"]",Se="(?:\\ud83c[\\udde6-\\uddff]){2}",Ce="[\\ud800-\\udbff][\\udc00-\\udfff]",Te="["+fe+"]",Re="\\u200d",Ie="(?:"+xe+"|"+Oe+")",Le="(?:"+Te+"|"+Oe+")",je="(?:"+be+"(?:d|ll|m|re|s|t|ve))?",Ne="(?:"+be+"(?:D|LL|M|RE|S|T|VE))?",De=Ae+"?",Pe="["+he+"]?",$e="(?:"+Re+"(?:"+[Ee,Se,Ce].join("|")+")"+Pe+De+")*",Me="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Fe="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Be=Pe+De+$e,Ue="(?:"+[_e,Se,Ce].join("|")+")"+Be,Ge="(?:"+[Ee+ye+"?",ye,Se,Ce,ge].join("|")+")",He=RegExp(be,"g"),Ve=RegExp(ye,"g"),qe=RegExp(ke+"(?="+ke+")|"+Ge+Be,"g"),ze=RegExp([Te+"?"+xe+"+"+je+"(?="+[me,Te,"$"].join("|")+")",Le+"+"+Ne+"(?="+[me,Te+Ie,"$"].join("|")+")",Te+"?"+Ie+"+"+je,Te+"+"+Ne,Fe,Me,we,Ue].join("|"),"g"),Ke=RegExp("["+Re+ne+ae+he+"]"),We=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Xe=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Ye=-1,Je={};Je[ht]=Je[vt]=Je[bt]=Je[gt]=Je[mt]=Je[yt]=Je[wt]=Je[_t]=Je[xt]=!0,Je[V]=Je[q]=Je[pt]=Je[K]=Je[ft]=Je[W]=Je[Y]=Je[J]=Je[Z]=Je[tt]=Je[nt]=Je[it]=Je[at]=Je[st]=Je[ut]=!1;var Qe={};Qe[V]=Qe[q]=Qe[pt]=Qe[ft]=Qe[K]=Qe[W]=Qe[ht]=Qe[vt]=Qe[bt]=Qe[gt]=Qe[mt]=Qe[Z]=Qe[tt]=Qe[nt]=Qe[it]=Qe[at]=Qe[st]=Qe[ct]=Qe[yt]=Qe[wt]=Qe[_t]=Qe[xt]=!0,Qe[Y]=Qe[J]=Qe[ut]=!1;var Ze={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},tn={"&":"&","<":"<",">":">",'"':""","'":"'"},en={"&":"&","<":"<",">":">",""":'"',"'":"'"},nn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},rn=parseFloat,on=parseInt,an="object"==typeof t&&t&&t.Object===Object&&t,sn="object"==typeof self&&self&&self.Object===Object&&self,cn=an||sn||Function("return this")(),ln=e&&!e.nodeType&&e,un=ln&&"object"==typeof r&&r&&!r.nodeType&&r,dn=un&&un.exports===ln,pn=dn&&an.process,fn=function(){try{var t=un&&un.require&&un.require("util").types;return t||pn&&pn.binding&&pn.binding("util")}catch(e){}}(),hn=fn&&fn.isArrayBuffer,vn=fn&&fn.isDate,bn=fn&&fn.isMap,gn=fn&&fn.isRegExp,mn=fn&&fn.isSet,yn=fn&&fn.isTypedArray;function wn(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function _n(t,e,n,r){var o=-1,i=null==t?0:t.length;while(++o-1}function Sn(t,e,n){var r=-1,o=null==t?0:t.length;while(++r-1);return n}function tr(t,e){var n=t.length;while(n--&&Mn(e,t[n],0)>-1);return n}function er(t,e){var n=t.length,r=0;while(n--)t[n]===e&&++r;return r}var nr=Hn(Ze),rr=Hn(tn);function or(t){return"\\"+nn[t]}function ir(t,e){return null==t?i:t[e]}function ar(t){return Ke.test(t)}function sr(t){return We.test(t)}function cr(t){var e,n=[];while(!(e=t.next()).done)n.push(e.value);return n}function lr(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function ur(t,e){return function(n){return t(e(n))}}function dr(t,e){var n=-1,r=t.length,o=0,i=[];while(++n-1}function Gr(t,e){var n=this.__data__,r=uo(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function Hr(t){var e=-1,n=null==t?0:t.length;this.clear();while(++e=e?t:e)),t}function mo(t,e,n,r,o,a){var s,c=e&h,l=e&v,u=e&b;if(n&&(s=o?n(t,r,o,a):n(t)),s!==i)return s;if(!ku(t))return t;var d=cu(t);if(d){if(s=es(t),!c)return oa(t,s)}else{var p=Ja(t),f=p==J||p==Q;if(fu(t))return Wi(t,c);if(p==nt||p==V||f&&!o){if(s=l||f?{}:ns(t),!c)return l?sa(t,ho(s,t)):aa(t,fo(s,t))}else{if(!Qe[p])return o?t:{};s=rs(t,p,c)}}a||(a=new Qr);var g=a.get(t);if(g)return g;a.set(t,s),$u(t)?t.forEach((function(r){s.add(mo(r,e,n,r,t,a))})):Eu(t)&&t.forEach((function(r,o){s.set(o,mo(r,e,n,o,t,a))}));var m=u?l?Ba:Fa:l?Od:xd,y=d?i:m(t);return xn(y||t,(function(r,o){y&&(o=r,r=t[o]),lo(s,o,mo(r,e,n,o,t,a))})),s}function yo(t){var e=xd(t);return function(n){return wo(n,t,e)}}function wo(t,e,n){var r=n.length;if(null==t)return!r;t=ne(t);while(r--){var o=n[r],a=e[o],s=t[o];if(s===i&&!(o in t)||!a(s))return!1}return!0}function _o(t,e,n){if("function"!=typeof t)throw new ie(l);return As((function(){t.apply(i,n)}),e)}function xo(t,e,n,r){var o=-1,i=En,a=!0,c=t.length,l=[],u=e.length;if(!c)return l;n&&(e=Cn(e,Yn(n))),r?(i=Sn,a=!1):e.length>=s&&(i=Qn,a=!1,e=new Xr(e));t:while(++oo?0:o+n),r=r===i||r>o?o:Wu(r),r<0&&(r+=o),r=n>r?0:Xu(r);while(n0&&n(s)?e>1?To(s,e-1,n,r,o):Tn(o,s):r||(o[o.length]=s)}return o}var Ro=da(),Io=da(!0);function Lo(t,e){return t&&Ro(t,e,xd)}function jo(t,e){return t&&Io(t,e,xd)}function No(t,e){return An(e,(function(e){return _u(t[e])}))}function Do(t,e){e=Vi(e,t);var n=0,r=e.length;while(null!=t&&ne}function Fo(t,e){return null!=t&&de.call(t,e)}function Bo(t,e){return null!=t&&e in ne(t)}function Uo(t,e,n){return t>=Ue(e,n)&&t=120&&p.length>=120)?new Xr(c&&p):i}p=t[0];var f=-1,h=l[0];t:while(++f-1)s!==t&&Ae.call(s,c,1),Ae.call(t,c,1)}return t}function gi(t,e){var n=t?e.length:0,r=n-1;while(n--){var o=e[n];if(n==r||o!==i){var i=o;as(o)?Ae.call(t,o,1):Pi(t,o)}}return t}function mi(t,e){return t+Ne(ze()*(e-t+1))}function yi(t,e,r,o){var i=-1,a=Be(je((e-t)/(r||1)),0),s=n(a);while(a--)s[o?a:++i]=t,t+=r;return s}function wi(t,e){var n="";if(!t||e<1||e>$)return n;do{e%2&&(n+=t),e=Ne(e/2),e&&(t+=t)}while(e);return n}function _i(t,e){return Es(ws(t,e,Rp),t+"")}function xi(t){return io(Ud(t))}function Oi(t,e){var n=Ud(t);return Ts(n,go(e,0,n.length))}function ki(t,e,n,r){if(!ku(t))return t;e=Vi(e,t);var o=-1,a=e.length,s=a-1,c=t;while(null!=c&&++oi?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;var a=n(i);while(++o>>1,a=t[i];null!==a&&!Fu(a)&&(n?a<=e:a=s){var u=e?null:Ta(t);if(u)return pr(u);a=!1,o=Qn,l=new Xr}else l=e?[]:c;t:while(++r=r?t:Ci(t,e,n)}var Ki=Re||function(t){return cn.clearTimeout(t)};function Wi(t,e){if(e)return t.slice();var n=t.length,r=_e?_e(n):new t.constructor(n);return t.copy(r),r}function Xi(t){var e=new t.constructor(t.byteLength);return new we(e).set(new we(t)),e}function Yi(t,e){var n=e?Xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Ji(t){var e=new t.constructor(t.source,Kt.exec(t));return e.lastIndex=t.lastIndex,e}function Qi(t){return hr?ne(hr.call(t)):{}}function Zi(t,e){var n=e?Xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function ta(t,e){if(t!==e){var n=t!==i,r=null===t,o=t===t,a=Fu(t),s=e!==i,c=null===e,l=e===e,u=Fu(e);if(!c&&!u&&!a&&t>e||a&&s&&l&&!c&&!u||r&&s&&l||!n&&l||!o)return 1;if(!r&&!a&&!u&&t=s)return c;var l=n[r];return c*("desc"==l?-1:1)}}return t.index-e.index}function na(t,e,r,o){var i=-1,a=t.length,s=r.length,c=-1,l=e.length,u=Be(a-s,0),d=n(l+u),p=!o;while(++c1?n[o-1]:i,s=o>2?n[2]:i;a=t.length>3&&"function"==typeof a?(o--,a):i,s&&ss(n[0],n[1],s)&&(a=o<3?i:a,o=1),e=ne(e);while(++r-1?o[a?e[s]:s]:i}}function ma(t){return Ma((function(e){var n=e.length,r=n,o=Er.prototype.thru;t&&e.reverse();while(r--){var a=e[r];if("function"!=typeof a)throw new ie(l);if(o&&!s&&"wrapper"==Ga(a))var s=new Er([],!0)}r=s?r:n;while(++r1&&y.reverse(),p&&uc))return!1;var u=a.get(t),d=a.get(e);if(u&&d)return u==e&&d==t;var p=-1,f=!0,h=n&m?new Xr:i;a.set(t,e),a.set(e,t);while(++p1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Bt,"{\n/* [wrapped with "+e+"] */\n")}function is(t){return cu(t)||su(t)||!!(Ee&&t&&t[Ee])}function as(t,e){var n=typeof t;return e=null==e?$:e,!!e&&("number"==n||"symbol"!=n&&Qt.test(t))&&t>-1&&t%1==0&&t0){if(++e>=I)return arguments[0]}else e=0;return t.apply(i,arguments)}}function Ts(t,e){var n=-1,r=t.length,o=r-1;e=e===i?r:e;while(++n1?t[e-1]:i;return n="function"==typeof n?(t.pop(),n):i,Pc(t,n)}));function qc(t){var e=_r(t);return e.__chain__=!0,e}function zc(t,e){return e(t),t}function Kc(t,e){return e(t)}var Wc=Ma((function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return bo(e,t)};return!(e>1||this.__actions__.length)&&r instanceof Sr&&as(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Kc,args:[o],thisArg:i}),new Er(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(i),t}))):this.thru(o)}));function Xc(){return qc(this)}function Yc(){return new Er(this.value(),this.__chain__)}function Jc(){this.__values__===i&&(this.__values__=zu(this.value()));var t=this.__index__>=this.__values__.length,e=t?i:this.__values__[this.__index__++];return{done:t,value:e}}function Qc(){return this}function Zc(t){var e,n=this;while(n instanceof Ar){var r=Ns(n);r.__index__=0,r.__values__=i,e?o.__wrapped__=r:e=r;var o=r;n=n.__wrapped__}return o.__wrapped__=t,e}function tl(){var t=this.__wrapped__;if(t instanceof Sr){var e=t;return this.__actions__.length&&(e=new Sr(this)),e=e.reverse(),e.__actions__.push({func:Kc,args:[hc],thisArg:i}),new Er(e,this.__chain__)}return this.thru(hc)}function el(){return Fi(this.__wrapped__,this.__actions__)}var nl=ca((function(t,e,n){de.call(t,n)?++t[n]:vo(t,n,1)}));function rl(t,e,n){var r=cu(t)?kn:Ao;return n&&ss(t,e,n)&&(e=i),r(t,Va(e,3))}function ol(t,e){var n=cu(t)?An:Co;return n(t,Va(e,3))}var il=ga(zs),al=ga(Ks);function sl(t,e){return To(bl(t,e),1)}function cl(t,e){return To(bl(t,e),P)}function ll(t,e,n){return n=n===i?1:Wu(n),To(bl(t,e),n)}function ul(t,e){var n=cu(t)?xn:Oo;return n(t,Va(e,3))}function dl(t,e){var n=cu(t)?On:ko;return n(t,Va(e,3))}var pl=ca((function(t,e,n){de.call(t,n)?t[n].push(e):vo(t,n,[e])}));function fl(t,e,n,r){t=uu(t)?t:Ud(t),n=n&&!r?Wu(n):0;var o=t.length;return n<0&&(n=Be(o+n,0)),Mu(t)?n<=o&&t.indexOf(e,n)>-1:!!o&&Mn(t,e,n)>-1}var hl=_i((function(t,e,r){var o=-1,i="function"==typeof e,a=uu(t)?n(t.length):[];return Oo(t,(function(t){a[++o]=i?wn(e,t,r):Vo(t,e,r)})),a})),vl=ca((function(t,e,n){vo(t,n,e)}));function bl(t,e){var n=cu(t)?Cn:ai;return n(t,Va(e,3))}function gl(t,e,n,r){return null==t?[]:(cu(e)||(e=null==e?[]:[e]),n=r?i:n,cu(n)||(n=null==n?[]:[n]),pi(t,e,n))}var ml=ca((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]}));function yl(t,e,n){var r=cu(t)?Rn:Vn,o=arguments.length<3;return r(t,Va(e,4),n,o,Oo)}function wl(t,e,n){var r=cu(t)?In:Vn,o=arguments.length<3;return r(t,Va(e,4),n,o,ko)}function _l(t,e){var n=cu(t)?An:Co;return n(t,Ul(Va(e,3)))}function xl(t){var e=cu(t)?io:xi;return e(t)}function Ol(t,e,n){e=(n?ss(t,e,n):e===i)?1:Wu(e);var r=cu(t)?ao:Oi;return r(t,e)}function kl(t){var e=cu(t)?so:Si;return e(t)}function Al(t){if(null==t)return 0;if(uu(t))return Mu(t)?br(t):t.length;var e=Ja(t);return e==Z||e==at?t.size:ri(t).length}function El(t,e,n){var r=cu(t)?Ln:Ti;return n&&ss(t,e,n)&&(e=i),r(t,Va(e,3))}var Sl=_i((function(t,e){if(null==t)return[];var n=e.length;return n>1&&ss(t,e[0],e[1])?e=[]:n>2&&ss(e[0],e[1],e[2])&&(e=[e[0]]),pi(t,To(e,1),[])})),Cl=Ie||function(){return cn.Date.now()};function Tl(t,e){if("function"!=typeof e)throw new ie(l);return t=Wu(t),function(){if(--t<1)return e.apply(this,arguments)}}function Rl(t,e,n){return e=n?i:e,e=t&&null==e?t.length:e,Ia(t,E,i,i,i,i,e)}function Il(t,e){var n;if("function"!=typeof e)throw new ie(l);return t=Wu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=i),n}}var Ll=_i((function(t,e,n){var r=y;if(n.length){var o=dr(n,Ha(Ll));r|=k}return Ia(t,r,e,n,o)})),jl=_i((function(t,e,n){var r=y|w;if(n.length){var o=dr(n,Ha(jl));r|=k}return Ia(e,r,t,n,o)}));function Nl(t,e,n){e=n?i:e;var r=Ia(t,x,i,i,i,i,i,e);return r.placeholder=Nl.placeholder,r}function Dl(t,e,n){e=n?i:e;var r=Ia(t,O,i,i,i,i,i,e);return r.placeholder=Dl.placeholder,r}function Pl(t,e,n){var r,o,a,s,c,u,d=0,p=!1,f=!1,h=!0;if("function"!=typeof t)throw new ie(l);function v(e){var n=r,a=o;return r=o=i,d=e,s=t.apply(a,n),s}function b(t){return d=t,c=As(y,e),p?v(t):s}function g(t){var n=t-u,r=t-d,o=e-n;return f?Ue(o,a-r):o}function m(t){var n=t-u,r=t-d;return u===i||n>=e||n<0||f&&r>=a}function y(){var t=Cl();if(m(t))return w(t);c=As(y,g(t))}function w(t){return c=i,h&&r?v(t):(r=o=i,s)}function _(){c!==i&&Ki(c),d=0,r=u=o=c=i}function x(){return c===i?s:w(Cl())}function O(){var t=Cl(),n=m(t);if(r=arguments,o=this,u=t,n){if(c===i)return b(u);if(f)return Ki(c),c=As(y,e),v(u)}return c===i&&(c=As(y,e)),s}return e=Yu(e)||0,ku(n)&&(p=!!n.leading,f="maxWait"in n,a=f?Be(Yu(n.maxWait)||0,e):a,h="trailing"in n?!!n.trailing:h),O.cancel=_,O.flush=x,O}var $l=_i((function(t,e){return _o(t,1,e)})),Ml=_i((function(t,e,n){return _o(t,Yu(e)||0,n)}));function Fl(t){return Ia(t,C)}function Bl(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new ie(l);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=t.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(Bl.Cache||Hr),n}function Ul(t){if("function"!=typeof t)throw new ie(l);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Gl(t){return Il(2,t)}Bl.Cache=Hr;var Hl=qi((function(t,e){e=1==e.length&&cu(e[0])?Cn(e[0],Yn(Va())):Cn(To(e,1),Yn(Va()));var n=e.length;return _i((function(r){var o=-1,i=Ue(r.length,n);while(++o=e})),su=qo(function(){return arguments}())?qo:function(t){return Au(t)&&de.call(t,"callee")&&!ke.call(t,"callee")},cu=n.isArray,lu=hn?Yn(hn):zo;function uu(t){return null!=t&&Ou(t.length)&&!_u(t)}function du(t){return Au(t)&&uu(t)}function pu(t){return!0===t||!1===t||Au(t)&&$o(t)==K}var fu=Pe||Wp,hu=vn?Yn(vn):Ko;function vu(t){return Au(t)&&1===t.nodeType&&!Nu(t)}function bu(t){if(null==t)return!0;if(uu(t)&&(cu(t)||"string"==typeof t||"function"==typeof t.splice||fu(t)||Bu(t)||su(t)))return!t.length;var e=Ja(t);if(e==Z||e==at)return!t.size;if(fs(t))return!ri(t).length;for(var n in t)if(de.call(t,n))return!1;return!0}function gu(t,e){return Wo(t,e)}function mu(t,e,n){n="function"==typeof n?n:i;var r=n?n(t,e):i;return r===i?Wo(t,e,i,n):!!r}function yu(t){if(!Au(t))return!1;var e=$o(t);return e==Y||e==X||"string"==typeof t.message&&"string"==typeof t.name&&!Nu(t)}function wu(t){return"number"==typeof t&&$e(t)}function _u(t){if(!ku(t))return!1;var e=$o(t);return e==J||e==Q||e==z||e==ot}function xu(t){return"number"==typeof t&&t==Wu(t)}function Ou(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=$}function ku(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Au(t){return null!=t&&"object"==typeof t}var Eu=bn?Yn(bn):Yo;function Su(t,e){return t===e||Jo(t,e,za(e))}function Cu(t,e,n){return n="function"==typeof n?n:i,Jo(t,e,za(e),n)}function Tu(t){return ju(t)&&t!=+t}function Ru(t){if(ps(t))throw new o(c);return Qo(t)}function Iu(t){return null===t}function Lu(t){return null==t}function ju(t){return"number"==typeof t||Au(t)&&$o(t)==tt}function Nu(t){if(!Au(t)||$o(t)!=nt)return!1;var e=xe(t);if(null===e)return!0;var n=de.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&ue.call(n)==ve}var Du=gn?Yn(gn):Zo;function Pu(t){return xu(t)&&t>=-$&&t<=$}var $u=mn?Yn(mn):ti;function Mu(t){return"string"==typeof t||!cu(t)&&Au(t)&&$o(t)==st}function Fu(t){return"symbol"==typeof t||Au(t)&&$o(t)==ct}var Bu=yn?Yn(yn):ei;function Uu(t){return t===i}function Gu(t){return Au(t)&&Ja(t)==ut}function Hu(t){return Au(t)&&$o(t)==dt}var Vu=Ea(ii),qu=Ea((function(t,e){return t<=e}));function zu(t){if(!t)return[];if(uu(t))return Mu(t)?gr(t):oa(t);if(Se&&t[Se])return cr(t[Se]());var e=Ja(t),n=e==Z?lr:e==at?pr:Ud;return n(t)}function Ku(t){if(!t)return 0===t?t:0;if(t=Yu(t),t===P||t===-P){var e=t<0?-1:1;return e*M}return t===t?t:0}function Wu(t){var e=Ku(t),n=e%1;return e===e?n?e-n:e:0}function Xu(t){return t?go(Wu(t),0,B):0}function Yu(t){if("number"==typeof t)return t;if(Fu(t))return F;if(ku(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=ku(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Xn(t);var n=Xt.test(t);return n||Jt.test(t)?on(t.slice(2),n?2:8):Wt.test(t)?F:+t}function Ju(t){return ia(t,Od(t))}function Qu(t){return t?go(Wu(t),-$,$):0===t?t:0}function Zu(t){return null==t?"":Ni(t)}var td=la((function(t,e){if(fs(e)||uu(e))ia(e,xd(e),t);else for(var n in e)de.call(e,n)&&lo(t,n,e[n])})),ed=la((function(t,e){ia(e,Od(e),t)})),nd=la((function(t,e,n,r){ia(e,Od(e),t,r)})),rd=la((function(t,e,n,r){ia(e,xd(e),t,r)})),od=Ma(bo);function id(t,e){var n=Or(t);return null==e?n:fo(n,e)}var ad=_i((function(t,e){t=ne(t);var n=-1,r=e.length,o=r>2?e[2]:i;o&&ss(e[0],e[1],o)&&(r=1);while(++n1),e})),ia(t,Ba(t),n),r&&(n=mo(n,h|v|b,Na));var o=e.length;while(o--)Pi(n,e[o]);return n}));function Td(t,e){return Id(t,Ul(Va(e)))}var Rd=Ma((function(t,e){return null==t?{}:fi(t,e)}));function Id(t,e){if(null==t)return{};var n=Cn(Ba(t),(function(t){return[t]}));return e=Va(e),hi(t,n,(function(t,n){return e(t,n[0])}))}function Ld(t,e,n){e=Vi(e,t);var r=-1,o=e.length;o||(o=1,t=i);while(++re){var r=t;t=e,e=r}if(n||t%1||e%1){var o=ze();return Ue(t+o*(e-t+rn("1e-"+((o+"").length-1))),e)}return mi(t,e)}var zd=ha((function(t,e,n){return e=e.toLowerCase(),t+(n?Kd(e):e)}));function Kd(t){return wp(Zu(t).toLowerCase())}function Wd(t){return t=Zu(t),t&&t.replace(Zt,nr).replace(Ve,"")}function Xd(t,e,n){t=Zu(t),e=Ni(e);var r=t.length;n=n===i?r:go(Wu(n),0,r);var o=n;return n-=e.length,n>=0&&t.slice(n,o)==e}function Yd(t){return t=Zu(t),t&&Tt.test(t)?t.replace(St,rr):t}function Jd(t){return t=Zu(t),t&&$t.test(t)?t.replace(Pt,"\\$&"):t}var Qd=ha((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Zd=ha((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),tp=fa("toLowerCase");function ep(t,e,n){t=Zu(t),e=Wu(e);var r=e?br(t):0;if(!e||r>=e)return t;var o=(e-r)/2;return Oa(Ne(o),n)+t+Oa(je(o),n)}function np(t,e,n){t=Zu(t),e=Wu(e);var r=e?br(t):0;return e&&r>>0,n?(t=Zu(t),t&&("string"==typeof e||null!=e&&!Du(e))&&(e=Ni(e),!e&&ar(t))?zi(gr(t),0,n):t.split(e,n)):[]}var lp=ha((function(t,e,n){return t+(n?" ":"")+wp(e)}));function up(t,e,n){return t=Zu(t),n=null==n?0:go(Wu(n),0,t.length),e=Ni(e),t.slice(n,n+e.length)==e}function dp(t,e,n){var r=_r.templateSettings;n&&ss(t,e,n)&&(e=i),t=Zu(t),e=nd({},e,r,La);var a,s,c=nd({},e.imports,r.imports,La),l=xd(c),d=Jn(c,l),p=0,f=e.interpolate||te,h="__p += '",v=re((e.escape||te).source+"|"+f.source+"|"+(f===Lt?zt:te).source+"|"+(e.evaluate||te).source+"|$","g"),b="//# sourceURL="+(de.call(e,"sourceURL")?(e.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Ye+"]")+"\n";t.replace(v,(function(e,n,r,o,i,c){return r||(r=o),h+=t.slice(p,c).replace(ee,or),n&&(a=!0,h+="' +\n__e("+n+") +\n'"),i&&(s=!0,h+="';\n"+i+";\n__p += '"),r&&(h+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),p=c+e.length,e})),h+="';\n";var g=de.call(e,"variable")&&e.variable;if(g){if(Vt.test(g))throw new o(u)}else h="with (obj) {\n"+h+"\n}\n";h=(s?h.replace(Ot,""):h).replace(kt,"$1").replace(At,"$1;"),h="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(s?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+h+"return __p\n}";var m=xp((function(){return Ft(l,b+"return "+h).apply(i,d)}));if(m.source=h,yu(m))throw m;return m}function pp(t){return Zu(t).toLowerCase()}function fp(t){return Zu(t).toUpperCase()}function hp(t,e,n){if(t=Zu(t),t&&(n||e===i))return Xn(t);if(!t||!(e=Ni(e)))return t;var r=gr(t),o=gr(e),a=Zn(r,o),s=tr(r,o)+1;return zi(r,a,s).join("")}function vp(t,e,n){if(t=Zu(t),t&&(n||e===i))return t.slice(0,mr(t)+1);if(!t||!(e=Ni(e)))return t;var r=gr(t),o=tr(r,gr(e))+1;return zi(r,0,o).join("")}function bp(t,e,n){if(t=Zu(t),t&&(n||e===i))return t.replace(Mt,"");if(!t||!(e=Ni(e)))return t;var r=gr(t),o=Zn(r,gr(e));return zi(r,o).join("")}function gp(t,e){var n=T,r=R;if(ku(e)){var o="separator"in e?e.separator:o;n="length"in e?Wu(e.length):n,r="omission"in e?Ni(e.omission):r}t=Zu(t);var a=t.length;if(ar(t)){var s=gr(t);a=s.length}if(n>=a)return t;var c=n-br(r);if(c<1)return r;var l=s?zi(s,0,c).join(""):t.slice(0,c);if(o===i)return l+r;if(s&&(c+=l.length-c),Du(o)){if(t.slice(c).search(o)){var u,d=l;o.global||(o=re(o.source,Zu(Kt.exec(o))+"g")),o.lastIndex=0;while(u=o.exec(d))var p=u.index;l=l.slice(0,p===i?c:p)}}else if(t.indexOf(Ni(o),c)!=c){var f=l.lastIndexOf(o);f>-1&&(l=l.slice(0,f))}return l+r}function mp(t){return t=Zu(t),t&&Ct.test(t)?t.replace(Et,yr):t}var yp=ha((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),wp=fa("toUpperCase");function _p(t,e,n){return t=Zu(t),e=n?i:e,e===i?sr(t)?xr(t):Dn(t):t.match(e)||[]}var xp=_i((function(t,e){try{return wn(t,i,e)}catch(n){return yu(n)?n:new o(n)}})),Op=Ma((function(t,e){return xn(e,(function(e){e=Is(e),vo(t,e,Ll(t[e],t))})),t}));function kp(t){var e=null==t?0:t.length,n=Va();return t=e?Cn(t,(function(t){if("function"!=typeof t[1])throw new ie(l);return[n(t[0]),t[1]]})):[],_i((function(n){var r=-1;while(++r$)return[];var n=B,r=Ue(t,B);e=Va(e),t-=B;var o=Kn(r,e);while(++n0||e<0)?new Sr(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==i&&(e=Wu(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},Sr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Sr.prototype.toArray=function(){return this.take(B)},Lo(Sr.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),o=_r[r?"take"+("last"==e?"Right":""):e],a=r||/^find/.test(e);o&&(_r.prototype[e]=function(){var e=this.__wrapped__,s=r?[1]:arguments,c=e instanceof Sr,l=s[0],u=c||cu(e),d=function(t){var e=o.apply(_r,Tn([t],s));return r&&p?e[0]:e};u&&n&&"function"==typeof l&&1!=l.length&&(c=u=!1);var p=this.__chain__,f=!!this.__actions__.length,h=a&&!p,v=c&&!f;if(!a&&u){e=v?e:new Sr(this);var b=t.apply(e,s);return b.__actions__.push({func:Kc,args:[d],thisArg:i}),new Er(b,p)}return h&&v?t.apply(this,s):(b=this.thru(d),h?r?b.value()[0]:b.value():b)})})),xn(["pop","push","shift","sort","splice","unshift"],(function(t){var e=ae[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);_r.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var o=this.value();return e.apply(cu(o)?o:[],t)}return this[n]((function(n){return e.apply(cu(n)?n:[],t)}))}})),Lo(Sr.prototype,(function(t,e){var n=_r[e];if(n){var r=n.name+"";de.call(ln,r)||(ln[r]=[]),ln[r].push({name:e,func:n})}})),ln[ya(i,w).name]=[{name:"wrapper",func:i}],Sr.prototype.clone=Cr,Sr.prototype.reverse=Tr,Sr.prototype.value=Rr,_r.prototype.at=Wc,_r.prototype.chain=Xc,_r.prototype.commit=Yc,_r.prototype.next=Jc,_r.prototype.plant=Zc,_r.prototype.reverse=tl,_r.prototype.toJSON=_r.prototype.valueOf=_r.prototype.value=el,_r.prototype.first=_r.prototype.head,Se&&(_r.prototype[Se]=Qc),_r},kr=Or();cn._=kr,o=function(){return kr}.call(e,n,e,r),o===i||(r.exports=o)}).call(this)}).call(this,n("7d15"),n("6984")(t))},"9ef5":function(t,e,n){var r=n("2357"),o=n("b506"),i=n("6bcf"),a=NaN,s=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt;function d(t){if("number"==typeof t)return t;if(i(t))return a;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=c.test(t);return n||l.test(t)?u(t.slice(2),n?2:8):s.test(t)?a:+t}t.exports=d},"9f16":function(t,e,n){"use strict";e["a"]={methods:{mappedKeys(t,e){const n={...t};return n[9]=t=>{if(!e.open)return;t.preventDefault();const n=e.filteredOptions.length,r=e.typeAheadPointer;return t.shiftKey?0===r?e.onEscape():e.typeAheadUp():r+1===n?e.onEscape():e.typeAheadDown()},n[27]=t=>(e.open=!1,e.search="",!1),n[13]=(t,n)=>{if(!e.open)return void(e.open=!0);let r=e.filteredOptions[e.typeAheadPointer];e.$emit("option:selecting",r),e.isOptionSelected(r)||(e.taggable&&!e.optionExists(r)&&e.$emit("option:created",r),e.multiple&&(r=e.selectedValue.concat(r)),e.updateValue(r),e.$emit("option:selected",r),e.closeOnSelect&&(e.open=!1,e.typeAheadPointer=-1),e.clearSearchOnSelect&&(e.search=""))},n[38]=t=>(t.preventDefault(),e.open||(e.open=!0),e.typeAheadUp()),n[40]=t=>(t.preventDefault(),e.open||(e.open=!0),e.typeAheadDown()),n}}}},"9f54":function(t,e){function n(t,e,n){var r=n-1,o=t.length;while(++r=0;r--){var o=t[r];"."===o?t.splice(r,1):".."===o?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t){"string"!==typeof t&&(t+="");var e,n=0,r=-1,o=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!o){n=e+1;break}}else-1===r&&(o=!1,r=e+1);return-1===r?"":t.slice(n,r)}function o(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!r;i--){var a=i>=0?arguments[i]:t.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,r="/"===a.charAt(0))}return e=n(o(e.split("/"),(function(t){return!!t})),!r).join("/"),(r?"/":"")+e||"."},e.normalize=function(t){var r=e.isAbsolute(t),a="/"===i(t,-1);return t=n(o(t.split("/"),(function(t){return!!t})),!r).join("/"),t||r||(t="."),t&&a&&(t+="/"),(r?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(o(t,(function(t,e){if("string"!==typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0;n--)if(""!==t[n])break;return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var o=r(t.split("/")),i=r(n.split("/")),a=Math.min(o.length,i.length),s=a,c=0;c=1;--i)if(e=t.charCodeAt(i),47===e){if(!o){r=i;break}}else o=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=r(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!==typeof t&&(t+="");for(var e=-1,n=0,r=-1,o=!0,i=0,a=t.length-1;a>=0;--a){var s=t.charCodeAt(a);if(47!==s)-1===r&&(o=!1,r=a+1),46===s?-1===e?e=a:1!==i&&(i=1):-1!==e&&(i=-1);else if(!o){n=a+1;break}}return-1===e||-1===r||0===i||1===i&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n("07d9"))},a454:function(t,e,n){var r=n("872c"),o="Expected a function";function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(o);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=t.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(i.Cache||r),n}i.Cache=r,t.exports=i},a48a:function(t,e,n){var r=n("cbff"),o=n("c316");function i(t,e,n){var i=e(t);return o(t)?i:r(i,n(t))}t.exports=i},a4fc:function(t,e){function n(t,e){return t===e||t!==t&&e!==e}t.exports=n},a67c:function(t,e){var n=9007199254740991,r=/^(?:0|[1-9]\d*)$/;function o(t,e){var o=typeof t;return e=null==e?n:e,!!e&&("number"==o||"symbol"!=o&&r.test(t))&&t>-1&&t%1==0&&t=this.queue.length&&(this.queue=this.queue.slice(this.offset),this.offset=0),t},this.peek=function(){return this.queue.length>0?this.queue[this.offset]:void 0},this.clear=function(){this.offset=0,this.queue.length=0}}function o(t,e,n,o=!1){return o&&console.log("eachLimit of",t.length," items",e,"at a time"),new Promise((i,a)=>{const s=new r;let c=0,l=!1;const u=[];for(let e=0;e{o&&console.log("Done",t),u[e]=n,c--,d()}).catch(e=>{o&&console.log("Failed",e,t),l=!0,a(e)})}}}d()})}n.d(e,"a",(function(){return o}))},a920:function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".button-dropdown.btn-sm[data-v-4b526572]>.vs__dropdown-toggle .vs__actions:after{font-size:1.6rem}.button-dropdown.btn-lg[data-v-4b526572]>.vs__dropdown-toggle .vs__actions:after{font-size:2.6rem}.button-dropdown[data-v-4b526572]{background:var(--accent-btn);border:solid 1px var(--link);color:var(--link);padding:0}.button-dropdown.vs--open[data-v-4b526572]{outline:none;box-shadow:none}.button-dropdown[data-v-4b526572]:hover .vs__dropdown-toggle .vs__actions,.button-dropdown[data-v-4b526572]:hover .vs__selected-options{background:var(--accent-btn-hover)}.button-dropdown[data-v-4b526572]:hover .vs__selected-options .vs__selected button{background-color:transparent;color:var(--accent-btn-hover-text)}.button-dropdown[data-v-4b526572]:hover .vs__dropdown-toggle .vs__actions:after{color:var(--accent-btn-hover-text)}.button-dropdown[data-v-4b526572]>.vs__dropdown-toggle{width:100%;display:grid;grid-template-columns:75% 25%;border:none;background:transparent}.button-dropdown[data-v-4b526572]>.vs__dropdown-toggle .vs__actions:after{color:var(--link);line-height:1}.button-dropdown[data-v-4b526572] .vs__selected-options .vs__selected{margin:unset;border:none}.button-dropdown[data-v-4b526572] .vs__selected-options .vs__selected button{border:none;background:transparent;color:var(--link)}.button-dropdown[data-v-4b526572] .vs__selected-options .vs__search{position:absolute;opacity:0;padding:0}.button-dropdown[data-v-4b526572] .vs__dropdown-menu{min-width:unset;width:-moz-fit-content;width:fit-content}",""]),t.exports=e},a9e0:function(t,e,n){var r=n("bf10"),o=n("201b"),i=r(o,"Map");t.exports=i},aa31:function(t,e){var n="__lodash_hash_undefined__";function r(t){return this.__data__.set(t,n),this}t.exports=r},ae68:function(t,e,n){var r=n("d99b"),o=n("6efc"),i=n("c316"),a=n("dda8"),s=n("a67c"),c=n("41dd"),l=Object.prototype,u=l.hasOwnProperty;function d(t,e){var n=i(t),l=!n&&o(t),d=!n&&!l&&a(t),p=!n&&!l&&!d&&c(t),f=n||l||d||p,h=f?r(t.length,String):[],v=h.length;for(var b in t)!e&&!u.call(t,b)||f&&("length"==b||d&&("offset"==b||"parent"==b)||p&&("buffer"==b||"byteLength"==b||"byteOffset"==b)||s(b,v))||h.push(b);return h}t.exports=d},b022:function(t,e){function n(t,e,n){var r=-1,o=null==t?0:t.length;while(++r{a.ENABLE_DEBUG_LOGGING&&console.debug("GC",...t)},this.gcLastRun=0,this.getUiPerfGarbageCollection=t=>{var e;const n=null===(e=t.management.types[r["j"].SETTING])||void 0===e?void 0:e.list.find(t=>t.id===o["a"].UI_PERFORMANCE);if(!n||!n.value)return;const i=`${n.metadata.generation}-${n.metadata.resourceVersion}`;if(this.cachedGcPrefsStamp!==i){this.debugLog(`Updating ${o["a"].UI_PERFORMANCE} cache`),this.cachedGcPrefsStamp=i;const t=JSON.parse(n.value);this.cachedGcPrefs=t.garbageCollection}return this.cachedGcPrefs},this.lastAccessedCache={},this.lastRouteChange=0}gcEnabledAll(t,e){return this.gcEnabledForStore(t.state)&&this.gcEnabledSetting(t)&&this.gcEnabledForType(t,e)}gcEnabledSetting(t){const{rootState:e}=t,n=this.getUiPerfGarbageCollection(e);return null===n||void 0===n?void 0:n.enabled}gcEnabledForStore(t){var e;return null===(e=null===t||void 0===t?void 0:t.config)||void 0===e?void 0:e.supportsGc}gcEnabledForType(t,e){const{getters:n}=t;return!(!e||n.gcIgnoreTypes[e])}gcEnabledInterval(t){const{rootState:e}=t,n=this.getUiPerfGarbageCollection(e);return{enabled:null===n||void 0===n?void 0:n.enabledInterval,interval:(null===n||void 0===n?void 0:n.interval)||0}}gcEnabledRoute(t){const{rootState:e}=t,n=this.getUiPerfGarbageCollection(e);return null===n||void 0===n?void 0:n.enabledOnNavigate}garbageCollect(t,e={}){const n=(new Date).getTime();if(null===this.gcLastRun||n-this.gcLastRun{var d;if(!c)return void this.debugLog(a+": Skipping (no accessed time)");if(!this.gcEnabledForType(t,a))return void this.debugLog(a+": Skipping (type ignored by store)");if(e[a])return void this.debugLog(a+": Skipping (navigating to type)");if(n-c<=l)return void this.debugLog(a+": Skipping (recently accessed)");if(void 0!==this.lastRouteChange&&this.lastRouteChange0&&console.info("Garbage Collected Resources",o),this.debugLog("------ Finished ------")}gcUpdateLastAccessed(t,e){if(!this.gcEnabledAll(t,e))return;const n=t.state.config.namespace;this.lastAccessedCache[n]||(this.lastAccessedCache[n]={}),this.lastAccessedCache[n][e]=(new Date).getTime()}gcUpdateRouteChanged(){this.lastRouteChange=(new Date).getTime()}gcResetStore(t){const e=t.config.namespace;delete this.lastAccessedCache[e],this.debugLog("Forgetting Store:",e)}gcResetType(t,e){const n=t.config.namespace;this.lastAccessedCache[n]&&(delete this.lastAccessedCache[n][e],this.debugLog("Forgetting Type:",n,e))}}a.ENABLE_DEBUG_LOGGING=!1,a.GC_RE_RUN_GAP=5e3;new a;const s="allIfAuthed"},b3e4:function(t,e,n){var r=n("2419"),o=n("39f2"),i=n("b022"),a=n("4b48"),s=n("f533"),c=n("5e52"),l=200;function u(t,e,n){var u=-1,d=o,p=t.length,f=!0,h=[],v=h;if(n)f=!1,d=i;else if(p>=l){var b=e?null:s(t);if(b)return c(b);f=!1,d=a,v=new r}else v=e?[]:h;t:while(++u=e?t:""+Array(e+1-r.length).join(n)+t},p={s:d,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+d(r,2,"0")+":"+d(o,2,"0")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,a),o=e-r<0,i=t.clone().add(n+(o?-1:1),a);return Number(-(n+(e-r)/(o?r-i:i-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(l){return{M:a,y:c,w:i,d:o,D:"date",h:r,m:n,s:e,ms:t,Q:s}[l]||String(l||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},f={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},h="en",v={};v[h]=f;var b=function(t){return t instanceof w},g=function(t,e,n){var r;if(!t)return h;if("string"==typeof t)v[t]&&(r=t),e&&(v[t]=e,r=t);else{var o=t.name;v[o]=t,r=o}return!n&&r&&(h=r),r||!n&&h},m=function(t,e){if(b(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new w(n)},y=p;y.l=g,y.i=b,y.w=function(t,e){return m(t,{locale:e.$L,utc:e.$u,$offset:e.$offset})};var w=function(){function d(t){this.$L=this.$L||g(t.locale,null,!0),this.parse(t)}var p=d.prototype;return p.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(y.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(l);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(e)}(t),this.init()},p.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},p.$utils=function(){return y},p.isValid=function(){return!("Invalid Date"===this.$d.toString())},p.isSame=function(t,e){var n=m(t);return this.startOf(e)<=n&&n<=this.endOf(e)},p.isAfter=function(t,e){return m(t)-1&&t%1==0&&t<=n}t.exports=r},bab9:function(t,e,n){var r=n("e970");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("6a8e5472",r,!0,{sourceMap:!1,shadowMode:!1})},bc61:function(t,e,n){var r=n("b506"),o=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(o)return o(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},bcb3:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));n("907c"),n("462f"),n("79ad");const r="explorer"},bddd:function(t,e,n){"use strict";n.d(e,"h",(function(){return o})),n.d(e,"i",(function(){return i})),n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"e",(function(){return c})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"c",(function(){return p})),n.d(e,"d",(function(){return f})),n.d(e,"j",(function(){return h}));n("9dfc");var r=n("e24b");function o(t,e){const n=t.indexOf(e);return n>=0&&t.splice(n,1),t}function i(t,e){let n,r=[];for(n=0;nt-e);const o=[];let i,a;while(r.length){i=r.shift(),a=i;while(r.length&&r[0]===a+1)a=r.shift();o.push({start:i,end:a})}for(n=o.length-1;n>=0;n--){const{start:e,end:r}=o[n];t.splice(e,r-e+1)}return t}function a(t,e){const n=t.indexOf(e);-1===n&&t.push(e)}function s(t,e){const n=[];for(const r of e)t.includes(r)||n.includes(r)||n.push(r);t.push(...n)}function c(t,e,...n){t.splice(e,0,...n)}function l(t){return Array.isArray(t)}function u(t,e,n=1){if(e<0)throw new Error("Index too low");if(e+n>t.length)throw new Error("Index + length too high");return t.splice(e,n),t}function d(t,e,n,o){return e=e||[],"object"===typeof n?e[t](t=>{for(const e in n){const o=n[e],i=Object(r["f"])(t,e);if("undefined"===typeof o){if(!i)return!1}else if(i!==o)return!1}return!0}):void 0===o?e[t](t=>!!Object(r["f"])(t,n)):e[t](t=>Object(r["f"])(t,n)===o)}function p(t,e,n){return d("filter",t,e,n)}function f(t,e,n){return d("find",t,e,n)}function h(t){const e=[];return s(e,t),e}},be67:function(t,e,n){var r=n("dea0");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("297bd92e",r,!0,{sourceMap:!1,shadowMode:!1})},bf10:function(t,e,n){var r=n("e672"),o=n("e29f");function i(t,e){var n=o(t,e);return r(n)?n:void 0}t.exports=i},c02d:function(t,e,n){var r=n("3f3f");function o(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}t.exports=o},c210:function(t,e,n){"use strict";n("d182")},c294:function(t,e,n){var r=n("4774"),o=n("479b");function i(t){return r((function(e,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;a=t.length>3&&"function"==typeof a?(i--,a):void 0,s&&o(n[0],n[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);while(++rt)}},c991:function(t,e,n){var r=n("b650"),o=1,i=Object.prototype,a=i.hasOwnProperty;function s(t,e,n,i,s,c){var l=n&o,u=r(t),d=u.length,p=r(e),f=p.length;if(d!=f&&!l)return!1;var h=d;while(h--){var v=u[h];if(!(l?v in e:a.call(e,v)))return!1}var b=c.get(t),g=c.get(e);if(b&&g)return b==e&&g==t;var m=!0;c.set(t,e),c.set(e,t);var y=l;while(++h{}}function o(t){return()=>{}}function i(t){return()=>{}}function a(t){return()=>{}}function s(t){return()=>{}}function c(t){return()=>{}}function l(t){return()=>{}}function u(t){return()=>{}}function d(){return[]}function p(t,e){return()=>{}}function f(t){return()=>{}}function h(t){}function v(t){}function b(t){}function g(t){}function m(t){return()=>{}}function y(t){}function w(t){}function _(t){}n.d(e,"b",(function(){return r})),n.d(e,"i",(function(){return o})),n.d(e,"h",(function(){return i})),n.d(e,"a",(function(){return a})),n.d(e,"g",(function(){return s})),n.d(e,"d",(function(){return c})),n.d(e,"f",(function(){return l})),n.d(e,"e",(function(){return u})),n.d(e,"k",(function(){return d})),n.d(e,"l",(function(){return p})),n.d(e,"c",(function(){return f})),n.d(e,"q",(function(){return h})),n.d(e,"m",(function(){return v})),n.d(e,"p",(function(){return b})),n.d(e,"o",(function(){return g})),n.d(e,"j",(function(){return m})),n.d(e,"s",(function(){return y})),n.d(e,"r",(function(){return w})),n.d(e,"n",(function(){return _}))},d66a:function(t,e,n){var r=n("489a"),o=n("cfe4");function i(t,e){return null!=t&&o(t,e,r)}t.exports=i},d6e7:function(t,e,n){"use strict";n("88df")},d802:function(t,e,n){"use strict";function r(t,e,n,r,o,i,a,s){var c,l="function"===typeof t?t.options:t;if(e&&(l.render=e,l.staticRenderFns=n,l._compiled=!0),r&&(l.functional=!0),i&&(l._scopeId="data-v-"+i),a?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},l._ssrRegister=c):o&&(c=s?function(){o.call(this,(l.functional?this.parent:this).$root.$options.shadowRoot)}:o),c)if(l.functional){l._injectStyles=c;var u=l.render;l.render=function(t,e){return c.call(e),u(t,e)}}else{var d=l.beforeCreate;l.beforeCreate=d?[].concat(d,c):[c]}return{exports:t,options:l}}n.d(e,"a",(function(){return r}))},d856:function(t,e,n){var r=n("e697");function o(){this.__data__=r?r(null):{},this.size=0}t.exports=o},d99b:function(t,e){function n(t,e){var n=-1,r=Array(t);while(++nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,i=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}var k=Object.prototype.hasOwnProperty;function A(t,e){return t=t.slice(),t.push(e),t}function E(t,e){return e=e.slice(),e.unshift(t),e}var S=function(t){s(n,t);var e=b(n);function n(t){var r;return a(this,n),r=e.call(this,'JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)'),r.avoidNew=!0,r.value=t,r.name="NewError",r}return n}(f(Error));function C(t,e,n,r,o){if(!(this instanceof C))try{return new C(t,e,n,r,o)}catch(l){if(!l.avoidNew)throw l;return l.value}"string"===typeof t&&(o=r,r=n,n=e,e=t,t=null);var a=t&&"object"===i(t);if(t=t||{},this.json=t.json||n,this.path=t.path||e,this.resultType=t.resultType||"value",this.flatten=t.flatten||!1,this.wrap=!k.call(t,"wrap")||t.wrap,this.sandbox=t.sandbox||{},this.preventEval=t.preventEval||!1,this.parent=t.parent||null,this.parentProperty=t.parentProperty||null,this.callback=t.callback||r||null,this.otherTypeCallback=t.otherTypeCallback||o||function(){throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.")},!1!==t.autostart){var s={path:a?t.path:e};a?"json"in t&&(s.json=t.json):s.json=n;var c=this.evaluate(s);if(!c||"object"!==i(c))throw new S(c);return c}}C.prototype.evaluate=function(t,e,n,r){var o=this,a=this.parent,s=this.parentProperty,c=this.flatten,l=this.wrap;if(this.currResultType=this.resultType,this.currPreventEval=this.preventEval,this.currSandbox=this.sandbox,n=n||this.callback,this.currOtherTypeCallback=r||this.otherTypeCallback,e=e||this.json,t=t||this.path,t&&"object"===i(t)&&!Array.isArray(t)){if(!t.path&&""!==t.path)throw new TypeError('You must supply a "path" property when providing an object argument to JSONPath.evaluate().');if(!k.call(t,"json"))throw new TypeError('You must supply a "json" property when providing an object argument to JSONPath.evaluate().');var u=t;e=u.json,c=k.call(t,"flatten")?t.flatten:c,this.currResultType=k.call(t,"resultType")?t.resultType:this.currResultType,this.currSandbox=k.call(t,"sandbox")?t.sandbox:this.currSandbox,l=k.call(t,"wrap")?t.wrap:l,this.currPreventEval=k.call(t,"preventEval")?t.preventEval:this.currPreventEval,n=k.call(t,"callback")?t.callback:n,this.currOtherTypeCallback=k.call(t,"otherTypeCallback")?t.otherTypeCallback:this.currOtherTypeCallback,a=k.call(t,"parent")?t.parent:a,s=k.call(t,"parentProperty")?t.parentProperty:s,t=t.path}if(a=a||null,s=s||null,Array.isArray(t)&&(t=C.toPathString(t)),(t||""===t)&&e){var d=C.toPathArray(t);"$"===d[0]&&d.length>1&&d.shift(),this._hasParentSelector=null;var p=this._trace(d,e,["$"],a,s,n).filter((function(t){return t&&!t.isParentSelector}));return p.length?l||1!==p.length||p[0].hasArrExpr?p.reduce((function(t,e){var n=o._getPreferredOutput(e);return c&&Array.isArray(n)?t=t.concat(n):t.push(n),t}),[]):this._getPreferredOutput(p[0]):l?[]:void 0}},C.prototype._getPreferredOutput=function(t){var e=this.currResultType;switch(e){case"all":var n=Array.isArray(t.path)?t.path:C.toPathArray(t.path);return t.pointer=C.toPointer(n),t.path="string"===typeof t.path?t.path:C.toPathString(t.path),t;case"value":case"parent":case"parentProperty":return t[e];case"path":return C.toPathString(t[e]);case"pointer":return C.toPointer(t.path);default:throw new TypeError("Unknown result type")}},C.prototype._handleCallback=function(t,e,n){if(e){var r=this._getPreferredOutput(t);t.path="string"===typeof t.path?t.path:C.toPathString(t.path),e(r,n,t)}},C.prototype._trace=function(t,e,n,r,o,a,s,c){var l,u=this;if(!t.length)return l={path:n,value:e,parent:r,parentProperty:o,hasArrExpr:s},this._handleCallback(l,a,"value"),l;var d=t[0],p=t.slice(1),f=[];function h(t){Array.isArray(t)?t.forEach((function(t){f.push(t)})):f.push(t)}if(("string"!==typeof d||c)&&e&&k.call(e,d))h(this._trace(p,e[d],A(n,d),e,d,a,s));else if("*"===d)this._walk(d,p,e,n,r,o,a,(function(t,e,n,r,o,i,a,s){h(u._trace(E(t,n),r,o,i,a,s,!0,!0))}));else if(".."===d)h(this._trace(p,e,n,r,o,a,s)),this._walk(d,p,e,n,r,o,a,(function(t,e,n,r,o,a,s,c){"object"===i(r[t])&&h(u._trace(E(e,n),r[t],A(o,t),r,t,c,!0))}));else{if("^"===d)return this._hasParentSelector=!0,{path:n.slice(0,-1),expr:p,isParentSelector:!0};if("~"===d)return l={path:A(n,d),value:o,parent:r,parentProperty:null},this._handleCallback(l,a,"property"),l;if("$"===d)h(this._trace(p,e,n,null,null,a,s));else if(/^(\x2D?[0-9]*):(\x2D?[0-9]*):?([0-9]*)$/.test(d))h(this._slice(d,p,e,n,r,o,a));else if(0===d.indexOf("?(")){if(this.currPreventEval)throw new Error("Eval [?(expr)] prevented in JSONPath expression.");this._walk(d,p,e,n,r,o,a,(function(t,e,n,r,o,i,a,s){u._eval(e.replace(/^\?\(((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?)\)$/,"$1"),r[t],t,o,i,a)&&h(u._trace(E(t,n),r,o,i,a,s,!0))}))}else if("("===d[0]){if(this.currPreventEval)throw new Error("Eval [(expr)] prevented in JSONPath expression.");h(this._trace(E(this._eval(d,e,n[n.length-1],n.slice(0,-1),r,o),p),e,n,r,o,a,s))}else if("@"===d[0]){var v=!1,b=d.slice(1,-2);switch(b){case"scalar":e&&["object","function"].includes(i(e))||(v=!0);break;case"boolean":case"string":case"undefined":case"function":i(e)===b&&(v=!0);break;case"integer":!Number.isFinite(e)||e%1||(v=!0);break;case"number":Number.isFinite(e)&&(v=!0);break;case"nonFinite":"number"!==typeof e||Number.isFinite(e)||(v=!0);break;case"object":e&&i(e)===b&&(v=!0);break;case"array":Array.isArray(e)&&(v=!0);break;case"other":v=this.currOtherTypeCallback(e,n,r,o);break;case"null":null===e&&(v=!0);break;default:throw new TypeError("Unknown value type "+b)}if(v)return l={path:n,value:e,parent:r,parentProperty:o},this._handleCallback(l,a,"value"),l}else if("`"===d[0]&&e&&k.call(e,d.slice(1))){var g=d.slice(1);h(this._trace(p,e[g],A(n,g),e,g,a,s,!0))}else if(d.includes(",")){var m,y=d.split(","),w=O(y);try{for(w.s();!(m=w.n()).done;){var _=m.value;h(this._trace(E(_,p),e,n,r,o,a,!0))}}catch(I){w.e(I)}finally{w.f()}}else!c&&e&&k.call(e,d)&&h(this._trace(p,e[d],A(n,d),e,d,a,s,!0))}if(this._hasParentSelector)for(var x=0;x-1?t.slice(0,a+1)+" return "+t.slice(a+1):" return "+t;return d(Function,g(n).concat([s])).apply(void 0,g(o))}};var R=n("8bbf"),I=n.n(R),L=(n("7195"),n("b506")),j=n.n(L),N=n("c316"),D=n.n(N),P=n("9e74"),$=n.n(P),M=(n("94a3"),n("2cb5")),F=n("bddd");function B(t,e,n){let r=t;if(!r)return;const o=Object(M["n"])(e);for(let i=0;i{const n=t[e];Array.isArray(n)?(t[e]=n.map(t=>{if(null!==t&&void 0!==t)return q(t)}),0===t[e].length&&delete t[e]):"undefined"===typeof n||null===n?delete t[e]:j()(n)&&(V(n)&&delete t[e],t[e]=q(n))}),t}function z(t,e){const n=Object.keys(t||{}),r=Object.keys(e||{});if(n.length!==r.length)return!1;for(let o=0;oli[data-v-3b920c85]{position:relative}.icon-li[data-v-3b920c85]{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.icon-li.icon-lg[data-v-3b920c85]{left:-1.8571428571em}.icon-rotate-90[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);transform:rotate(90deg)}.icon-rotate-180[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.icon-rotate-270[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);transform:rotate(270deg)}.icon-flip-horizontal[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);transform:scaleX(-1)}.icon-flip-vertical[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:scaleY(-1)}.main-container[data-v-3b920c85]{margin-top:-2.425rem}.services-by-cluster-grid[data-v-3b920c85]{display:grid;grid-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.cluster-header[data-v-3b920c85]{display:flex;align-items:center;justify-content:space-between;margin:1rem 0;background:var(--header-bg);border-bottom:var(--header-border-size) solid var(--header-border);height:var(--header-height);position:sticky;top:0;z-index:1}.favorite-icon[data-v-3b920c85]{margin-right:1rem}.icon-button[data-v-3b920c85]:hover{color:var(--primary-hover)}',""]),t.exports=e},e972:function(t,e){var n=/\s/;function r(t){var e=t.length;while(e--&&n.test(t.charAt(e)));return e}t.exports=r},ecda:function(t,e,n){var r=n("1001"),o=n("94dd"),i=n("06cb"),a=n("6d56"),s=n("e91b"),c="[object Boolean]",l="[object Date]",u="[object Map]",d="[object Number]",p="[object RegExp]",f="[object Set]",h="[object String]",v="[object Symbol]",b="[object ArrayBuffer]",g="[object DataView]",m="[object Float32Array]",y="[object Float64Array]",w="[object Int8Array]",_="[object Int16Array]",x="[object Int32Array]",O="[object Uint8Array]",k="[object Uint8ClampedArray]",A="[object Uint16Array]",E="[object Uint32Array]";function S(t,e,n){var S=t.constructor;switch(e){case b:return r(t);case c:case l:return new S(+t);case g:return o(t,n);case m:case y:case w:case _:case x:case O:case k:case A:case E:return s(t,n);case u:return new S;case d:case h:return new S(t);case p:return i(t);case f:return new S;case v:return a(t)}}t.exports=S},ecf6:function(t,e,n){var r=n("fbba"),o=n("906d"),i=o(r);t.exports=i},ed07:function(t,e,n){var r=n("2e6e");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("622cf29f",r,!0,{sourceMap:!1,shadowMode:!1})},ef42:function(t,e,n){var r=n("5b4b"),o=n("5f84"),i=Object.prototype,a=i.propertyIsEnumerable,s=Object.getOwnPropertySymbols,c=s?function(t){return null==t?[]:(t=Object(t),r(s(t),(function(e){return a.call(t,e)})))}:o;t.exports=c},eff8:function(t,e,n){var r=n("0e19"),o=n("b742"),i=n("b4b4"),a="[object Arguments]",s="[object Array]",c="[object Boolean]",l="[object Date]",u="[object Error]",d="[object Function]",p="[object Map]",f="[object Number]",h="[object Object]",v="[object RegExp]",b="[object Set]",g="[object String]",m="[object WeakMap]",y="[object ArrayBuffer]",w="[object DataView]",_="[object Float32Array]",x="[object Float64Array]",O="[object Int8Array]",k="[object Int16Array]",A="[object Int32Array]",E="[object Uint8Array]",S="[object Uint8ClampedArray]",C="[object Uint16Array]",T="[object Uint32Array]",R={};function I(t){return i(t)&&o(t.length)&&!!R[r(t)]}R[_]=R[x]=R[O]=R[k]=R[A]=R[E]=R[S]=R[C]=R[T]=!0,R[a]=R[s]=R[y]=R[c]=R[w]=R[l]=R[u]=R[d]=R[p]=R[f]=R[h]=R[v]=R[b]=R[g]=R[m]=!1,t.exports=I},effc:function(t,e,n){var r=n("6634"),o=n("84cb"),i=n("d12b");function a(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}t.exports=a},f19a:function(t,e){function n(){this.__data__=[],this.size=0}t.exports=n},f390:function(t,e,n){"use strict";n.d(e,"b",(function(){return a})),n.d(e,"a",(function(){return s}));var r=n("907c"),o=n("0788"),i=n("bddd");n("e24b");function a(t){if(s(t))return!1;const e=t["getStoreNameByProductId"],n=t[e+"/all"](r["v"]),a=Object(i["d"])(n,"id",Object(o["a"])(r["k"].PODMONITOR));return!!a}function s(t){var e;const n=t["currentCluster"];return!(null===n||void 0===n||null===(e=n.status)||void 0===e||!e.monitoringStatus)}},f522:function(t,e,n){var r=n("24da");function o(t){return r(this,t).has(t)}t.exports=o},f533:function(t,e,n){var r=n("3819"),o=n("9e79"),i=n("5e52"),a=1/0,s=r&&1/i(new r([,-0]))[1]==a?function(t){return new r(t)}:o;t.exports=s},f595:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAgVBMVEUAAAAkU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU//ULCqVAAAAKnRSTlMAjopHOdr8snNsY1Ae+aq3gEAqCfTyo1kvBOvm4sqglyYgGhbUmXVvNBL6rShDAAAAw0lEQVQ4y83Q2Q6CMBCF4aNYQG3LJpu74jrv/4ACTSEUEi4kxu/6n2RyMKUr+jhaGcthCvcRGr5dwLSmADPFgkOnWcsPUUrJBSnxm1FHfC4Dl4462HBBXX4eBTs66IBlZJjftzZRrAN5FmaQ1Ic6SJA6nufJbRs8pZTHrPnhsa74dhtAIcO3gdiNBIkzErg/COakrQaDU3FQU9leBGWhWbdq0CDilwvn/JqjZ1lf7hljKQatSFv+b/ASpIgAw0JLCTGpD5arSeJmn1I0AAAAAElFTkSuQmCC"},f6f6:function(t,e,n){var r=n("dca0"),o=function(){var t=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function i(t){return!!o&&o in t}t.exports=i},f72d:function(t,e,n){var r=n("daaf"),o=n("b742");function i(t){return null!=t&&o(t.length)&&!r(t)}t.exports=i},f9f5:function(t,e,n){var r=n("e697"),o="__lodash_hash_undefined__",i=Object.prototype,a=i.hasOwnProperty;function s(t){var e=this.__data__;if(r){var n=e[t];return n===o?void 0:n}return a.call(e,t)?e[t]:void 0}t.exports=s},fa8a:function(t,e,n){var r=n("f19a"),o=n("930a"),i=n("e556"),a=n("0a87"),s=n("2f33");function c(t){var e=-1,n=null==t?0:t.length;this.clear();while(++e>>1,H=[["ary",E],["bind",y],["bindKey",w],["curry",x],["curryRight",O],["flip",C],["partial",k],["partialRight",A],["rearg",S]],V="[object Arguments]",q="[object Array]",z="[object AsyncFunction]",K="[object Boolean]",W="[object Date]",X="[object DOMException]",Y="[object Error]",J="[object Function]",Q="[object GeneratorFunction]",Z="[object Map]",tt="[object Number]",et="[object Null]",nt="[object Object]",rt="[object Promise]",ot="[object Proxy]",it="[object RegExp]",at="[object Set]",st="[object String]",ct="[object Symbol]",lt="[object Undefined]",ut="[object WeakMap]",dt="[object WeakSet]",pt="[object ArrayBuffer]",ft="[object DataView]",ht="[object Float32Array]",vt="[object Float64Array]",bt="[object Int8Array]",gt="[object Int16Array]",mt="[object Int32Array]",yt="[object Uint8Array]",wt="[object Uint8ClampedArray]",_t="[object Uint16Array]",xt="[object Uint32Array]",Ot=/\b__p \+= '';/g,kt=/\b(__p \+=) '' \+/g,At=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Et=/&(?:amp|lt|gt|quot|#39);/g,St=/[&<>"']/g,Ct=RegExp(Et.source),Tt=RegExp(St.source),Rt=/<%-([\s\S]+?)%>/g,It=/<%([\s\S]+?)%>/g,Lt=/<%=([\s\S]+?)%>/g,jt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Nt=/^\w*$/,Dt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Pt=/[\\^$.*+?()[\]{}|]/g,$t=RegExp(Pt.source),Mt=/^\s+/,Ft=/\s/,Bt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ut=/\{\n\/\* \[wrapped with (.+)\] \*/,Gt=/,? & /,Ht=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Vt=/[()=,{}\[\]\/\s]/,qt=/\\(\\)?/g,zt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Kt=/\w*$/,Wt=/^[-+]0x[0-9a-f]+$/i,Xt=/^0b[01]+$/i,Yt=/^\[object .+?Constructor\]$/,Jt=/^0o[0-7]+$/i,Qt=/^(?:0|[1-9]\d*)$/,Zt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,te=/($^)/,ee=/['\n\r\u2028\u2029\\]/g,ne="\\ud800-\\udfff",re="\\u0300-\\u036f",oe="\\ufe20-\\ufe2f",ie="\\u20d0-\\u20ff",ae=re+oe+ie,se="\\u2700-\\u27bf",ce="a-z\\xdf-\\xf6\\xf8-\\xff",le="\\xac\\xb1\\xd7\\xf7",ue="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",de="\\u2000-\\u206f",pe=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",fe="A-Z\\xc0-\\xd6\\xd8-\\xde",he="\\ufe0e\\ufe0f",ve=le+ue+de+pe,be="['’]",ge="["+ne+"]",me="["+ve+"]",ye="["+ae+"]",we="\\d+",_e="["+se+"]",xe="["+ce+"]",Oe="[^"+ne+ve+we+se+ce+fe+"]",ke="\\ud83c[\\udffb-\\udfff]",Ae="(?:"+ye+"|"+ke+")",Ee="[^"+ne+"]",Se="(?:\\ud83c[\\udde6-\\uddff]){2}",Ce="[\\ud800-\\udbff][\\udc00-\\udfff]",Te="["+fe+"]",Re="\\u200d",Ie="(?:"+xe+"|"+Oe+")",Le="(?:"+Te+"|"+Oe+")",je="(?:"+be+"(?:d|ll|m|re|s|t|ve))?",Ne="(?:"+be+"(?:D|LL|M|RE|S|T|VE))?",De=Ae+"?",Pe="["+he+"]?",$e="(?:"+Re+"(?:"+[Ee,Se,Ce].join("|")+")"+Pe+De+")*",Me="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Fe="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Be=Pe+De+$e,Ue="(?:"+[_e,Se,Ce].join("|")+")"+Be,Ge="(?:"+[Ee+ye+"?",ye,Se,Ce,ge].join("|")+")",He=RegExp(be,"g"),Ve=RegExp(ye,"g"),qe=RegExp(ke+"(?="+ke+")|"+Ge+Be,"g"),ze=RegExp([Te+"?"+xe+"+"+je+"(?="+[me,Te,"$"].join("|")+")",Le+"+"+Ne+"(?="+[me,Te+Ie,"$"].join("|")+")",Te+"?"+Ie+"+"+je,Te+"+"+Ne,Fe,Me,we,Ue].join("|"),"g"),Ke=RegExp("["+Re+ne+ae+he+"]"),We=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Xe=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Ye=-1,Je={};Je[ht]=Je[vt]=Je[bt]=Je[gt]=Je[mt]=Je[yt]=Je[wt]=Je[_t]=Je[xt]=!0,Je[V]=Je[q]=Je[pt]=Je[K]=Je[ft]=Je[W]=Je[Y]=Je[J]=Je[Z]=Je[tt]=Je[nt]=Je[it]=Je[at]=Je[st]=Je[ut]=!1;var Qe={};Qe[V]=Qe[q]=Qe[pt]=Qe[ft]=Qe[K]=Qe[W]=Qe[ht]=Qe[vt]=Qe[bt]=Qe[gt]=Qe[mt]=Qe[Z]=Qe[tt]=Qe[nt]=Qe[it]=Qe[at]=Qe[st]=Qe[ct]=Qe[yt]=Qe[wt]=Qe[_t]=Qe[xt]=!0,Qe[Y]=Qe[J]=Qe[ut]=!1;var Ze={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},tn={"&":"&","<":"<",">":">",'"':""","'":"'"},en={"&":"&","<":"<",">":">",""":'"',"'":"'"},nn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},rn=parseFloat,on=parseInt,an="object"==typeof t&&t&&t.Object===Object&&t,sn="object"==typeof self&&self&&self.Object===Object&&self,cn=an||sn||Function("return this")(),ln=e&&!e.nodeType&&e,un=ln&&"object"==typeof r&&r&&!r.nodeType&&r,dn=un&&un.exports===ln,pn=dn&&an.process,fn=function(){try{var t=un&&un.require&&un.require("util").types;return t||pn&&pn.binding&&pn.binding("util")}catch(e){}}(),hn=fn&&fn.isArrayBuffer,vn=fn&&fn.isDate,bn=fn&&fn.isMap,gn=fn&&fn.isRegExp,mn=fn&&fn.isSet,yn=fn&&fn.isTypedArray;function wn(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function _n(t,e,n,r){var o=-1,i=null==t?0:t.length;while(++o-1}function Sn(t,e,n){var r=-1,o=null==t?0:t.length;while(++r-1);return n}function tr(t,e){var n=t.length;while(n--&&Mn(e,t[n],0)>-1);return n}function er(t,e){var n=t.length,r=0;while(n--)t[n]===e&&++r;return r}var nr=Hn(Ze),rr=Hn(tn);function or(t){return"\\"+nn[t]}function ir(t,e){return null==t?i:t[e]}function ar(t){return Ke.test(t)}function sr(t){return We.test(t)}function cr(t){var e,n=[];while(!(e=t.next()).done)n.push(e.value);return n}function lr(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function ur(t,e){return function(n){return t(e(n))}}function dr(t,e){var n=-1,r=t.length,o=0,i=[];while(++n-1}function Gr(t,e){var n=this.__data__,r=uo(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function Hr(t){var e=-1,n=null==t?0:t.length;this.clear();while(++e=e?t:e)),t}function mo(t,e,n,r,o,a){var s,c=e&h,l=e&v,u=e&b;if(n&&(s=o?n(t,r,o,a):n(t)),s!==i)return s;if(!ku(t))return t;var d=cu(t);if(d){if(s=es(t),!c)return oa(t,s)}else{var p=Ja(t),f=p==J||p==Q;if(fu(t))return Wi(t,c);if(p==nt||p==V||f&&!o){if(s=l||f?{}:ns(t),!c)return l?sa(t,ho(s,t)):aa(t,fo(s,t))}else{if(!Qe[p])return o?t:{};s=rs(t,p,c)}}a||(a=new Qr);var g=a.get(t);if(g)return g;a.set(t,s),$u(t)?t.forEach((function(r){s.add(mo(r,e,n,r,t,a))})):Eu(t)&&t.forEach((function(r,o){s.set(o,mo(r,e,n,o,t,a))}));var m=u?l?Ba:Fa:l?Od:xd,y=d?i:m(t);return xn(y||t,(function(r,o){y&&(o=r,r=t[o]),lo(s,o,mo(r,e,n,o,t,a))})),s}function yo(t){var e=xd(t);return function(n){return wo(n,t,e)}}function wo(t,e,n){var r=n.length;if(null==t)return!r;t=ne(t);while(r--){var o=n[r],a=e[o],s=t[o];if(s===i&&!(o in t)||!a(s))return!1}return!0}function _o(t,e,n){if("function"!=typeof t)throw new ie(l);return As((function(){t.apply(i,n)}),e)}function xo(t,e,n,r){var o=-1,i=En,a=!0,c=t.length,l=[],u=e.length;if(!c)return l;n&&(e=Cn(e,Yn(n))),r?(i=Sn,a=!1):e.length>=s&&(i=Qn,a=!1,e=new Xr(e));t:while(++oo?0:o+n),r=r===i||r>o?o:Wu(r),r<0&&(r+=o),r=n>r?0:Xu(r);while(n0&&n(s)?e>1?To(s,e-1,n,r,o):Tn(o,s):r||(o[o.length]=s)}return o}var Ro=da(),Io=da(!0);function Lo(t,e){return t&&Ro(t,e,xd)}function jo(t,e){return t&&Io(t,e,xd)}function No(t,e){return An(e,(function(e){return _u(t[e])}))}function Do(t,e){e=Vi(e,t);var n=0,r=e.length;while(null!=t&&ne}function Fo(t,e){return null!=t&&de.call(t,e)}function Bo(t,e){return null!=t&&e in ne(t)}function Uo(t,e,n){return t>=Ue(e,n)&&t=120&&p.length>=120)?new Xr(c&&p):i}p=t[0];var f=-1,h=l[0];t:while(++f-1)s!==t&&Ae.call(s,c,1),Ae.call(t,c,1)}return t}function gi(t,e){var n=t?e.length:0,r=n-1;while(n--){var o=e[n];if(n==r||o!==i){var i=o;as(o)?Ae.call(t,o,1):Pi(t,o)}}return t}function mi(t,e){return t+Ne(ze()*(e-t+1))}function yi(t,e,r,o){var i=-1,a=Be(je((e-t)/(r||1)),0),s=n(a);while(a--)s[o?a:++i]=t,t+=r;return s}function wi(t,e){var n="";if(!t||e<1||e>$)return n;do{e%2&&(n+=t),e=Ne(e/2),e&&(t+=t)}while(e);return n}function _i(t,e){return Es(ws(t,e,Rp),t+"")}function xi(t){return io(Ud(t))}function Oi(t,e){var n=Ud(t);return Ts(n,go(e,0,n.length))}function ki(t,e,n,r){if(!ku(t))return t;e=Vi(e,t);var o=-1,a=e.length,s=a-1,c=t;while(null!=c&&++oi?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;var a=n(i);while(++o>>1,a=t[i];null!==a&&!Fu(a)&&(n?a<=e:a=s){var u=e?null:Ta(t);if(u)return pr(u);a=!1,o=Qn,l=new Xr}else l=e?[]:c;t:while(++r=r?t:Ci(t,e,n)}var Ki=Re||function(t){return cn.clearTimeout(t)};function Wi(t,e){if(e)return t.slice();var n=t.length,r=_e?_e(n):new t.constructor(n);return t.copy(r),r}function Xi(t){var e=new t.constructor(t.byteLength);return new we(e).set(new we(t)),e}function Yi(t,e){var n=e?Xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Ji(t){var e=new t.constructor(t.source,Kt.exec(t));return e.lastIndex=t.lastIndex,e}function Qi(t){return hr?ne(hr.call(t)):{}}function Zi(t,e){var n=e?Xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function ta(t,e){if(t!==e){var n=t!==i,r=null===t,o=t===t,a=Fu(t),s=e!==i,c=null===e,l=e===e,u=Fu(e);if(!c&&!u&&!a&&t>e||a&&s&&l&&!c&&!u||r&&s&&l||!n&&l||!o)return 1;if(!r&&!a&&!u&&t=s)return c;var l=n[r];return c*("desc"==l?-1:1)}}return t.index-e.index}function na(t,e,r,o){var i=-1,a=t.length,s=r.length,c=-1,l=e.length,u=Be(a-s,0),d=n(l+u),p=!o;while(++c1?n[o-1]:i,s=o>2?n[2]:i;a=t.length>3&&"function"==typeof a?(o--,a):i,s&&ss(n[0],n[1],s)&&(a=o<3?i:a,o=1),e=ne(e);while(++r-1?o[a?e[s]:s]:i}}function ma(t){return Ma((function(e){var n=e.length,r=n,o=Er.prototype.thru;t&&e.reverse();while(r--){var a=e[r];if("function"!=typeof a)throw new ie(l);if(o&&!s&&"wrapper"==Ga(a))var s=new Er([],!0)}r=s?r:n;while(++r1&&y.reverse(),p&&uc))return!1;var u=a.get(t),d=a.get(e);if(u&&d)return u==e&&d==t;var p=-1,f=!0,h=n&m?new Xr:i;a.set(t,e),a.set(e,t);while(++p1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Bt,"{\n/* [wrapped with "+e+"] */\n")}function is(t){return cu(t)||su(t)||!!(Ee&&t&&t[Ee])}function as(t,e){var n=typeof t;return e=null==e?$:e,!!e&&("number"==n||"symbol"!=n&&Qt.test(t))&&t>-1&&t%1==0&&t0){if(++e>=I)return arguments[0]}else e=0;return t.apply(i,arguments)}}function Ts(t,e){var n=-1,r=t.length,o=r-1;e=e===i?r:e;while(++n1?t[e-1]:i;return n="function"==typeof n?(t.pop(),n):i,Pc(t,n)}));function qc(t){var e=_r(t);return e.__chain__=!0,e}function zc(t,e){return e(t),t}function Kc(t,e){return e(t)}var Wc=Ma((function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return bo(e,t)};return!(e>1||this.__actions__.length)&&r instanceof Sr&&as(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Kc,args:[o],thisArg:i}),new Er(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(i),t}))):this.thru(o)}));function Xc(){return qc(this)}function Yc(){return new Er(this.value(),this.__chain__)}function Jc(){this.__values__===i&&(this.__values__=zu(this.value()));var t=this.__index__>=this.__values__.length,e=t?i:this.__values__[this.__index__++];return{done:t,value:e}}function Qc(){return this}function Zc(t){var e,n=this;while(n instanceof Ar){var r=Ns(n);r.__index__=0,r.__values__=i,e?o.__wrapped__=r:e=r;var o=r;n=n.__wrapped__}return o.__wrapped__=t,e}function tl(){var t=this.__wrapped__;if(t instanceof Sr){var e=t;return this.__actions__.length&&(e=new Sr(this)),e=e.reverse(),e.__actions__.push({func:Kc,args:[hc],thisArg:i}),new Er(e,this.__chain__)}return this.thru(hc)}function el(){return Fi(this.__wrapped__,this.__actions__)}var nl=ca((function(t,e,n){de.call(t,n)?++t[n]:vo(t,n,1)}));function rl(t,e,n){var r=cu(t)?kn:Ao;return n&&ss(t,e,n)&&(e=i),r(t,Va(e,3))}function ol(t,e){var n=cu(t)?An:Co;return n(t,Va(e,3))}var il=ga(zs),al=ga(Ks);function sl(t,e){return To(bl(t,e),1)}function cl(t,e){return To(bl(t,e),P)}function ll(t,e,n){return n=n===i?1:Wu(n),To(bl(t,e),n)}function ul(t,e){var n=cu(t)?xn:Oo;return n(t,Va(e,3))}function dl(t,e){var n=cu(t)?On:ko;return n(t,Va(e,3))}var pl=ca((function(t,e,n){de.call(t,n)?t[n].push(e):vo(t,n,[e])}));function fl(t,e,n,r){t=uu(t)?t:Ud(t),n=n&&!r?Wu(n):0;var o=t.length;return n<0&&(n=Be(o+n,0)),Mu(t)?n<=o&&t.indexOf(e,n)>-1:!!o&&Mn(t,e,n)>-1}var hl=_i((function(t,e,r){var o=-1,i="function"==typeof e,a=uu(t)?n(t.length):[];return Oo(t,(function(t){a[++o]=i?wn(e,t,r):Vo(t,e,r)})),a})),vl=ca((function(t,e,n){vo(t,n,e)}));function bl(t,e){var n=cu(t)?Cn:ai;return n(t,Va(e,3))}function gl(t,e,n,r){return null==t?[]:(cu(e)||(e=null==e?[]:[e]),n=r?i:n,cu(n)||(n=null==n?[]:[n]),pi(t,e,n))}var ml=ca((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]}));function yl(t,e,n){var r=cu(t)?Rn:Vn,o=arguments.length<3;return r(t,Va(e,4),n,o,Oo)}function wl(t,e,n){var r=cu(t)?In:Vn,o=arguments.length<3;return r(t,Va(e,4),n,o,ko)}function _l(t,e){var n=cu(t)?An:Co;return n(t,Ul(Va(e,3)))}function xl(t){var e=cu(t)?io:xi;return e(t)}function Ol(t,e,n){e=(n?ss(t,e,n):e===i)?1:Wu(e);var r=cu(t)?ao:Oi;return r(t,e)}function kl(t){var e=cu(t)?so:Si;return e(t)}function Al(t){if(null==t)return 0;if(uu(t))return Mu(t)?br(t):t.length;var e=Ja(t);return e==Z||e==at?t.size:ri(t).length}function El(t,e,n){var r=cu(t)?Ln:Ti;return n&&ss(t,e,n)&&(e=i),r(t,Va(e,3))}var Sl=_i((function(t,e){if(null==t)return[];var n=e.length;return n>1&&ss(t,e[0],e[1])?e=[]:n>2&&ss(e[0],e[1],e[2])&&(e=[e[0]]),pi(t,To(e,1),[])})),Cl=Ie||function(){return cn.Date.now()};function Tl(t,e){if("function"!=typeof e)throw new ie(l);return t=Wu(t),function(){if(--t<1)return e.apply(this,arguments)}}function Rl(t,e,n){return e=n?i:e,e=t&&null==e?t.length:e,Ia(t,E,i,i,i,i,e)}function Il(t,e){var n;if("function"!=typeof e)throw new ie(l);return t=Wu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=i),n}}var Ll=_i((function(t,e,n){var r=y;if(n.length){var o=dr(n,Ha(Ll));r|=k}return Ia(t,r,e,n,o)})),jl=_i((function(t,e,n){var r=y|w;if(n.length){var o=dr(n,Ha(jl));r|=k}return Ia(e,r,t,n,o)}));function Nl(t,e,n){e=n?i:e;var r=Ia(t,x,i,i,i,i,i,e);return r.placeholder=Nl.placeholder,r}function Dl(t,e,n){e=n?i:e;var r=Ia(t,O,i,i,i,i,i,e);return r.placeholder=Dl.placeholder,r}function Pl(t,e,n){var r,o,a,s,c,u,d=0,p=!1,f=!1,h=!0;if("function"!=typeof t)throw new ie(l);function v(e){var n=r,a=o;return r=o=i,d=e,s=t.apply(a,n),s}function b(t){return d=t,c=As(y,e),p?v(t):s}function g(t){var n=t-u,r=t-d,o=e-n;return f?Ue(o,a-r):o}function m(t){var n=t-u,r=t-d;return u===i||n>=e||n<0||f&&r>=a}function y(){var t=Cl();if(m(t))return w(t);c=As(y,g(t))}function w(t){return c=i,h&&r?v(t):(r=o=i,s)}function _(){c!==i&&Ki(c),d=0,r=u=o=c=i}function x(){return c===i?s:w(Cl())}function O(){var t=Cl(),n=m(t);if(r=arguments,o=this,u=t,n){if(c===i)return b(u);if(f)return Ki(c),c=As(y,e),v(u)}return c===i&&(c=As(y,e)),s}return e=Yu(e)||0,ku(n)&&(p=!!n.leading,f="maxWait"in n,a=f?Be(Yu(n.maxWait)||0,e):a,h="trailing"in n?!!n.trailing:h),O.cancel=_,O.flush=x,O}var $l=_i((function(t,e){return _o(t,1,e)})),Ml=_i((function(t,e,n){return _o(t,Yu(e)||0,n)}));function Fl(t){return Ia(t,C)}function Bl(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new ie(l);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=t.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(Bl.Cache||Hr),n}function Ul(t){if("function"!=typeof t)throw new ie(l);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Gl(t){return Il(2,t)}Bl.Cache=Hr;var Hl=qi((function(t,e){e=1==e.length&&cu(e[0])?Cn(e[0],Yn(Va())):Cn(To(e,1),Yn(Va()));var n=e.length;return _i((function(r){var o=-1,i=Ue(r.length,n);while(++o=e})),su=qo(function(){return arguments}())?qo:function(t){return Au(t)&&de.call(t,"callee")&&!ke.call(t,"callee")},cu=n.isArray,lu=hn?Yn(hn):zo;function uu(t){return null!=t&&Ou(t.length)&&!_u(t)}function du(t){return Au(t)&&uu(t)}function pu(t){return!0===t||!1===t||Au(t)&&$o(t)==K}var fu=Pe||Wp,hu=vn?Yn(vn):Ko;function vu(t){return Au(t)&&1===t.nodeType&&!Nu(t)}function bu(t){if(null==t)return!0;if(uu(t)&&(cu(t)||"string"==typeof t||"function"==typeof t.splice||fu(t)||Bu(t)||su(t)))return!t.length;var e=Ja(t);if(e==Z||e==at)return!t.size;if(fs(t))return!ri(t).length;for(var n in t)if(de.call(t,n))return!1;return!0}function gu(t,e){return Wo(t,e)}function mu(t,e,n){n="function"==typeof n?n:i;var r=n?n(t,e):i;return r===i?Wo(t,e,i,n):!!r}function yu(t){if(!Au(t))return!1;var e=$o(t);return e==Y||e==X||"string"==typeof t.message&&"string"==typeof t.name&&!Nu(t)}function wu(t){return"number"==typeof t&&$e(t)}function _u(t){if(!ku(t))return!1;var e=$o(t);return e==J||e==Q||e==z||e==ot}function xu(t){return"number"==typeof t&&t==Wu(t)}function Ou(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=$}function ku(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Au(t){return null!=t&&"object"==typeof t}var Eu=bn?Yn(bn):Yo;function Su(t,e){return t===e||Jo(t,e,za(e))}function Cu(t,e,n){return n="function"==typeof n?n:i,Jo(t,e,za(e),n)}function Tu(t){return ju(t)&&t!=+t}function Ru(t){if(ps(t))throw new o(c);return Qo(t)}function Iu(t){return null===t}function Lu(t){return null==t}function ju(t){return"number"==typeof t||Au(t)&&$o(t)==tt}function Nu(t){if(!Au(t)||$o(t)!=nt)return!1;var e=xe(t);if(null===e)return!0;var n=de.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&ue.call(n)==ve}var Du=gn?Yn(gn):Zo;function Pu(t){return xu(t)&&t>=-$&&t<=$}var $u=mn?Yn(mn):ti;function Mu(t){return"string"==typeof t||!cu(t)&&Au(t)&&$o(t)==st}function Fu(t){return"symbol"==typeof t||Au(t)&&$o(t)==ct}var Bu=yn?Yn(yn):ei;function Uu(t){return t===i}function Gu(t){return Au(t)&&Ja(t)==ut}function Hu(t){return Au(t)&&$o(t)==dt}var Vu=Ea(ii),qu=Ea((function(t,e){return t<=e}));function zu(t){if(!t)return[];if(uu(t))return Mu(t)?gr(t):oa(t);if(Se&&t[Se])return cr(t[Se]());var e=Ja(t),n=e==Z?lr:e==at?pr:Ud;return n(t)}function Ku(t){if(!t)return 0===t?t:0;if(t=Yu(t),t===P||t===-P){var e=t<0?-1:1;return e*M}return t===t?t:0}function Wu(t){var e=Ku(t),n=e%1;return e===e?n?e-n:e:0}function Xu(t){return t?go(Wu(t),0,B):0}function Yu(t){if("number"==typeof t)return t;if(Fu(t))return F;if(ku(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=ku(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Xn(t);var n=Xt.test(t);return n||Jt.test(t)?on(t.slice(2),n?2:8):Wt.test(t)?F:+t}function Ju(t){return ia(t,Od(t))}function Qu(t){return t?go(Wu(t),-$,$):0===t?t:0}function Zu(t){return null==t?"":Ni(t)}var td=la((function(t,e){if(fs(e)||uu(e))ia(e,xd(e),t);else for(var n in e)de.call(e,n)&&lo(t,n,e[n])})),ed=la((function(t,e){ia(e,Od(e),t)})),nd=la((function(t,e,n,r){ia(e,Od(e),t,r)})),rd=la((function(t,e,n,r){ia(e,xd(e),t,r)})),od=Ma(bo);function id(t,e){var n=Or(t);return null==e?n:fo(n,e)}var ad=_i((function(t,e){t=ne(t);var n=-1,r=e.length,o=r>2?e[2]:i;o&&ss(e[0],e[1],o)&&(r=1);while(++n1),e})),ia(t,Ba(t),n),r&&(n=mo(n,h|v|b,Na));var o=e.length;while(o--)Pi(n,e[o]);return n}));function Td(t,e){return Id(t,Ul(Va(e)))}var Rd=Ma((function(t,e){return null==t?{}:fi(t,e)}));function Id(t,e){if(null==t)return{};var n=Cn(Ba(t),(function(t){return[t]}));return e=Va(e),hi(t,n,(function(t,n){return e(t,n[0])}))}function Ld(t,e,n){e=Vi(e,t);var r=-1,o=e.length;o||(o=1,t=i);while(++re){var r=t;t=e,e=r}if(n||t%1||e%1){var o=ze();return Ue(t+o*(e-t+rn("1e-"+((o+"").length-1))),e)}return mi(t,e)}var zd=ha((function(t,e,n){return e=e.toLowerCase(),t+(n?Kd(e):e)}));function Kd(t){return wp(Zu(t).toLowerCase())}function Wd(t){return t=Zu(t),t&&t.replace(Zt,nr).replace(Ve,"")}function Xd(t,e,n){t=Zu(t),e=Ni(e);var r=t.length;n=n===i?r:go(Wu(n),0,r);var o=n;return n-=e.length,n>=0&&t.slice(n,o)==e}function Yd(t){return t=Zu(t),t&&Tt.test(t)?t.replace(St,rr):t}function Jd(t){return t=Zu(t),t&&$t.test(t)?t.replace(Pt,"\\$&"):t}var Qd=ha((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Zd=ha((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),tp=fa("toLowerCase");function ep(t,e,n){t=Zu(t),e=Wu(e);var r=e?br(t):0;if(!e||r>=e)return t;var o=(e-r)/2;return Oa(Ne(o),n)+t+Oa(je(o),n)}function np(t,e,n){t=Zu(t),e=Wu(e);var r=e?br(t):0;return e&&r>>0,n?(t=Zu(t),t&&("string"==typeof e||null!=e&&!Du(e))&&(e=Ni(e),!e&&ar(t))?zi(gr(t),0,n):t.split(e,n)):[]}var lp=ha((function(t,e,n){return t+(n?" ":"")+wp(e)}));function up(t,e,n){return t=Zu(t),n=null==n?0:go(Wu(n),0,t.length),e=Ni(e),t.slice(n,n+e.length)==e}function dp(t,e,n){var r=_r.templateSettings;n&&ss(t,e,n)&&(e=i),t=Zu(t),e=nd({},e,r,La);var a,s,c=nd({},e.imports,r.imports,La),l=xd(c),d=Jn(c,l),p=0,f=e.interpolate||te,h="__p += '",v=re((e.escape||te).source+"|"+f.source+"|"+(f===Lt?zt:te).source+"|"+(e.evaluate||te).source+"|$","g"),b="//# sourceURL="+(de.call(e,"sourceURL")?(e.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Ye+"]")+"\n";t.replace(v,(function(e,n,r,o,i,c){return r||(r=o),h+=t.slice(p,c).replace(ee,or),n&&(a=!0,h+="' +\n__e("+n+") +\n'"),i&&(s=!0,h+="';\n"+i+";\n__p += '"),r&&(h+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),p=c+e.length,e})),h+="';\n";var g=de.call(e,"variable")&&e.variable;if(g){if(Vt.test(g))throw new o(u)}else h="with (obj) {\n"+h+"\n}\n";h=(s?h.replace(Ot,""):h).replace(kt,"$1").replace(At,"$1;"),h="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(s?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+h+"return __p\n}";var m=xp((function(){return Ft(l,b+"return "+h).apply(i,d)}));if(m.source=h,yu(m))throw m;return m}function pp(t){return Zu(t).toLowerCase()}function fp(t){return Zu(t).toUpperCase()}function hp(t,e,n){if(t=Zu(t),t&&(n||e===i))return Xn(t);if(!t||!(e=Ni(e)))return t;var r=gr(t),o=gr(e),a=Zn(r,o),s=tr(r,o)+1;return zi(r,a,s).join("")}function vp(t,e,n){if(t=Zu(t),t&&(n||e===i))return t.slice(0,mr(t)+1);if(!t||!(e=Ni(e)))return t;var r=gr(t),o=tr(r,gr(e))+1;return zi(r,0,o).join("")}function bp(t,e,n){if(t=Zu(t),t&&(n||e===i))return t.replace(Mt,"");if(!t||!(e=Ni(e)))return t;var r=gr(t),o=Zn(r,gr(e));return zi(r,o).join("")}function gp(t,e){var n=T,r=R;if(ku(e)){var o="separator"in e?e.separator:o;n="length"in e?Wu(e.length):n,r="omission"in e?Ni(e.omission):r}t=Zu(t);var a=t.length;if(ar(t)){var s=gr(t);a=s.length}if(n>=a)return t;var c=n-br(r);if(c<1)return r;var l=s?zi(s,0,c).join(""):t.slice(0,c);if(o===i)return l+r;if(s&&(c+=l.length-c),Du(o)){if(t.slice(c).search(o)){var u,d=l;o.global||(o=re(o.source,Zu(Kt.exec(o))+"g")),o.lastIndex=0;while(u=o.exec(d))var p=u.index;l=l.slice(0,p===i?c:p)}}else if(t.indexOf(Ni(o),c)!=c){var f=l.lastIndexOf(o);f>-1&&(l=l.slice(0,f))}return l+r}function mp(t){return t=Zu(t),t&&Ct.test(t)?t.replace(Et,yr):t}var yp=ha((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),wp=fa("toUpperCase");function _p(t,e,n){return t=Zu(t),e=n?i:e,e===i?sr(t)?xr(t):Dn(t):t.match(e)||[]}var xp=_i((function(t,e){try{return wn(t,i,e)}catch(n){return yu(n)?n:new o(n)}})),Op=Ma((function(t,e){return xn(e,(function(e){e=Is(e),vo(t,e,Ll(t[e],t))})),t}));function kp(t){var e=null==t?0:t.length,n=Va();return t=e?Cn(t,(function(t){if("function"!=typeof t[1])throw new ie(l);return[n(t[0]),t[1]]})):[],_i((function(n){var r=-1;while(++r$)return[];var n=B,r=Ue(t,B);e=Va(e),t-=B;var o=Kn(r,e);while(++n0||e<0)?new Sr(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==i&&(e=Wu(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},Sr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Sr.prototype.toArray=function(){return this.take(B)},Lo(Sr.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),o=_r[r?"take"+("last"==e?"Right":""):e],a=r||/^find/.test(e);o&&(_r.prototype[e]=function(){var e=this.__wrapped__,s=r?[1]:arguments,c=e instanceof Sr,l=s[0],u=c||cu(e),d=function(t){var e=o.apply(_r,Tn([t],s));return r&&p?e[0]:e};u&&n&&"function"==typeof l&&1!=l.length&&(c=u=!1);var p=this.__chain__,f=!!this.__actions__.length,h=a&&!p,v=c&&!f;if(!a&&u){e=v?e:new Sr(this);var b=t.apply(e,s);return b.__actions__.push({func:Kc,args:[d],thisArg:i}),new Er(b,p)}return h&&v?t.apply(this,s):(b=this.thru(d),h?r?b.value()[0]:b.value():b)})})),xn(["pop","push","shift","sort","splice","unshift"],(function(t){var e=ae[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);_r.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var o=this.value();return e.apply(cu(o)?o:[],t)}return this[n]((function(n){return e.apply(cu(n)?n:[],t)}))}})),Lo(Sr.prototype,(function(t,e){var n=_r[e];if(n){var r=n.name+"";de.call(ln,r)||(ln[r]=[]),ln[r].push({name:e,func:n})}})),ln[ya(i,w).name]=[{name:"wrapper",func:i}],Sr.prototype.clone=Cr,Sr.prototype.reverse=Tr,Sr.prototype.value=Rr,_r.prototype.at=Wc,_r.prototype.chain=Xc,_r.prototype.commit=Yc,_r.prototype.next=Jc,_r.prototype.plant=Zc,_r.prototype.reverse=tl,_r.prototype.toJSON=_r.prototype.valueOf=_r.prototype.value=el,_r.prototype.first=_r.prototype.head,Se&&(_r.prototype[Se]=Qc),_r},kr=Or();cn._=kr,o=function(){return kr}.call(e,n,e,r),o===i||(r.exports=o)}).call(this)}).call(this,n("7d15"),n("6984")(t))},"9ef5":function(t,e,n){var r=n("2357"),o=n("b506"),i=n("6bcf"),a=NaN,s=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt;function d(t){if("number"==typeof t)return t;if(i(t))return a;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=c.test(t);return n||l.test(t)?u(t.slice(2),n?2:8):s.test(t)?a:+t}t.exports=d},"9f16":function(t,e,n){"use strict";e["a"]={methods:{mappedKeys(t,e){const n={...t};return n[9]=t=>{if(!e.open)return;t.preventDefault();const n=e.filteredOptions.length,r=e.typeAheadPointer;return t.shiftKey?0===r?e.onEscape():e.typeAheadUp():r+1===n?e.onEscape():e.typeAheadDown()},n[27]=t=>(e.open=!1,e.search="",!1),n[13]=(t,n)=>{if(!e.open)return void(e.open=!0);let r=e.filteredOptions[e.typeAheadPointer];e.$emit("option:selecting",r),e.isOptionSelected(r)||(e.taggable&&!e.optionExists(r)&&e.$emit("option:created",r),e.multiple&&(r=e.selectedValue.concat(r)),e.updateValue(r),e.$emit("option:selected",r),e.closeOnSelect&&(e.open=!1,e.typeAheadPointer=-1),e.clearSearchOnSelect&&(e.search=""))},n[38]=t=>(t.preventDefault(),e.open||(e.open=!0),e.typeAheadUp()),n[40]=t=>(t.preventDefault(),e.open||(e.open=!0),e.typeAheadDown()),n}}}},"9f54":function(t,e){function n(t,e,n){var r=n-1,o=t.length;while(++r=0;r--){var o=t[r];"."===o?t.splice(r,1):".."===o?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t){"string"!==typeof t&&(t+="");var e,n=0,r=-1,o=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!o){n=e+1;break}}else-1===r&&(o=!1,r=e+1);return-1===r?"":t.slice(n,r)}function o(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!r;i--){var a=i>=0?arguments[i]:t.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,r="/"===a.charAt(0))}return e=n(o(e.split("/"),(function(t){return!!t})),!r).join("/"),(r?"/":"")+e||"."},e.normalize=function(t){var r=e.isAbsolute(t),a="/"===i(t,-1);return t=n(o(t.split("/"),(function(t){return!!t})),!r).join("/"),t||r||(t="."),t&&a&&(t+="/"),(r?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(o(t,(function(t,e){if("string"!==typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0;n--)if(""!==t[n])break;return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var o=r(t.split("/")),i=r(n.split("/")),a=Math.min(o.length,i.length),s=a,c=0;c=1;--i)if(e=t.charCodeAt(i),47===e){if(!o){r=i;break}}else o=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=r(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!==typeof t&&(t+="");for(var e=-1,n=0,r=-1,o=!0,i=0,a=t.length-1;a>=0;--a){var s=t.charCodeAt(a);if(47!==s)-1===r&&(o=!1,r=a+1),46===s?-1===e?e=a:1!==i&&(i=1):-1!==e&&(i=-1);else if(!o){n=a+1;break}}return-1===e||-1===r||0===i||1===i&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n("07d9"))},a454:function(t,e,n){var r=n("872c"),o="Expected a function";function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(o);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=t.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(i.Cache||r),n}i.Cache=r,t.exports=i},a48a:function(t,e,n){var r=n("cbff"),o=n("c316");function i(t,e,n){var i=e(t);return o(t)?i:r(i,n(t))}t.exports=i},a4fc:function(t,e){function n(t,e){return t===e||t!==t&&e!==e}t.exports=n},a67c:function(t,e){var n=9007199254740991,r=/^(?:0|[1-9]\d*)$/;function o(t,e){var o=typeof t;return e=null==e?n:e,!!e&&("number"==o||"symbol"!=o&&r.test(t))&&t>-1&&t%1==0&&t=this.queue.length&&(this.queue=this.queue.slice(this.offset),this.offset=0),t},this.peek=function(){return this.queue.length>0?this.queue[this.offset]:void 0},this.clear=function(){this.offset=0,this.queue.length=0}}function o(t,e,n,o=!1){return o&&console.log("eachLimit of",t.length," items",e,"at a time"),new Promise((i,a)=>{const s=new r;let c=0,l=!1;const u=[];for(let e=0;e{o&&console.log("Done",t),u[e]=n,c--,d()}).catch(e=>{o&&console.log("Failed",e,t),l=!0,a(e)})}}}d()})}n.d(e,"a",(function(){return o}))},a920:function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".button-dropdown.btn-sm[data-v-4b526572]>.vs__dropdown-toggle .vs__actions:after{font-size:1.6rem}.button-dropdown.btn-lg[data-v-4b526572]>.vs__dropdown-toggle .vs__actions:after{font-size:2.6rem}.button-dropdown[data-v-4b526572]{background:var(--accent-btn);border:solid 1px var(--link);color:var(--link);padding:0}.button-dropdown.vs--open[data-v-4b526572]{outline:none;box-shadow:none}.button-dropdown[data-v-4b526572]:hover .vs__dropdown-toggle .vs__actions,.button-dropdown[data-v-4b526572]:hover .vs__selected-options{background:var(--accent-btn-hover)}.button-dropdown[data-v-4b526572]:hover .vs__selected-options .vs__selected button{background-color:transparent;color:var(--accent-btn-hover-text)}.button-dropdown[data-v-4b526572]:hover .vs__dropdown-toggle .vs__actions:after{color:var(--accent-btn-hover-text)}.button-dropdown[data-v-4b526572]>.vs__dropdown-toggle{width:100%;display:grid;grid-template-columns:75% 25%;border:none;background:transparent}.button-dropdown[data-v-4b526572]>.vs__dropdown-toggle .vs__actions:after{color:var(--link);line-height:1}.button-dropdown[data-v-4b526572] .vs__selected-options .vs__selected{margin:unset;border:none}.button-dropdown[data-v-4b526572] .vs__selected-options .vs__selected button{border:none;background:transparent;color:var(--link)}.button-dropdown[data-v-4b526572] .vs__selected-options .vs__search{position:absolute;opacity:0;padding:0}.button-dropdown[data-v-4b526572] .vs__dropdown-menu{min-width:unset;width:-moz-fit-content;width:fit-content}",""]),t.exports=e},a9e0:function(t,e,n){var r=n("bf10"),o=n("201b"),i=r(o,"Map");t.exports=i},aa31:function(t,e){var n="__lodash_hash_undefined__";function r(t){return this.__data__.set(t,n),this}t.exports=r},ae68:function(t,e,n){var r=n("d99b"),o=n("6efc"),i=n("c316"),a=n("dda8"),s=n("a67c"),c=n("41dd"),l=Object.prototype,u=l.hasOwnProperty;function d(t,e){var n=i(t),l=!n&&o(t),d=!n&&!l&&a(t),p=!n&&!l&&!d&&c(t),f=n||l||d||p,h=f?r(t.length,String):[],v=h.length;for(var b in t)!e&&!u.call(t,b)||f&&("length"==b||d&&("offset"==b||"parent"==b)||p&&("buffer"==b||"byteLength"==b||"byteOffset"==b)||s(b,v))||h.push(b);return h}t.exports=d},b022:function(t,e){function n(t,e,n){var r=-1,o=null==t?0:t.length;while(++r{a.ENABLE_DEBUG_LOGGING&&console.debug("GC",...t)},this.gcLastRun=0,this.getUiPerfGarbageCollection=t=>{var e;const n=null===(e=t.management.types[r["j"].SETTING])||void 0===e?void 0:e.list.find(t=>t.id===o["a"].UI_PERFORMANCE);if(!n||!n.value)return;const i=`${n.metadata.generation}-${n.metadata.resourceVersion}`;if(this.cachedGcPrefsStamp!==i){this.debugLog(`Updating ${o["a"].UI_PERFORMANCE} cache`),this.cachedGcPrefsStamp=i;const t=JSON.parse(n.value);this.cachedGcPrefs=t.garbageCollection}return this.cachedGcPrefs},this.lastAccessedCache={},this.lastRouteChange=0}gcEnabledAll(t,e){return this.gcEnabledForStore(t.state)&&this.gcEnabledSetting(t)&&this.gcEnabledForType(t,e)}gcEnabledSetting(t){const{rootState:e}=t,n=this.getUiPerfGarbageCollection(e);return null===n||void 0===n?void 0:n.enabled}gcEnabledForStore(t){var e;return null===(e=null===t||void 0===t?void 0:t.config)||void 0===e?void 0:e.supportsGc}gcEnabledForType(t,e){const{getters:n}=t;return!(!e||n.gcIgnoreTypes[e])}gcEnabledInterval(t){const{rootState:e}=t,n=this.getUiPerfGarbageCollection(e);return{enabled:null===n||void 0===n?void 0:n.enabledInterval,interval:(null===n||void 0===n?void 0:n.interval)||0}}gcEnabledRoute(t){const{rootState:e}=t,n=this.getUiPerfGarbageCollection(e);return null===n||void 0===n?void 0:n.enabledOnNavigate}garbageCollect(t,e={}){const n=(new Date).getTime();if(null===this.gcLastRun||n-this.gcLastRun{var d;if(!c)return void this.debugLog(a+": Skipping (no accessed time)");if(!this.gcEnabledForType(t,a))return void this.debugLog(a+": Skipping (type ignored by store)");if(e[a])return void this.debugLog(a+": Skipping (navigating to type)");if(n-c<=l)return void this.debugLog(a+": Skipping (recently accessed)");if(void 0!==this.lastRouteChange&&this.lastRouteChange0&&console.info("Garbage Collected Resources",o),this.debugLog("------ Finished ------")}gcUpdateLastAccessed(t,e){if(!this.gcEnabledAll(t,e))return;const n=t.state.config.namespace;this.lastAccessedCache[n]||(this.lastAccessedCache[n]={}),this.lastAccessedCache[n][e]=(new Date).getTime()}gcUpdateRouteChanged(){this.lastRouteChange=(new Date).getTime()}gcResetStore(t){const e=t.config.namespace;delete this.lastAccessedCache[e],this.debugLog("Forgetting Store:",e)}gcResetType(t,e){const n=t.config.namespace;this.lastAccessedCache[n]&&(delete this.lastAccessedCache[n][e],this.debugLog("Forgetting Type:",n,e))}}a.ENABLE_DEBUG_LOGGING=!1,a.GC_RE_RUN_GAP=5e3;new a;const s="allIfAuthed"},b3e4:function(t,e,n){var r=n("2419"),o=n("39f2"),i=n("b022"),a=n("4b48"),s=n("f533"),c=n("5e52"),l=200;function u(t,e,n){var u=-1,d=o,p=t.length,f=!0,h=[],v=h;if(n)f=!1,d=i;else if(p>=l){var b=e?null:s(t);if(b)return c(b);f=!1,d=a,v=new r}else v=e?[]:h;t:while(++u=e?t:""+Array(e+1-r.length).join(n)+t},p={s:d,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+d(r,2,"0")+":"+d(o,2,"0")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,a),o=e-r<0,i=t.clone().add(n+(o?-1:1),a);return Number(-(n+(e-r)/(o?r-i:i-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(l){return{M:a,y:c,w:i,d:o,D:"date",h:r,m:n,s:e,ms:t,Q:s}[l]||String(l||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},f={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},h="en",v={};v[h]=f;var b=function(t){return t instanceof w},g=function(t,e,n){var r;if(!t)return h;if("string"==typeof t)v[t]&&(r=t),e&&(v[t]=e,r=t);else{var o=t.name;v[o]=t,r=o}return!n&&r&&(h=r),r||!n&&h},m=function(t,e){if(b(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new w(n)},y=p;y.l=g,y.i=b,y.w=function(t,e){return m(t,{locale:e.$L,utc:e.$u,$offset:e.$offset})};var w=function(){function d(t){this.$L=this.$L||g(t.locale,null,!0),this.parse(t)}var p=d.prototype;return p.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(y.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(l);if(r)return n?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(e)}(t),this.init()},p.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},p.$utils=function(){return y},p.isValid=function(){return!("Invalid Date"===this.$d.toString())},p.isSame=function(t,e){var n=m(t);return this.startOf(e)<=n&&n<=this.endOf(e)},p.isAfter=function(t,e){return m(t)-1&&t%1==0&&t<=n}t.exports=r},ba48:function(t,e,n){"use strict";n("4fc4")},bab9:function(t,e,n){var r=n("e970");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("6a8e5472",r,!0,{sourceMap:!1,shadowMode:!1})},bc0d:function(t,e,n){var r=n("5eaa"),o=n("6444"),i=n("6201"),a=n("779b"),s=n("8f4b");e=r(!1);var c=o(i),l=o(a),u=o(s,{hash:"#icons"});e.push([t.i,"@font-face{font-family:icons;src:url("+c+') format("truetype"),url('+l+') format("woff"),url('+u+') format("svg");font-weight:400;font-style:normal;font-display:block}[class*=" icon-"][data-v-862d5938],[class^=icon-][data-v-862d5938]{font-family:icons!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-actions[data-v-862d5938]:before{content:""}.icon-alert[data-v-862d5938]:before{content:""}.icon-apple[data-v-862d5938]:before{content:""}.icon-application[data-v-862d5938]:before{content:""}.icon-apps[data-v-862d5938]:before{content:""}.icon-archive[data-v-862d5938]:before{content:""}.icon-backup-restore[data-v-862d5938]:before{content:""}.icon-backup[data-v-862d5938]:before{content:""}.icon-checkmark[data-v-862d5938]:before{content:""}.icon-chevron-beginning[data-v-862d5938]:before{content:""}.icon-chevron-down[data-v-862d5938]:before{content:""}.icon-chevron-end[data-v-862d5938]:before{content:""}.icon-chevron-left[data-v-862d5938]:before{content:""}.icon-chevron-right[data-v-862d5938]:before{content:""}.icon-chevron-up[data-v-862d5938]:before{content:""}.icon-circle-plus[data-v-862d5938]:before{content:""}.icon-cis[data-v-862d5938]:before{content:""}.icon-close[data-v-862d5938]:before{content:""}.icon-cluster-management[data-v-862d5938]:before{content:""}.icon-cluster[data-v-862d5938]:before{content:""}.icon-code[data-v-862d5938]:before{content:""}.icon-comment[data-v-862d5938]:before{content:""}.icon-commit[data-v-862d5938]:before{content:""}.icon-compass[data-v-862d5938]:before{content:""}.icon-copy[data-v-862d5938]:before{content:""}.icon-dashboard[data-v-862d5938]:before{content:""}.icon-dock[data-v-862d5938]:before{content:""}.icon-docker[data-v-862d5938]:before{content:""}.icon-dot-half[data-v-862d5938]:before{content:""}.icon-dot-open[data-v-862d5938]:before{content:""}.icon-dot[data-v-862d5938]:before{content:""}.icon-download[data-v-862d5938]:before{content:""}.icon-edit[data-v-862d5938]:before{content:""}.icon-elemental[data-v-862d5938]:before{content:""}.icon-endpoints_connected[data-v-862d5938]:before{content:""}.icon-epinio[data-v-862d5938]:before{content:""}.icon-error[data-v-862d5938]:before{content:""}.icon-explore[data-v-862d5938]:before{content:""}.icon-extension[data-v-862d5938]:before{content:""}.icon-external-link[data-v-862d5938]:before{content:""}.icon-file[data-v-862d5938]:before{content:""}.icon-filter_alt[data-v-862d5938]:before{content:""}.icon-fleet[data-v-862d5938]:before{content:""}.icon-folder[data-v-862d5938]:before{content:""}.icon-fork[data-v-862d5938]:before{content:""}.icon-gatekeeper[data-v-862d5938]:before{content:""}.icon-gear[data-v-862d5938]:before{content:""}.icon-github[data-v-862d5938]:before{content:""}.icon-gitlab[data-v-862d5938]:before{content:""}.icon-globe[data-v-862d5938]:before{content:""}.icon-groups[data-v-862d5938]:before{content:""}.icon-harvester[data-v-862d5938]:before{content:""}.icon-hide[data-v-862d5938]:before{content:""}.icon-history[data-v-862d5938]:before{content:""}.icon-home[data-v-862d5938]:before{content:""}.icon-info[data-v-862d5938]:before{content:""}.icon-istio[data-v-862d5938]:before{content:""}.icon-linux[data-v-862d5938]:before{content:""}.icon-list-flat[data-v-862d5938]:before{content:""}.icon-list-grouped[data-v-862d5938]:before{content:""}.icon-lock[data-v-862d5938]:before{content:""}.icon-logging[data-v-862d5938]:before{content:""}.icon-longhorn[data-v-862d5938]:before{content:""}.icon-marketplace[data-v-862d5938]:before{content:""}.icon-menu[data-v-862d5938]:before{content:""}.icon-minus[data-v-862d5938]:before{content:""}.icon-monitoring[data-v-862d5938]:before{content:""}.icon-more[data-v-862d5938]:before{content:""}.icon-namespace[data-v-862d5938]:before{content:""}.icon-notifier[data-v-862d5938]:before{content:""}.icon-os-management[data-v-862d5938]:before{content:""}.icon-pause[data-v-862d5938]:before{content:""}.icon-pipeline[data-v-862d5938]:before{content:""}.icon-play[data-v-862d5938]:before{content:""}.icon-plus[data-v-862d5938]:before{content:""}.icon-pod_security[data-v-862d5938]:before{content:""}.icon-question-mark[data-v-862d5938]:before{content:""}.icon-rancher-desktop[data-v-862d5938]:before{content:""}.icon-refresh[data-v-862d5938]:before{content:""}.icon-repository[data-v-862d5938]:before{content:""}.icon-rio[data-v-862d5938]:before{content:""}.icon-role-binding[data-v-862d5938]:before{content:""}.icon-search[data-v-862d5938]:before{content:""}.icon-service[data-v-862d5938]:before{content:""}.icon-show[data-v-862d5938]:before{content:""}.icon-snapshot[data-v-862d5938]:before{content:""}.icon-sort-down[data-v-862d5938]:before{content:""}.icon-sort-up[data-v-862d5938]:before{content:""}.icon-sort[data-v-862d5938]:before{content:""}.icon-spinner[data-v-862d5938]:before{content:""}.icon-star-open[data-v-862d5938]:before{content:""}.icon-star[data-v-862d5938]:before{content:""}.icon-storage[data-v-862d5938]:before{content:""}.icon-terminal[data-v-862d5938]:before{content:""}.icon-trash[data-v-862d5938]:before{content:""}.icon-unlock[data-v-862d5938]:before{content:""}.icon-upload[data-v-862d5938]:before{content:""}.icon-user[data-v-862d5938]:before{content:""}.icon-warning[data-v-862d5938]:before{content:""}.icon-windows[data-v-862d5938]:before{content:""}.icon-delete[data-v-862d5938]:before{content:""}.icon-x[data-v-862d5938]:before{content:""}.icon-vertical-ellipsis[data-v-862d5938]:before{content:""}.icon-spin[data-v-862d5938]{animation:icon-spin-862d5938 5s linear infinite}@keyframes icon-spin-862d5938{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon[data-v-862d5938]{display:inline-block}.icon-fw[data-v-862d5938]{width:1.2857142857em;text-align:center}.icon-sm[data-v-862d5938]{font-size:.8em}.icon-lg[data-v-862d5938]{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.icon-2x[data-v-862d5938]{font-size:2em}.icon-3x[data-v-862d5938]{font-size:3em}.icon-4x[data-v-862d5938]{font-size:4em}.icon-5x[data-v-862d5938]{font-size:5em}.icon-stack[data-v-862d5938]{position:relative;display:inline-block;height:2em;line-height:2em;vertical-align:middle}.icon-stack-1x[data-v-862d5938],.icon-stack-2x[data-v-862d5938]{position:absolute;left:0;width:100%;text-align:center}.icon-stack-1x[data-v-862d5938]{line-height:inherit}.icon-stack-2x[data-v-862d5938]{font-size:2em}.icon-inverse[data-v-862d5938]{color:#fff}.icon-ul[data-v-862d5938]{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.icon-ul>li[data-v-862d5938]{position:relative}.icon-li[data-v-862d5938]{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.icon-li.icon-lg[data-v-862d5938]{left:-1.8571428571em}.icon-rotate-90[data-v-862d5938]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);transform:rotate(90deg)}.icon-rotate-180[data-v-862d5938]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.icon-rotate-270[data-v-862d5938]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);transform:rotate(270deg)}.icon-flip-horizontal[data-v-862d5938]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);transform:scaleX(-1)}.icon-flip-vertical[data-v-862d5938]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:scaleY(-1)}.app-launcher-card[data-v-862d5938] .card-body{overflow:hidden!important}.icon-button[data-v-862d5938]{cursor:pointer}.icon-button[data-v-862d5938],.icon-only[data-v-862d5938]{background:none;border:none;padding:0;color:var(--primary);font-size:1.8rem;margin-right:1rem}.icon-only[data-v-862d5938]{margin-top:.5rem}',""]),t.exports=e},bc61:function(t,e,n){var r=n("b506"),o=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(o)return o(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},bcb3:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));n("907c"),n("462f"),n("79ad");const r="explorer"},bddd:function(t,e,n){"use strict";n.d(e,"h",(function(){return o})),n.d(e,"i",(function(){return i})),n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"e",(function(){return c})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"c",(function(){return p})),n.d(e,"d",(function(){return f})),n.d(e,"j",(function(){return h}));n("9dfc");var r=n("e24b");function o(t,e){const n=t.indexOf(e);return n>=0&&t.splice(n,1),t}function i(t,e){let n,r=[];for(n=0;nt-e);const o=[];let i,a;while(r.length){i=r.shift(),a=i;while(r.length&&r[0]===a+1)a=r.shift();o.push({start:i,end:a})}for(n=o.length-1;n>=0;n--){const{start:e,end:r}=o[n];t.splice(e,r-e+1)}return t}function a(t,e){const n=t.indexOf(e);-1===n&&t.push(e)}function s(t,e){const n=[];for(const r of e)t.includes(r)||n.includes(r)||n.push(r);t.push(...n)}function c(t,e,...n){t.splice(e,0,...n)}function l(t){return Array.isArray(t)}function u(t,e,n=1){if(e<0)throw new Error("Index too low");if(e+n>t.length)throw new Error("Index + length too high");return t.splice(e,n),t}function d(t,e,n,o){return e=e||[],"object"===typeof n?e[t](t=>{for(const e in n){const o=n[e],i=Object(r["f"])(t,e);if("undefined"===typeof o){if(!i)return!1}else if(i!==o)return!1}return!0}):void 0===o?e[t](t=>!!Object(r["f"])(t,n)):e[t](t=>Object(r["f"])(t,n)===o)}function p(t,e,n){return d("filter",t,e,n)}function f(t,e,n){return d("find",t,e,n)}function h(t){const e=[];return s(e,t),e}},be67:function(t,e,n){var r=n("dea0");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("297bd92e",r,!0,{sourceMap:!1,shadowMode:!1})},bf10:function(t,e,n){var r=n("e672"),o=n("e29f");function i(t,e){var n=o(t,e);return r(n)?n:void 0}t.exports=i},c02d:function(t,e,n){var r=n("3f3f");function o(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}t.exports=o},c210:function(t,e,n){"use strict";n("d182")},c294:function(t,e,n){var r=n("4774"),o=n("479b");function i(t){return r((function(e,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;a=t.length>3&&"function"==typeof a?(i--,a):void 0,s&&o(n[0],n[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);while(++rt)}},c991:function(t,e,n){var r=n("b650"),o=1,i=Object.prototype,a=i.hasOwnProperty;function s(t,e,n,i,s,c){var l=n&o,u=r(t),d=u.length,p=r(e),f=p.length;if(d!=f&&!l)return!1;var h=d;while(h--){var v=u[h];if(!(l?v in e:a.call(e,v)))return!1}var b=c.get(t),g=c.get(e);if(b&&g)return b==e&&g==t;var m=!0;c.set(t,e),c.set(e,t);var y=l;while(++h{}}function o(t){return()=>{}}function i(t){return()=>{}}function a(t){return()=>{}}function s(t){return()=>{}}function c(t){return()=>{}}function l(t){return()=>{}}function u(t){return()=>{}}function d(){return[]}function p(t,e){return()=>{}}function f(t){return()=>{}}function h(t){}function v(t){}function b(t){}function g(t){}function m(t){return()=>{}}function y(t){}function w(t){}function _(t){}n.d(e,"b",(function(){return r})),n.d(e,"i",(function(){return o})),n.d(e,"h",(function(){return i})),n.d(e,"a",(function(){return a})),n.d(e,"g",(function(){return s})),n.d(e,"d",(function(){return c})),n.d(e,"f",(function(){return l})),n.d(e,"e",(function(){return u})),n.d(e,"k",(function(){return d})),n.d(e,"l",(function(){return p})),n.d(e,"c",(function(){return f})),n.d(e,"q",(function(){return h})),n.d(e,"m",(function(){return v})),n.d(e,"p",(function(){return b})),n.d(e,"o",(function(){return g})),n.d(e,"j",(function(){return m})),n.d(e,"s",(function(){return y})),n.d(e,"r",(function(){return w})),n.d(e,"n",(function(){return _}))},d66a:function(t,e,n){var r=n("489a"),o=n("cfe4");function i(t,e){return null!=t&&o(t,e,r)}t.exports=i},d6e7:function(t,e,n){"use strict";n("88df")},d802:function(t,e,n){"use strict";function r(t,e,n,r,o,i,a,s){var c,l="function"===typeof t?t.options:t;if(e&&(l.render=e,l.staticRenderFns=n,l._compiled=!0),r&&(l.functional=!0),i&&(l._scopeId="data-v-"+i),a?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},l._ssrRegister=c):o&&(c=s?function(){o.call(this,(l.functional?this.parent:this).$root.$options.shadowRoot)}:o),c)if(l.functional){l._injectStyles=c;var u=l.render;l.render=function(t,e){return c.call(e),u(t,e)}}else{var d=l.beforeCreate;l.beforeCreate=d?[].concat(d,c):[c]}return{exports:t,options:l}}n.d(e,"a",(function(){return r}))},d856:function(t,e,n){var r=n("e697");function o(){this.__data__=r?r(null):{},this.size=0}t.exports=o},d99b:function(t,e){function n(t,e){var n=-1,r=Array(t);while(++nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){s=!0,i=t},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}var k=Object.prototype.hasOwnProperty;function A(t,e){return t=t.slice(),t.push(e),t}function E(t,e){return e=e.slice(),e.unshift(t),e}var S=function(t){s(n,t);var e=b(n);function n(t){var r;return a(this,n),r=e.call(this,'JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)'),r.avoidNew=!0,r.value=t,r.name="NewError",r}return n}(f(Error));function C(t,e,n,r,o){if(!(this instanceof C))try{return new C(t,e,n,r,o)}catch(l){if(!l.avoidNew)throw l;return l.value}"string"===typeof t&&(o=r,r=n,n=e,e=t,t=null);var a=t&&"object"===i(t);if(t=t||{},this.json=t.json||n,this.path=t.path||e,this.resultType=t.resultType||"value",this.flatten=t.flatten||!1,this.wrap=!k.call(t,"wrap")||t.wrap,this.sandbox=t.sandbox||{},this.preventEval=t.preventEval||!1,this.parent=t.parent||null,this.parentProperty=t.parentProperty||null,this.callback=t.callback||r||null,this.otherTypeCallback=t.otherTypeCallback||o||function(){throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.")},!1!==t.autostart){var s={path:a?t.path:e};a?"json"in t&&(s.json=t.json):s.json=n;var c=this.evaluate(s);if(!c||"object"!==i(c))throw new S(c);return c}}C.prototype.evaluate=function(t,e,n,r){var o=this,a=this.parent,s=this.parentProperty,c=this.flatten,l=this.wrap;if(this.currResultType=this.resultType,this.currPreventEval=this.preventEval,this.currSandbox=this.sandbox,n=n||this.callback,this.currOtherTypeCallback=r||this.otherTypeCallback,e=e||this.json,t=t||this.path,t&&"object"===i(t)&&!Array.isArray(t)){if(!t.path&&""!==t.path)throw new TypeError('You must supply a "path" property when providing an object argument to JSONPath.evaluate().');if(!k.call(t,"json"))throw new TypeError('You must supply a "json" property when providing an object argument to JSONPath.evaluate().');var u=t;e=u.json,c=k.call(t,"flatten")?t.flatten:c,this.currResultType=k.call(t,"resultType")?t.resultType:this.currResultType,this.currSandbox=k.call(t,"sandbox")?t.sandbox:this.currSandbox,l=k.call(t,"wrap")?t.wrap:l,this.currPreventEval=k.call(t,"preventEval")?t.preventEval:this.currPreventEval,n=k.call(t,"callback")?t.callback:n,this.currOtherTypeCallback=k.call(t,"otherTypeCallback")?t.otherTypeCallback:this.currOtherTypeCallback,a=k.call(t,"parent")?t.parent:a,s=k.call(t,"parentProperty")?t.parentProperty:s,t=t.path}if(a=a||null,s=s||null,Array.isArray(t)&&(t=C.toPathString(t)),(t||""===t)&&e){var d=C.toPathArray(t);"$"===d[0]&&d.length>1&&d.shift(),this._hasParentSelector=null;var p=this._trace(d,e,["$"],a,s,n).filter((function(t){return t&&!t.isParentSelector}));return p.length?l||1!==p.length||p[0].hasArrExpr?p.reduce((function(t,e){var n=o._getPreferredOutput(e);return c&&Array.isArray(n)?t=t.concat(n):t.push(n),t}),[]):this._getPreferredOutput(p[0]):l?[]:void 0}},C.prototype._getPreferredOutput=function(t){var e=this.currResultType;switch(e){case"all":var n=Array.isArray(t.path)?t.path:C.toPathArray(t.path);return t.pointer=C.toPointer(n),t.path="string"===typeof t.path?t.path:C.toPathString(t.path),t;case"value":case"parent":case"parentProperty":return t[e];case"path":return C.toPathString(t[e]);case"pointer":return C.toPointer(t.path);default:throw new TypeError("Unknown result type")}},C.prototype._handleCallback=function(t,e,n){if(e){var r=this._getPreferredOutput(t);t.path="string"===typeof t.path?t.path:C.toPathString(t.path),e(r,n,t)}},C.prototype._trace=function(t,e,n,r,o,a,s,c){var l,u=this;if(!t.length)return l={path:n,value:e,parent:r,parentProperty:o,hasArrExpr:s},this._handleCallback(l,a,"value"),l;var d=t[0],p=t.slice(1),f=[];function h(t){Array.isArray(t)?t.forEach((function(t){f.push(t)})):f.push(t)}if(("string"!==typeof d||c)&&e&&k.call(e,d))h(this._trace(p,e[d],A(n,d),e,d,a,s));else if("*"===d)this._walk(d,p,e,n,r,o,a,(function(t,e,n,r,o,i,a,s){h(u._trace(E(t,n),r,o,i,a,s,!0,!0))}));else if(".."===d)h(this._trace(p,e,n,r,o,a,s)),this._walk(d,p,e,n,r,o,a,(function(t,e,n,r,o,a,s,c){"object"===i(r[t])&&h(u._trace(E(e,n),r[t],A(o,t),r,t,c,!0))}));else{if("^"===d)return this._hasParentSelector=!0,{path:n.slice(0,-1),expr:p,isParentSelector:!0};if("~"===d)return l={path:A(n,d),value:o,parent:r,parentProperty:null},this._handleCallback(l,a,"property"),l;if("$"===d)h(this._trace(p,e,n,null,null,a,s));else if(/^(\x2D?[0-9]*):(\x2D?[0-9]*):?([0-9]*)$/.test(d))h(this._slice(d,p,e,n,r,o,a));else if(0===d.indexOf("?(")){if(this.currPreventEval)throw new Error("Eval [?(expr)] prevented in JSONPath expression.");this._walk(d,p,e,n,r,o,a,(function(t,e,n,r,o,i,a,s){u._eval(e.replace(/^\?\(((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?)\)$/,"$1"),r[t],t,o,i,a)&&h(u._trace(E(t,n),r,o,i,a,s,!0))}))}else if("("===d[0]){if(this.currPreventEval)throw new Error("Eval [(expr)] prevented in JSONPath expression.");h(this._trace(E(this._eval(d,e,n[n.length-1],n.slice(0,-1),r,o),p),e,n,r,o,a,s))}else if("@"===d[0]){var v=!1,b=d.slice(1,-2);switch(b){case"scalar":e&&["object","function"].includes(i(e))||(v=!0);break;case"boolean":case"string":case"undefined":case"function":i(e)===b&&(v=!0);break;case"integer":!Number.isFinite(e)||e%1||(v=!0);break;case"number":Number.isFinite(e)&&(v=!0);break;case"nonFinite":"number"!==typeof e||Number.isFinite(e)||(v=!0);break;case"object":e&&i(e)===b&&(v=!0);break;case"array":Array.isArray(e)&&(v=!0);break;case"other":v=this.currOtherTypeCallback(e,n,r,o);break;case"null":null===e&&(v=!0);break;default:throw new TypeError("Unknown value type "+b)}if(v)return l={path:n,value:e,parent:r,parentProperty:o},this._handleCallback(l,a,"value"),l}else if("`"===d[0]&&e&&k.call(e,d.slice(1))){var g=d.slice(1);h(this._trace(p,e[g],A(n,g),e,g,a,s,!0))}else if(d.includes(",")){var m,y=d.split(","),w=O(y);try{for(w.s();!(m=w.n()).done;){var _=m.value;h(this._trace(E(_,p),e,n,r,o,a,!0))}}catch(I){w.e(I)}finally{w.f()}}else!c&&e&&k.call(e,d)&&h(this._trace(p,e[d],A(n,d),e,d,a,s,!0))}if(this._hasParentSelector)for(var x=0;x-1?t.slice(0,a+1)+" return "+t.slice(a+1):" return "+t;return d(Function,g(n).concat([s])).apply(void 0,g(o))}};var R=n("8bbf"),I=n.n(R),L=(n("7195"),n("b506")),j=n.n(L),N=n("c316"),D=n.n(N),P=n("9e74"),$=n.n(P),M=(n("94a3"),n("2cb5")),F=n("bddd");function B(t,e,n){let r=t;if(!r)return;const o=Object(M["n"])(e);for(let i=0;i{const n=t[e];Array.isArray(n)?(t[e]=n.map(t=>{if(null!==t&&void 0!==t)return q(t)}),0===t[e].length&&delete t[e]):"undefined"===typeof n||null===n?delete t[e]:j()(n)&&(V(n)&&delete t[e],t[e]=q(n))}),t}function z(t,e){const n=Object.keys(t||{}),r=Object.keys(e||{});if(n.length!==r.length)return!1;for(let o=0;oli[data-v-3b920c85]{position:relative}.icon-li[data-v-3b920c85]{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.icon-li.icon-lg[data-v-3b920c85]{left:-1.8571428571em}.icon-rotate-90[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);transform:rotate(90deg)}.icon-rotate-180[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.icon-rotate-270[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);transform:rotate(270deg)}.icon-flip-horizontal[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);transform:scaleX(-1)}.icon-flip-vertical[data-v-3b920c85]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:scaleY(-1)}.main-container[data-v-3b920c85]{margin-top:-2.425rem}.services-by-cluster-grid[data-v-3b920c85]{display:grid;grid-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.cluster-header[data-v-3b920c85]{display:flex;align-items:center;justify-content:space-between;margin:1rem 0;background:var(--header-bg);border-bottom:var(--header-border-size) solid var(--header-border);height:var(--header-height);position:sticky;top:0;z-index:1}.favorite-icon[data-v-3b920c85]{margin-right:1rem}.icon-button[data-v-3b920c85]:hover{color:var(--primary-hover)}',""]),t.exports=e},e972:function(t,e){var n=/\s/;function r(t){var e=t.length;while(e--&&n.test(t.charAt(e)));return e}t.exports=r},ecda:function(t,e,n){var r=n("1001"),o=n("94dd"),i=n("06cb"),a=n("6d56"),s=n("e91b"),c="[object Boolean]",l="[object Date]",u="[object Map]",d="[object Number]",p="[object RegExp]",f="[object Set]",h="[object String]",v="[object Symbol]",b="[object ArrayBuffer]",g="[object DataView]",m="[object Float32Array]",y="[object Float64Array]",w="[object Int8Array]",_="[object Int16Array]",x="[object Int32Array]",O="[object Uint8Array]",k="[object Uint8ClampedArray]",A="[object Uint16Array]",E="[object Uint32Array]";function S(t,e,n){var S=t.constructor;switch(e){case b:return r(t);case c:case l:return new S(+t);case g:return o(t,n);case m:case y:case w:case _:case x:case O:case k:case A:case E:return s(t,n);case u:return new S;case d:case h:return new S(t);case p:return i(t);case f:return new S;case v:return a(t)}}t.exports=S},ecf6:function(t,e,n){var r=n("fbba"),o=n("906d"),i=o(r);t.exports=i},ed07:function(t,e,n){var r=n("2e6e");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("622cf29f",r,!0,{sourceMap:!1,shadowMode:!1})},ef42:function(t,e,n){var r=n("5b4b"),o=n("5f84"),i=Object.prototype,a=i.propertyIsEnumerable,s=Object.getOwnPropertySymbols,c=s?function(t){return null==t?[]:(t=Object(t),r(s(t),(function(e){return a.call(t,e)})))}:o;t.exports=c},eff8:function(t,e,n){var r=n("0e19"),o=n("b742"),i=n("b4b4"),a="[object Arguments]",s="[object Array]",c="[object Boolean]",l="[object Date]",u="[object Error]",d="[object Function]",p="[object Map]",f="[object Number]",h="[object Object]",v="[object RegExp]",b="[object Set]",g="[object String]",m="[object WeakMap]",y="[object ArrayBuffer]",w="[object DataView]",_="[object Float32Array]",x="[object Float64Array]",O="[object Int8Array]",k="[object Int16Array]",A="[object Int32Array]",E="[object Uint8Array]",S="[object Uint8ClampedArray]",C="[object Uint16Array]",T="[object Uint32Array]",R={};function I(t){return i(t)&&o(t.length)&&!!R[r(t)]}R[_]=R[x]=R[O]=R[k]=R[A]=R[E]=R[S]=R[C]=R[T]=!0,R[a]=R[s]=R[y]=R[c]=R[w]=R[l]=R[u]=R[d]=R[p]=R[f]=R[h]=R[v]=R[b]=R[g]=R[m]=!1,t.exports=I},effc:function(t,e,n){var r=n("6634"),o=n("84cb"),i=n("d12b");function a(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}t.exports=a},f19a:function(t,e){function n(){this.__data__=[],this.size=0}t.exports=n},f390:function(t,e,n){"use strict";n.d(e,"b",(function(){return a})),n.d(e,"a",(function(){return s}));var r=n("907c"),o=n("0788"),i=n("bddd");n("e24b");function a(t){if(s(t))return!1;const e=t["getStoreNameByProductId"],n=t[e+"/all"](r["v"]),a=Object(i["d"])(n,"id",Object(o["a"])(r["k"].PODMONITOR));return!!a}function s(t){var e;const n=t["currentCluster"];return!(null===n||void 0===n||null===(e=n.status)||void 0===e||!e.monitoringStatus)}},f522:function(t,e,n){var r=n("24da");function o(t){return r(this,t).has(t)}t.exports=o},f533:function(t,e,n){var r=n("3819"),o=n("9e79"),i=n("5e52"),a=1/0,s=r&&1/i(new r([,-0]))[1]==a?function(t){return new r(t)}:o;t.exports=s},f595:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAgVBMVEUAAAAkU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU/8kU//ULCqVAAAAKnRSTlMAjopHOdr8snNsY1Ae+aq3gEAqCfTyo1kvBOvm4sqglyYgGhbUmXVvNBL6rShDAAAAw0lEQVQ4y83Q2Q6CMBCF4aNYQG3LJpu74jrv/4ACTSEUEi4kxu/6n2RyMKUr+jhaGcthCvcRGr5dwLSmADPFgkOnWcsPUUrJBSnxm1FHfC4Dl4462HBBXX4eBTs66IBlZJjftzZRrAN5FmaQ1Ic6SJA6nufJbRs8pZTHrPnhsa74dhtAIcO3gdiNBIkzErg/COakrQaDU3FQU9leBGWhWbdq0CDilwvn/JqjZ1lf7hljKQatSFv+b/ASpIgAw0JLCTGpD5arSeJmn1I0AAAAAElFTkSuQmCC"},f6f6:function(t,e,n){var r=n("dca0"),o=function(){var t=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function i(t){return!!o&&o in t}t.exports=i},f72d:function(t,e,n){var r=n("daaf"),o=n("b742");function i(t){return null!=t&&o(t.length)&&!r(t)}t.exports=i},f9f5:function(t,e,n){var r=n("e697"),o="__lodash_hash_undefined__",i=Object.prototype,a=i.hasOwnProperty;function s(t){var e=this.__data__;if(r){var n=e[t];return n===o?void 0:n}return a.call(e,t)?e[t]:void 0}t.exports=s},fa8a:function(t,e,n){var r=n("f19a"),o=n("930a"),i=n("e556"),a=n("0a87"),s=n("2f33");function c(t){var e=-1,n=null==t?0:t.length;this.clear();while(++e r.attributes?.kind);\n }\n\n get clusterResources() {\n return this.allResources.filter((r) => !r.attributes.namespaced && !r.attributes.group.includes(CATTLE_API_GROUP));\n }\n\n get resources() {\n return uniq(this.clusterResources.map((r) => r.attributes?.kind)).sort();\n }\n\n set displayName(v) {\n this.metadata.name = v;\n }\n\n get displayName() {\n return this.metadata?.name;\n }\n}\n","import Vue from 'vue';\nimport { get } from '@shell/utils/object';\nimport { DESCRIPTION } from '@shell/config/labels-annotations';\nimport { NORMAN } from '@shell/config/types';\nimport SteveDescriptionModel from '@shell/plugins/steve/steve-description-class';\nimport Role from './rbac.authorization.k8s.io.role';\nimport { AS, MODE, _CLONE, _UNFLAG } from '@shell/config/query-params';\n\nexport const CATTLE_API_GROUP = '.cattle.io';\n\nexport const SUBTYPE_MAPPING = {\n GLOBAL: {\n key: 'GLOBAL',\n type: 'management.cattle.io.globalrole',\n defaultKey: 'newUserDefault',\n id: 'GLOBAL',\n labelKey: 'rbac.roletemplate.subtypes.GLOBAL.label',\n },\n CLUSTER: {\n key: 'CLUSTER',\n type: 'management.cattle.io.roletemplate',\n context: 'cluster',\n defaultKey: 'clusterCreatorDefault',\n id: 'CLUSTER',\n labelKey: 'rbac.roletemplate.subtypes.CLUSTER.label',\n },\n NAMESPACE: {\n key: 'NAMESPACE',\n type: 'management.cattle.io.roletemplate',\n context: 'project',\n defaultKey: 'projectCreatorDefault',\n id: 'NAMESPACE',\n labelKey: 'rbac.roletemplate.subtypes.NAMESPACE.label',\n },\n RBAC_ROLE: {\n key: 'RBAC_ROLE',\n type: 'rbac.authorization.k8s.io.role',\n id: 'RBAC_ROLE',\n labelKey: 'rbac.roletemplate.subtypes.RBAC_ROLE.label',\n },\n RBAC_CLUSTER_ROLE: {\n key: 'RBAC_CLUSTER_ROLE',\n type: 'rbac.authorization.k8s.io.clusterrole',\n id: 'RBAC_CLUSTER_ROLE',\n labelKey: 'rbac.roletemplate.subtypes.RBAC_CLUSTER_ROLE.label',\n }\n};\n\nexport const VERBS = [\n 'create',\n 'delete',\n 'get',\n 'list',\n 'patch',\n 'update',\n 'watch',\n];\n\nexport const CREATE_VERBS = new Set(['PUT', 'blocked-PUT']);\n\nexport default class RoleTemplate extends SteveDescriptionModel {\n get customValidationRules() {\n return Role.customValidationRules();\n }\n\n get details() {\n const out = this._details;\n\n out.unshift({\n label: this.t('resourceDetail.detailTop.name'),\n content: get(this, 'name')\n },\n // API returns a blank description property, this overrides our own link to the description\n {\n label: this.t('resourceDetail.detailTop.description'),\n content: this.metadata?.annotations?.[DESCRIPTION]\n });\n\n return out;\n }\n\n get state() {\n return this.locked ? 'locked' : this.metadata?.state?.name || 'unknown';\n }\n\n get subtype() {\n if (this._subtype) {\n return this._subtype;\n }\n\n if (this.type === SUBTYPE_MAPPING.CLUSTER.type && this.context === SUBTYPE_MAPPING.CLUSTER.context) {\n return SUBTYPE_MAPPING.CLUSTER.key;\n }\n\n if (this.type === SUBTYPE_MAPPING.NAMESPACE.type && this.context === SUBTYPE_MAPPING.NAMESPACE.context) {\n return SUBTYPE_MAPPING.NAMESPACE.key;\n }\n\n return null;\n }\n\n updateSubtype(subtype) {\n Vue.set(this, '_subtype', subtype);\n this.context = SUBTYPE_MAPPING[subtype].context;\n }\n\n get default() {\n const defaultKey = SUBTYPE_MAPPING[this.subtype]?.defaultKey;\n\n return !!this[defaultKey];\n }\n\n updateDefault(value) {\n const defaultKey = SUBTYPE_MAPPING[this.subtype].defaultKey;\n\n Vue.set(this, defaultKey, value);\n }\n\n get listLocation() {\n return {\n name: `c-cluster-auth-roles`,\n hash: `#${ this.subtype }`\n };\n }\n\n get detailLocation() {\n return {\n ...this._detailLocation,\n name: `c-cluster-auth-roles-resource-id`,\n };\n }\n\n get doneOverride() {\n return this.listLocation;\n }\n\n get parentLocationOverride() {\n return this.listLocation;\n }\n\n get basicNorman() {\n if (this.id) {\n return this.$dispatch(`rancher/find`, { id: this.id, type: NORMAN.ROLE_TEMPLATE }, { root: true });\n }\n\n return this.$dispatch(`rancher/create`, { type: NORMAN.ROLE_TEMPLATE, name: this.displayName }, { root: true });\n }\n\n get norman() {\n return (async() => {\n const norman = await this.basicNorman;\n\n norman.rules = this.rules;\n norman.locked = this.locked;\n norman.clusterCreatorDefault = this.clusterCreatorDefault || false;\n norman.projectCreatorDefault = this.projectCreatorDefault || false;\n norman.context = this.context;\n norman.description = this.description;\n norman.roleTemplateIds = this.roleTemplateNames;\n\n return norman;\n })();\n }\n\n get canCreate() {\n const schema = this.$getters['schemaFor'](this.type);\n\n return schema?.resourceMethods.find((verb) => CREATE_VERBS.has(verb));\n }\n\n goToClone(moreQuery = {}) {\n const location = this.detailLocation;\n\n location.query = {\n ...location.query,\n [MODE]: _CLONE,\n [AS]: _UNFLAG,\n roleContext: this.subtype,\n ...moreQuery\n };\n\n this.currentRouter().push(location);\n }\n\n async save() {\n const norman = await this.norman;\n\n return norman.save();\n }\n\n async remove() {\n const norman = await this.norman;\n\n await norman.remove();\n }\n}\n","import { mapState, mapGetters } from 'vuex';\nimport { resourceNames } from '@shell/utils/string';\nimport { MANAGEMENT } from '@shell/config/types';\nimport { SUBTYPE_MAPPING } from '@shell/models/management.cattle.io.roletemplate';\nconst CLUSTER = SUBTYPE_MAPPING.CLUSTER.key;\n\nexport default {\n data() {\n return {\n warning: '',\n info: '',\n };\n },\n\n computed: {\n ...mapState('action-menu', ['toRemove']),\n ...mapGetters({ t: 'i18n/t' }),\n\n names() {\n return this.toRemove.map((obj) => obj.nameDisplay).slice(0, 5);\n },\n\n plusMore() {\n const remaining = this.toRemove.length - this.names.length;\n\n return this.t('promptRemove.andOthers', { count: remaining });\n },\n },\n watch: {\n value: {\n handler(neu) {\n this.handleRoleDeletionCheck(neu, neu[0].type, this.$route.hash);\n },\n immediate: true\n }\n },\n methods: {\n resourceNames,\n async handleRoleDeletionCheck(rolesToRemove, resourceType, queryHash) {\n this.warning = '';\n let resourceToCheck;\n let propToMatch;\n let numberOfRolesWithBinds = 0;\n const uniqueUsersWithBinds = new Set();\n\n this.info = this.t('rbac.globalRoles.waiting', { count: rolesToRemove.length });\n\n switch (resourceType) {\n case MANAGEMENT.GLOBAL_ROLE:\n resourceToCheck = MANAGEMENT.GLOBAL_ROLE_BINDING;\n propToMatch = 'globalRoleName';\n break;\n default:\n if (queryHash.includes(CLUSTER)) {\n resourceToCheck = MANAGEMENT.CLUSTER_ROLE_TEMPLATE_BINDING;\n } else {\n resourceToCheck = MANAGEMENT.PROJECT_ROLE_TEMPLATE_BINDING;\n }\n propToMatch = 'roleTemplateName';\n break;\n }\n\n try {\n const request = await this.$store.dispatch('management/request', {\n url: `/v1/${ resourceToCheck }`,\n method: 'get',\n }, { root: true });\n\n // We need to fetch the users here in order to get an accurate count when selecting global roles.\n const users = await this.$store.dispatch('management/request', {\n url: `/v1/${ MANAGEMENT.USER }`,\n method: 'get',\n }, { root: true });\n\n const userMap = users.data?.reduce((map, user) => {\n if ( user.username ) {\n map[user.id] = user;\n }\n\n return map;\n }, {});\n\n if (request.data && request.data.length) {\n rolesToRemove.forEach((toRemove) => {\n const usedRoles = request.data.filter((item) => item[propToMatch] === toRemove.id);\n\n if (usedRoles.length) {\n const uniqueUsers = [...new Set(usedRoles.map((item) => item.userName).filter((user) => userMap[user]))];\n\n if (uniqueUsers.length) {\n numberOfRolesWithBinds++;\n uniqueUsers.forEach((user) => uniqueUsersWithBinds.add(user));\n }\n }\n });\n\n if (numberOfRolesWithBinds && uniqueUsersWithBinds.size) {\n this.info = '';\n this.warning = this.t('rbac.globalRoles.usersBound', { count: uniqueUsersWithBinds.size });\n } else {\n this.info = this.t('rbac.globalRoles.notBound', null, true);\n }\n } else {\n this.info = this.t('rbac.globalRoles.notBound', null, true);\n }\n } catch (e) {\n this.info = this.t('rbac.globalRoles.unableToCheck');\n }\n },\n },\n};\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","import { SCHEMA } from '@shell/config/types';\n\nimport { applyChangeset, changeset, changesetConflicts } from '@shell/utils/object';\n\nexport const KEY_FIELD_FOR = {\n [SCHEMA]: '_id',\n default: 'id',\n};\n\nexport function keyFieldFor(type) {\n return KEY_FIELD_FOR[type] || KEY_FIELD_FOR['default'];\n}\n\nexport function normalizeType(type) {\n type = (type?.type || type || '').toLowerCase();\n\n return type;\n}\n\n// Detect and resolve conflicts from a 409 response.\n// If they are resolved, return a false-y value\n// Else they can't be resolved, return an array of errors to show to the user.\nexport function handleConflict(initialValueJSON, value, liveValue, rootGetters, store) {\n const orig = store.dispatch(`cleanForDiff`, initialValueJSON);\n const user = store.dispatch(`cleanForDiff`, value.toJSON());\n const cur = store.dispatch(`cleanForDiff`, liveValue.toJSON());\n\n const bgChange = changeset(orig, cur);\n const userChange = changeset(orig, user);\n const actualConflicts = changesetConflicts(bgChange, userChange);\n\n console.log('Background Change', bgChange); // eslint-disable-line no-console\n console.log('User Change', userChange); // eslint-disable-line no-console\n console.log('Conflicts', actualConflicts); // eslint-disable-line no-console\n\n value.metadata.resourceVersion = liveValue.metadata.resourceVersion;\n applyChangeset(value, bgChange);\n\n if ( actualConflicts.length ) {\n // Stop the save and let the user inspect and continue editing\n const out = [rootGetters['i18n/t']('validation.conflict', { fields: actualConflicts.join(', '), fieldCount: actualConflicts.length })];\n\n return out;\n } else {\n // The save can continue\n return false;\n }\n}\n","exports.nextTick = function nextTick(fn) {\n var args = Array.prototype.slice.call(arguments);\n args.shift();\n setTimeout(function () {\n fn.apply(null, args);\n }, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n","export * from \"-!../../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Banner.vue?vue&type=style&index=0&id=02d86e5d&prod&lang=scss&scoped=true&\"","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ActionDropdown.vue?vue&type=template&id=70f0de36&\"\nimport script from \"./ActionDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./ActionDropdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ActionDropdown.vue?vue&type=style&index=0&id=70f0de36&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/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('thead',[_c('tr',{class:{'loading': _vm.loading}},[(_vm.tableActions)?_c('th',{attrs:{\"width\":_vm.checkWidth,\"align\":\"middle\"}},[_c('Checkbox',{staticClass:\"check\",attrs:{\"data-testid\":\"sortable-table_check_select_all\",\"indeterminate\":_vm.isIndeterminate,\"disabled\":_vm.noRows || _vm.noResults},model:{value:(_vm.isAll),callback:function ($$v) {_vm.isAll=$$v},expression:\"isAll\"}})],1):_vm._e(),(_vm.subExpandColumn)?_c('th',{attrs:{\"width\":_vm.expandWidth}}):_vm._e(),_vm._l((_vm.columns),function(col){return _c('th',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hasAdvancedFiltering || (_vm.hasAdvancedFiltering && col.isColVisible)),expression:\"!hasAdvancedFiltering || (hasAdvancedFiltering && col.isColVisible)\"}],key:col.name,class:{ sortable: col.sort, [col.breakpoint]: !!col.breakpoint},attrs:{\"align\":col.align || 'left',\"width\":col.width},on:{\"click\":function($event){$event.preventDefault();return _vm.changeSort($event, col)}}},[_c('div',{staticClass:\"table-header-container\",class:{ 'not-filterable': _vm.hasAdvancedFiltering && !col.isFilter }},[(col.sort)?_c('span',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.tooltip(col)),expression:\"tooltip(col)\"}]},[_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.labelFor(col)),expression:\"labelFor(col)\"}]}),_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasAdvancedFiltering && !col.isFilter),expression:\"hasAdvancedFiltering && !col.isFilter\"},{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.t('sortableTable.tableHeader.noFilter')),expression:\"t('sortableTable.tableHeader.noFilter')\"}],staticClass:\"icon icon-info not-filter-icon\"}),_c('span',{staticClass:\"icon-stack\"},[_c('i',{staticClass:\"icon icon-sort icon-stack-1x faded\"}),(_vm.isCurrent(col) && !_vm.descending)?_c('i',{staticClass:\"icon icon-sort-down icon-stack-1x\"}):_vm._e(),(_vm.isCurrent(col) && _vm.descending)?_c('i',{staticClass:\"icon icon-sort-up icon-stack-1x\"}):_vm._e()])]):_c('span',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.tooltip(col)),expression:\"tooltip(col)\"}]},[_vm._v(_vm._s(_vm.labelFor(col)))])])])}),(_vm.rowActions && _vm.hasAdvancedFiltering && _vm.tableColsOptions.length)?_c('th',{attrs:{\"width\":_vm.rowActionsWidth}},[_c('div',{ref:\"table-options\",staticClass:\"table-options-group\"},[_c('button',{staticClass:\"btn btn-sm role-multi-action table-options-btn\",attrs:{\"aria-haspopup\":\"true\",\"aria-expanded\":\"false\",\"type\":\"button\"},on:{\"click\":_vm.tableColsOptionsClick}},[_c('i',{staticClass:\"icon icon-actions\"})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.tableColsOptionsVisibility),expression:\"tableColsOptionsVisibility\"}],staticClass:\"table-options-container\",style:(_vm.tableColsMenuPosition)},[(_vm.hasAdvGrouping)?_c('div',{staticClass:\"table-options-grouping\"},[_c('span',{staticClass:\"table-options-col-subtitle\"},[_vm._v(_vm._s(_vm.t('sortableTable.tableHeader.groupBy'))+\":\")]),_c('LabeledSelect',{staticClass:\"table-options-grouping-select\",attrs:{\"clearable\":true,\"options\":_vm.groupOptions,\"disabled\":false,\"searchable\":false,\"mode\":\"edit\",\"multiple\":false,\"taggable\":false},model:{value:(_vm.advGroup),callback:function ($$v) {_vm.advGroup=$$v},expression:\"advGroup\"}})],1):_vm._e(),_c('p',{staticClass:\"table-options-col-subtitle mb-20\"},[_vm._v(\" \"+_vm._s(_vm.t('sortableTable.tableHeader.show'))+\": \")]),_c('ul',_vm._l((_vm.tableColsOptions),function(col,index){return _c('li',{directives:[{name:\"show\",rawName:\"v-show\",value:(col.isTableOption),expression:\"col.isTableOption\"}],key:index,class:{ 'visible': !col.preventColToggle }},[_c('Checkbox',{directives:[{name:\"show\",rawName:\"v-show\",value:(!col.preventColToggle),expression:\"!col.preventColToggle\"}],staticClass:\"table-options-checkbox\",attrs:{\"label\":col.label},on:{\"input\":function($event){return _vm.tableOptionsCheckbox($event, col.label)}},model:{value:(col.isColVisible),callback:function ($$v) {_vm.$set(col, \"isColVisible\", $$v)},expression:\"col.isColVisible\"}})],1)}),0)])])]):(_vm.rowActions)?_c('th',{attrs:{\"width\":_vm.rowActionsWidth}}):_vm._e()],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export function getParent(el, parentSelector) {\n el = el?.parentElement;\n\n if (!el) {\n return null;\n }\n\n const matchFn = el.matches || el.matchesSelector;\n\n if (!matchFn.call(el, parentSelector)) {\n return getParent(el, parentSelector);\n }\n\n return el;\n}\n","import { isMore, isRange, suppressContextMenu, isAlternate } from '@shell/utils/platform';\nimport { get } from '@shell/utils/object';\nimport { filterBy } from '@shell/utils/array';\nimport { getParent } from '@shell/utils/dom';\n\nexport const ALL = 'all';\nexport const SOME = 'some';\nexport const NONE = 'none';\n\nexport default {\n mounted() {\n const table = this.$el.querySelector('TABLE');\n\n this._onRowClickBound = this.onRowClick.bind(this);\n this._onRowMousedownBound = this.onRowMousedown.bind(this);\n this._onRowContextBound = this.onRowContext.bind(this);\n\n table.addEventListener('click', this._onRowClickBound);\n table.addEventListener('mousedown', this._onRowMousedownBound);\n table.addEventListener('contextmenu', this._onRowContextBound);\n },\n\n beforeDestroy() {\n const table = this.$el.querySelector('TABLE');\n\n table.removeEventListener('click', this._onRowClickBound);\n table.removeEventListener('mousedown', this._onRowMousedownBound);\n table.removeEventListener('contextmenu', this._onRowContextBound);\n },\n\n computed: {\n // Used for the table-level selection check-box to show checked (all selected)/intermediate (some selected)/unchecked (none selected)\n howMuchSelected() {\n const total = this.pagedRows.length;\n const selected = this.selectedRows.length;\n\n if ( selected >= total && total > 0 ) {\n return ALL;\n } else if ( selected > 0 ) {\n return SOME;\n }\n\n return NONE;\n },\n\n // NOTE: The logic here could be simplified and made more performant\n bulkActionsForSelection() {\n let disableAll = false;\n // pagedRows is all rows in the current page\n const all = this.pagedRows;\n const allRows = this.arrangedRows;\n let selected = this.selectedRows;\n\n // Nothing is selected\n if ( !this.selectedRows.length ) {\n // and there are no rows\n if ( !allRows ) {\n return [];\n }\n\n const firstNode = allRows[0];\n\n selected = firstNode ? [firstNode] : [];\n disableAll = true;\n }\n\n const map = {};\n\n // Find and add all the actions for all the nodes so that we know\n // what all the possible actions are\n for ( const node of all ) {\n if (node.availableActions) {\n for ( const act of node.availableActions ) {\n if ( act.bulkable ) {\n _add(map, act, false);\n }\n }\n }\n }\n\n // Go through all the selected items and add the actions (which were already identified above)\n // as available for some (or all) of the selected nodes\n for ( const node of selected ) {\n if (node.availableActions) {\n for ( const act of node.availableActions ) {\n if ( act.bulkable && act.enabled ) {\n _add(map, act, false);\n }\n }\n }\n }\n\n // If there's no items actually selected, we want to see all the actions\n // so you know what exists, but have them all be disabled since there's nothing to do them on.\n const out = _filter(map, disableAll);\n\n // Enable a bulkaction if some of the selected items can perform the action\n out.forEach((bulkAction) => {\n const actionEnabledForSomeSelected = this.selectedRows.some((node) => {\n const availableActions = node.availableActions || [];\n\n return availableActions.some((action) => action.action === bulkAction.action && action.enabled);\n });\n\n bulkAction.enabled = this.selectedRows.length > 0 && actionEnabledForSomeSelected;\n });\n\n return out.sort((a, b) => (b.weight || 0) - (a.weight || 0));\n }\n },\n\n data() {\n return {\n // List of selected items in the table\n selectedRows: [],\n prevNode: null,\n };\n },\n\n watch: {\n // On page change\n pagedRows() {\n // When the table contents changes:\n // - Remove items that are in the selection but no longer in the table.\n\n const content = this.pagedRows;\n const toRemove = [];\n\n for (const node of this.selectedRows) {\n if (!content.includes(node) ) {\n toRemove.push(node);\n }\n }\n\n this.update([], toRemove);\n }\n },\n\n methods: {\n onToggleAll(value) {\n if ( value ) {\n this.update(this.pagedRows, []);\n\n return true;\n } else {\n this.update([], this.pagedRows);\n\n return false;\n }\n },\n\n onRowMousedown(e) {\n if ( isRange(e) || this.isSelectionCheckbox(e.target) ) {\n e.preventDefault();\n }\n },\n\n onRowMouseEnter(e) {\n const tr = e.target.closest('TR');\n\n if (tr.classList.contains('sub-row')) {\n const trMainRow = tr.previousElementSibling;\n\n trMainRow.classList.add('sub-row-hovered');\n }\n },\n\n onRowMouseLeave(e) {\n const tr = e.target.closest('TR');\n\n if (tr.classList.contains('sub-row')) {\n const trMainRow = tr.previousElementSibling;\n\n trMainRow.classList.remove('sub-row-hovered');\n }\n },\n\n nodeForEvent(e) {\n const tagName = e.target.tagName;\n const tgt = e.target;\n const actionElement = tgt.closest('.actions');\n\n if ( tgt.classList.contains('select-all-check') ) {\n return;\n }\n\n if ( !actionElement ) {\n if (\n tagName === 'A' ||\n tagName === 'BUTTON' ||\n getParent(tgt, '.btn')\n ) {\n return;\n }\n }\n\n const tgtRow = e.target.closest('TR');\n\n return this.nodeForRow(tgtRow);\n },\n\n nodeForRow(tgtRow) {\n if ( tgtRow?.classList.contains('separator-row') ) {\n return;\n }\n\n while ( tgtRow && !tgtRow.classList.contains('main-row') ) {\n tgtRow = tgtRow.previousElementSibling;\n }\n\n if ( !tgtRow ) {\n return;\n }\n\n const nodeId = tgtRow.dataset.nodeId;\n\n if ( !nodeId ) {\n return;\n }\n\n const node = this.pagedRows.find( (x) => get(x, this.keyField) === nodeId );\n\n return node;\n },\n\n async onRowClick(e) {\n const node = this.nodeForEvent(e);\n const td = e.target.closest('TD');\n const skipSelect = td?.classList.contains('skip-select');\n\n if (skipSelect) {\n return;\n }\n const selection = this.selectedRows;\n const isCheckbox = this.isSelectionCheckbox(e.target) || td?.classList.contains('row-check');\n const isExpand = td?.classList.contains('row-expand');\n const content = this.pagedRows;\n\n this.$emit('rowClick', e);\n\n if ( !node ) {\n return;\n }\n\n if ( isExpand ) {\n this.toggleExpand(node);\n\n return;\n }\n\n const actionElement = e.target.closest('.actions');\n\n if ( actionElement ) {\n let resources = [node];\n\n if ( this.mangleActionResources ) {\n const i = actionElement.querySelector('i');\n\n i.classList.remove('icon-actions');\n i.classList.add('icon-spinner');\n i.classList.add('icon-spin');\n\n try {\n resources = await this.mangleActionResources(resources);\n } finally {\n i.classList.remove('icon-spinner');\n i.classList.remove('icon-spin');\n i.classList.add('icon-actions');\n }\n }\n\n this.$store.commit(`action-menu/show`, {\n resources,\n event: e,\n elem: actionElement\n });\n\n return;\n }\n\n const isSelected = selection.includes(node);\n let prevNode = this.prevNode;\n\n // PrevNode is only valid if it's in the current content\n if ( !prevNode || !content.includes(prevNode) ) {\n prevNode = node;\n }\n\n if ( isMore(e) ) {\n this.toggle(node);\n } else if ( isRange(e) ) {\n const toToggle = this.nodesBetween(prevNode, node);\n\n if ( isSelected ) {\n this.update([], toToggle);\n } else {\n this.update(toToggle, []);\n }\n } else if ( isCheckbox ) {\n this.toggle(node);\n } else {\n this.update([node], content);\n }\n\n this.prevNode = node;\n },\n\n async onRowContext(e) {\n const node = this.nodeForEvent(e);\n\n if ( suppressContextMenu(e) ) {\n return;\n }\n\n if ( !node ) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n this.prevNode = node;\n const isSelected = this.selectedRows.includes(node);\n\n if ( !isSelected ) {\n this.update([node], this.selectedRows.slice());\n }\n\n let resources = this.selectedRows;\n\n if ( this.mangleActionResources ) {\n resources = await this.mangleActionResources(resources);\n }\n\n this.$store.commit(`action-menu/show`, {\n resources,\n event: e,\n });\n },\n\n keySelectRow(row, more = false) {\n const node = this.nodeForRow(row);\n const content = this.pagedRows;\n\n if ( !node ) {\n return;\n }\n\n if ( more ) {\n this.update([node], []);\n } else {\n this.update([node], content);\n }\n\n this.prevNode = node;\n },\n\n isSelectionCheckbox(element) {\n return element.tagName === 'INPUT' &&\n element.type === 'checkbox' &&\n element.closest('.selection-checkbox') !== null;\n },\n\n nodesBetween(a, b) {\n let toToggle = [];\n const key = this.groupBy;\n\n if ( key ) {\n // Grouped has 2 levels to look through\n const grouped = this.groupedRows;\n\n let from = this.groupIdx(a);\n let to = this.groupIdx(b);\n\n if ( !from || !to ) {\n return [];\n }\n\n // From has to come before To\n if ( (from.group > to.group) || ((from.group === to.group) && (from.item > to.item)) ) {\n [from, to] = [to, from];\n }\n\n for ( let i = from.group ; i <= to.group ; i++ ) {\n const items = grouped[i].rows;\n let j = (from.group === i ? from.item : 0);\n\n while ( items[j] && ( i < to.group || j <= to.item )) {\n toToggle.push(items[j]);\n j++;\n }\n }\n } else {\n // Ungrouped is much simpler\n const content = this.pagedRows;\n let from = content.indexOf(a);\n let to = content.indexOf(b);\n\n [from, to] = [Math.min(from, to), Math.max(from, to)];\n toToggle = content.slice(from, to + 1);\n }\n\n // check if there is already duplicate content selected (selectedRows) on the list to toggle...\n toToggle = toToggle.filter((item) => !this.selectedRows.includes(item));\n\n return toToggle;\n },\n\n groupIdx(node) {\n const grouped = this.groupedRows;\n\n for ( let i = 0 ; i < grouped.length ; i++ ) {\n const rows = grouped[i].rows;\n\n for ( let j = 0 ; j < rows.length ; j++ ) {\n if ( rows[j] === node ) {\n return {\n group: i,\n item: j\n };\n }\n }\n }\n\n return null;\n },\n\n toggle(node) {\n const add = [];\n const remove = [];\n\n if (this.selectedRows.includes(node)) {\n remove.push(node);\n } else {\n add.push(node);\n }\n\n this.update(add, remove);\n },\n\n update(toAdd, toRemove) {\n toRemove.forEach((row) => {\n const index = this.selectedRows.findIndex((r) => r === row);\n\n if (index !== -1) {\n this.selectedRows.splice(index, 1);\n }\n });\n\n if ( toAdd ) {\n this.selectedRows.push(...toAdd);\n }\n\n // Uncheck and check the checkboxes of nodes that have been added/removed\n if (toRemove.length) {\n this.$nextTick(() => {\n for ( let i = 0 ; i < toRemove.length ; i++ ) {\n this.updateInput(toRemove[i], false, this.keyField);\n }\n });\n }\n\n if (toAdd.length) {\n this.$nextTick(() => {\n for ( let i = 0 ; i < toAdd.length ; i++ ) {\n this.updateInput(toAdd[i], true, this.keyField);\n }\n });\n }\n\n this.$nextTick(() => {\n this.$emit('selection', this.selectedRows);\n });\n },\n\n updateInput(node, on, keyField) {\n const id = get(node, keyField);\n\n if ( id ) {\n // Note: This is looking for the checkbox control for the row\n const input = this.$el.querySelector(`div[data-checkbox-ctrl][data-node-id=\"${ id }\"]`);\n\n if ( input && !input.disabled ) {\n const label = input.querySelector('label');\n\n if (label) {\n label.value = on;\n }\n let tr = input.closest('tr');\n let first = true;\n\n while ( tr && (first || tr.classList.contains('sub-row') ) ) {\n if (on) {\n tr.classList.add('row-selected');\n } else {\n tr.classList.remove('row-selected');\n }\n tr = tr.nextElementSibling;\n first = false;\n }\n }\n }\n },\n\n select(nodes) {\n nodes.forEach((node) => {\n const id = get(node, this.keyField);\n const input = this.$el.querySelector(`label[data-node-id=\"${ id }\"]`);\n\n input.dispatchEvent(new Event('click'));\n });\n },\n\n applyTableAction(action, args, event) {\n const opts = { alt: event && isAlternate(event), event };\n\n // Go through the table selection and filter out those actions that can't run the chosen action\n const executableSelection = this.selectedRows.filter((row) => {\n const matchingResourceAction = row.availableActions.find((a) => a.action === action.action);\n\n return matchingResourceAction?.enabled;\n });\n\n _execute(executableSelection, action, args, opts, this);\n\n this.actionOfInterest = null;\n },\n\n clearSelection() {\n this.update([], this.selectedRows);\n },\n\n }\n};\n\n// ---------------------------------------------------------------------\n// --- Helpers that were in selectionStore.js --------------------------\n// ---------------------------------------------------------------------\n\nlet anon = 0;\n\nfunction _add(map, act, incrementCounts = true) {\n let id = act.action;\n\n if ( !id ) {\n id = `anon${ anon }`;\n anon++;\n }\n\n let obj = map[id];\n\n if ( !obj ) {\n obj = Object.assign({}, act);\n map[id] = obj;\n obj.allEnabled = false;\n }\n\n if ( !act.enabled ) {\n obj.allEnabled = false;\n } else {\n obj.anyEnabled = true;\n }\n\n if ( incrementCounts ) {\n obj.available = (obj.available || 0) + (!act.enabled ? 0 : 1 );\n obj.total = (obj.total || 0) + 1;\n }\n\n return obj;\n}\n\nfunction _filter(map, disableAll = false) {\n const out = filterBy(Object.values(map), 'anyEnabled', true);\n\n for ( const act of out ) {\n if ( disableAll ) {\n act.enabled = false;\n } else {\n act.enabled = ( act.available >= act.total );\n }\n }\n\n return out;\n}\n\nfunction _execute(resources, action, args, opts = {}, ctx) {\n args = args || [];\n\n // New pattern for extensions - always call invoke\n if (action.invoke) {\n const actionOpts = {\n action,\n event: opts.event,\n isAlt: !!opts.alt,\n };\n\n return action.invoke.apply(ctx, [actionOpts, resources || [], args]);\n }\n\n if ( resources.length > 1 && action.bulkAction && !opts.alt ) {\n const fn = resources[0][action.bulkAction];\n\n if ( fn ) {\n return fn.call(resources[0], resources, ...args);\n }\n }\n\n const promises = [];\n\n for ( const resource of resources ) {\n let fn;\n\n if (opts.alt && action.altAction) {\n fn = resource[action.altAction];\n } else {\n fn = resource[action.action];\n }\n\n if ( fn ) {\n promises.push(fn.apply(resource, args));\n }\n }\n\n return Promise.all(promises);\n}\n","// @TODO replace this with popper.js...\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const TOP = 'top';\nexport const CENTER = 'center'; // These are both the same externally so you can use either,\nexport const MIDDLE = 'center'; // but have different meaning inside this file (center->left/right, middle->top/bottom)\nexport const BOTTOM = 'bottom';\nexport const AUTO = 'auto';\n\nexport function boundingRect(elem) {\n const pos = elem.getBoundingClientRect();\n const width = elem.offsetWidth;\n const height = elem.offsetHeight;\n\n return {\n top: pos.top,\n right: pos.left + width,\n bottom: pos.top + height,\n left: pos.left,\n width,\n height,\n };\n}\n\nexport function fakeRectFor(event) {\n return {\n top: event.clientY,\n left: event.clientX,\n bottom: event.clientY,\n right: event.clientX,\n width: 0,\n height: 0,\n };\n}\n\nexport function screenRect() {\n const width = window.innerWidth;\n const height = window.innerHeight;\n const top = window.pageYOffset;\n const left = window.pageXOffset;\n\n return {\n top,\n right: left + width,\n bottom: top + height,\n left,\n width,\n height,\n };\n}\n\nexport function fitOnScreen(contentElem, triggerElemOrEvent, opt, useDefaults) {\n let {\n positionX = AUTO, // Preferred horizontal position\n positionY = AUTO, // Preferred vertical position\n } = opt || {};\n\n const {\n fudgeX = 0,\n fudgeY = 0,\n overlapX = true, // Position on \"top\" of the trigger horizontally\n overlapY = false, // Position on \"top\" of the trigger vertically\n } = opt || {};\n\n const screen = screenRect();\n let trigger;\n\n if ( triggerElemOrEvent instanceof Event ) {\n trigger = fakeRectFor(triggerElemOrEvent);\n } else {\n trigger = boundingRect(triggerElemOrEvent);\n }\n\n let content = {};\n\n if (contentElem) {\n content = boundingRect(contentElem);\n }\n\n if (useDefaults) {\n content = {\n top: 0,\n right: 147,\n bottom: 163,\n left: 0,\n width: 147,\n height: 80\n };\n }\n\n // console.log('screen', screen);\n // console.log('trigger', trigger);\n // console.log('content', content);\n\n const style = { position: 'absolute' };\n\n const originFor = {\n left: (overlapX ? trigger.left : trigger.right ),\n center: (trigger.left + trigger.right ) / 2,\n right: (overlapX ? trigger.right : trigger.left ),\n top: (overlapY ? trigger.bottom : trigger.top ),\n middle: (trigger.top + trigger.bottom ) / 2,\n bottom: (overlapY ? trigger.top : trigger.bottom ),\n };\n\n // console.log('origin', originFor);\n\n const gapIf = {\n left: screen.right - content.width - originFor.left,\n center: Math.min(screen.right - (content.width / 2) - originFor.center, originFor.center - (content.width / 2) - screen.left),\n right: originFor.right - content.width - screen.left,\n top: originFor.bottom - content.height - screen.top,\n middle: Math.min(originFor.middle - (content.height / 2) - screen.top, screen.bottom - (content.height / 2) - originFor.middle),\n bottom: screen.bottom - content.height - originFor.top,\n };\n\n // console.log('gapIf', gapIf);\n\n if ( positionX === CENTER && gapIf.center < 0) {\n positionX = AUTO;\n }\n\n if ( positionX === AUTO ) {\n positionX = gapIf.left < 0 || gapIf.right * 1.5 > gapIf.left ? RIGHT : LEFT;\n } else if ( positionY === LEFT && gapIf.left < 0 ) {\n positionX = RIGHT;\n } else if ( positionY === RIGHT && gapIf.right < 0 ) {\n positionX = LEFT;\n }\n\n switch ( positionX ) {\n case LEFT:\n style.left = `${ originFor.left - fudgeX }px`;\n break;\n case CENTER:\n style.left = `${ ((originFor.left + originFor.right) / 2) - (content.width / 2) - fudgeX }px`;\n break;\n case RIGHT:\n style.left = `${ originFor.right + fudgeX - content.width }px`;\n // style.right = `${ screen.width - originFor.right - fudgeX }px`;\n break;\n }\n\n if ( positionY === MIDDLE && gapIf.middle < 0) {\n positionY = AUTO;\n }\n\n if ( positionY === AUTO ) {\n positionY = gapIf.top < 0 || gapIf.bottom * 1.5 > gapIf.top ? BOTTOM : TOP;\n } else if ( positionY === TOP && gapIf.top < 0 ) {\n positionY = BOTTOM;\n } else if ( positionY === BOTTOM && gapIf.bottom < 0 ) {\n positionY = TOP;\n }\n\n switch ( positionY ) {\n case TOP:\n style.top = `${ originFor.top + fudgeY - content.height }px`;\n break;\n case CENTER:\n style.top = `${ ((originFor.top + originFor.bottom) / 2) + fudgeY - content.height }px`;\n break;\n case BOTTOM:\n style.top = `${ originFor.bottom - fudgeY }px`;\n break;\n }\n\n // console.log(positionX, positionY, style);\n\n return style;\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"select\",staticClass:\"labeled-select\",class:{\n disabled: _vm.isView || _vm.disabled,\n focused: _vm.focused,\n [_vm.mode]: true,\n [_vm.status]: _vm.status,\n taggable: _vm.$attrs.taggable,\n taggable: _vm.$attrs.multiple,\n hoverable: _vm.hoverTooltip,\n 'compact-input': _vm.isCompact,\n 'no-label': !_vm.hasLabel,\n },on:{\"click\":_vm.focusSearch,\"focus\":_vm.focusSearch}},[_c('div',{class:{ 'labeled-container': true, raised: _vm.raised, empty: _vm.empty, [_vm.mode]: true },style:({ border: 'none' })},[(_vm.hasLabel)?_c('label',[(_vm.labelKey)?_c('t',{attrs:{\"k\":_vm.labelKey}}):(_vm.label)?[_vm._v(_vm._s(_vm.label))]:_vm._e(),(_vm.requiredField)?_c('span',{staticClass:\"required\"},[_vm._v(\"*\")]):_vm._e()],2):_vm._e()]),_c('v-select',_vm._g(_vm._b({ref:\"select-input\",staticClass:\"inline\",class:{ 'no-label': !(_vm.label || '').length },attrs:{\"append-to-body\":_vm.appendToBody,\"calculate-position\":_vm.positionDropdown,\"clearable\":_vm.clearable,\"disabled\":_vm.isView || _vm.disabled || _vm.loading,\"get-option-key\":_vm.getOptionKey,\"get-option-label\":(opt) => _vm.getOptionLabel(opt),\"label\":_vm.optionLabel,\"options\":_vm.options,\"map-keydown\":_vm.mappedKeys,\"placeholder\":_vm.placeholder,\"reduce\":(x) => _vm.reduce(x),\"searchable\":_vm.isSearchable,\"selectable\":_vm.selectable,\"value\":_vm.value != null && !_vm.loading ? _vm.value : '',\"dropdown-should-open\":_vm.dropdownShouldOpen},on:{\"search:blur\":_vm.onBlur,\"search:focus\":_vm.onFocus,\"search\":_vm.onSearch,\"open\":_vm.onOpen,\"close\":_vm.onClose,\"option:selected\":function($event){return _vm.$emit('selecting', $event)}},scopedSlots:_vm._u([{key:\"option\",fn:function(option){return [(option.kind === 'group')?[_c('div',{staticClass:\"vs__option-kind-group\"},[_c('b',[_vm._v(_vm._s(_vm.getOptionLabel(option)))]),(option.badge)?_c('div',[_vm._v(\" \"+_vm._s(option.badge)+\" \")]):_vm._e()])]:(option.kind === 'divider')?[_c('hr')]:(option.kind === 'highlighted')?[_c('div',{staticClass:\"option-kind-highlighted\"},[_vm._v(\" \"+_vm._s(option.label)+\" \")])]:_c('div',{on:{\"mousedown\":(e) => _vm.onClickOption(option, e)}},[_vm._v(\" \"+_vm._s(_vm.getOptionLabel(option))+\" \"),(option.error)?_c('i',{staticClass:\"icon icon-warning pull-right\",staticStyle:{\"font-size\":\"20px\"}}):_vm._e()])]}},_vm._l((_vm.$scopedSlots),function(_,slot){return {key:slot,fn:function(scope){return [_vm._t(slot,null,null,scope)]}}})],null,true)},'v-select',_vm.$attrs,false),_vm.$listeners)),(_vm.loading)?_c('i',{staticClass:\"icon icon-spinner icon-spin icon-lg\"}):_vm._e(),(_vm.tooltip && !_vm.focused)?_c('LabeledTooltip',{attrs:{\"hover\":_vm.hoverTooltip,\"value\":_vm.tooltip,\"status\":_vm.status}}):_vm._e(),(!!_vm.validationMessage)?_c('LabeledTooltip',{attrs:{\"hover\":_vm.hoverTooltip,\"value\":_vm.validationMessage}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\n\nexport default Vue.extend({\n props: {\n compact: {\n type: Boolean,\n default: null\n },\n label: {\n type: String,\n default: null\n },\n\n labelKey: {\n type: String,\n default: null\n },\n },\n\n computed: {\n isCompact(): boolean {\n // Compact if explicitly set - otherwise compact if there is no label\n return this.compact !== null ? this.compact : !(this.label || this.labelKey);\n }\n }\n});\n","/**\n * Sets the width of a DOM element. Adapted from [youmightnotneedjquery.com](https://youmightnotneedjquery.com/#set_width)\n * @param {Element} el - The target DOM element\n * @param {function | string | number} val - The desired width represented as a Number\n */\nexport function setWidth(el, val) {\n if (!el) {\n return;\n }\n\n if (typeof val === 'function') {\n val = val();\n }\n\n if (typeof val === 'string') {\n el.style.width = val;\n\n return;\n }\n\n el.style.width = `${ val }px`;\n}\n\n/**\n * Gets the width of a DOM element. Adapted from [youmightnotneedjquery.com](https://youmightnotneedjquery.com/#get_width)\n * @param {Element} el - The target DOM element\n * @returns Number representing the width for the provided element\n */\nexport function getWidth(el) {\n if (!el || !el.length) {\n return;\n }\n\n if (el.length) {\n return parseFloat(getComputedStyle(el[0]).width.replace('px', ''));\n } else {\n return parseFloat(getComputedStyle(el).width.replace('px', ''));\n }\n}\n","import Vue from 'vue';\nimport { _EDIT, _VIEW } from '@shell/config/query-params';\nimport { getWidth, setWidth } from '@shell/utils/width';\n\ninterface LabeledFormElement {\n raised: boolean;\n focused: boolean;\n blurred: number | null;\n}\n\nexport default Vue.extend({\n inheritAttrs: false,\n\n props: {\n mode: {\n type: String,\n default: _EDIT,\n },\n\n label: {\n type: String,\n default: null\n },\n\n labelKey: {\n type: String,\n default: null\n },\n\n placeholderKey: {\n type: String,\n default: null\n },\n\n tooltip: {\n type: [String, Object],\n default: null\n },\n\n hoverTooltip: {\n type: Boolean,\n default: true,\n },\n\n tooltipKey: {\n type: String,\n default: null\n },\n\n required: {\n type: Boolean,\n default: false,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n placeholder: {\n type: [String, Number],\n default: ''\n },\n\n value: {\n type: [String, Number, Object],\n default: ''\n },\n\n options: {\n default: null,\n type: Array\n },\n\n searchable: {\n default: false,\n type: Boolean\n },\n\n rules: {\n default: () => [],\n type: Array,\n // we only want functions in the rules array\n validator: (rules: any) => rules.every((rule: any) => ['function'].includes(typeof rule))\n }\n },\n\n data(): LabeledFormElement {\n return {\n raised: this.mode === _VIEW || !!`${ this.value }`,\n focused: false,\n blurred: null,\n };\n },\n\n computed: {\n requiredField(): boolean {\n // using \"any\" for a type on \"rule\" here is dirty but the use of the optional chaining operator makes it safe for what we're doing here.\n return (this.required || this.rules.some((rule: any): boolean => rule?.name === 'required'));\n },\n empty(): boolean {\n return !!`${ this.value }`;\n },\n\n isView(): boolean {\n return this.mode === _VIEW;\n },\n\n isDisabled(): boolean {\n return this.disabled || this.isView;\n },\n\n isSearchable(): boolean {\n const { searchable } = this;\n const options = ( this.options || [] );\n\n if (searchable || options.length >= 10) {\n return true;\n }\n\n return false;\n },\n validationMessage(): string | undefined {\n // we want to grab the required rule passed in if we can but if it's not there then we can just grab it from the formRulesGenerator\n const requiredRule = this.rules.find((rule: any) => rule?.name === 'required') as Function;\n const ruleMessages = [];\n const value = this?.value;\n\n if (requiredRule && this.blurred && !this.focused) {\n const message = requiredRule(value);\n\n if (!!message) {\n return message;\n }\n }\n\n for (const rule of this.rules as Function[]) {\n const message = rule(value);\n\n if (!!message && rule.name !== 'required') { // we're catching 'required' above so we can ignore it here\n ruleMessages.push(message);\n }\n }\n if (ruleMessages.length > 0 && (this.blurred || this.focused)) {\n return ruleMessages.join(', ');\n } else {\n return undefined;\n }\n }\n },\n\n methods: {\n resizeHandler() {\n // since the DD is positioned there is no way to 'inherit' the size of the input, this calcs the size of the parent and set the dd width if it is smaller. If not let it grow with the regular styles\n this.$nextTick(() => {\n const DD = (this.$refs.select as HTMLElement).querySelector('ul.vs__dropdown-menu');\n\n const selectWidth = getWidth(this.$refs.select as Element) || 0;\n const dropWidth = getWidth(DD as Element) || 0;\n\n if (dropWidth < selectWidth) {\n setWidth(DD as Element, selectWidth);\n }\n });\n },\n onFocus() {\n this.$emit('on-focus');\n\n return this.onFocusLabeled();\n },\n\n onFocusLabeled() {\n this.raised = true;\n this.focused = true;\n },\n\n onBlur() {\n this.$emit('on-blur');\n\n return this.onBlurLabeled();\n },\n\n onBlurLabeled() {\n this.focused = false;\n\n if ( !this.value ) {\n this.raised = false;\n }\n\n this.blurred = Date.now();\n }\n }\n});\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{ref:\"container\",staticClass:\"labeled-tooltip\",class:{[_vm.status]: true, hoverable: _vm.hover}},[(_vm.hover)?[_c('i',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.value.content ? { ...{content: _vm.value.content, classes: [`tooltip-${_vm.status}`]}, ..._vm.value } : _vm.value),expression:\"value.content ? { ...{content: value.content, classes: [`tooltip-${status}`]}, ...value } : value\"}],staticClass:\"icon status-icon\",class:{'hover':!_vm.value, [_vm.iconClass]: true}})]:[_c('i',{staticClass:\"icon status-icon\",class:{'hover':!_vm.value}}),(_vm.value)?_c('div',{staticClass:\"tooltip\",attrs:{\"x-placement\":\"bottom\"}},[_c('div',{staticClass:\"tooltip-arrow\"}),_c('div',{staticClass:\"tooltip-inner\"},[_vm._v(\" \"+_vm._s(_vm.value)+\" \")])]):_vm._e()]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport Vue from 'vue';\n\nexport default Vue.extend({\n props: {\n /**\n * The Labeled Tooltip value.\n */\n value: {\n type: [String, Object],\n default: null\n },\n\n /**\n * The status for the Labeled Tooltip. Controls the Labeled Tooltip class.\n * @values info, success, warning, error\n */\n status: {\n type: String,\n default: 'error'\n },\n\n /**\n * Displays the Labeled Tooltip on mouse hover.\n */\n hover: {\n type: Boolean,\n default: true\n }\n },\n computed: {\n iconClass() {\n return this.status === 'error' ? 'icon-warning' : 'icon-info';\n }\n }\n});\n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledTooltip.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledTooltip.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./LabeledTooltip.vue?vue&type=template&id=6fc47e64&\"\nimport script from \"./LabeledTooltip.vue?vue&type=script&lang=ts&\"\nexport * from \"./LabeledTooltip.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./LabeledTooltip.vue?vue&type=style&index=0&id=6fc47e64&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/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","export function onClickOption(option, e) {\r\n if (!this.$attrs.multiple) {\r\n return;\r\n }\r\n\r\n const getValue = (opt) => (this.optionKey ? this.get(opt, this.optionKey) : this.getOptionLabel(opt));\r\n const optionValue = getValue(option);\r\n const value = this.value || [];\r\n const optionIndex = value.findIndex((option) => getValue(option) === optionValue);\r\n\r\n if (optionIndex < 0) {\r\n return;\r\n }\r\n\r\n this.value.splice(optionIndex, 1);\r\n\r\n this.$emit('input', this.value);\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (this.closeOnSelect) {\r\n this.$refs['select-input'].closeSearchOptions();\r\n }\r\n}\r\n\r\n// This is a simpler positionner for the dropdown for a select control\r\n// We used to use popper for these, but it does not suppotr fractional pixel placements which\r\n// means the dropdown does not appear aligned to the control when placed in a column-based layout\r\nexport function calculatePosition(dropdownList, component, width, placement) {\r\n const selectEl = component.$parent.$el;\r\n const r = selectEl.getBoundingClientRect();\r\n const p = placement || 'bottom-start';\r\n const docHeight = document.body.offsetHeight;\r\n const bottom = docHeight - window.scrollY - r.y - 1;\r\n let top;\r\n\r\n // If placement is not at the top, then position if underneath\r\n if (!p.includes('top')) {\r\n // Position is bottom\r\n top = r.y + r.height - 1;\r\n\r\n // Check to see if the dropdown would fall off the screen, if so, try putting it above\r\n const end = top + dropdownList.offsetHeight;\r\n\r\n if (end > window.innerHeight) {\r\n top = undefined;\r\n } else {\r\n top += window.scrollY;\r\n }\r\n }\r\n\r\n if (!top) {\r\n dropdownList.style.bottom = `${ bottom }px`;\r\n dropdownList.classList.add('vs__dropdown-up');\r\n selectEl.classList.add('vs__dropdown-up');\r\n } else {\r\n dropdownList.style.top = `${ top }px`;\r\n dropdownList.classList.remove('vs__dropdown-up');\r\n selectEl.classList.remove('vs__dropdown-up');\r\n }\r\n\r\n dropdownList.style.left = `${ r.x }px`;\r\n dropdownList.style.width = 'min-content';\r\n dropdownList.style.minWidth = `${ r.width }px`;\r\n}\r\n","\n\n\n \n \n \n \n \n\n\n\n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabeledSelect.vue?vue&type=template&id=0abf511e&scoped=true&\"\nimport script from \"./LabeledSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./LabeledSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LabeledSelect.vue?vue&type=style&index=0&id=0abf511e&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0abf511e\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n \n \n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./THead.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./THead.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./THead.vue?vue&type=template&id=96d8a090&scoped=true&\"\nimport script from \"./THead.vue?vue&type=script&lang=js&\"\nexport * from \"./THead.vue?vue&type=script&lang=js&\"\nimport style0 from \"./THead.vue?vue&type=style&index=0&id=96d8a090&prod&lang=scss&scoped=true&\"\nimport style1 from \"./THead.vue?vue&type=style&index=1&id=96d8a090&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"96d8a090\",\n null\n \n)\n\nexport default component.exports","import { get } from '@shell/utils/object';\nimport { addObject, addObjects, isArray, removeAt } from '@shell/utils/array';\n\nexport const ADV_FILTER_ALL_COLS_VALUE = 'allcols';\nexport const ADV_FILTER_ALL_COLS_LABEL = 'All Columns';\nconst LABEL_IDENTIFIER = ':::islabel';\n\nexport default {\n data() {\n return {\n searchQuery: null,\n previousFilter: null,\n previousResult: null,\n };\n },\n\n computed: {\n searchFields() {\n const out = columnsToSearchField(this.columns);\n\n if ( this.extraSearchFields ) {\n addObjects(out, this.extraSearchFields);\n }\n\n return out;\n },\n\n /*\n subFields: computed('subHeaders.@each.{searchField,name}', 'extraSearchSubFields.[]', function() {\n let out = headersToSearchField(get(this, 'subHeaders'));\n\n return out.addObjects(get(this, 'extraSearchSubFields') || []);\n }),\n */\n filteredRows() {\n // PROP hasAdvancedFiltering comes from Advanced Filtering mixin (careful changing data var there...)\n if (!this.hasAdvancedFiltering) {\n return this.handleFiltering();\n } else {\n return this.handleAdvancedFiltering();\n }\n },\n },\n\n methods: {\n handleAdvancedFiltering() {\n this.subMatches = null;\n\n if (this.searchQuery.length) {\n const out = (this.arrangedRows || []).slice();\n\n const res = out.filter((row) => {\n return this.searchQuery.every((f) => {\n if (f.prop === ADV_FILTER_ALL_COLS_VALUE) {\n // advFilterSelectOptions comes from Advanced Filtering mixin\n // remove the All Columns option from the list so that we don't iterate over it\n const allCols = this.advFilterSelectOptions.slice(1);\n let searchFields = [];\n\n allCols.forEach((col) => {\n if (col.value.includes('[') && col.value.includes(']')) {\n searchFields = searchFields.concat(JSON.parse(col.value));\n } else {\n // this means we are on the presence of a label, which should be dealt\n // carefully because of object path such row.metadata.labels.\"app.kubernetes.io/managed-by\n const value = col.isLabel ? `${ col.label }${ LABEL_IDENTIFIER }` : col.value;\n\n searchFields.push(value);\n }\n });\n\n return handleStringSearch(searchFields, [f.value], row);\n } else {\n if (f.prop.includes('[') && f.prop.includes(']')) {\n return handleStringSearch(JSON.parse(f.prop), [f.value], row);\n }\n\n let prop = f.prop;\n\n // this means we are on the presence of a label, which should be dealt\n // carefully because of object path such row.metadata.labels.\"app.kubernetes.io/managed-by\"\n if (f.prop.includes('metadata.labels')) {\n prop = `${ f.label }${ LABEL_IDENTIFIER }`;\n }\n\n return handleStringSearch([prop], [f.value], row);\n }\n });\n });\n\n return res;\n }\n\n // return arrangedRows array if we don't have anything to search for...\n return this.arrangedRows;\n },\n\n handleFiltering() {\n const searchText = (this.searchQuery || '').trim().toLowerCase();\n let out;\n\n if ( searchText && this.previousResult && searchText.startsWith(this.previousFilter) ) {\n // If the new search is an addition to the last one, we can start with the same set of results as last time\n // and filter those down, since adding more searchText can only reduce the number of results.\n out = this.previousResult.slice();\n } else {\n this.previousResult = null;\n out = (this.arrangedRows || []).slice();\n }\n\n this.previousFilter = searchText;\n\n if ( !searchText.length ) {\n this.subMatches = null;\n this.previousResult = null;\n\n return out;\n }\n\n const searchFields = this.searchFields;\n const searchTokens = searchText.split(/\\s*[, ]\\s*/);\n const subSearch = this.subSearch;\n const subFields = this.subFields;\n const subMatches = {};\n\n for ( let i = out.length - 1 ; i >= 0 ; i-- ) {\n const row = out[i];\n let hits = 0;\n let mainFound = true;\n\n mainFound = handleStringSearch(searchFields, searchTokens, row);\n\n if ( subFields && subSearch) {\n const subRows = row[subSearch] || [];\n\n for ( let k = subRows.length - 1 ; k >= 0 ; k-- ) {\n let subFound = true;\n\n subFound = handleStringSearch(subFields, searchTokens, row);\n\n if ( subFound ) {\n hits++;\n }\n }\n\n subMatches[get(row, this.keyField)] = hits;\n }\n\n if ( !mainFound && hits === 0 ) {\n removeAt(out, i);\n }\n }\n\n this.subMatches = subMatches;\n this.previousResult = out;\n\n return out;\n }\n },\n\n watch: {\n arrangedRows(q) {\n // The rows changed so the old filter result is no longer useful\n this.previousResult = null;\n }\n },\n};\n\nfunction columnsToSearchField(columns) {\n const out = [];\n\n (columns || []).forEach((column) => {\n const field = column.search;\n\n if ( field ) {\n if ( typeof field === 'string' ) {\n addObject(out, field);\n } else if ( isArray(field) ) {\n addObjects(out, field);\n }\n } else if ( field === false ) {\n // Don't add the name\n } else {\n // Use value/name as the default\n addObject(out, column.value || column.name);\n }\n });\n\n return out.filter((x) => !!x);\n}\n\nconst ipLike = /^[0-9a-f\\.:]+$/i;\n\nfunction handleStringSearch(searchFields, searchTokens, row) {\n for ( let j = 0 ; j < searchTokens.length ; j++ ) {\n let expect = true;\n let token = searchTokens[j];\n\n if ( token.substr(0, 1) === '!' ) {\n expect = false;\n token = token.substr(1);\n }\n\n if ( token && matches(searchFields, token, row) !== expect ) {\n return false;\n }\n\n return true;\n }\n}\n\nfunction matches(fields, token, item) {\n for ( let field of fields ) {\n if ( !field ) {\n continue;\n }\n\n // some items might not even have metadata.labels or metadata.labels.something... ignore those items. Nothing to filter by\n if (typeof field !== 'function' &&\n field.includes(LABEL_IDENTIFIER) &&\n (!item.metadata.labels || !item.metadata.labels[field.replace(LABEL_IDENTIFIER, '')])) {\n continue;\n }\n\n let modifier;\n let val;\n\n if (typeof field === 'function') {\n val = field(item);\n } else if (field.includes(LABEL_IDENTIFIER)) {\n val = item.metadata.labels[field.replace(LABEL_IDENTIFIER, '')];\n } else {\n const idx = field.indexOf(':');\n\n if ( idx > 0 ) {\n modifier = field.substr(idx + 1);\n field = field.substr(0, idx);\n }\n\n if ( field.includes('.') ) {\n val = get(item, field);\n } else {\n val = item[field];\n }\n }\n\n if ( val === undefined ) {\n continue;\n }\n\n val = (`${ val }`).toLowerCase();\n if ( !val ) {\n continue;\n }\n\n if ( !modifier ) {\n if ( val.includes((`${ token }`).toLowerCase()) ) {\n return true;\n }\n } else if ( modifier === 'exact' ) {\n if ( val === token ) {\n return true;\n }\n } else if ( modifier === 'ip' ) {\n const tokenMayBeIp = ipLike.test(token);\n\n if ( tokenMayBeIp ) {\n const re = new RegExp(`(?:^|\\\\.)${ token }(?:\\\\.|$)`);\n\n if ( re.test(val) ) {\n return true;\n }\n }\n } else if ( modifier === 'prefix' ) {\n if ( val.indexOf(token) === 0) {\n return true;\n }\n }\n }\n\n return false;\n}\n","import { sortBy } from '@shell/utils/sort';\nimport { addObject } from '@shell/utils/array';\n\nexport default {\n computed: {\n sortFields() {\n let fromGroup = ( this.groupBy ? this.groupSort || this.groupBy : null) || [];\n let fromColumn = [];\n\n const column = (this.columns || this.headers).find((x) => x && x.name && x.name.toLowerCase() === this.sortBy.toLowerCase());\n\n if ( this.sortBy && column && column.sort ) {\n fromColumn = column.sort;\n }\n\n if ( !Array.isArray(fromGroup) ) {\n fromGroup = [fromGroup];\n }\n\n if ( !Array.isArray(fromColumn) ) {\n fromColumn = [fromColumn];\n }\n\n const out = [...fromGroup, ...fromColumn];\n\n addObject(out, 'nameSort');\n addObject(out, 'id');\n\n return out;\n },\n\n arrangedRows() {\n let key;\n\n if ( this.sortGenerationFn ) {\n key = `${ this.sortGenerationFn.apply(this) }/${ this.rows.length }/${ this.descending }/${ this.sortFields.join(',') }`;\n\n if ( this.cacheKey === key ) {\n return this.cachedRows;\n }\n }\n\n const out = sortBy(this.rows, this.sortFields, this.descending);\n\n if ( key ) {\n this.cacheKey = key;\n this.cachedRows = out;\n }\n\n return out;\n },\n },\n\n data() {\n let sortBy = null;\n\n this._defaultSortBy = this.defaultSortBy;\n\n // Try to find a reasonable default sort\n if ( !this._defaultSortBy ) {\n const markedColumn = this.headers.find((x) => !!x.defaultSort);\n const nameColumn = this.headers.find( (x) => x.name === 'name');\n\n if ( markedColumn ) {\n this._defaultSortBy = markedColumn.name;\n } else if ( nameColumn ) {\n // Use the name column if there is one\n this._defaultSortBy = nameColumn.name;\n } else {\n // The first column that isn't state\n const first = this.headers.filter( (x) => x.name !== 'state' )[0];\n\n if ( first ) {\n this._defaultSortBy = first.name;\n } else {\n // I give up\n this._defaultSortBy = 'id';\n }\n }\n }\n\n // If the sort column doesn't exist or isn't specified, use default\n if ( !sortBy || !this.headers.find((x) => x.name === sortBy ) ) {\n sortBy = this._defaultSortBy;\n }\n\n return {\n sortBy,\n descending: false,\n cachedRows: null,\n cacheKey: null,\n };\n },\n\n methods: {\n changeSort(sort, desc) {\n this.sortBy = sort;\n this.descending = desc;\n\n // Always go back to the first page when the sort is changed\n this.setPage(1);\n },\n },\n};\n","import { ROWS_PER_PAGE } from '@shell/store/prefs';\n\nexport default {\n computed: {\n indexFrom() {\n return Math.max(0, 1 + this.perPage * (this.page - 1));\n },\n\n indexTo() {\n return Math.min(this.filteredRows.length, this.indexFrom + this.perPage - 1);\n },\n\n totalPages() {\n return Math.ceil(this.filteredRows.length / this.perPage );\n },\n\n showPaging() {\n return !this.loading && this.paging && this.totalPages > 1;\n },\n\n pagingDisplay() {\n const opt = {\n ...(this.pagingParams || {}),\n\n count: this.filteredRows.length,\n pages: this.totalPages,\n from: this.indexFrom,\n to: this.indexTo,\n };\n\n return this.$store.getters['i18n/t'](this.pagingLabel, opt);\n },\n\n pagedRows() {\n if ( this.paging ) {\n return this.filteredRows.slice(this.indexFrom - 1, this.indexTo);\n } else {\n return this.filteredRows;\n }\n }\n },\n\n data() {\n const perPage = this.getPerPage();\n\n return { page: 1, perPage };\n },\n\n watch: {\n pagedRows() {\n // Go to the last page if we end up \"past\" the last page because the table changed\n\n const from = this.indexFrom;\n const last = this.filteredRows.length;\n\n if ( this.totalPages > 0 && this.page > 1 && from > last ) {\n this.setPage(this.totalPages);\n }\n }\n },\n\n methods: {\n getPerPage() {\n // perPage can not change while the list is displayed\n let out = this.rowsPerPage || 0;\n\n if ( out <= 0 ) {\n out = parseInt(this.$store.getters['prefs/get'](ROWS_PER_PAGE), 10) || 0;\n }\n\n // This should ideally never happen, but the preference value could be invalid, so return something...\n if ( out <= 0 ) {\n out = 10;\n }\n\n return out;\n },\n\n setPage(num) {\n if (this.page === num) {\n return;\n }\n\n this.page = num;\n },\n\n goToPage(which) {\n let page;\n\n switch (which) {\n case 'first':\n page = 1;\n break;\n case 'prev':\n page = Math.max(1, this.page - 1 );\n break;\n case 'next':\n page = Math.min(this.totalPages, this.page + 1 );\n break;\n case 'last':\n page = this.totalPages;\n break;\n }\n\n this.setPage(page);\n }\n }\n};\n","import { get } from '@shell/utils/object';\n\nexport default {\n computed: {\n groupedRows() {\n const groupKey = this.groupBy;\n const refKey = this.groupRef || groupKey;\n\n if ( !groupKey) {\n return [{\n key: 'default',\n ref: 'default',\n rows: this.pagedRows,\n }];\n }\n\n const out = [];\n const map = {};\n\n for ( const obj of this.pagedRows ) {\n const key = get(obj, groupKey) || '';\n const ref = get(obj, refKey);\n let entry = map[key];\n\n if ( entry ) {\n entry.rows.push(obj);\n } else {\n entry = {\n key,\n ref,\n rows: [obj]\n };\n map[key] = entry;\n out.push(entry);\n }\n }\n\n return out;\n }\n }\n};\n","import debounce from 'lodash/debounce';\n\n// Use a visible display type to reduce flickering\nconst displayType = 'inline-block';\n\nexport default {\n\n data() {\n return {\n bulkActionsClass: 'bulk',\n bulkActionClass: 'bulk-action',\n bulkActionsDropdownClass: 'bulk-actions-dropdown',\n bulkActionAvailabilityClass: 'action-availability',\n\n hiddenActions: [],\n\n updateHiddenBulkActions: debounce(this.protectedUpdateHiddenBulkActions, 10)\n };\n },\n\n beforeDestroy() {\n window.removeEventListener('resize', this.onWindowResize);\n },\n\n mounted() {\n window.addEventListener('resize', this.onWindowResize);\n this.updateHiddenBulkActions();\n },\n\n watch: {\n selectedRows() {\n this.updateHiddenBulkActions();\n },\n keyedAvailableActions() {\n this.updateHiddenBulkActions();\n },\n },\n\n computed: {\n availableActions() {\n return this.bulkActionsForSelection.filter((act) => !act.external);\n },\n\n keyedAvailableActions() {\n return this.availableActions.map((aa) => aa.action);\n },\n\n selectedRowsText() {\n if (!this.selectedRows.length) {\n return null;\n }\n\n return this.t('sortableTable.actionAvailability.selected', { actionable: this.selectedRows.length });\n },\n\n // Shows a tooltip if the bulk action that the user is hovering over can not be applied to all selected rows\n actionTooltip() {\n if (!this.selectedRows.length || !this.actionOfInterest) {\n return null;\n }\n\n const runnableTotal = this.selectedRows.filter(this.canRunBulkActionOfInterest).length;\n\n if (runnableTotal === this.selectedRows.length) {\n return null;\n }\n\n return this.t('sortableTable.actionAvailability.some', {\n actionable: runnableTotal,\n total: this.selectedRows.length,\n });\n },\n },\n\n methods: {\n onWindowResize() {\n this.updateHiddenBulkActions();\n this.onScroll();\n },\n\n /**\n * Determine if any actions wrap over to a new line, if so group them into a dropdown instead\n */\n protectedUpdateHiddenBulkActions() {\n if (!this.$refs.container) {\n return;\n }\n\n const actionsContainer = this.$refs.container.querySelector(`.${ this.bulkActionsClass }`);\n const actionsDropdown = this.$refs.container.querySelector(`.${ this.bulkActionsDropdownClass }`);\n\n if (!actionsContainer || !actionsDropdown) {\n return;\n }\n\n const actionsContainerWidth = actionsContainer.offsetWidth;\n const actionsHTMLCollection = this.$refs.container.querySelectorAll(`.${ this.bulkActionClass }`);\n const actions = Array.from(actionsHTMLCollection || []);\n\n // Determine if the 'x selected' label should show and it's size\n const selectedRowsText = this.$refs.container.querySelector(`.${ this.bulkActionAvailabilityClass }`);\n let selectedRowsTextWidth = 0;\n\n if (this.selectedRowsText) {\n if (selectedRowsText) {\n selectedRowsText.style.display = displayType;\n selectedRowsTextWidth = selectedRowsText.offsetWidth;\n } else {\n selectedRowsText.style.display = 'none;';\n }\n }\n\n this.hiddenActions = [];\n\n let cumulativeWidth = 0;\n let showActionsDropdown = false;\n let totalAvailableWidth = actionsContainerWidth - selectedRowsTextWidth;\n\n // Loop through all actions to determine if some exceed the available space in the row, if so hide them and instead show in a dropdown\n for (let i = 0; i < actions.length; i++) {\n const ba = actions[i];\n\n ba.style.display = displayType;\n const actionWidth = ba.offsetWidth;\n\n cumulativeWidth += actionWidth + 15;\n if (cumulativeWidth >= totalAvailableWidth) {\n // There are too many actions so the drop down will be visible.\n if (!showActionsDropdown) {\n // If we haven't previously enabled the drop down...\n actionsDropdown.style.display = displayType;\n // By showing the drop down some previously visible actions may now be hidden, so start the process again\n // ... except taking into account the width of drop down width in the available space\n i = -1;\n cumulativeWidth = 0;\n showActionsDropdown = true;\n totalAvailableWidth = actionsContainerWidth - actionsDropdown.offsetWidth - selectedRowsTextWidth;\n } else {\n // Collate the actions in an array and hide in the normal row\n const id = ba.attributes.getNamedItem('id').value;\n\n this.hiddenActions.push(this.availableActions.find((aa) => aa.action === id));\n ba.style.display = 'none';\n }\n }\n }\n\n if (!showActionsDropdown) {\n actionsDropdown.style.display = 'none';\n }\n }\n }\n};\n","import { ADV_FILTER_ALL_COLS_VALUE, ADV_FILTER_ALL_COLS_LABEL } from './filtering';\n\nconst DEFAULT_ADV_FILTER_COLS_VALUE = ADV_FILTER_ALL_COLS_VALUE;\n\nexport default {\n props: {\n /**\n * Group value\n * To be used on the THead component when adv filtering is present\n */\n group: {\n type: String,\n default: () => ''\n },\n /**\n * Group options\n * All of the grouping options available to be used on the THead component when adv filtering is present\n */\n groupOptions: {\n type: Array,\n default: () => []\n },\n /**\n * Flag that controls visibility of advanced filtering feature\n */\n hasAdvancedFiltering: {\n type: Boolean,\n default: false\n },\n /**\n * Flag that controls visibility of labels as possibe toggable cols to be displayed on the Sortable Table\n */\n advFilterHideLabelsAsCols: {\n type: Boolean,\n default: false\n },\n /**\n * Flag that prevents filtering by labels\n */\n advFilterPreventFilteringLabels: {\n type: Boolean,\n default: false\n },\n },\n data() {\n return {\n columnOptions: [],\n colOptionsWatcher: null,\n advancedFilteringVisibility: false,\n advancedFilteringValues: [],\n advFilterSearchTerm: null,\n advFilterSelectedProp: DEFAULT_ADV_FILTER_COLS_VALUE,\n advFilterSelectedLabel: ADV_FILTER_ALL_COLS_LABEL,\n column: null,\n };\n },\n\n mounted() {\n if (this.hasAdvancedFiltering) {\n // trigger to first populate the cols options for filters\n this.updateColsOptions();\n }\n },\n\n watch: {\n advancedFilteringValues() {\n // passing different dummy args to make sure update is triggered\n this.watcherUpdateLiveAndDelayed(true, false);\n },\n advancedFilteringVisibility(neu) {\n if (neu) {\n // check if user clicked outside the advanced filter box\n window.addEventListener('click', this.onClickOutside);\n\n // update filtering options and toggable cols every time dropdown is open\n this.updateColsOptions();\n } else {\n // unregister click event\n window.removeEventListener('click', this.onClickOutside);\n }\n }\n },\n\n computed: {\n advFilterSelectOptions() {\n return this.columnOptions.filter((c) => c.isFilter && !c.preventFiltering);\n },\n\n advGroupOptions() {\n return this.groupOptions.map((item) => {\n return {\n label: this.t(item.tooltipKey),\n value: item.value\n };\n });\n },\n },\n\n methods: {\n handleColsVisibilyAndFiltering(cols) {\n const allCols = cols;\n\n this.columnOptions.forEach((advCol) => {\n if (advCol.isTableOption) {\n const index = allCols.findIndex((col) => col.name === advCol.name);\n\n if (index !== -1) {\n allCols[index].isColVisible = advCol.isColVisible;\n allCols[index].isFilter = advCol.isFilter;\n } else {\n allCols.push(advCol);\n }\n }\n });\n\n return allCols;\n },\n // advanced filtering methods\n setColsOptions() {\n let opts = [];\n const rowLabels = [];\n const headerProps = [];\n\n // Filter out any columns that are too heavy to show for large page sizes\n const filteredHeaders = this.headers.slice().filter((c) => (!c.maxPageSize || (c.maxPageSize && c.maxPageSize >= this.perPage)));\n\n // add table cols from config (headers)\n filteredHeaders.forEach((prop) => {\n const name = prop.name;\n const label = prop.labelKey ? this.t(`${ prop.labelKey }`) : prop.label;\n const isFilter = !!((!Object.keys(prop).includes('search') || prop.search));\n let sortVal = prop.sort;\n const valueProp = prop.valueProp || prop.value;\n let value = null;\n let isColVisible = true;\n\n if (prop.sort && valueProp) {\n if (typeof prop.sort === 'string') {\n sortVal = prop.sort.includes(':') ? [prop.sort.split(':')[0]] : [prop.sort];\n }\n\n if (!sortVal.includes(valueProp)) {\n value = JSON.stringify(sortVal.concat([valueProp]));\n } else {\n value = JSON.stringify([valueProp]);\n }\n } else if (valueProp) {\n value = JSON.stringify([valueProp]);\n } else {\n value = null;\n }\n\n // maintain current visibility of cols if they exist already\n if (this.columnOptions?.length) {\n const opt = this.columnOptions.find((colOpt) => colOpt.name === name && colOpt.label === label);\n\n if (opt) {\n isColVisible = opt.isColVisible;\n }\n }\n\n headerProps.push({\n name,\n label,\n value,\n isFilter,\n isTableOption: true,\n isColVisible\n });\n });\n\n // add labels as table cols\n if (this.rows.length) {\n this.rows.forEach((row) => {\n if (row.metadata?.labels && Object.keys(row.metadata?.labels).length) {\n Object.keys(row.metadata?.labels).forEach((label) => {\n const res = {\n name: label,\n label,\n value: `metadata.labels.${ label }`,\n isFilter: true,\n isTableOption: true,\n isColVisible: false,\n isLabel: true,\n preventFiltering: this.advFilterPreventFilteringLabels,\n preventColToggle: this.advFilterHideLabelsAsCols\n };\n\n // maintain current visibility of cols if they exist already\n if (this.columnOptions?.length) {\n const opt = this.columnOptions.find((colOpt) => colOpt.name === label && colOpt.label === label);\n\n if (opt) {\n res.isColVisible = opt.isColVisible;\n }\n }\n\n if (!rowLabels.filter((row) => row.label === label).length) {\n rowLabels.push(res);\n }\n });\n }\n });\n }\n\n opts = headerProps.concat(rowLabels);\n\n // add find on all cols option...\n if (opts.length) {\n opts.unshift({\n name: ADV_FILTER_ALL_COLS_LABEL,\n label: ADV_FILTER_ALL_COLS_LABEL,\n value: ADV_FILTER_ALL_COLS_VALUE,\n isFilter: true,\n isTableOption: false\n });\n }\n\n return opts;\n },\n addAdvancedFilter() {\n // set new advanced filter\n if (this.advFilterSelectedProp && this.advFilterSearchTerm) {\n this.advancedFilteringValues.push({\n prop: this.advFilterSelectedProp,\n value: this.advFilterSearchTerm,\n label: this.advFilterSelectedLabel\n });\n\n this.eventualSearchQuery = this.advancedFilteringValues;\n\n this.advancedFilteringVisibility = false;\n this.advFilterSelectedProp = DEFAULT_ADV_FILTER_COLS_VALUE;\n this.advFilterSelectedLabel = ADV_FILTER_ALL_COLS_LABEL;\n this.advFilterSearchTerm = null;\n }\n },\n clearAllAdvancedFilters() {\n this.advancedFilteringValues = [];\n this.eventualSearchQuery = this.advancedFilteringValues;\n\n this.advancedFilteringVisibility = false;\n this.advFilterSelectedProp = DEFAULT_ADV_FILTER_COLS_VALUE;\n this.advFilterSelectedLabel = ADV_FILTER_ALL_COLS_LABEL;\n this.advFilterSearchTerm = null;\n },\n clearAdvancedFilter(index) {\n this.advancedFilteringValues.splice(index, 1);\n this.eventualSearchQuery = this.advancedFilteringValues;\n },\n onClickOutside(event) {\n const advFilterBox = this.$refs['advanced-filter-group'];\n\n if (!advFilterBox || advFilterBox.contains(event.target)) {\n return;\n }\n this.advancedFilteringVisibility = false;\n },\n updateColsOptions() {\n this.columnOptions = this.setColsOptions();\n },\n\n // cols visibility\n changeColVisibility(colData) {\n const index = this.columnOptions.findIndex((col) => col.label === colData.label);\n\n if (index !== -1) {\n this.columnOptions[index].isColVisible = colData.value;\n }\n },\n },\n};\n","\n\n\n\n \n\n \n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=3b0138b8&scoped=true&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=3b0138b8&prod&lang=scss&scoped=true&\"\nimport style1 from \"./index.vue?vue&type=style&index=1&id=3b0138b8&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3b0138b8\",\n null\n \n)\n\nexport default component.exports","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"checkbox-outer-container\",attrs:{\"data-checkbox-ctrl\":\"\"}},[_c('label',{staticClass:\"checkbox-container\",class:{ 'disabled': _vm.isDisabled},attrs:{\"for\":_vm.id},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;$event.preventDefault();return _vm.clicked($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;$event.preventDefault();return _vm.clicked($event)}],\"click\":function($event){return _vm.clicked($event)}}},[_c('input',{attrs:{\"type\":\"checkbox\",\"tabindex\":-1,\"name\":_vm.id},domProps:{\"checked\":_vm.isChecked,\"value\":_vm.valueWhenTrue},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();}}}),_c('span',{staticClass:\"checkbox-custom\",class:{indeterminate: _vm.indeterminate},attrs:{\"tabindex\":_vm.isDisabled ? -1 : 0,\"aria-label\":_vm.label,\"aria-checked\":!!_vm.value,\"role\":\"checkbox\"}}),(_vm.$slots.label || _vm.label || _vm.labelKey || _vm.tooltipKey || _vm.tooltip)?_c('span',{staticClass:\"checkbox-label\",class:{ 'checkbox-primary': _vm.primary }},[_vm._t(\"label\",function(){return [(_vm.labelKey)?_c('t',{attrs:{\"k\":_vm.labelKey,\"raw\":true}}):(_vm.label)?[_vm._v(_vm._s(_vm.label))]:_vm._e(),(_vm.tooltipKey)?_c('i',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.t(_vm.tooltipKey)),expression:\"t(tooltipKey)\"}],staticClass:\"checkbox-info icon icon-info icon-lg\"}):(_vm.tooltip)?_c('i',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],staticClass:\"checkbox-info icon icon-info icon-lg\"}):_vm._e()]})],2):_vm._e()]),(_vm.descriptionKey || _vm.description)?_c('div',{staticClass:\"checkbox-outer-container-description\"},[(_vm.descriptionKey)?_c('t',{attrs:{\"k\":_vm.descriptionKey}}):(_vm.description)?[_vm._v(\" \"+_vm._s(_vm.description)+\" \")]:_vm._e()],2):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport Vue, { PropType } from 'vue';\nimport { _EDIT, _VIEW } from '@shell/config/query-params';\nimport { addObject, removeObject } from '@shell/utils/array';\nimport cloneDeep from 'lodash/cloneDeep';\n\nexport default Vue.extend({\n name: 'Checkbox',\n\n props: {\n /**\n * The checkbox value.\n */\n value: {\n type: [Boolean, Array, String] as PropType,\n default: false\n },\n\n /**\n * The checkbox label.\n */\n label: {\n type: String,\n default: null\n },\n\n /**\n * The i18n key to use for the checkbox label.\n */\n labelKey: {\n type: String,\n default: null\n },\n\n /**\n * Random ID generated for binding label to input.\n */\n id: {\n type: String,\n default: String(Math.random() * 1000)\n },\n\n /**\n * Disable the checkbox.\n */\n disabled: {\n type: Boolean,\n default: false\n },\n\n /**\n * Display an indeterminate state. Useful for cases where a checkbox might\n * be the parent to child checkboxes, and we need to show that a subset of\n * children are checked.\n */\n indeterminate: {\n type: Boolean,\n default: false\n },\n\n /**\n * The checkbox editing mode.\n * @values _EDIT, _VIEW\n */\n mode: {\n type: String,\n default: _EDIT\n },\n\n /**\n * The contents of the checkbox tooltip.\n */\n tooltip: {\n type: [String, Object],\n default: null\n },\n\n /**\n * The i18n key to use for the checkbox tooltip.\n */\n tooltipKey: {\n type: String,\n default: null\n },\n\n /**\n * A custom value to use when the checkbox is checked.\n */\n valueWhenTrue: {\n type: [Boolean, String, Number],\n default: true\n },\n\n /**\n * The i18n key to use for the checkbox description.\n */\n descriptionKey: {\n type: String,\n default: null\n },\n\n /**\n * The checkbox description.\n */\n description: {\n type: String,\n default: null\n },\n\n /**\n * Primary checkbox displays label so that it stands out more\n */\n primary: {\n type: Boolean,\n default: false\n },\n },\n\n computed: {\n /**\n * Determines if the checkbox is disabled.\n * @returns boolean: True when the disabled prop is true or when mode is\n * View.\n */\n isDisabled(): boolean {\n return (this.disabled || this.mode === _VIEW);\n },\n /**\n * Determines if the checkbox is checked when using custom values or\n * multiple values.\n * @returns boolean: True when at least one value is true in a collection or\n * when value matches `this.valueWhenTrue`.\n */\n isChecked(): boolean {\n return this.isMulti(this.value) ? this.findTrueValues(this.value) : this.value === this.valueWhenTrue;\n }\n },\n\n methods: {\n /**\n * Toggles the checked state for the checkbox and emits an 'input' event.\n */\n clicked(event: MouseEvent): boolean | void {\n if ((event.target as HTMLLinkElement).tagName === 'A' && (event.target as HTMLLinkElement).href) {\n // Ignore links inside the checkbox label so you can click them\n return true;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n if (this.isDisabled) {\n return;\n }\n\n const customEvent = {\n bubbles: true,\n cancelable: false,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey\n };\n\n const click = new CustomEvent('click', customEvent);\n\n // Flip the value\n const value = cloneDeep(this.value);\n\n if (this.isMulti(value)) {\n if (this.isChecked) {\n removeObject(value, this.valueWhenTrue);\n } else {\n addObject(value, this.valueWhenTrue);\n }\n this.$emit('input', value);\n } else if (this.isString(this.valueWhenTrue)) {\n if (this.isChecked) {\n this.$emit('input', null);\n } else {\n this.$emit('input', this.valueWhenTrue);\n }\n } else {\n this.$emit('input', !value);\n this.$el.dispatchEvent(click);\n }\n },\n\n /**\n * Determines if there are multiple values for the checkbox.\n */\n isMulti(value: boolean | boolean[] | string): value is boolean[] {\n return Array.isArray(value);\n },\n\n isString(value: boolean | number | string): value is boolean {\n return typeof value === 'string';\n },\n\n /**\n * Finds the first true value for multiple checkboxes.\n * @param value A collection of values for the checkbox.\n */\n findTrueValues(value: boolean[]): boolean {\n return value.find((v) => v === this.valueWhenTrue) || false;\n }\n }\n});\n","import mod from \"-!../../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../../thread-loader/dist/cjs.js!../../../../../babel-loader/lib/index.js!../../../../../ts-loader/index.js??ref--15-3!../../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Checkbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../../thread-loader/dist/cjs.js!../../../../../babel-loader/lib/index.js!../../../../../ts-loader/index.js??ref--15-3!../../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Checkbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Checkbox.vue?vue&type=template&id=1fdb6d7b&\"\nimport script from \"./Checkbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./Checkbox.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Checkbox.vue?vue&type=style&index=0&id=1fdb6d7b&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../@vue/cli-service/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","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","export * from \"-!../../../node_modules/vue-style-loader/index.js??ref--10-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../node_modules/sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterGridView.vue?vue&type=style&index=0&id=1dd06ec8&prod&scoped=true&lang=scss&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".cluster-list-view[data-v-56771e1c]{margin-bottom:2rem}.cluster-list-view .favorite-icon[data-v-56771e1c]{margin-right:1rem;background:none}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","export * from \"-!../../../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Checkbox.vue?vue&type=style&index=0&id=1fdb6d7b&prod&lang=scss&\"","import { ActionLocation, CardLocation, ExtensionPoint } from '@shell/core/types';\nimport { isMac } from '@shell/utils/platform';\nimport { ucFirst, randomStr } from '@shell/utils/string';\nimport { _EDIT, _CONFIG, _DETAIL, _LIST } from '@shell/config/query-params';\nimport { getProductFromRoute } from '@shell/middleware/authenticated';\nimport { isEqual } from '@shell/utils/object';\n\nfunction checkRouteProduct({ name, params, query }, locationConfigParam) {\n const product = getProductFromRoute({\n name, params, query\n });\n\n // alias for the homepage\n if (locationConfigParam === 'home' && name === 'home') {\n return true;\n } else if (locationConfigParam === product) {\n return true;\n }\n\n return false;\n}\n\nfunction checkRouteMode({ name, query }, locationConfigParam) {\n if (locationConfigParam === _EDIT && query.mode && query.mode === _EDIT) {\n return true;\n } else if (locationConfigParam === _CONFIG && query.as && query.as === _CONFIG) {\n return true;\n } else if (locationConfigParam === _DETAIL && name.includes('-id')) {\n return true;\n // alias to target all list views\n } else if (locationConfigParam === _LIST && !name.includes('-id') && name.includes('-resource')) {\n return true;\n }\n\n return false;\n}\n\nfunction checkExtensionRouteBinding($route, locationConfig, context) {\n // if no configuration is passed, consider it as global\n if (!Object.keys(locationConfig).length) {\n return true;\n }\n\n const { params } = $route;\n\n // \"params\" to be checked based on the locationConfig\n // This has become overloaded with mode and context\n const paramsToCheck = [\n 'product',\n 'resource',\n 'namespace',\n 'cluster',\n 'id',\n 'mode',\n // url query params\n 'queryParam',\n // Custom context specific params provided by the extension, not to be confused with location params\n 'context',\n ];\n\n let res = true;\n\n for (let i = 0; i < paramsToCheck.length; i++) {\n const param = paramsToCheck[i];\n\n if (locationConfig[param]) {\n const asArray = Array.isArray(locationConfig[param]) ? locationConfig[param] : [locationConfig[param]];\n\n for (let x = 0; x < asArray.length; x++) {\n const locationConfigParam = asArray[x];\n\n if (locationConfigParam) {\n // handle \"product\" in a separate way...\n if (param === 'product') {\n res = checkRouteProduct($route, locationConfigParam);\n // also handle \"mode\" in a separate way because it mainly depends on query params\n } else if (param === 'mode') {\n res = checkRouteMode($route, locationConfigParam);\n } else if (param === 'context') {\n // Need all keys and values to match\n res = isEqual(locationConfigParam, context);\n } else if (param === 'queryParam') {\n res = isEqual(locationConfigParam, $route.query);\n } else if (locationConfigParam === params[param]) {\n res = true;\n } else {\n res = false;\n }\n }\n\n // If a single location config param is good then this is an param (aka ['pods', 'configmap'] = pods or configmaps)\n if (res) {\n break;\n }\n }\n\n // If a single param (set of location config params) is bad then this is not an acceptable location\n if (!res) {\n break;\n }\n }\n }\n\n return res;\n}\n\nexport function getApplicableExtensionEnhancements(pluginCtx, actionType, uiArea, currRoute, translationCtx = pluginCtx, context) {\n const extensionEnhancements = [];\n\n // gate it so that we prevent errors on older versions of dashboard\n if (pluginCtx.$plugin?.getUIConfig) {\n const actions = pluginCtx.$plugin.getUIConfig(actionType, uiArea);\n\n actions.forEach((action, i) => {\n if (checkExtensionRouteBinding(currRoute, action.locationConfig, context || {})) {\n // ADD CARD PLUGIN UI ENHANCEMENT\n if (actionType === ExtensionPoint.CARD) {\n // intercept to apply translation\n if (uiArea === CardLocation.CLUSTER_DASHBOARD_CARD && action.labelKey) {\n actions[i].label = translationCtx.t(action.labelKey);\n }\n\n // ADD ACTION PLUGIN UI ENHANCEMENT\n } else if (actionType === ExtensionPoint.ACTION) {\n // TABLE ACTION\n if (uiArea === ActionLocation.TABLE) {\n // intercept to apply translation\n if (action.labelKey) {\n actions[i].label = translationCtx.t(action.labelKey);\n }\n\n // bulkable flag\n actions[i].bulkable = actions[i].multiple || actions[i].bulkable;\n\n // populate action identifier to prevent errors\n if (!actions[i].action) {\n actions[i].action = `custom-table-action-${ randomStr(10).toLowerCase() }`;\n }\n }\n\n // extract simplified shortcut definition on plugin - HEADER ACTION\n if (uiArea === ActionLocation.HEADER && action.shortcut) {\n // if it's a string, then assume CTRL for windows and META for mac\n if (typeof action.shortcut === 'string') {\n actions[i].shortcutLabel = () => {\n return isMac ? `(\\u2318-${ action.shortcut.toUpperCase() })` : `(Ctrl-${ action.shortcut.toUpperCase() })`;\n };\n actions[i].shortcutKey = { windows: ['ctrl', action.shortcut], mac: ['meta', action.shortcut] };\n // correct check for an Object type in JS... handle the object passed\n } else if (typeof action.shortcut === 'object' && !Array.isArray(action.shortcut) && action.shortcut !== null) {\n actions[i].shortcutKey = action.shortcut;\n const keyboardCombo = isMac ? actions[i].shortcut.mac : actions[i].shortcut.windows ? actions[i].shortcut.windows : [];\n let scLabel = '';\n\n keyboardCombo.forEach((key, i) => {\n if (i < keyboardCombo.length - 1) {\n if (key === 'meta') {\n key = '\\u2318';\n } else {\n key = ucFirst(key);\n }\n scLabel += `${ key }`;\n scLabel += '-';\n } else {\n scLabel += `${ key.toUpperCase() }`;\n }\n });\n\n actions[i].shortcutLabel = () => {\n return `(${ scLabel })`;\n };\n }\n }\n }\n\n extensionEnhancements.push(actions[i]);\n }\n });\n }\n\n return extensionEnhancements;\n}\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Loading.vue?vue&type=template&id=e765d1f4&scoped=true&\"\nimport script from \"./Loading.vue?vue&type=script&lang=js&\"\nexport * from \"./Loading.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Loading.vue?vue&type=style&index=0&id=e765d1f4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e765d1f4\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.app)?_c('Card',{staticClass:\"app-launcher-card\",attrs:{\"show-highlight-border\":false,\"sticky\":true},scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_c('div',{staticStyle:{\"width\":\"100%\"}},[_c('p',{staticStyle:{\"font-size\":\"1.2rem\"}},[_vm._v(\" \"+_vm._s(_vm.app.metadata?.name)+\" \")]),_c('div',{staticStyle:{\"color\":\"var(--input-label)\",\"display\":\"flex\",\"justify-content\":\"space-between\",\"margin-top\":\"4px\"}},[(_vm.app.kind === 'Service' && _vm.app.metadata?.labels?.['app.kubernetes.io/version'] !== undefined)?_c('p',[_vm._v(\" \"+_vm._s(_vm.kubernetesVersion)+\" \")]):_vm._e(),(_vm.app.kind === 'Service' && _vm.app.metadata?.labels?.['helm.sh/chart'] !== undefined)?_c('p',[_vm._v(\" \"+_vm._s(_vm.helmChart)+\" \")]):_vm._e(),(_vm.app.kind === 'Ingress')?_c('p',[_vm._v(\" Ingress \")]):_vm._e()])])]},proxy:true},{key:\"body\",fn:function(){return [(_vm.app.kind === 'Service')?_c('p',[_vm._v(\" \"+_vm._s((_vm.isGlobalApp || _vm.isFavorited) && _vm.isInGlobalView ? `${_vm.app.clusterName}/` : '')+_vm._s(_vm.namespace)+\"/\"+_vm._s(_vm.name)+\" \")]):_vm._e(),(_vm.app.kind === 'Ingress')?_c('p',[_vm._v(\" \"+_vm._s((_vm.isGlobalApp || _vm.isFavorited) && _vm.isInGlobalView ? `${_vm.app.clusterName}: ` : '')+_vm._s(_vm.ingressPath)+\" \")]):_vm._e()]},proxy:true},{key:\"actions\",fn:function(){return [(!_vm.isGlobalApp)?_c('button',{staticClass:\"icon-button\",on:{\"click\":_vm.toggleFavorite}},[_c('i',{class:['icon', _vm.isFavorited ? 'icon-star' : 'icon-star-open']})]):_c('i',{staticClass:\"icon icon-globe icon-only\"}),((_vm.endpoints?.length ?? 0) <= 1 && _vm.app.kind === 'Service')?_c('a',{staticClass:\"btn role-primary\",attrs:{\"disabled\":!_vm.endpoints?.length,\"href\":_vm.endpoints[0]?.value,\"target\":\"_blank\",\"rel\":\"noopener noreferrer nofollow\",\"title\":_vm.endpoints?.length === 0 ? _vm.t('appLauncher.noEndpointFoundForApp') : _vm.t('appLauncher.launchEndpoint', {\n endpoint: _vm.endpoints[0].label,\n })}},[_vm._v(\" \"+_vm._s(_vm.t('appLauncher.launch'))+\" \")]):(_vm.app.kind === 'Ingress')?_c('a',{staticClass:\"btn role-primary\",attrs:{\"href\":_vm.ingressPath,\"target\":\"_blank\",\"rel\":\"noopener noreferrer nofollow\"}},[_vm._v(\" \"+_vm._s(_vm.t('appLauncher.launch'))+\" \")]):_c('ButtonDropDown',{attrs:{\"button-label\":_vm.t('appLauncher.launch'),\"dropdown-options\":_vm.endpoints,\"title\":_vm.t('appLauncher.launchAnEndpointFromSelection')},on:{\"click-action\":(o) => _vm.openLink(o.value)}})]},proxy:true}],null,false,345375573)}):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"card-container\",class:{'highlight-border': _vm.showHighlightBorder, 'card-sticky': _vm.sticky},attrs:{\"data-testid\":\"card\"}},[_c('div',{staticClass:\"card-wrap\"},[_c('div',{staticClass:\"card-title\",attrs:{\"data-testid\":\"card-title-slot\"}},[_vm._t(\"title\",function(){return [_vm._v(\" \"+_vm._s(_vm.title)+\" \")]})],2),_c('hr'),_c('div',{staticClass:\"card-body\",attrs:{\"data-testid\":\"card-body-slot\"}},[_vm._t(\"body\",function(){return [_vm._v(\" \"+_vm._s(_vm.content)+\" \")]})],2),(_vm.showActions)?_c('div',{staticClass:\"card-actions\",attrs:{\"data-testid\":\"card-actions-slot\"}},[_vm._t(\"actions\",function(){return [_c('button',{staticClass:\"btn role-primary\",on:{\"click\":_vm.buttonAction}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \")])]})],2):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport Vue from 'vue';\n\nexport default Vue.extend({\n name: 'Card',\n props: {\n /**\n * The card's title.\n */\n title: {\n type: String,\n default: ''\n },\n /**\n * The text content for the card's body.\n */\n content: {\n type: String,\n default: ''\n },\n /**\n * The function to invoke when the default action button is clicked.\n */\n buttonAction: {\n type: Function,\n default: (): void => { }\n },\n /**\n * The text for the default action button.\n */\n buttonText: {\n type: String,\n default: 'go'\n },\n /**\n * Toggles the card's highlight-border class.\n */\n showHighlightBorder: {\n type: Boolean,\n default: true\n },\n /**\n * Toggles the card's Actions section.\n */\n showActions: {\n type: Boolean,\n default: true\n },\n sticky: {\n type: Boolean,\n default: false,\n },\n }\n});\n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Card.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Card.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Card.vue?vue&type=template&id=6b7b8e40&\"\nimport script from \"./Card.vue?vue&type=script&lang=ts&\"\nexport * from \"./Card.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Card.vue?vue&type=style&index=0&id=6b7b8e40&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/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('v-select',_vm._b({ref:\"button-dropdown\",staticClass:\"button-dropdown btn\",class:{\n disabled: _vm.disabled,\n focused: _vm.focused,\n },attrs:{\"append-to-body\":true,\"calculate-position\":_vm.withPopper,\"searchable\":false,\"clearable\":false,\"close-on-select\":_vm.closeOnSelect,\"filterable\":false,\"value\":_vm.buttonLabel,\"options\":_vm.dropdownOptions,\"map-keydown\":_vm.mappedKeys,\"get-option-key\":(opt) => (_vm.optionKey ? _vm.get(opt, _vm.optionKey) : _vm.getOptionLabel(opt)),\"get-option-label\":(opt) => _vm.getOptionLabel(opt),\"selectable\":_vm.selectable},on:{\"search:blur\":_vm.onBlur,\"search:focus\":_vm.onFocus,\"input\":function($event){return _vm.$emit('click-action', $event)}},scopedSlots:_vm._u([{key:\"selected-option\",fn:function(option){return [_c('button',{staticClass:\"dropdown-button-two btn\",attrs:{\"tabindex\":\"-1\",\"type\":\"button\"},on:{\"click\":function($event){return _vm.ddButtonAction(option)},\"focus\":_vm.focusSearch}},[_vm._v(\" \"+_vm._s(option.label)+\" \")])]}},_vm._l((_vm.$scopedSlots),function(_,slot){return {key:slot,fn:function(scope){return [(slot !== 'selected-option')?_vm._t(slot,null,null,scope):_vm._e()]}}})],null,true)},'v-select',_vm.$attrs,false),[_c('template',{slot:\"no-options\"},[_vm._t(\"no-options\")],2)],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function getBoundingClientRect(element) {\n var rect = element.getBoundingClientRect();\n return {\n width: rect.width,\n height: rect.height,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n y: rect.top\n };\n}","/*:: import type { Window } from '../types'; */\n\n/*:: declare function getWindow(node: Node | Window): Window; */\nexport default function getWindow(node) {\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getWindow from \"./getWindow.js\";\n/*:: declare function isElement(node: mixed): boolean %checks(node instanceof\n Element); */\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n/*:: declare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n HTMLElement); */\n\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nexport { isElement, isHTMLElement };","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe: assume body is always available\n return (isElement(element) ? element.ownerDocument : element.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\"; // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement);\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element) {\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// $FlowFixMe: this is a quicker (but less type safe) way to save quite some bytes from the bundle\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || // DOM Element detected\n // $FlowFixMe: need a better way to handle this...\n element.host || // ShadowRoot detected\n // $FlowFixMe: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the \nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = getNodeName(scrollParent) === 'body';\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n var offsetParent = element.offsetParent;\n\n if (offsetParent) {\n var html = getDocumentElement(offsetParent);\n\n if (getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && getComputedStyle(html).position !== 'static') {\n return html;\n }\n }\n\n return offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.willChange && css.willChange !== 'auto') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static') {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign(Object.assign(Object.assign({}, existing), current), {}, {\n options: Object.assign(Object.assign({}, existing.options), current.options),\n data: Object.assign(Object.assign({}, existing.data), current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nexport * from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign(Object.assign({}, DEFAULT_OPTIONS), defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(options) {\n cleanupModifierEffects();\n state.options = Object.assign(Object.assign(Object.assign({}, defaultOptions), state.options), options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = Math.floor(offsets[mainAxis]) - Math.floor(reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = Math.floor(offsets[mainAxis]) + Math.ceil(reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsets(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: Math.round(x * dpr) / dpr || 0,\n y: Math.round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive;\n\n var _roundOffsets = roundOffsets(offsets),\n x = _roundOffsets.x,\n y = _roundOffsets.y;\n\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n } // $FlowFixMe: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n /*:: offsetParent = (offsetParent: Element); */\n\n\n if (placement === top) {\n sideY = bottom;\n y -= offsetParent.clientHeight - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left) {\n sideX = right;\n x -= offsetParent.clientWidth - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref3) {\n var state = _ref3.state,\n options = _ref3.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign(Object.assign({}, state.styles.popper), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign(Object.assign({}, state.styles.arrow), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false\n })));\n }\n\n state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\";\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign(Object.assign({}, rects), {}, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = element.ownerDocument.body;\n var width = Math.max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = Math.max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += Math.max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","export default function contains(parent, child) {\n // $FlowFixMe: hasOwnProperty doesn't seem to work in tests\n var isShadow = Boolean(child.getRootNode && child.getRootNode().host); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (isShadow) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign(Object.assign({}, rect), {}, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = Math.max(rect.top, accRect.top);\n accRect.right = Math.min(rect.right, accRect.right);\n accRect.bottom = Math.min(rect.bottom, accRect.bottom);\n accRect.left = Math.max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign(Object.assign({}, getFreshSideObject()), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var referenceElement = state.elements.reference;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(referenceElement);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign(Object.assign({}, popperRect), popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\n\n/*:: type OverflowsMap = { [ComputedPlacement]: number }; */\n\n/*;; type OverflowsMap = { [key in ComputedPlacement]: number }; */\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements; // $FlowFixMe\n\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","export default function within(min, value, max) {\n return Math.max(min, Math.min(value, max));\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport within from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign(Object.assign({}, state.rects), {}, {\n placement: state.placement\n })) : tetherOffset;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = popperOffsets[mainAxis] + overflow[mainSide];\n var max = popperOffsets[mainAxis] - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? Math.min(min, tetherMin) : min, offset, tether ? Math.max(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var _preventedOffset = within(_min, _offset, _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport within from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = state.modifiersData[name + \"#persistent\"].padding;\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element,\n _options$padding = options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n state.modifiersData[name + \"#persistent\"] = {\n padding: mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements))\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator, detectOverflow } from \"./index.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","\n\n\n \n\n\n\n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ButtonDropdown.vue?vue&type=template&id=4b526572&scoped=true&\"\nimport script from \"./ButtonDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./ButtonDropdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ButtonDropdown.vue?vue&type=style&index=0&id=4b526572&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4b526572\",\n null\n \n)\n\nexport default component.exports","type UriField = 'source' | 'protocol' | 'authority' | 'userInfo' | 'user' | 'password' | 'host' | 'port' | 'relative' | 'path' | 'directory' | 'file' | 'queryStr' | 'anchor'\ntype UriFields = {\n [key in UriField]: string; // eslint-disable-line no-unused-vars\n}\ntype QueryParams = {\n [key: string]: string\n}\n\ninterface ParsedUri extends UriFields {\n query: QueryParams;\n}\n\nexport function addParam(url: string, key: string, val: string | string[]): string {\n let out = url + (url.includes('?') ? '&' : '?');\n\n // val can be a string or an array of strings\n if ( !Array.isArray(val) ) {\n val = [val];\n }\n out += val.map((v) => {\n if ( v === null ) {\n return `${ encodeURIComponent(key) }`;\n } else {\n return `${ encodeURIComponent(key) }=${ encodeURIComponent(v) }`;\n }\n }).join('&');\n\n return out;\n}\n\nexport function addParams(url: string, params: QueryParams): string {\n if ( params && typeof params === 'object' ) {\n Object.keys(params).forEach((key) => {\n url = addParam(url, key, params[key]);\n });\n }\n\n return url;\n}\n\nexport function removeParam(url: string, key: string): string {\n const parsed = parse(url);\n\n if ( parsed.query?.[key] ) {\n delete parsed.query[key];\n }\n\n return stringify(parsed);\n}\n\nexport function parseLinkHeader(str: string): Record {\n const out: { [key: string]: string} = { };\n const lines = (str || '').split(',');\n\n for ( const line of lines ) {\n const match = line.match(/^\\s*<([^>]+)>\\s*;\\s*rel\\s*=\"(.*)\"/);\n\n if ( match ) {\n out[match[2].toLowerCase()] = match[1];\n }\n }\n\n return out;\n}\n\nexport function isMaybeSecure(port: number, proto: string): boolean {\n const protocol = proto.toLowerCase();\n\n return portMatch([port], [443, 8443], ['443']) || protocol === 'https';\n}\n\nexport function portMatch(ports: number[], equals: number[], endsWith: string[]): boolean {\n for (let i = 0; i < ports.length; i++) {\n const port = ports[i];\n\n if (equals.includes(port)) {\n return true;\n }\n\n for (let j = 0; j < endsWith.length; j++) {\n const suffix = `${ endsWith[j] }`;\n const portStr = `${ port }`;\n\n if (portStr !== suffix && portStr.endsWith(suffix)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n// parseUri 1.2.2\n// (c) Steven Levithan \n// https://javascriptsource.com/parseuri/\n// MIT License\nexport function parse(str: string): ParsedUri {\n const o = parse.options;\n const m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\n if (!m) {\n throw new Error(`Cannot parse as uri: ${ str }`);\n }\n const uri = {} as ParsedUri;\n let i = 14;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri.query = {};\n uri.queryStr.replace(o.q.parser, (_, $1: string, $2: string): string => {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n\n return '';\n });\n\n return uri;\n}\n\nparse.options = {\n strictMode: false,\n key: ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'queryStr', 'anchor'],\n q: {\n name: 'query',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n} as {\n strictMode: boolean,\n key: UriField[],\n q: {\n name: 'query',\n parser: RegExp\n },\n parser: {\n strict: RegExp,\n loose: RegExp\n }\n};\n\nexport function stringify(uri: ParsedUri): string {\n let out = `${ uri.protocol }://`;\n\n if ( uri.user && uri.password ) {\n out += `${ uri.user }:${ uri.password }@`;\n } else if ( uri.user ) {\n out += `${ uri.user }@`;\n }\n\n out += uri.host;\n\n if ( uri.port ) {\n out += `:${ uri.port }`;\n }\n\n out += uri.path || '/';\n\n out = addParams(out, uri.query || {});\n\n if ( uri.anchor ) {\n out += `#${ uri.anchor }`;\n }\n\n return out;\n}\n","import { SECRET, SERVICE } from '@shell/config/types';\nimport isUrl from 'is-url';\nimport { get } from '@shell/utils/object';\nimport isEmpty from 'lodash/isEmpty';\nimport SteveModel from '@shell/plugins/steve/steve-class';\n\nfunction tlsHosts(spec) {\n const tls = spec.tls || [];\n\n return tls.flatMap((tls) => tls.hosts || []);\n}\n\nfunction isTlsHost(spec, host) {\n return tlsHosts(spec).includes(host);\n}\n\nexport function ingressFullPath(resource, rule, path = {}) {\n const spec = resource.spec;\n const hostValue = rule.host || '';\n const pathValue = path.path || '';\n let protocol = '';\n\n if (hostValue) {\n protocol = isTlsHost(spec, hostValue) ? 'https://' : 'http://';\n }\n\n return `${ protocol }${ hostValue }${ pathValue }`;\n}\n\nexport default class Ingress extends SteveModel {\n get tlsHosts() {\n return tlsHosts(this.spec);\n }\n\n get isTlsHost() {\n return (host) => isTlsHost(this.spec, host);\n }\n\n targetTo(workloads, serviceName) {\n if (!serviceName) {\n return null;\n }\n\n const isTargetsWorkload = serviceName.startsWith('ingress-');\n const id = `${ this.namespace }/${ serviceName }`;\n\n if ( isTargetsWorkload ) {\n const workload = workloads.find((w) => w.id === (id));\n\n return workload?.detailLocation || '';\n } else {\n return {\n name: 'c-cluster-product-resource-namespace-id',\n params: {\n resource: SERVICE,\n id: serviceName,\n namespace: this.namespace,\n }\n };\n }\n }\n\n createRulesForListPage(workloads, certificates) {\n const rules = this.spec.rules || [];\n\n return rules.flatMap((rule) => {\n const paths = rule?.http?.paths || [];\n\n return paths.map((path) => this.createPathForListPage(workloads, rule, path, certificates));\n });\n }\n\n createPathForListPage(workloads, rule, path, certificates) {\n const serviceName = get(path?.backend, this.serviceNamePath);\n const fullPath = this.fullPath(rule, path);\n\n return {\n // isUrl thinks urls which contain '*' are valid so I'm adding an additional check for '*'\n isUrl: isUrl(fullPath) && !fullPath.includes('*'),\n pathType: path.pathType,\n fullPath,\n serviceName,\n serviceTargetTo: this.targetTo(workloads, serviceName),\n certs: this.certLinks(rule, certificates),\n targetLink: this.targetLink(workloads, serviceName),\n port: get(path?.backend, this.servicePortPath)\n };\n }\n\n fullPath(rule, path) {\n return ingressFullPath(this, rule, path);\n }\n\n certLink(cert, certificates = []) {\n const secretName = cert.secretName || this.t('ingress.rulesAndCertificates.defaultCertificate');\n let to;\n\n if (cert.secretName && certificates.includes(secretName)) {\n to = {\n name: 'c-cluster-product-resource-namespace-id',\n params: {\n resource: SECRET,\n id: secretName\n }\n };\n }\n\n return {\n to,\n text: secretName,\n options: { internal: true }\n };\n }\n\n certLinks(rule, certificates) {\n const certs = this.spec.tls || [];\n const matchingCerts = certs.filter((cert) => {\n const hosts = cert.hosts || [];\n\n return hosts.includes(rule.host);\n });\n\n return matchingCerts.map((cert) => this.certLink(cert, certificates));\n }\n\n targetLink(workloads, serviceName) {\n return {\n to: this.targetTo(workloads, serviceName),\n text: serviceName,\n options: { internal: true }\n };\n }\n\n createDefaultService(workloads) {\n const backend = get(this.spec, this.defaultBackendPath);\n const serviceName = get(backend, this.serviceNamePath);\n\n if ( !serviceName ) {\n return null;\n }\n\n return {\n name: serviceName,\n targetTo: this.targetTo(workloads, serviceName)\n };\n }\n\n get cache() {\n if (!this.cacheObject) {\n this.cacheObject = {};\n }\n\n return this.cacheObject;\n }\n\n get showPathType() {\n if (!this.cache.showPathType) {\n this.cache.showPathType = this.$rootGetters['cluster/pathExistsInSchema'](this.type, 'spec.rules.http.paths.pathType');\n }\n\n return this.cache.showPathType;\n }\n\n get useNestedBackendField() {\n if (!this.cache.useNestedBackendField) {\n this.cache.useNestedBackendField = this.$rootGetters['cluster/pathExistsInSchema'](this.type, 'spec.rules.http.paths.backend.service.name');\n }\n\n return this.cache.useNestedBackendField;\n }\n\n get serviceNamePath() {\n const nestedPath = 'service.name';\n const flatPath = 'serviceName';\n\n return this.useNestedBackendField ? nestedPath : flatPath;\n }\n\n get servicePortPath() {\n const nestedPath = 'service.port.number';\n const flatPath = 'servicePort';\n\n return this.useNestedBackendField ? nestedPath : flatPath;\n }\n\n get defaultBackendPath() {\n const defaultBackend = this.$rootGetters['cluster/pathExistsInSchema'](this.type, 'spec.defaultBackend');\n\n return defaultBackend ? 'defaultBackend' : 'backend';\n }\n\n get hasDefaultBackend() {\n return !isEmpty(this.spec[this.defaultBackendPath]);\n }\n\n get details() {\n const out = this._details;\n\n if (this.spec?.ingressClassName) {\n out.push({\n label: this.t('ingress.ingressClass.label'),\n content: this.spec.ingressClassName,\n });\n }\n\n return out;\n }\n}\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLauncherCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLauncherCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AppLauncherCard.vue?vue&type=template&id=c0d726ac&scoped=true&\"\nimport script from \"./AppLauncherCard.vue?vue&type=script&lang=js&\"\nexport * from \"./AppLauncherCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppLauncherCard.vue?vue&type=style&index=0&id=c0d726ac&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c0d726ac\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"cluster-actions\"},[_c('div',{staticClass:\"search-input\"},[_c('input',{attrs:{\"placeholder\":_vm.$store.getters['i18n/t']('appLauncher.filter')},domProps:{\"value\":_vm.searchQuery},on:{\"input\":function($event){return _vm.$emit('update:search-query', $event.target.value)}}})]),(_vm.isGridView)?_c('div',{staticClass:\"sort-buttons\",on:{\"click\":function($event){return _vm.$emit('toggle-sort')}}},[_c('div',{staticClass:\"sort-button\",class:{ active: _vm.sortOrder === 'asc' },attrs:{\"disabled\":_vm.sortOrder === 'asc'}},[_c('i',{staticClass:\"icon-chevron-up\"})]),_c('div',{staticClass:\"sort-label\"},[_c('p',[_vm._v(_vm._s(_vm.aToZorZtoA))])]),_c('div',{staticClass:\"sort-button\",class:{ active: _vm.sortOrder === 'desc' },attrs:{\"disabled\":_vm.sortOrder === 'desc'}},[_c('i',{staticClass:\"icon-chevron-down\"})])]):_vm._e(),_c('div',{staticClass:\"select-wrapper\"},[_c('select',{staticClass:\"cluster-select\",domProps:{\"value\":_vm.selectedCluster},on:{\"change\":function($event){return _vm.$emit('update:selected-cluster', $event.target.value)}}},_vm._l((_vm.clusterOptions),function(option){return _c('option',{key:option.value,domProps:{\"value\":option.value}},[_vm._v(\" \"+_vm._s(option.label)+\" \")])}),0)]),_c('button',{staticClass:\"icon-button\",on:{\"click\":function($event){return _vm.$emit('set-view', 'grid')}}},[_c('i',{staticClass:\"icon icon-apps\"})]),_c('button',{staticClass:\"icon-button\",on:{\"click\":function($event){return _vm.$emit('set-view', 'list')}}},[_c('i',{staticClass:\"icon icon-list-flat\"})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterActions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterActions.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClusterActions.vue?vue&type=template&id=88f0655a&scoped=true&\"\nimport script from \"./ClusterActions.vue?vue&type=script&lang=js&\"\nexport * from \"./ClusterActions.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClusterActions.vue?vue&type=style&index=0&id=88f0655a&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"88f0655a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"cluster-grid-view\"},[_c('div',{staticClass:\"cluster-header\"},[_c('h1',[_vm._v(\" \"+_vm._s(_vm.clusterData.name)+\" \")])]),_c('div',{staticClass:\"services-by-cluster-grid\"},_vm._l((_vm.clusterData.filteredApps),function(app){return _c('AppLauncherCard',{key:`${app.clusterId}-${app.id}-${app.kind}`,attrs:{\"app\":app,\"isInGlobalView\":false,\"favorited-apps\":_vm.favoritedApps},on:{\"toggle-favorite\":function($event){return _vm.$emit('toggle-favorite', $event)}}})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterGridView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterGridView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClusterGridView.vue?vue&type=template&id=1dd06ec8&scoped=true&\"\nimport script from \"./ClusterGridView.vue?vue&type=script&lang=js&\"\nexport * from \"./ClusterGridView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClusterGridView.vue?vue&type=style&index=0&id=1dd06ec8&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1dd06ec8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"cluster-list-view\"},[_c('div',{staticClass:\"cluster-header\"},[_c('h1',[_vm._v(\" \"+_vm._s(_vm.clusterData.name)+\" \")])]),_c('SortableTable',{attrs:{\"rows\":_vm.clusterData.filteredApps,\"headers\":_vm.tableHeaders,\"row-key\":'uniqueId',\"search\":false,\"table-actions\":false,\"row-actions\":false,\"no-rows-text\":_vm.$store.getters['i18n/t']('appLauncher.noAppsFound')},scopedSlots:_vm._u([{key:\"cell:name\",fn:function({ row }){return [_vm._v(\" \"+_vm._s(row.metadata.name)+\" \")]}},{key:\"cell:namespace\",fn:function({ row }){return [_vm._v(\" \"+_vm._s(row.metadata.namespace)+\" \")]}},{key:\"cell:version\",fn:function({ row }){return [_vm._v(\" \"+_vm._s(row.metadata.labels?.['app.kubernetes.io/version'])+\" \")]}},{key:\"cell:helmChart\",fn:function({ row }){return [_vm._v(\" \"+_vm._s(row.metadata.labels?.['helm.sh/chart'])+\" \")]}},{key:\"cell:actions\",fn:function({ row }){return [_c('div',{staticStyle:{\"display\":\"flex\",\"justify-content\":\"flex-end\"}},[_c('button',{staticClass:\"icon-button favorite-icon\",on:{\"click\":function($event){return _vm.$emit('toggle-favorite', row)}}},[_c('i',{class:['icon', _vm.isFavorited(row, _vm.favoritedApps) ? 'icon-star' : 'icon-star-open']})]),(_vm.getEndpoints(row)?.length <= 1)?_c('a',{staticClass:\"btn role-primary\",attrs:{\"href\":_vm.getEndpoints(row)[0]?.value,\"target\":\"_blank\",\"rel\":\"noopener noreferrer nofollow\"}},[_vm._v(\" \"+_vm._s(_vm.t('appLauncher.launch'))+\" \")]):_c('ButtonDropDown',{attrs:{\"button-label\":_vm.t('appLauncher.launch'),\"dropdown-options\":_vm.getEndpoints(row),\"title\":_vm.t('appLauncher.launchAnEndpointFromSelection')},on:{\"click-action\":_vm.openLink}})],1)]}}])})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterListView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterListView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClusterListView.vue?vue&type=template&id=56771e1c&scoped=true&\"\nimport script from \"./ClusterListView.vue?vue&type=script&lang=js&\"\nexport * from \"./ClusterListView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClusterListView.vue?vue&type=style&index=0&id=56771e1c&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56771e1c\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=3b920c85&scoped=true&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=3b920c85&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3b920c85\",\n null\n \n)\n\nexport default component.exports","import Dashboard from '../pages/index.vue';\nimport { PRODUCT_NAME, BLANK_CLUSTER } from '../config/app-launcher';\n\nconst routes = [\n {\n name: `${ PRODUCT_NAME }-c-cluster`,\n path: `/${ PRODUCT_NAME }/c/:cluster`,\n component: Dashboard,\n meta: {\n product: PRODUCT_NAME,\n cluster: BLANK_CLUSTER,\n pkg: PRODUCT_NAME\n }\n }\n];\n\nexport default routes;","import { importTypes } from '@rancher/auto-import';\nimport { IPlugin } from '@shell/core/types';\nimport extensionRouting from './routing/extension-routing';\n\n// Init the package\nexport default function (plugin: IPlugin) {\n // Auto-import model, detail, edit from the folders\n importTypes(plugin);\n // Provide plugin metadata from package.json\n plugin.metadata = require('./package.json');\n // Load a product\n plugin.addProduct(require('./product'));\n // Add Vue routes\n plugin.addRoutes(extensionRouting);\n}\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n","import { get } from './object';\nimport { strPad } from './string';\n\n// Based on https://github.com/emberjs/ember.js/blob/master/packages/@ember/-internals/runtime/lib/type-of.js\n// and https://github.com/emberjs/ember.js/blob/master/packages/@ember/-internals/runtime/lib/mixins/array.js\n/*\nCopyright (c) 2019 Yehuda Katz, Tom Dale and Ember.js contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n// ........................................\n// TYPING & ARRAY MESSAGING\n//\nconst TYPE_MAP = {\n '[object Boolean]': 'boolean',\n '[object Number]': 'number',\n '[object String]': 'string',\n '[object Function]': 'function',\n '[object Array]': 'array',\n '[object Date]': 'date',\n '[object RegExp]': 'regexp',\n '[object Object]': 'object',\n '[object FileList]': 'filelist',\n};\n\nconst { toString } = Object.prototype;\n\n/**\n Returns a consistent type for the passed object.\n\n Use this instead of the built-in `typeof` to get the type of an item.\n It will return the same result across all browsers and includes a bit\n more detail. Here is what will be returned:\n\n | Return Value | Meaning |\n |---------------|------------------------------------------------------|\n | 'string' | String primitive or String object. |\n | 'number' | Number primitive or Number object. |\n | 'boolean' | Boolean primitive or Boolean object. |\n | 'null' | Null value |\n | 'undefined' | Undefined value |\n | 'function' | A function |\n | 'array' | An instance of Array |\n | 'regexp' | An instance of RegExp |\n | 'date' | An instance of Date |\n | 'filelist' | An instance of FileList |\n | 'error' | An instance of the Error object |\n | 'object' | A JavaScript object |\n\n Examples:\n\n import { typeOf } from '@shell/utils/type-of';\n\n typeOf(); // 'undefined'\n typeOf(null); // 'null'\n typeOf(undefined); // 'undefined'\n typeOf('michael'); // 'string'\n typeOf(new String('michael')); // 'string'\n typeOf(101); // 'number'\n typeOf(new Number(101)); // 'number'\n typeOf(true); // 'boolean'\n typeOf(new Boolean(true)); // 'boolean'\n typeOf(A); // 'function'\n typeOf([1, 2, 90]); // 'array'\n typeOf(/abc/); // 'regexp'\n typeOf(new Date()); // 'date'\n typeOf(event.target.files); // 'filelist'\n typeOf(new Error('teamocil')); // 'error'\n\n // 'normal' JavaScript object\n typeOf({ a: 'b' }); // 'object'\n*/\nexport function typeOf(item) {\n if (item === null) {\n return 'null';\n }\n if (item === undefined) {\n return 'undefined';\n }\n let ret = TYPE_MAP[toString.call(item)] || 'object';\n\n if (ret === 'object') {\n if (item instanceof Error) {\n ret = 'error';\n } else if (item instanceof Date) {\n ret = 'date';\n }\n }\n\n return ret;\n}\n\nexport function spaceship(a, b) {\n const diff = a - b;\n\n return (diff > 0) - (diff < 0);\n}\n\nconst TYPE_ORDER = {\n undefined: 0,\n null: 1,\n boolean: 2,\n number: 3,\n string: 4,\n array: 5,\n object: 6,\n instance: 7,\n function: 8,\n class: 9,\n date: 10,\n};\n\nexport function compare(a, b) {\n const typeA = typeOf(a);\n const typeB = typeOf(b);\n\n const res = spaceship(TYPE_ORDER[typeA], TYPE_ORDER[typeB]);\n\n if ( res ) {\n return res;\n }\n\n switch (typeA) {\n case 'boolean':\n case 'number':\n return spaceship(a, b);\n\n case 'string':\n return spaceship(a.localeCompare(b), 0);\n\n case 'array': {\n const aLen = a.length;\n const bLen = b.length;\n const len = Math.min(aLen, bLen);\n\n for (let i = 0; i < len; i++) {\n const r = compare(a[i], b[i]);\n\n if (r !== 0) {\n return r;\n }\n }\n\n // all elements are equal now\n // shorter array should be ordered first\n return spaceship(aLen, bLen);\n }\n case 'date':\n return spaceship(a.getTime(), b.getTime());\n }\n\n return 0;\n}\n\nexport function parseField(str) {\n const parts = str.split(/:/);\n\n if ( parts.length === 2 && parts[1] === 'desc' ) {\n return { field: parts[0], reverse: true };\n } else {\n return { field: str, reverse: false };\n }\n}\n\nexport function sortBy(ary, keys, desc) {\n if ( !Array.isArray(keys) ) {\n keys = [keys];\n }\n\n return ary.slice().sort((objA, objB) => {\n for ( let i = 0 ; i < keys.length ; i++ ) {\n const parsed = parseField(keys[i]);\n const a = get(objA, parsed.field);\n const b = get(objB, parsed.field);\n let res = compare(a, b);\n\n if ( res ) {\n if ( desc ) {\n res *= -1;\n }\n\n if ( parsed.reverse ) {\n res *= -1;\n }\n\n return res;\n }\n }\n\n return 0;\n });\n}\n\n// Turn foo1-bar2 into foo0000000001-bar0000000002 so that the numbers sort numerically\nconst splitRegex = /([^\\d]+)/;\nconst notNumericRegex = /^[0-9]+$/;\n\nexport function sortableNumericSuffix(str) {\n if ( typeof str !== 'string' ) {\n return str;\n }\n\n return str.split(splitRegex).map((x) => x.match(notNumericRegex) ? strPad(x, 10, '0') : x).join('').trim();\n}\n\nexport function isNumeric(num) {\n return !!`${ num }`.match(notNumericRegex);\n}\n","export * from \"-!../../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledTooltip.vue?vue&type=style&index=0&id=6fc47e64&prod&lang=scss&\"","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"cronstrue\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cronstrue\"] = factory();\n\telse\n\t\troot[\"cronstrue\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 4);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar stringUtilities_1 = __webpack_require__(1);\nvar cronParser_1 = __webpack_require__(2);\nvar ExpressionDescriptor = (function () {\n function ExpressionDescriptor(expression, options) {\n this.expression = expression;\n this.options = options;\n this.expressionParts = new Array(5);\n if (ExpressionDescriptor.locales[options.locale]) {\n this.i18n = ExpressionDescriptor.locales[options.locale];\n }\n else {\n console.warn(\"Locale '\" + options.locale + \"' could not be found; falling back to 'en'.\");\n this.i18n = ExpressionDescriptor.locales[\"en\"];\n }\n if (options.use24HourTimeFormat === undefined) {\n options.use24HourTimeFormat = this.i18n.use24HourTimeFormatByDefault();\n }\n }\n ExpressionDescriptor.toString = function (expression, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.throwExceptionOnParseError, throwExceptionOnParseError = _c === void 0 ? true : _c, _d = _b.verbose, verbose = _d === void 0 ? false : _d, _e = _b.dayOfWeekStartIndexZero, dayOfWeekStartIndexZero = _e === void 0 ? true : _e, use24HourTimeFormat = _b.use24HourTimeFormat, _f = _b.locale, locale = _f === void 0 ? \"en\" : _f;\n var options = {\n throwExceptionOnParseError: throwExceptionOnParseError,\n verbose: verbose,\n dayOfWeekStartIndexZero: dayOfWeekStartIndexZero,\n use24HourTimeFormat: use24HourTimeFormat,\n locale: locale\n };\n var descripter = new ExpressionDescriptor(expression, options);\n return descripter.getFullDescription();\n };\n ExpressionDescriptor.initialize = function (localesLoader) {\n ExpressionDescriptor.specialCharacters = [\"/\", \"-\", \",\", \"*\"];\n localesLoader.load(ExpressionDescriptor.locales);\n };\n ExpressionDescriptor.prototype.getFullDescription = function () {\n var description = \"\";\n try {\n var parser = new cronParser_1.CronParser(this.expression, this.options.dayOfWeekStartIndexZero);\n this.expressionParts = parser.parse();\n var timeSegment = this.getTimeOfDayDescription();\n var dayOfMonthDesc = this.getDayOfMonthDescription();\n var monthDesc = this.getMonthDescription();\n var dayOfWeekDesc = this.getDayOfWeekDescription();\n var yearDesc = this.getYearDescription();\n description += timeSegment + dayOfMonthDesc + dayOfWeekDesc + monthDesc + yearDesc;\n description = this.transformVerbosity(description, this.options.verbose);\n description = description.charAt(0).toLocaleUpperCase() + description.substr(1);\n }\n catch (ex) {\n if (!this.options.throwExceptionOnParseError) {\n description = this.i18n.anErrorOccuredWhenGeneratingTheExpressionD();\n }\n else {\n throw \"\" + ex;\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getTimeOfDayDescription = function () {\n var secondsExpression = this.expressionParts[0];\n var minuteExpression = this.expressionParts[1];\n var hourExpression = this.expressionParts[2];\n var description = \"\";\n if (!stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters) &&\n !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters) &&\n !stringUtilities_1.StringUtilities.containsAny(secondsExpression, ExpressionDescriptor.specialCharacters)) {\n description += this.i18n.atSpace() + this.formatTime(hourExpression, minuteExpression, secondsExpression);\n }\n else if (!secondsExpression &&\n minuteExpression.indexOf(\"-\") > -1 &&\n !(minuteExpression.indexOf(\",\") > -1) &&\n !(minuteExpression.indexOf(\"/\") > -1) &&\n !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters)) {\n var minuteParts = minuteExpression.split(\"-\");\n description += stringUtilities_1.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(), this.formatTime(hourExpression, minuteParts[0], \"\"), this.formatTime(hourExpression, minuteParts[1], \"\"));\n }\n else if (!secondsExpression &&\n hourExpression.indexOf(\",\") > -1 &&\n hourExpression.indexOf(\"-\") == -1 &&\n hourExpression.indexOf(\"/\") == -1 &&\n !stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters)) {\n var hourParts = hourExpression.split(\",\");\n description += this.i18n.at();\n for (var i = 0; i < hourParts.length; i++) {\n description += \" \";\n description += this.formatTime(hourParts[i], minuteExpression, \"\");\n if (i < hourParts.length - 2) {\n description += \",\";\n }\n if (i == hourParts.length - 2) {\n description += this.i18n.spaceAnd();\n }\n }\n }\n else {\n var secondsDescription = this.getSecondsDescription();\n var minutesDescription = this.getMinutesDescription();\n var hoursDescription = this.getHoursDescription();\n description += secondsDescription;\n if (description.length > 0 && minutesDescription.length > 0) {\n description += \", \";\n }\n description += minutesDescription;\n if (description.length > 0 && hoursDescription.length > 0) {\n description += \", \";\n }\n description += hoursDescription;\n }\n return description;\n };\n ExpressionDescriptor.prototype.getSecondsDescription = function () {\n var _this = this;\n var description = this.getSegmentDescription(this.expressionParts[0], this.i18n.everySecond(), function (s) {\n return s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Seconds(), s);\n }, function (s) {\n return _this.i18n.secondsX0ThroughX1PastTheMinute();\n }, function (s) {\n return s == \"0\"\n ? \"\"\n : parseInt(s) < 20\n ? _this.i18n.atX0SecondsPastTheMinute()\n : _this.i18n.atX0SecondsPastTheMinuteGt20() || _this.i18n.atX0SecondsPastTheMinute();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getMinutesDescription = function () {\n var _this = this;\n var secondsExpression = this.expressionParts[0];\n var hourExpression = this.expressionParts[2];\n var description = this.getSegmentDescription(this.expressionParts[1], this.i18n.everyMinute(), function (s) {\n return s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Minutes(), s);\n }, function (s) {\n return _this.i18n.minutesX0ThroughX1PastTheHour();\n }, function (s) {\n try {\n return s == \"0\" && hourExpression.indexOf(\"/\") == -1 && secondsExpression == \"\"\n ? _this.i18n.everyHour()\n : parseInt(s) < 20\n ? _this.i18n.atX0MinutesPastTheHour()\n : _this.i18n.atX0MinutesPastTheHourGt20() || _this.i18n.atX0MinutesPastTheHour();\n }\n catch (e) {\n return _this.i18n.atX0MinutesPastTheHour();\n }\n });\n return description;\n };\n ExpressionDescriptor.prototype.getHoursDescription = function () {\n var _this = this;\n var expression = this.expressionParts[2];\n var description = this.getSegmentDescription(expression, this.i18n.everyHour(), function (s) {\n return _this.formatTime(s, \"0\", \"\");\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Hours(), s);\n }, function (s) {\n return _this.i18n.betweenX0AndX1();\n }, function (s) {\n return _this.i18n.atX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getDayOfWeekDescription = function () {\n var _this = this;\n var daysOfWeekNames = this.i18n.daysOfTheWeek();\n var description = null;\n if (this.expressionParts[5] == \"*\") {\n description = \"\";\n }\n else {\n description = this.getSegmentDescription(this.expressionParts[5], this.i18n.commaEveryDay(), function (s) {\n var exp = s;\n if (s.indexOf(\"#\") > -1) {\n exp = s.substr(0, s.indexOf(\"#\"));\n }\n else if (s.indexOf(\"L\") > -1) {\n exp = exp.replace(\"L\", \"\");\n }\n return daysOfWeekNames[parseInt(exp)];\n }, function (s) {\n if (parseInt(s) == 1) {\n return \"\";\n }\n else {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0DaysOfTheWeek(), s);\n }\n }, function (s) {\n return _this.i18n.commaX0ThroughX1();\n }, function (s) {\n var format = null;\n if (s.indexOf(\"#\") > -1) {\n var dayOfWeekOfMonthNumber = s.substring(s.indexOf(\"#\") + 1);\n var dayOfWeekOfMonthDescription = null;\n switch (dayOfWeekOfMonthNumber) {\n case \"1\":\n dayOfWeekOfMonthDescription = _this.i18n.first();\n break;\n case \"2\":\n dayOfWeekOfMonthDescription = _this.i18n.second();\n break;\n case \"3\":\n dayOfWeekOfMonthDescription = _this.i18n.third();\n break;\n case \"4\":\n dayOfWeekOfMonthDescription = _this.i18n.fourth();\n break;\n case \"5\":\n dayOfWeekOfMonthDescription = _this.i18n.fifth();\n break;\n }\n format = _this.i18n.commaOnThe() + dayOfWeekOfMonthDescription + _this.i18n.spaceX0OfTheMonth();\n }\n else if (s.indexOf(\"L\") > -1) {\n format = _this.i18n.commaOnTheLastX0OfTheMonth();\n }\n else {\n var domSpecified = _this.expressionParts[3] != \"*\";\n format = domSpecified ? _this.i18n.commaAndOnX0() : _this.i18n.commaOnlyOnX0();\n }\n return format;\n });\n }\n return description;\n };\n ExpressionDescriptor.prototype.getMonthDescription = function () {\n var _this = this;\n var monthNames = this.i18n.monthsOfTheYear();\n var description = this.getSegmentDescription(this.expressionParts[4], \"\", function (s) {\n return monthNames[parseInt(s) - 1];\n }, function (s) {\n if (parseInt(s) == 1) {\n return \"\";\n }\n else {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Months(), s);\n }\n }, function (s) {\n return _this.i18n.commaMonthX0ThroughMonthX1() || _this.i18n.commaX0ThroughX1();\n }, function (s) {\n return _this.i18n.commaOnlyInMonthX0 ? _this.i18n.commaOnlyInMonthX0() : _this.i18n.commaOnlyInX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getDayOfMonthDescription = function () {\n var _this = this;\n var description = null;\n var expression = this.expressionParts[3];\n switch (expression) {\n case \"L\":\n description = this.i18n.commaOnTheLastDayOfTheMonth();\n break;\n case \"WL\":\n case \"LW\":\n description = this.i18n.commaOnTheLastWeekdayOfTheMonth();\n break;\n default:\n var weekDayNumberMatches = expression.match(/(\\d{1,2}W)|(W\\d{1,2})/);\n if (weekDayNumberMatches) {\n var dayNumber = parseInt(weekDayNumberMatches[0].replace(\"W\", \"\"));\n var dayString = dayNumber == 1\n ? this.i18n.firstWeekday()\n : stringUtilities_1.StringUtilities.format(this.i18n.weekdayNearestDayX0(), dayNumber.toString());\n description = stringUtilities_1.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(), dayString);\n break;\n }\n else {\n var lastDayOffSetMatches = expression.match(/L-(\\d{1,2})/);\n if (lastDayOffSetMatches) {\n var offSetDays = lastDayOffSetMatches[1];\n description = stringUtilities_1.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(), offSetDays);\n break;\n }\n else if (expression == \"*\" && this.expressionParts[5] != \"*\") {\n return \"\";\n }\n else {\n description = this.getSegmentDescription(expression, this.i18n.commaEveryDay(), function (s) {\n return s == \"L\" ? _this.i18n.lastDay() : ((_this.i18n.dayX0) ? stringUtilities_1.StringUtilities.format(_this.i18n.dayX0(), s) : s);\n }, function (s) {\n return s == \"1\" ? _this.i18n.commaEveryDay() : _this.i18n.commaEveryX0Days();\n }, function (s) {\n return _this.i18n.commaBetweenDayX0AndX1OfTheMonth();\n }, function (s) {\n return _this.i18n.commaOnDayX0OfTheMonth();\n });\n }\n break;\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getYearDescription = function () {\n var _this = this;\n var description = this.getSegmentDescription(this.expressionParts[6], \"\", function (s) {\n return /^\\d+$/.test(s) ? new Date(parseInt(s), 1).getFullYear().toString() : s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Years(), s);\n }, function (s) {\n return _this.i18n.commaYearX0ThroughYearX1() || _this.i18n.commaX0ThroughX1();\n }, function (s) {\n return _this.i18n.commaOnlyInYearX0 ? _this.i18n.commaOnlyInYearX0() : _this.i18n.commaOnlyInX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getSegmentDescription = function (expression, allDescription, getSingleItemDescription, getIntervalDescriptionFormat, getBetweenDescriptionFormat, getDescriptionFormat) {\n var _this = this;\n var description = null;\n if (!expression) {\n description = \"\";\n }\n else if (expression === \"*\") {\n description = allDescription;\n }\n else if (!stringUtilities_1.StringUtilities.containsAny(expression, [\"/\", \"-\", \",\"])) {\n description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), getSingleItemDescription(expression));\n }\n else if (expression.indexOf(\"/\") > -1) {\n var segments = expression.split(\"/\");\n description = stringUtilities_1.StringUtilities.format(getIntervalDescriptionFormat(segments[1]), segments[1]);\n if (segments[0].indexOf(\"-\") > -1) {\n var betweenSegmentDescription = this.generateBetweenSegmentDescription(segments[0], getBetweenDescriptionFormat, getSingleItemDescription);\n if (betweenSegmentDescription.indexOf(\", \") != 0) {\n description += \", \";\n }\n description += betweenSegmentDescription;\n }\n else if (!stringUtilities_1.StringUtilities.containsAny(segments[0], [\"*\", \",\"])) {\n var rangeItemDescription = stringUtilities_1.StringUtilities.format(getDescriptionFormat(segments[0]), getSingleItemDescription(segments[0]));\n rangeItemDescription = rangeItemDescription.replace(\", \", \"\");\n description += stringUtilities_1.StringUtilities.format(this.i18n.commaStartingX0(), rangeItemDescription);\n }\n }\n else if (expression.indexOf(\",\") > -1) {\n var segments = expression.split(\",\");\n var descriptionContent = \"\";\n for (var i = 0; i < segments.length; i++) {\n if (i > 0 && segments.length > 2) {\n descriptionContent += \",\";\n if (i < segments.length - 1) {\n descriptionContent += \" \";\n }\n }\n if (i > 0 && segments.length > 1 && (i == segments.length - 1 || segments.length == 2)) {\n descriptionContent += this.i18n.spaceAnd() + \" \";\n }\n if (segments[i].indexOf(\"-\") > -1) {\n var betweenSegmentDescription = this.generateBetweenSegmentDescription(segments[i], function (s) {\n return _this.i18n.commaX0ThroughX1();\n }, getSingleItemDescription);\n betweenSegmentDescription = betweenSegmentDescription.replace(\", \", \"\");\n descriptionContent += betweenSegmentDescription;\n }\n else {\n descriptionContent += getSingleItemDescription(segments[i]);\n }\n }\n description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), descriptionContent);\n }\n else if (expression.indexOf(\"-\") > -1) {\n description = this.generateBetweenSegmentDescription(expression, getBetweenDescriptionFormat, getSingleItemDescription);\n }\n return description;\n };\n ExpressionDescriptor.prototype.generateBetweenSegmentDescription = function (betweenExpression, getBetweenDescriptionFormat, getSingleItemDescription) {\n var description = \"\";\n var betweenSegments = betweenExpression.split(\"-\");\n var betweenSegment1Description = getSingleItemDescription(betweenSegments[0]);\n var betweenSegment2Description = getSingleItemDescription(betweenSegments[1]);\n betweenSegment2Description = betweenSegment2Description.replace(\":00\", \":59\");\n var betweenDescriptionFormat = getBetweenDescriptionFormat(betweenExpression);\n description += stringUtilities_1.StringUtilities.format(betweenDescriptionFormat, betweenSegment1Description, betweenSegment2Description);\n return description;\n };\n ExpressionDescriptor.prototype.formatTime = function (hourExpression, minuteExpression, secondExpression) {\n var hour = parseInt(hourExpression);\n var period = \"\";\n var setPeriodBeforeTime = false;\n if (!this.options.use24HourTimeFormat) {\n setPeriodBeforeTime = this.i18n.setPeriodBeforeTime && this.i18n.setPeriodBeforeTime();\n period = setPeriodBeforeTime ? this.getPeriod(hour) + \" \" : \" \" + this.getPeriod(hour);\n if (hour > 12) {\n hour -= 12;\n }\n if (hour === 0) {\n hour = 12;\n }\n }\n var minute = minuteExpression;\n var second = \"\";\n if (secondExpression) {\n second = \":\" + (\"00\" + secondExpression).substring(secondExpression.length);\n }\n return \"\" + (setPeriodBeforeTime ? period : \"\") + (\"00\" + hour.toString()).substring(hour.toString().length) + \":\" + (\"00\" + minute.toString()).substring(minute.toString().length) + second + (!setPeriodBeforeTime ? period : \"\");\n };\n ExpressionDescriptor.prototype.transformVerbosity = function (description, useVerboseFormat) {\n if (!useVerboseFormat) {\n description = description.replace(new RegExp(\", \" + this.i18n.everyMinute(), \"g\"), \"\");\n description = description.replace(new RegExp(\", \" + this.i18n.everyHour(), \"g\"), \"\");\n description = description.replace(new RegExp(this.i18n.commaEveryDay(), \"g\"), \"\");\n description = description.replace(/\\, ?$/, \"\");\n }\n return description;\n };\n ExpressionDescriptor.prototype.getPeriod = function (hour) {\n return hour >= 12 ? this.i18n.pm && this.i18n.pm() || \"PM\" : this.i18n.am && this.i18n.am() || \"AM\";\n };\n ExpressionDescriptor.locales = {};\n return ExpressionDescriptor;\n}());\nexports.ExpressionDescriptor = ExpressionDescriptor;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar StringUtilities = (function () {\n function StringUtilities() {\n }\n StringUtilities.format = function (template) {\n var values = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n return template.replace(/%s/g, function () {\n return values.shift();\n });\n };\n StringUtilities.containsAny = function (text, searchStrings) {\n return searchStrings.some(function (c) {\n return text.indexOf(c) > -1;\n });\n };\n return StringUtilities;\n}());\nexports.StringUtilities = StringUtilities;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar CronParser = (function () {\n function CronParser(expression, dayOfWeekStartIndexZero) {\n if (dayOfWeekStartIndexZero === void 0) { dayOfWeekStartIndexZero = true; }\n this.expression = expression;\n this.dayOfWeekStartIndexZero = dayOfWeekStartIndexZero;\n }\n CronParser.prototype.parse = function () {\n var parsed = this.extractParts(this.expression);\n this.normalize(parsed);\n this.validate(parsed);\n return parsed;\n };\n CronParser.prototype.extractParts = function (expression) {\n if (!this.expression) {\n throw new Error(\"Expression is empty\");\n }\n var parsed = expression.trim().split(/[ ]+/);\n if (parsed.length < 5) {\n throw new Error(\"Expression has only \" + parsed.length + \" part\" + (parsed.length == 1 ? \"\" : \"s\") + \". At least 5 parts are required.\");\n }\n else if (parsed.length == 5) {\n parsed.unshift(\"\");\n parsed.push(\"\");\n }\n else if (parsed.length == 6) {\n if (/\\d{4}$/.test(parsed[5])) {\n parsed.unshift(\"\");\n }\n else {\n parsed.push(\"\");\n }\n }\n else if (parsed.length > 7) {\n throw new Error(\"Expression has \" + parsed.length + \" parts; too many!\");\n }\n return parsed;\n };\n CronParser.prototype.normalize = function (expressionParts) {\n var _this = this;\n expressionParts[3] = expressionParts[3].replace(\"?\", \"*\");\n expressionParts[5] = expressionParts[5].replace(\"?\", \"*\");\n expressionParts[2] = expressionParts[2].replace(\"?\", \"*\");\n if (expressionParts[0].indexOf(\"0/\") == 0) {\n expressionParts[0] = expressionParts[0].replace(\"0/\", \"*/\");\n }\n if (expressionParts[1].indexOf(\"0/\") == 0) {\n expressionParts[1] = expressionParts[1].replace(\"0/\", \"*/\");\n }\n if (expressionParts[2].indexOf(\"0/\") == 0) {\n expressionParts[2] = expressionParts[2].replace(\"0/\", \"*/\");\n }\n if (expressionParts[3].indexOf(\"1/\") == 0) {\n expressionParts[3] = expressionParts[3].replace(\"1/\", \"*/\");\n }\n if (expressionParts[4].indexOf(\"1/\") == 0) {\n expressionParts[4] = expressionParts[4].replace(\"1/\", \"*/\");\n }\n if (expressionParts[5].indexOf(\"1/\") == 0) {\n expressionParts[5] = expressionParts[5].replace(\"1/\", \"*/\");\n }\n if (expressionParts[6].indexOf(\"1/\") == 0) {\n expressionParts[6] = expressionParts[6].replace(\"1/\", \"*/\");\n }\n expressionParts[5] = expressionParts[5].replace(/(^\\d)|([^#/\\s]\\d)/g, function (t) {\n var dowDigits = t.replace(/\\D/, \"\");\n var dowDigitsAdjusted = dowDigits;\n if (_this.dayOfWeekStartIndexZero) {\n if (dowDigits == \"7\") {\n dowDigitsAdjusted = \"0\";\n }\n }\n else {\n dowDigitsAdjusted = (parseInt(dowDigits) - 1).toString();\n }\n return t.replace(dowDigits, dowDigitsAdjusted);\n });\n if (expressionParts[5] == \"L\") {\n expressionParts[5] = \"6\";\n }\n if (expressionParts[3] == \"?\") {\n expressionParts[3] = \"*\";\n }\n if (expressionParts[3].indexOf(\"W\") > -1 &&\n (expressionParts[3].indexOf(\",\") > -1 || expressionParts[3].indexOf(\"-\") > -1)) {\n throw new Error(\"The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.\");\n }\n var days = {\n SUN: 0,\n MON: 1,\n TUE: 2,\n WED: 3,\n THU: 4,\n FRI: 5,\n SAT: 6\n };\n for (var day in days) {\n expressionParts[5] = expressionParts[5].replace(new RegExp(day, \"gi\"), days[day].toString());\n }\n var months = {\n JAN: 1,\n FEB: 2,\n MAR: 3,\n APR: 4,\n MAY: 5,\n JUN: 6,\n JUL: 7,\n AUG: 8,\n SEP: 9,\n OCT: 10,\n NOV: 11,\n DEC: 12\n };\n for (var month in months) {\n expressionParts[4] = expressionParts[4].replace(new RegExp(month, \"gi\"), months[month].toString());\n }\n if (expressionParts[0] == \"0\") {\n expressionParts[0] = \"\";\n }\n if (!/\\*|\\-|\\,|\\//.test(expressionParts[2]) &&\n (/\\*|\\//.test(expressionParts[1]) || /\\*|\\//.test(expressionParts[0]))) {\n expressionParts[2] += \"-\" + expressionParts[2];\n }\n for (var i = 0; i < expressionParts.length; i++) {\n if (expressionParts[i] == \"*/1\") {\n expressionParts[i] = \"*\";\n }\n if (expressionParts[i].indexOf(\"/\") > -1 && !/^\\*|\\-|\\,/.test(expressionParts[i])) {\n var stepRangeThrough = null;\n switch (i) {\n case 4:\n stepRangeThrough = \"12\";\n break;\n case 5:\n stepRangeThrough = \"6\";\n break;\n case 6:\n stepRangeThrough = \"9999\";\n break;\n default:\n stepRangeThrough = null;\n break;\n }\n if (stepRangeThrough != null) {\n var parts = expressionParts[i].split(\"/\");\n expressionParts[i] = parts[0] + \"-\" + stepRangeThrough + \"/\" + parts[1];\n }\n }\n }\n };\n CronParser.prototype.validate = function (parsed) {\n this.assertNoInvalidCharacters(\"DOW\", parsed[5]);\n this.assertNoInvalidCharacters(\"DOM\", parsed[3]);\n };\n CronParser.prototype.assertNoInvalidCharacters = function (partDescription, expression) {\n var invalidChars = expression.match(/[A-KM-VX-Z]+/gi);\n if (invalidChars && invalidChars.length) {\n throw new Error(partDescription + \" part contains invalid values: '\" + invalidChars.toString() + \"'\");\n }\n };\n return CronParser;\n}());\nexports.CronParser = CronParser;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar en = (function () {\n function en() {\n }\n en.prototype.atX0SecondsPastTheMinuteGt20 = function () {\n return null;\n };\n en.prototype.atX0MinutesPastTheHourGt20 = function () {\n return null;\n };\n en.prototype.commaMonthX0ThroughMonthX1 = function () {\n return null;\n };\n en.prototype.commaYearX0ThroughYearX1 = function () {\n return null;\n };\n en.prototype.use24HourTimeFormatByDefault = function () {\n return false;\n };\n en.prototype.anErrorOccuredWhenGeneratingTheExpressionD = function () {\n return \"An error occured when generating the expression description. Check the cron expression syntax.\";\n };\n en.prototype.everyMinute = function () {\n return \"every minute\";\n };\n en.prototype.everyHour = function () {\n return \"every hour\";\n };\n en.prototype.atSpace = function () {\n return \"At \";\n };\n en.prototype.everyMinuteBetweenX0AndX1 = function () {\n return \"Every minute between %s and %s\";\n };\n en.prototype.at = function () {\n return \"At\";\n };\n en.prototype.spaceAnd = function () {\n return \" and\";\n };\n en.prototype.everySecond = function () {\n return \"every second\";\n };\n en.prototype.everyX0Seconds = function () {\n return \"every %s seconds\";\n };\n en.prototype.secondsX0ThroughX1PastTheMinute = function () {\n return \"seconds %s through %s past the minute\";\n };\n en.prototype.atX0SecondsPastTheMinute = function () {\n return \"at %s seconds past the minute\";\n };\n en.prototype.everyX0Minutes = function () {\n return \"every %s minutes\";\n };\n en.prototype.minutesX0ThroughX1PastTheHour = function () {\n return \"minutes %s through %s past the hour\";\n };\n en.prototype.atX0MinutesPastTheHour = function () {\n return \"at %s minutes past the hour\";\n };\n en.prototype.everyX0Hours = function () {\n return \"every %s hours\";\n };\n en.prototype.betweenX0AndX1 = function () {\n return \"between %s and %s\";\n };\n en.prototype.atX0 = function () {\n return \"at %s\";\n };\n en.prototype.commaEveryDay = function () {\n return \", every day\";\n };\n en.prototype.commaEveryX0DaysOfTheWeek = function () {\n return \", every %s days of the week\";\n };\n en.prototype.commaX0ThroughX1 = function () {\n return \", %s through %s\";\n };\n en.prototype.first = function () {\n return \"first\";\n };\n en.prototype.second = function () {\n return \"second\";\n };\n en.prototype.third = function () {\n return \"third\";\n };\n en.prototype.fourth = function () {\n return \"fourth\";\n };\n en.prototype.fifth = function () {\n return \"fifth\";\n };\n en.prototype.commaOnThe = function () {\n return \", on the \";\n };\n en.prototype.spaceX0OfTheMonth = function () {\n return \" %s of the month\";\n };\n en.prototype.lastDay = function () {\n return \"the last day\";\n };\n en.prototype.commaOnTheLastX0OfTheMonth = function () {\n return \", on the last %s of the month\";\n };\n en.prototype.commaOnlyOnX0 = function () {\n return \", only on %s\";\n };\n en.prototype.commaAndOnX0 = function () {\n return \", and on %s\";\n };\n en.prototype.commaEveryX0Months = function () {\n return \", every %s months\";\n };\n en.prototype.commaOnlyInX0 = function () {\n return \", only in %s\";\n };\n en.prototype.commaOnTheLastDayOfTheMonth = function () {\n return \", on the last day of the month\";\n };\n en.prototype.commaOnTheLastWeekdayOfTheMonth = function () {\n return \", on the last weekday of the month\";\n };\n en.prototype.commaDaysBeforeTheLastDayOfTheMonth = function () {\n return \", %s days before the last day of the month\";\n };\n en.prototype.firstWeekday = function () {\n return \"first weekday\";\n };\n en.prototype.weekdayNearestDayX0 = function () {\n return \"weekday nearest day %s\";\n };\n en.prototype.commaOnTheX0OfTheMonth = function () {\n return \", on the %s of the month\";\n };\n en.prototype.commaEveryX0Days = function () {\n return \", every %s days\";\n };\n en.prototype.commaBetweenDayX0AndX1OfTheMonth = function () {\n return \", between day %s and %s of the month\";\n };\n en.prototype.commaOnDayX0OfTheMonth = function () {\n return \", on day %s of the month\";\n };\n en.prototype.commaEveryHour = function () {\n return \", every hour\";\n };\n en.prototype.commaEveryX0Years = function () {\n return \", every %s years\";\n };\n en.prototype.commaStartingX0 = function () {\n return \", starting %s\";\n };\n en.prototype.daysOfTheWeek = function () {\n return [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n };\n en.prototype.monthsOfTheYear = function () {\n return [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ];\n };\n return en;\n}());\nexports.en = en;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar expressionDescriptor_ts_1 = __webpack_require__(0);\nvar enLocaleLoader_1 = __webpack_require__(5);\nexpressionDescriptor_ts_1.ExpressionDescriptor.initialize(new enLocaleLoader_1.enLocaleLoader());\nexports.default = expressionDescriptor_ts_1.ExpressionDescriptor;\nvar toString = expressionDescriptor_ts_1.ExpressionDescriptor.toString;\nexports.toString = toString;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar en_1 = __webpack_require__(3);\nvar enLocaleLoader = (function () {\n function enLocaleLoader() {\n }\n enLocaleLoader.prototype.load = function (availableLocales) {\n availableLocales[\"en\"] = new en_1.en();\n };\n return enLocaleLoader;\n}());\nexports.enLocaleLoader = enLocaleLoader;\n\n\n/***/ })\n/******/ ]);\n});","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".cluster-actions[data-v-88f0655a]{display:flex;align-items:center;gap:1rem;position:fixed;right:5.8%;top:4.3rem;z-index:2;padding-bottom:.425rem;padding-right:4.4rem;background:inherit;border-bottom:var(--header-border-size) solid var(--header-border)}.icon-button[data-v-88f0655a]{padding:0;color:var(--primary);font-size:1.8rem}.icon-button[data-v-88f0655a],.sort-button[data-v-88f0655a]{background:none;border:none;cursor:pointer}.sort-button[data-v-88f0655a]{padding:none;color:#555;font-size:1.3rem;display:flex;align-items:center}.sort-label[data-v-88f0655a]{color:var(--primary);font-size:1rem;cursor:pointer}.sort-buttons[data-v-88f0655a]{display:flex;gap:1rem;align-items:center}.sort-button[data-v-88f0655a]:hover{color:var(--primary-hover)}.sort-button.active[data-v-88f0655a]{color:var(--primary)}.search-input[data-v-88f0655a]{text-align:right;justify-content:flex-end;display:flex;input[data-v-88f0655a]{width:190px;padding:11px;font-size:1rem;border:1px solid var(--border);border-radius:4px}}.select-wrapper select[data-v-88f0655a]{padding:.8rem;border:1px solid #ccc;border-radius:4px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","export * from \"-!../../../node_modules/vue-style-loader/index.js??ref--10-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../node_modules/sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLauncherCard.vue?vue&type=style&index=0&id=c0d726ac&prod&lang=scss&scoped=true&\"","import { SETTING } from '@shell/config/settings';\nimport { MANAGEMENT } from '@shell/config/types';\n\nlet favIconSet = false;\n\nexport function haveSetFavIcon() {\n return favIconSet;\n}\n\nexport function setFavIcon(store) {\n const res = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.FAVICON);\n const brandSetting = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.BRAND);\n const link = findIconLink(document.head.getElementsByTagName('link'));\n\n if (link) {\n let brandImage;\n\n if (brandSetting?.value === 'suse') {\n brandImage = require('~shell/assets/brand/suse/favicon.png');\n } else if (brandSetting?.value === 'csp') {\n brandImage = require('~shell/assets/brand/csp/favicon.png');\n }\n\n link.href = res?.value || brandImage || defaultFavIcon;\n favIconSet = true;\n }\n}\n\nfunction getCurrentFavIcon() {\n const link = findIconLink(document.head.getElementsByTagName('link'));\n\n return link ? link.href : '';\n}\n\nfunction findIconLink(links) {\n for (let i = 0; i < links.length; i++) {\n const link = links[i];\n\n if (link.rel?.includes('icon')) {\n return link;\n }\n }\n\n return undefined;\n}\n\nconst defaultFavIcon = getCurrentFavIcon();\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n}\n\nmodule.exports = negate;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","export const PRODUCT_NAME = 'app-launcher';\nexport const BLANK_CLUSTER = '_';","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","export const waitFor = (testFn: Function, msg = '', timeoutMs = 3000000, intervalMs = 500, log = false): Promise => {\n gatedLog('Starting wait for', msg);\n\n return new Promise((resolve, reject) => {\n if (testFn()) {\n gatedLog('Wait for', msg || 'unknown', 'done immediately');\n resolve(this);\n }\n const timeout = setTimeout(() => {\n gatedLog('Wait for', msg, 'timed out');\n clearInterval(interval);\n clearTimeout(timeout);\n if (msg) {\n reject(new Error(`Failed waiting for: ${ msg }`));\n } else {\n throw new Error(`waitFor timed out after ${ timeoutMs / 1000 } seconds`);\n }\n }, timeoutMs);\n const interval = setInterval(() => {\n if ( testFn() ) {\n gatedLog('Wait for', msg, 'done');\n clearInterval(interval);\n clearTimeout(timeout);\n resolve(this);\n } else if (msg) {\n gatedLog('Wait for', msg, 'not done yet');\n }\n }, intervalMs);\n });\n\n function gatedLog(...args: any[]) {\n if (log) {\n console.log(...args); // eslint-disable-line no-console\n }\n }\n};\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".services-by-cluster-grid[data-v-1dd06ec8]{display:grid;grid-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.cluster-header[data-v-1dd06ec8]{display:flex;align-items:center;justify-content:space-between;margin:1rem 0;background:var(--header-bg);border-bottom:var(--header-border-size) solid var(--header-border);height:var(--header-height);position:sticky;top:0;z-index:1}.favorite-icon[data-v-1dd06ec8]{margin-right:1rem}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","export function camelToTitle(str) {\n return dasherize((str || '')).split('-').map((str) => {\n return ucFirst(str);\n }).join(' ');\n}\n\nexport function ucFirst(str) {\n str = str || '';\n\n return str.substr(0, 1).toUpperCase() + str.substr(1);\n}\n\nexport function lcFirst(str) {\n str = str || '';\n\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n}\n\nexport function strPad(str, toLength, padChars = ' ', right = false) {\n str = `${ str }`;\n\n if (str.length >= toLength) {\n return str;\n }\n\n const neededLen = toLength - str.length + 1;\n const padStr = (new Array(neededLen)).join(padChars).substr(0, neededLen);\n\n if (right) {\n return str + padStr;\n } else {\n return padStr + str;\n }\n}\n\n// Turn thing1 into thing00000001 so that the numbers sort numerically\nexport function sortableNumericSuffix(str) {\n str = str || '';\n const match = str.match(/^(.*[^0-9])([0-9]+)$/);\n\n if (match) {\n return match[1] + strPad(match[2], 8, '0');\n }\n\n return str;\n}\n\nconst entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\n\nexport function escapeHtml(html) {\n return String(html).replace(/[&<>\"']/g, (s) => {\n return entityMap[s];\n });\n}\n\n/**\n * Return HTML markup from escaped HTML string, allowing specific tags\n * @param text string\n * @returns string\n */\nexport function decodeHtml(text) {\n const div = document.createElement('div');\n\n div.innerHTML = text;\n\n return div.textContent || div.innerText || '';\n}\n\nexport function escapeRegex(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nexport function random32(count) {\n count = Math.max(0, count || 1);\n\n const out = [];\n let i;\n\n if (window.crypto && window.crypto.getRandomValues) {\n const tmp = new Uint32Array(count);\n\n window.crypto.getRandomValues(tmp);\n for (i = 0; i < tmp.length; i++) {\n out[i] = tmp[i];\n }\n } else {\n for (i = 0; i < count; i++) {\n out[i] = Math.random() * 4294967296; // Math.pow(2,32);\n }\n }\n\n if (count === 1) {\n return out[0];\n } else {\n return out;\n }\n}\n\nconst alpha = 'abcdefghijklmnopqrstuvwxyz';\nconst num = '0123456789';\nconst sym = '!@#$%^&*()_+-=[]{};:,./<>?|';\n\nexport const CHARSET = {\n NUMERIC: num,\n NO_VOWELS: 'bcdfghjklmnpqrstvwxz2456789',\n ALPHA: alpha + alpha.toUpperCase(),\n ALPHA_NUM: alpha + alpha.toUpperCase() + num,\n ALPHA_LOWER: alpha,\n ALPHA_UPPER: alpha.toUpperCase(),\n HEX: `${ num }ABCDEF`,\n PASSWORD: alpha + alpha.toUpperCase() + num + alpha + alpha.toUpperCase() + num + sym,\n // ^-- includes alpha / ALPHA / num twice to reduce the occurrence of symbols\n};\n\nexport function randomStr(length = 16, chars = CHARSET.ALPHA_NUM) {\n if (!chars || !chars.length) {\n return null;\n }\n\n return random32(length).map((val) => {\n return chars[val % chars.length];\n }).join('');\n}\n\nexport function formatPercent(value, maxPrecision = 2) {\n if (value < 1 && maxPrecision >= 2) {\n return `${ Math.round(value * 100) / 100 }%`;\n } else if (value < 10 && maxPrecision >= 1) {\n return `${ Math.round(value * 10) / 10 }%`;\n } else {\n return `${ Math.round(value) }%`;\n }\n}\n\nexport function pluralize(str) {\n if ( str.match(/.*[^aeiou]y$/i) ) {\n return `${ str.substr(0, str.length - 1) }ies`;\n } else if ( str.endsWith('ics') ) {\n return str;\n } else if ( str.endsWith('s') ) {\n return `${ str }es`;\n } else {\n return `${ str }s`;\n }\n}\n\nexport function resourceNames(names, plusMore, t) {\n return names.reduce((res, name, i) => {\n if (i >= 5) {\n return res;\n }\n res += `${ escapeHtml( name ) }`;\n if (i === names.length - 1) {\n res += plusMore;\n } else {\n res += i === names.length - 2 ? t('generic.and') : t('generic.comma');\n }\n\n return res;\n }, '');\n}\n\nexport function indent(lines, count = 2, token = ' ', afterRegex = null) {\n if (typeof lines === 'string') {\n lines = lines.split(/\\n/);\n } else {\n lines = lines || [];\n }\n\n const padStr = (new Array(count + 1)).join(token);\n\n const out = lines.map((line) => {\n let prefix = '';\n let suffix = line;\n\n if (afterRegex) {\n const match = line.match(afterRegex);\n\n if (match) {\n prefix = match[match.length - 1];\n suffix = line.substr(match[0].length);\n }\n }\n\n return `${ prefix }${ padStr }${ suffix }`;\n });\n\n const str = out.join('\\n');\n\n return str;\n}\n\nconst decamelizeRegex = /([a-z\\d])([A-Z])/g;\n\nexport function decamelize(str) {\n return str.replace(decamelizeRegex, '$1_$2').toLowerCase();\n}\n\nconst dasherizeRegex = /[ _]/g;\n\nexport function dasherize(str) {\n return decamelize(str).replace(dasherizeRegex, '-');\n}\n\nexport function asciiLike(str) {\n str = str || '';\n\n if ( str.match(/[^\\r\\n\\t\\x20-\\x7F]/) ) {\n return false;\n }\n\n return true;\n}\n\nexport function coerceStringTypeToScalarType(val, type) {\n if ( type === 'float' ) {\n // Coerce strings to floats\n val = parseFloat(val) || null; // NaN becomes null\n } else if ( type === 'int' ) {\n // Coerce strings to ints\n val = parseInt(val, 10);\n\n if ( isNaN(val) ) {\n val = null;\n }\n } else if ( type === 'boolean') {\n // Coerce strings to boolean\n if (val.toLowerCase() === 'true') {\n val = true;\n } else if (val.toLowerCase() === 'false') {\n val = false;\n }\n }\n\n return val;\n}\n\nexport function matchesSomeRegex(stringRaw, regexes = []) {\n return regexes.some((regexRaw) => {\n const string = stringRaw || '';\n const regex = ensureRegex(regexRaw);\n\n return string.match(regex);\n });\n}\n\nexport function ensureRegex(strOrRegex, exact = true) {\n if ( typeof strOrRegex === 'string' ) {\n if ( exact ) {\n return new RegExp(`^${ escapeRegex(strOrRegex) }$`, 'i');\n } else {\n return new RegExp(`${ escapeRegex(strOrRegex) }`, 'i');\n }\n }\n\n return strOrRegex;\n}\n\nexport function nlToBr(value) {\n return escapeHtml(value || '').replace(/(\\r\\n|\\r|\\n)/g, '
\\n');\n}\n\nconst quotedMatch = /[^.\"']+|\"([^\"]*)\"|'([^']*)'/g;\n\nexport function splitObjectPath(path) {\n if ( path.includes('\"') || path.includes(\"'\") ) {\n // Path with quoted section\n return path.match(quotedMatch).map((x) => x.replace(/['\"]/g, ''));\n }\n\n // Regular path\n return path.split('.');\n}\n\nexport function joinObjectPath(ary) {\n let out = '';\n\n for ( const p of ary ) {\n if ( p.includes('.') ) {\n out += `.\"${ p }\"`;\n } else {\n out += `.${ p }`;\n }\n }\n\n if ( out.startsWith('.') ) {\n out = out.substr(1);\n }\n\n return out;\n}\n\nexport function shortenedImage(image) {\n return (image || '')\n .replace(/^(index\\.)?docker.io\\/(library\\/)?/, '')\n .replace(/:latest$/, '')\n .replace(/^(.*@sha256:)([0-9a-f]{8})[0-9a-f]+$/i, '$1$2…');\n}\n\nexport function isIpv4(ip) {\n const reg = /^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/;\n\n return reg.test(ip);\n}\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".table-options-checkbox .checkbox-custom{min-width:14px}.table-options-checkbox .checkbox-label{color:var(--body-text)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_GET_URL_IMPORT___ = require(\"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/getUrl.js\");\nvar ___CSS_LOADER_URL_IMPORT_0___ = require(\"rancher-icons/fonts/icons.ttf?1680176690116\");\nvar ___CSS_LOADER_URL_IMPORT_1___ = require(\"rancher-icons/fonts/icons.woff?1680176690116\");\nvar ___CSS_LOADER_URL_IMPORT_2___ = require(\"rancher-icons/fonts/icons.svg?1680176690116\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___, { hash: \"#icons\" });\n// Module\nexports.push([module.id, \"@font-face{font-family:icons;src:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format(\\\"truetype\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format(\\\"woff\\\"),url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \") format(\\\"svg\\\");font-weight:400;font-style:normal;font-display:block}[class*=\\\" icon-\\\"][data-v-c0d726ac],[class^=icon-][data-v-c0d726ac]{font-family:icons!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-actions[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-alert[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-apple[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-application[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-apps[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-archive[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-backup-restore[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-backup[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-checkmark[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-chevron-beginning[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-chevron-down[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-chevron-end[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-chevron-left[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-chevron-right[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-chevron-up[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-circle-plus[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-cis[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-close[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-cluster-management[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-cluster[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-code[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-comment[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-commit[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-compass[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-copy[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-dashboard[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-dock[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-docker[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-dot-half[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-dot-open[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-dot[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-download[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-edit[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-elemental[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-endpoints_connected[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-epinio[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-error[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-explore[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-extension[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-external-link[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-file[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-filter_alt[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-fleet[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-folder[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-fork[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-gatekeeper[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-gear[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-github[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-gitlab[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-globe[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-groups[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-harvester[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-hide[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-history[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-home[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-info[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-istio[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-linux[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-list-flat[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-list-grouped[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-lock[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-logging[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-longhorn[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-marketplace[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-menu[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-minus[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-monitoring[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-more[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-namespace[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-notifier[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-os-management[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-pause[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-pipeline[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-play[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-plus[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-pod_security[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-question-mark[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-rancher-desktop[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-refresh[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-repository[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-rio[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-role-binding[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-search[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-service[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-show[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-snapshot[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-sort-down[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-sort-up[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-sort[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-spinner[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-star-open[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-star[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-storage[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-terminal[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-trash[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-unlock[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-upload[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-user[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-warning[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-windows[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-delete[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-x[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-vertical-ellipsis[data-v-c0d726ac]:before{content:\\\"\\\"}.icon-spin[data-v-c0d726ac]{animation:icon-spin-c0d726ac 5s linear infinite}@keyframes icon-spin-c0d726ac{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon[data-v-c0d726ac]{display:inline-block}.icon-fw[data-v-c0d726ac]{width:1.2857142857em;text-align:center}.icon-sm[data-v-c0d726ac]{font-size:.8em}.icon-lg[data-v-c0d726ac]{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.icon-2x[data-v-c0d726ac]{font-size:2em}.icon-3x[data-v-c0d726ac]{font-size:3em}.icon-4x[data-v-c0d726ac]{font-size:4em}.icon-5x[data-v-c0d726ac]{font-size:5em}.icon-stack[data-v-c0d726ac]{position:relative;display:inline-block;height:2em;line-height:2em;vertical-align:middle}.icon-stack-1x[data-v-c0d726ac],.icon-stack-2x[data-v-c0d726ac]{position:absolute;left:0;width:100%;text-align:center}.icon-stack-1x[data-v-c0d726ac]{line-height:inherit}.icon-stack-2x[data-v-c0d726ac]{font-size:2em}.icon-inverse[data-v-c0d726ac]{color:#fff}.icon-ul[data-v-c0d726ac]{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.icon-ul>li[data-v-c0d726ac]{position:relative}.icon-li[data-v-c0d726ac]{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.icon-li.icon-lg[data-v-c0d726ac]{left:-1.8571428571em}.icon-rotate-90[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);transform:rotate(90deg)}.icon-rotate-180[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.icon-rotate-270[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);transform:rotate(270deg)}.icon-flip-horizontal[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);transform:scaleX(-1)}.icon-flip-vertical[data-v-c0d726ac]{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:scaleY(-1)}.app-launcher-card[data-v-c0d726ac] .card-body{overflow:hidden!important}.icon-button[data-v-c0d726ac]{cursor:pointer}.icon-button[data-v-c0d726ac],.icon-only[data-v-c0d726ac]{background:none;border:none;padding:0;color:var(--primary);font-size:1.8rem;margin-right:1rem}.icon-only[data-v-c0d726ac]{margin-top:.5rem}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".filter-select .vs__selected-options .vs__selected{text-align:left}.sortable-table{border-collapse:collapse;min-width:400px;border-radius:5px 5px 0 0;outline:1px solid var(--border);overflow:hidden;background:var(--sortable-table-bg);border-radius:4px}.sortable-table.overflow-x{overflow-x:visible}.sortable-table.overflow-y{overflow-y:visible}.sortable-table td{padding:8px 5px;border:0}.sortable-table td:first-child{padding-left:10px}.sortable-table td:last-child{padding-right:10px}.sortable-table td.row-check{padding-top:12px}.sortable-table tbody tr{border-bottom:1px solid var(--sortable-table-top-divider);background-color:var(--sortable-table-row-bg)}.sortable-table tbody tr.main-row.has-sub-row{border-bottom:0}.sortable-table tbody tr.main-row:not(.row-selected):hover+.sub-row{background-color:var(--sortable-table-hover-bg)}.sortable-table tbody tr:last-of-type{border-bottom:0}.sortable-table tbody tr.sub-row-hovered,.sortable-table tbody tr:hover{background-color:var(--sortable-table-hover-bg)}.sortable-table tbody tr.state-description>td{font-size:13px;padding-top:0;overflow-wrap:anywhere}.sortable-table tbody tr.active-row{color:var(--sortable-table-header-bg)}.sortable-table tbody tr.row-selected{background:var(--sortable-table-selected-bg)}.sortable-table tbody .no-rows td{padding:30px 0;text-align:center}.sortable-table tbody .no-results:hover,.sortable-table tbody .no-rows:hover{background-color:var(--body-bg)}.sortable-table tbody.group:before{content:\\\"\\\";display:block;height:20px;background-color:transparent}.sortable-table tbody tr.group-row{background-color:initial}.sortable-table tbody tr.group-row:first-child{border-bottom:2px solid var(--sortable-table-row-bg)}.sortable-table tbody tr.group-row:not(:first-child){margin-top:20px}.sortable-table tbody tr.group-row td{padding:0}.sortable-table tbody tr.group-row td:first-of-type{border-left:1px solid var(--sortable-table-accent-bg)}.sortable-table tbody tr.group-row .group-tab{height:40px;line-height:40px;padding:0 10px;border-radius:4px 4px 0 0;background-color:var(--sortable-table-row-bg);position:relative;top:1px;display:inline-block;z-index:10;min-width:72px}.sortable-table tbody tr.group-row .group-tab:after,.sortable-table tbody tr.group-row .group-tab:before{content:\\\" \\\";display:table}.sortable-table tbody tr.group-row .group-tab:after{clear:both}.sortable-table tbody tr.group-row .group-tab>SPAN{color:var(--sortable-table-group-label)}.sortable-table tbody tr.group-row .group-tab:after{height:40px;width:70px;border-radius:5px 5px 0 0;background-color:var(--sortable-table-row-bg);content:\\\"\\\";position:absolute;right:-15px;top:0;transform:skewX(40deg);z-index:-1}.for-inputs TABLE.sortable-table{width:100%;border-collapse:collapse;margin-bottom:10px}.for-inputs TABLE.sortable-table>TBODY>TR>TD,.for-inputs TABLE.sortable-table>THEAD>TR>TH{padding-right:10px;padding-bottom:10px}.for-inputs TABLE.sortable-table>TBODY>TR>TD:last-of-type,.for-inputs TABLE.sortable-table>THEAD>TR>TH:last-of-type{padding-right:0}.for-inputs TABLE.sortable-table>TBODY>TR:first-of-type>TD{padding-top:10px}.for-inputs TABLE.sortable-table>TBODY>TR:last-of-type>TD{padding-bottom:0}.for-inputs.clone TABLE.sortable-table>THEAD>TR>TH,.for-inputs.create TABLE.sortable-table>THEAD>TR>TH,.for-inputs.edit TABLE.sortable-table>THEAD>TR>TH{border-color:transparent}.sortable-table-header{position:relative;z-index:11}.sortable-table-header.titled{display:flex;align-items:center}.fixed-header-actions.button{grid-template-columns:[bulk] auto [middle] min-content [search] minmax(min-content,350px)}.fixed-header-actions{padding:0 0 20px 0;width:100%;z-index:11;background:transparent;display:grid;grid-template-columns:[bulk] auto [middle] min-content [search] minmax(min-content,200px);grid-column-gap:10px}.fixed-header-actions.advanced-filtering{grid-template-columns:[bulk] auto [middle] minmax(min-content,auto) [search] minmax(min-content,auto)}.fixed-header-actions .bulk{grid-area:bulk}.fixed-header-actions .bulk>BUTTON{display:none}.fixed-header-actions .bulk>BUTTON:not(:last-of-type){margin-right:10px}.fixed-header-actions .bulk .action-availability{display:none;margin-left:10px;vertical-align:middle;margin-top:2px}.fixed-header-actions .bulk .dropdown-button li.disabled{color:var(--disabled-text);cursor:not-allowed}.fixed-header-actions .bulk .dropdown-button li.disabled:hover{color:var(--disabled-text);background-color:unset;cursor:not-allowed}.fixed-header-actions .bulk .bulk-action .icon{vertical-align:-10%}.fixed-header-actions .middle{grid-area:middle;white-space:nowrap}.fixed-header-actions .middle .icon.icon-backup.animate{animation-name:spin;animation-duration:1s;animation-iteration-count:infinite;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fixed-header-actions .search{grid-area:search;text-align:right;justify-content:flex-end}.fixed-header-actions .bulk-actions-dropdown{display:none}.fixed-header-actions .bulk-actions-dropdown .dropdown-button{background-color:var(--primary)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button:hover{background-color:var(--primary-hover-bg);color:var(--primary-hover-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button .icon-chevron-down,.fixed-header-actions .bulk-actions-dropdown .dropdown-button>*{color:var(--primary-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button .button-divider{border-color:var(--primary-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled{border-color:var(--disabled-bg)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled .icon-chevron-down{color:var(--disabled-text)!important}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled .button-divider{border-color:var(--disabled-text)}.paging{margin-top:10px;text-align:center}.paging SPAN{display:inline-block;min-width:200px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","export * from \"-!../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.globalrole.vue?vue&type=style&index=0&id=effd72b0&prod&lang=scss&scoped=true&\"","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".labeled-select[data-v-0abf511e]{position:relative;padding-bottom:1px}.labeled-select.no-label.compact-input[data-v-0abf511e] .vs__actions:after{top:-2px}.labeled-select.no-label.compact-input .labeled-container[data-v-0abf511e]{padding:5px 0 1px 10px}.labeled-select.no-label[data-v-0abf511e]:not(.compact-input){height:61px;padding-top:4px}.labeled-select.no-label[data-v-0abf511e]:not(.compact-input) .vs__actions:after{top:0}.labeled-select .icon-spinner[data-v-0abf511e]{position:absolute;left:calc(50% - .5em);top:calc(50% - .5em)}.labeled-select .labeled-container[data-v-0abf511e]{padding:7px 0 0 10px;padding:10px 0 0 10px}.labeled-select .labeled-container label[data-v-0abf511e]{margin:0}.labeled-select .labeled-container .selected[data-v-0abf511e]{background-color:transparent}.labeled-select.view.labeled-input .labeled-container[data-v-0abf511e]{padding:0}.labeled-select.taggable.compact-input[data-v-0abf511e]{min-height:40px}.labeled-select.taggable.compact-input[data-v-0abf511e] .vs__selected-options{padding-top:8px!important}.labeled-select.taggable[data-v-0abf511e]:not(.compact-input){min-height:61px}.labeled-select.taggable[data-v-0abf511e]:not(.compact-input) .vs__selected-options{margin-top:0}.labeled-select[data-v-0abf511e]:not(.taggable) .vs__selected-options .vs__selected{width:100%}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options{padding:3px 0}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected{border-color:var(--accent-btn);height:20px;min-height:unset!important;padding:0 0 0 7px!important}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button{height:20px;line-height:14px}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button:hover{background-color:var(--primary);border-radius:0}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button:hover:after{color:#fff}.labeled-select[data-v-0abf511e] .vs__selected-options{margin-top:-5px}.labeled-select[data-v-0abf511e] .v-select:not(.vs--single) .vs__selected-options{padding:5px 0}.labeled-select[data-v-0abf511e] .vs__actions:after{position:relative;top:-10px}.labeled-select[data-v-0abf511e] .v-select.vs--open .vs__dropdown-toggle{color:var(--outline)!important}[data-v-0abf511e] .labeled-select.disabled .labeled-container,[data-v-0abf511e] .labeled-select.disabled .vs__dropdown-toggle,[data-v-0abf511e] .labeled-select.disabled input,[data-v-0abf511e] .labeled-select.disabled label{cursor:not-allowed}.labeled-select .no-label[data-v-0abf511e].v-select:not(.vs--single){min-height:33px}.labeled-select .no-label[data-v-0abf511e].selected{padding-top:8px;padding-bottom:9px;position:relative;max-height:2.3em;overflow:hidden}.labeled-select .no-label[data-v-0abf511e] .vs__selected-options{padding:8px 0 7px 0}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group[data-v-0abf511e]{display:flex}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group>b[data-v-0abf511e]{flex:1}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group>div[data-v-0abf511e]{background-color:var(--primary);border-radius:4px;color:var(--primary-text);font-size:12px;height:18px;line-height:18px;margin-top:1px;padding:0 10px}.vs__dropdown-option>.option-kind-highlighted[data-v-0abf511e]{color:var(--dropdown-highlight-text)}.vs__dropdown-option.vs__dropdown-option--highlight>.option-kind-highlighted[data-v-0abf511e],.vs__dropdown-option.vs__dropdown-option--selected>.option-kind-highlighted[data-v-0abf511e],.vs__dropdown-option>.option-kind-highlighted[data-v-0abf511e]:hover{color:var(--dropdown-hover-text)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n","import { isArray } from '@shell/utils/array';\n\nexport class ClusterNotFoundError extends Error {\n constructor(message) {\n super(message);\n this.name = 'ClusterNotFoundError';\n }\n}\n\nexport class ApiError extends Error {\n constructor(res) {\n super(stringify(res));\n this.status = res._status || 0;\n this.statusText = res._statusText;\n this.headers = res.headers;\n this.url = res._url;\n }\n\n toString() {\n return `[${ this.status } ${ this.statusText }]: ${ this.message }`;\n }\n\n toJSON() {\n return {\n type: 'error',\n status: this.status,\n statusText: this.statusText,\n message: this.statusMessage,\n url: this.url,\n };\n }\n}\n\nexport function stringify(err) {\n let str;\n\n if ( typeof err === 'string' ) {\n str = err;\n } else if ( err && typeof err === 'object' ) {\n if ( err.message ) {\n str = err.message;\n\n if (typeof str === 'string') {\n try {\n const data = JSON.parse(str).data;\n\n if (data) {\n return data;\n }\n } catch {}\n }\n\n if ( err.detail ) {\n if ( str ) {\n str += ` (${ err.detail })`;\n } else {\n str = err.detail;\n }\n }\n } else if ( err.detail ) {\n str = err.detail;\n } else if ( err.url ) {\n str = `from ${ err.url }`;\n }\n }\n\n if (!str) {\n // Good luck...\n str = JSON.stringify(err);\n }\n\n return str;\n}\n\nexport function exceptionToErrorsArray(err) {\n if ( err?.response?.data ) {\n const body = err.response.data;\n\n if ( body && body.message ) {\n return [body.message];\n } else {\n return [err];\n }\n } else if (err.status && err.message) {\n return [err.message];\n } else if ( isArray(err) ) {\n return err;\n } else {\n return [err];\n }\n}\n","\nimport Resource from './resource-class';\n\nexport const BY_TYPE = 'byType';\n\nexport const SELF = '__[[SELF]]__';\n\nexport function classify(ctx, obj, isClone = false) {\n if ( obj instanceof Resource ) {\n return obj;\n }\n\n const customModel = ctx.getters['classify'](obj);\n\n const out = new customModel(obj, ctx, (process.server ? ctx.state.config.namespace : null), isClone);\n\n if ( process.server ) {\n Object.defineProperty(obj, '__rehydrate', {\n value: ctx.state.config.namespace,\n enumerable: true,\n configurable: true\n });\n\n if ( isClone ) {\n Object.defineProperty(obj, '__clone', {\n value: true,\n enumerable: true,\n configurable: true,\n writable: true\n });\n }\n }\n\n return out;\n}\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABjFBMVEVHcEwMMiwJLi4MMiwMMiwNMy0MMysMMiwNNC4MMiwMMiwMMiwMMiwMMiz///8MMix9ko7O1tUQNS+pt7UTODLn6+oNMy2/ycihr63c4eAONC5xh4RHZF/d4uFhenbi5+YrTUdyiIXM1NJsg4AqTEbJ0dAaPjjX3dyRo6C5xMPl6en2+Pjr7u4qS0YgQz0yUk1cdnLAysgPNC6GmZYfQj2TpKF7j4xrgn9vhoJPamZQa2cvUEuQoZ6Nn5xWcW3o7OuKnJk3VlH9/f2ls7Gvu7lMaGO9yMYUODMeQTzN1dTv8fEhRD5Tbmr19/eotrQzU06VpqPI0M/CzMpqgn68x8XS2djs7+5AXlqsubcVOTOerasdQDuYqKYwUUuClpN4jYlje3dUb2tSbWh6jotTbWmXp6X6+/vq7e3P19aSo6H4+fnK0tFBX1oZPTj09fXu8fB8kY41VVBCYFuuu7n+/v40VE9Xcm17kI3W3Nu2wb9IZWC+yMfg5OQ+XFc2VVBZc2+ntbO7xsSZqaY/XVnvk2EjAAAADnRSTlMArxyp8Siw8ifvrq3s8H1RQAIAAAFMSURBVDjLzZNVcwIxEICDH5Vd3B2KFYe6UHd3d3d37x9vrsNAe8Mdb51+D5lJ9stsks0SIpMrkAeFiCFEpkQBlAyRoyDlRCEsSAmW4G8FX2O9qrauwfU9ae/mCE01dsih17Zq0Ar9CUtBiHZ1wE+yVjcdzZOpnOAdBi4DAM4F85SFFQxjUIzIIursDlZYKRoHI8aWTHNUiO/ASfoiepSO/Baqlw2z4WkqbMPpOaauMxir4hjGGb2WCntwhi9PcHV5nAlz0yR7qWCGB3xP+p4DIdwohEKdPcYRdx97TQ8k8DGI+ApxpElaVKqgE0BXeOp9uMfPN8Qb2MIhAAdd9AegWZMXXAdwSx/VfwijiG1qtYlutnnUWk2+Fl6Auw+THiZ4q7m2yx5rfJC/3PPrm6s2w3/4cjxCicapJCJhQUIYweatEBPClEl5G1MiJl+FK1ex1JQuFwAAAABJRU5ErkJggg==\"","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';\nimport { NODE as NODE_TYPE } from '@shell/config/types';\nimport { COLUMN_BREAKPOINTS } from '@shell/components/SortableTable/index.vue';\n\n// Note: 'id' is always the last sort, so you don't have to specify it here.\n\nexport const STATE = {\n name: 'state',\n labelKey: 'tableHeaders.state',\n sort: ['stateSort', 'nameSort'],\n value: 'stateDisplay',\n getValue: (row) => row.stateDisplay,\n width: 100,\n default: 'unknown',\n formatter: 'BadgeStateFormatter',\n};\n\nexport const DOWNLOAD = {\n name: 'download',\n labelKey: 'tableHeaders.download',\n value: 'download',\n canBeVariable: true,\n align: 'right',\n};\n\n// This header is used for nodes in\n// both Cluster Explorer and Cluster Management.\nexport const INTERNAL_EXTERNAL_IP = {\n // @TODO this is called internal/external but displays external/internal (╯°□°)╯︵ ┻━┻\n name: 'internal-external-ip',\n labelKey: 'tableHeaders.internalExternalIp',\n search: ['externalIp', 'internalIp'],\n sort: ['externalIp', 'internalIp'],\n formatter: 'InternalExternalIP'\n};\n\nexport const NAME = {\n name: 'name',\n labelKey: 'tableHeaders.name',\n value: 'nameDisplay',\n getValue: (row) => row.nameDisplay,\n sort: ['nameSort'],\n formatter: 'LinkDetail',\n canBeVariable: true,\n};\n\nexport const LOGGING_OUTPUT_PROVIDERS = {\n name: 'logging-output-providers',\n labelKey: 'tableHeaders.loggingOutputProviders',\n value: 'providersDisplay',\n sort: ['providersSortable'],\n formatter: 'List',\n};\n\nexport const SIMPLE_NAME = {\n name: 'name',\n labelKey: 'tableHeaders.simpleName',\n value: 'name',\n sort: ['name'],\n width: 200,\n canBeVariable: true,\n};\n\nexport const EFFECT = {\n name: 'effect',\n labelKey: 'tableHeaders.effect',\n value: 'effect',\n sort: ['effect'],\n};\n\nexport const STORAGE_CLASS_PROVISIONER = {\n name: 'storage_class_provisioner',\n labelKey: 'tableHeaders.storage_class_provisioner',\n value: 'provisionerDisplay',\n sort: ['provisioner'],\n};\n\nexport const STORAGE_CLASS_DEFAULT = {\n name: 'storage_class_default',\n labelKey: 'tableHeaders.default',\n value: 'isDefault',\n sort: ['isDefault'],\n formatter: 'Checked',\n};\n\nexport const PERSISTENT_VOLUME_SOURCE = {\n name: 'persistent_volume_source',\n labelKey: 'tableHeaders.persistentVolumeSource',\n value: 'source',\n sort: ['provisioner'],\n};\n\nexport const PERSISTENT_VOLUME_CLAIM = {\n name: 'persistent-volume-claim',\n labelKey: 'tableHeaders.persistentVolumeClaim',\n sort: ['nameSort'],\n value: 'claimName',\n formatter: 'LinkDetail',\n formatterOpts: { reference: 'claim.detailLocation' },\n};\n\nexport const OUTPUT = {\n name: 'localOutputRefs',\n labelKey: 'tableHeaders.output',\n value: 'outputs',\n sort: ['outputsSortable'],\n formatter: 'ListLink',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const CONFIGURED_PROVIDERS = {\n name: 'providers',\n labelKey: 'tableHeaders.providers',\n value: 'providersDisplay',\n sort: 'providersSortable',\n formatter: 'List'\n};\n\nexport const CLUSTER_OUTPUT = {\n ...OUTPUT,\n name: 'globalOutputRefs',\n value: 'clusterOutputs',\n sort: ['clusterOutputsSortable'],\n labelKey: 'tableHeaders.clusterOutput',\n};\n\nexport const ID_UNLINKED = {\n name: 'id',\n labelKey: 'tableHeaders.id',\n value: 'id',\n sort: ['id'],\n canBeVariable: true,\n};\n\nexport const NAME_UNLINKED = {\n name: 'name',\n labelKey: 'tableHeaders.nameUnlinked',\n value: 'nameDisplay',\n sort: ['nameSort'],\n canBeVariable: true,\n};\n\nexport const NAMESPACE = {\n name: 'namespace',\n labelKey: 'tableHeaders.namespace',\n value: 'namespace',\n getValue: (row) => row.namespace,\n sort: 'namespace',\n dashIfEmpty: true,\n};\n\nexport const NODE = {\n name: 'node',\n labelKey: 'tableHeaders.node',\n value: 'spec.nodeName',\n getValue: (row) => row.spec?.nodeName,\n sort: 'spec.nodeName',\n formatter: 'LinkName',\n formatterOpts: { type: NODE_TYPE },\n};\n\nexport const NODE_NAME = {\n name: 'nodeName',\n labelKey: 'tableHeaders.nodeName',\n sort: 'name',\n value: 'name',\n getValue: (row) => row.name,\n formatter: 'LinkDetail',\n};\n\nexport const ROLES = {\n name: 'roles',\n labelKey: 'tableHeaders.roles',\n sort: 'roles',\n value: 'roles'\n};\n\nexport const VERSION = {\n name: 'version',\n labelKey: 'tableHeaders.version',\n sort: 'version',\n value: 'version',\n getValue: (row) => row.version\n};\n\nexport const CPU = {\n name: 'cpu',\n labelKey: 'tableHeaders.cpu',\n sort: 'cpuUsage',\n search: false,\n value: 'cpuUsagePercentage',\n formatter: 'PercentageBar',\n width: 120,\n};\n\nexport const RAM = {\n name: 'ram',\n labelKey: 'tableHeaders.ram',\n sort: 'ramUsage',\n search: false,\n value: 'ramUsagePercentage',\n formatter: 'PercentageBar',\n width: 120,\n};\n\nexport const PRINCIPAL = {\n name: 'principal',\n labelKey: 'tableHeaders.name',\n sort: 'principal.loginName',\n value: 'principalId',\n formatter: 'Principal',\n};\n\nexport const PODS = {\n name: 'pods',\n labelKey: 'tableHeaders.pods',\n sort: 'podConsumed',\n search: false,\n value: (row) => row.podConsumedUsage,\n formatter: 'PercentageBar',\n width: 120,\n};\n\nexport const AGE = {\n name: 'age',\n labelKey: 'tableHeaders.age',\n value: 'creationTimestamp',\n getValue: (row) => row.creationTimestamp,\n sort: 'creationTimestamp:desc',\n search: false,\n formatter: 'LiveDate',\n width: 100,\n align: 'left'\n};\n\nexport const AGE_NORMAN = {\n ...AGE,\n getValue: (row) => row.created,\n value: 'created',\n sort: 'created:desc',\n};\n\nexport const CREATION_DATE = {\n name: 'date',\n labelKey: 'tableHeaders.date',\n value: 'metadata.creationTimestamp',\n sort: ['date'],\n formatter: 'Date'\n};\n\nexport const DESCRIPTION = {\n name: 'description',\n labelKey: 'tableHeaders.description',\n align: 'left',\n sort: ['description'],\n width: 300,\n};\n\nexport const DURATION = {\n name: 'duration',\n labelKey: 'tableHeaders.duration',\n value: 'duration.value',\n sort: 'duration.seconds',\n formatter: 'LiveDuration',\n};\n\nexport const IMAGE_NAME = {\n name: 'image',\n labelKey: 'tableHeaders.image',\n value: 'image',\n sort: ['image', 'nameSort'],\n formatter: 'ImageName',\n};\n\nexport const POD_IMAGES = {\n name: 'pod_images',\n labelKey: 'tableHeaders.podImages',\n value: 'imageNames',\n getValue: (row) => row.imageNames,\n sort: 'imageNames',\n // search: 'imageNames',\n formatter: 'PodImages'\n};\n\nexport const POD_RESTARTS = {\n name: 'pod_restarts',\n labelKey: 'tableHeaders.podRestarts',\n formatter: 'LivePodRestarts',\n delayLoading: true,\n value: 'restartCount',\n getValue: (row) => row.restartCount,\n // This column is expensive to compute, so don't make it searchable\n search: false,\n liveUpdates: true\n};\n\nexport const ENDPOINTS = {\n name: 'endpoint',\n labelKey: 'tableHeaders.endpoints',\n value: 'status.endpoints',\n formatter: 'Endpoints',\n width: 60,\n align: 'center',\n};\n\nexport const SCALE = {\n name: 'scale',\n labelKey: 'tableHeaders.scale',\n value: 'scales.desired',\n sort: ['scales.desired', 'nameSort'],\n formatter: 'Scale',\n width: 60,\n align: 'center',\n};\n\nexport const SIMPLE_SCALE = {\n name: 'simple-scale',\n labelKey: 'tableHeaders.simpleScale',\n value: 'scale',\n sort: ['scale']\n};\n\nexport const WEIGHT = {\n name: 'weight',\n labelKey: 'tableHeaders.weight',\n value: 'status.computedWeight',\n sort: 'status.computedWeight',\n formatter: 'Weight',\n width: 60,\n align: 'center',\n};\n\nexport const SUCCESS = {\n name: 'success',\n labelKey: 'tableHeaders.success',\n value: 'success',\n width: 100,\n align: 'right',\n};\n\nexport const REQ_RATE = {\n name: 'req-rate',\n labelKey: 'tableHeaders.reqRate',\n value: 'rps',\n width: 100,\n align: 'right',\n};\n\nexport const P95 = {\n name: 'p95',\n labelKey: 'tableHeaders.p95',\n value: 'p95',\n width: 100,\n align: 'right',\n};\n\nexport const KEYS = {\n name: 'keys',\n labelKey: 'tableHeaders.keys',\n sort: false,\n value: 'keysDisplay',\n};\n\nexport const TARGET_KIND = {\n name: 'target-kind',\n labelKey: 'tableHeaders.targetKind',\n value: 'kindDisplay',\n width: 100,\n};\n\nexport const TARGET = {\n name: 'target',\n labelKey: 'tableHeaders.target',\n value: 'targetDisplay',\n};\n\nexport const USERNAME = {\n name: 'username',\n labelKey: 'tableHeaders.username',\n value: 'username',\n dashIfEmpty: true,\n sort: 'username',\n};\n\nexport const USER_DISPLAY_NAME = {\n name: 'name',\n labelKey: 'tableHeaders.name',\n value: 'nameDisplay',\n sort: ['nameSort'],\n dashIfEmpty: true,\n};\n\nexport const USER_PROVIDER = {\n name: 'provider',\n labelKey: 'tableHeaders.provider',\n value: 'providerDisplay',\n dashIfEmpty: true,\n sort: 'providerDisplay',\n};\n\nexport const USER_ID = {\n name: 'user-id',\n labelKey: 'tableHeaders.userId',\n value: 'id',\n formatter: 'LinkDetail',\n canBeVariable: true,\n sort: 'id',\n};\n\nexport const ADDRESS = {\n name: 'address',\n labelKey: 'tableHeaders.address',\n value: 'address',\n sort: ['address'],\n};\n\nexport const SIMPLE_TYPE = {\n name: 'type',\n labelKey: 'tableHeaders.simpleType',\n value: 'type',\n sort: ['type'],\n width: 175,\n};\n\nexport const IMAGE_SIZE = {\n name: 'sizeBytes',\n labelKey: 'tableHeaders.imageSize',\n value: 'sizeBytes',\n sort: ['sizeBytes'],\n formatter: 'Si'\n};\n\nexport const TYPE = {\n name: 'type',\n labelKey: 'tableHeaders.type',\n value: 'typeDisplay',\n getValue: (row) => row.typeDisplay,\n sort: ['typeDisplay'],\n width: 100,\n};\n\nexport const SUB_TYPE = {\n name: 'subType',\n labelKey: 'tableHeaders.subType',\n value: 'subTypeDisplay',\n sort: ['subTypeDisplay'],\n width: 120,\n};\n\nexport const EVENT_TYPE = {\n name: 'type',\n labelKey: 'tableHeaders.type',\n value: 'eventType',\n sort: 'eventType',\n};\n\nexport const STATUS = {\n name: 'status',\n labelKey: 'tableHeaders.status',\n value: 'status',\n sort: ['status'],\n width: 175\n};\nexport const LAST_SEEN_TIME = {\n name: 'lastSeen',\n labelKey: 'tableHeaders.lastSeen',\n value: 'lastSeen',\n sort: 'lastTimestamp:desc',\n tooltip: 'tableHeaders.lastSeenTooltip'\n};\nexport const LAST_HEARTBEAT_TIME = {\n name: 'lastHeartbeatTime',\n labelKey: 'tableHeaders.lastSeen',\n value: 'lastHeartbeatTime',\n sort: ['lastHeartbeatTime'],\n formatter: 'LiveDate',\n width: 175\n};\nexport const REASON = {\n name: 'reason',\n labelKey: 'tableHeaders.reason',\n value: 'reason',\n sort: ['reason']\n};\nexport const OBJECT = {\n name: 'object',\n labelKey: 'tableHeaders.object',\n value: 'involvedObject',\n sort: ['involvedObject.kind', 'involvedObject.name'],\n canBeVariable: true,\n formatter: 'InvolvedObjectLink',\n};\nexport const RECLAIM_POLICY = {\n name: 'reclaimPolicy',\n labelKey: 'tableHeaders.reclaimPolicy',\n value: 'spec.persistentVolumeReclaimPolicy',\n sort: ['spec.persistentVolumeReclaimPolicy']\n};\nexport const PV_REASON = {\n name: 'pvReason',\n labelKey: 'tableHeaders.reason',\n value: 'status.reason',\n sort: ['status.reason']\n};\n\nexport const MESSAGE = {\n name: 'message',\n labelKey: 'tableHeaders.message',\n value: 'message',\n sort: ['message']\n};\nexport const KEY = {\n name: 'key',\n labelKey: 'tableHeaders.key',\n value: 'key',\n sort: ['key']\n};\nexport const VALUE = {\n name: 'value',\n labelKey: 'tableHeaders.value',\n value: 'value',\n sort: ['value'],\n};\n\nexport const BUILT_IN = {\n name: 'builtIn',\n labelKey: 'tableHeaders.builtIn',\n value: 'builtIn',\n sort: ['builtIn'],\n align: 'center',\n formatter: 'IconIsDefault'\n};\n\nexport const CLUSTER_CREATOR_DEFAULT = {\n name: 'default',\n labelKey: 'tableHeaders.clusterCreatorDefault',\n value: 'default',\n sort: ['Default'],\n align: 'center',\n formatter: 'IconIsDefault'\n};\n\nexport const RBAC_DEFAULT = {\n name: 'default',\n labelKey: 'tableHeaders.default',\n value: 'default',\n formatter: 'Checked',\n sort: ['default']\n};\n\nexport const RBAC_BUILTIN = {\n name: 'builtin',\n labelKey: 'tableHeaders.builtin',\n value: 'builtin',\n formatter: 'Checked',\n sort: ['builtin']\n};\n\nexport const RESOURCE = {\n name: 'resource',\n labelKey: 'tableHeaders.resource',\n value: 'resource',\n sort: ['resourceNames']\n};\n\nexport const API_GROUP = {\n name: 'apigroups',\n labelKey: 'tableHeaders.apiGroup',\n value: 'apiGroups',\n sort: ['apiGroups']\n};\n\nexport const INGRESS_CLASS = {\n name: 'ingressClassName',\n labelKey: 'tableHeaders.ingressClass',\n value: `$['spec']['ingressClassName']`,\n sort: `$['spec']['ingressClassName']`,\n};\n\nexport const INGRESS_DEFAULT_BACKEND = {\n name: 'ingressDefaultBackend',\n labelKey: 'tableHeaders.ingressDefaultBackend',\n value: 'hasDefaultBackend',\n sort: ['hasDefaultBackend:desc'],\n formatter: 'Checked',\n width: 75,\n align: 'center'\n};\n\nexport const INGRESS_TARGET = {\n name: 'ingressTarget',\n labelKey: 'tableHeaders.ingressTarget',\n value: \"$['spec']\",\n formatter: 'IngressTarget',\n sort: \"$['spec']['rules'][0].host\",\n};\n\nexport const SPEC_TYPE = {\n name: 'type',\n labelKey: 'tableHeaders.type',\n value: `$['spec']['type']`,\n sort: `$['spec']['type']`,\n formatter: 'ServiceType',\n};\n\nexport const TARGET_PORT = {\n formatter: 'ServiceTargets',\n labelKey: 'tableHeaders.targetPort',\n name: 'targetPort',\n sort: `$['spec']['targetPort']`,\n value: `$['spec']['targetPort']`,\n};\n\nexport const SELECTOR = {\n formatter: 'KeyValue',\n name: 'selector',\n labelKey: 'tableHeaders.selector',\n value: `$['spec']['selector']`,\n sort: `$['spec']['selector']`,\n};\n\nexport const CHART = {\n name: 'chart',\n labelKey: 'tableHeaders.chart',\n value: 'chartDisplay',\n sort: ['chartDisplay', 'versionSort'],\n};\n\nexport const CHART_UPGRADE = {\n name: 'upgrade',\n labelKey: 'tableHeaders.upgrade',\n value: 'upgradeAvailable',\n sort: 'upgradeAvailableSort:desc',\n dashIfEmpty: true,\n};\n\nexport const RESOURCES = {\n name: 'resources',\n labelKey: 'tableHeaders.resources',\n value: 'spec.resources.length',\n sort: 'spec.resources.length',\n width: 100,\n};\n\nexport const URL = {\n name: 'url',\n labelKey: 'tableHeaders.url',\n value: 'spec.url',\n sort: 'spec.url',\n};\n\nexport const LAST_UPDATED = {\n name: 'lastUpdated',\n labelKey: 'tableHeaders.lastUpdated',\n value: 'lastTransitionTime',\n formatter: 'LiveDate',\n formatterOpts: { addSuffix: true },\n sort: ['lastTransitionTime']\n};\n\nexport const WORKSPACE = {\n name: 'workspace',\n label: 'Workspace',\n value: 'metadata.namespace',\n sort: ['metadata.namespace', 'nameSort'],\n};\n\nexport const WORKLOAD_IMAGES = {\n ...POD_IMAGES,\n value: '',\n breakpoint: COLUMN_BREAKPOINTS.LAPTOP\n};\n\nexport const WORKLOAD_ENDPOINTS = {\n name: 'workloadEndpoints',\n labelKey: 'tableHeaders.endpoints',\n value: `$['metadata']['annotations']['${ CATTLE_PUBLIC_ENDPOINTS }']`,\n getValue: (row) => row.metadata?.annotations?.[CATTLE_PUBLIC_ENDPOINTS],\n formatter: 'Endpoints',\n dashIfEmpty: true,\n breakpoint: COLUMN_BREAKPOINTS.DESKTOP,\n maxPageSize: 25, // Hide this column when the page size is bigger than 25\n};\n\nexport const WORKLOAD_HEALTH_SCALE = {\n name: 'workloadHealthScale',\n labelKey: 'tableHeaders.health',\n formatter: 'WorkloadHealthScale',\n getValue: () => undefined,\n width: 150,\n skipSelect: true,\n delayLoading: true,\n // This column is expensive to compute, so don't make it searchable\n search: false,\n liveUpdates: true,\n};\n\nexport const FLEET_SUMMARY = {\n name: 'summary',\n labelKey: 'tableHeaders.resources',\n value: 'status.resourceCounts',\n sort: false,\n search: false,\n formatter: 'FleetSummaryGraph',\n align: 'center',\n width: 100,\n};\n\nexport const APP_SUMMARY = {\n name: 'summary',\n labelKey: 'tableHeaders.resources',\n value: 'deployedResources.length',\n sort: false,\n search: false,\n formatter: 'AppSummaryGraph',\n align: 'center',\n width: 100,\n};\n\nexport const CONSTRAINT_VIOLATION_CONSTRAINT_LINK = {\n name: 'Constraint',\n labelKey: 'tableHeaders.constraint',\n value: 'constraintLink',\n sort: `constraintLink.text`,\n formatter: 'Link',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const CONSTRAINT_VIOLATION_RESOURCE_LINK = {\n name: 'Name',\n labelKey: 'tableHeaders.name',\n value: 'resourceLink',\n sort: `resourceLink.text`,\n search: `resourceLink.text`,\n formatter: 'Link',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const CONSTRAINT_VIOLATION_TYPE = {\n name: 'Type',\n labelKey: 'tableHeaders.type',\n value: `kind`,\n sort: `kind`\n};\n\nexport const CONSTRAINT_VIOLATION_NAMESPACE = {\n name: 'Namespace',\n labelKey: 'tableHeaders.namespace',\n value: `namespace`,\n sort: `namespace`,\n search: `namespace`,\n};\n\nexport const CONSTRAINT_VIOLATION_MESSAGE = {\n name: 'Message',\n labelKey: 'tableHeaders.message',\n value: `message`,\n sort: `message`\n};\n\nexport const CONSTRAINT_VIOLATION_TEMPLATE_LINK = {\n name: 'TemplateLink',\n labelKey: 'tableHeaders.template',\n value: `templateLink`,\n sort: `templateLink.text`,\n formatter: 'Link',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const CONSTRAINT_VIOLATION_COUNT = {\n name: 'Count',\n labelKey: 'tableHeaders.count',\n value: `count`,\n sort: `count`,\n formatter: 'QualityText',\n formatterOpts: {\n qualityFn(value) {\n if (value <= 10) {\n return 'success';\n }\n\n if (value <= 20) {\n return 'warning';\n }\n\n return 'error';\n }\n }\n};\n\nexport const RECEIVER_PROVIDERS = {\n name: 'receiver-providers',\n label: 'Configured Providers',\n value: 'receiverTypes',\n sort: 'receiverTypes',\n formatter: 'List',\n};\n\nexport const CONFIGURED_RECEIVER = {\n name: 'receiver',\n label: 'Configured Receiver',\n value: 'receiverLink',\n sort: 'receiverLink.text',\n formatter: 'Link',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const GROUP_NAME = {\n name: 'group-name',\n labelKey: 'tableHeaders.groupName',\n value: 'id',\n sort: ['name'],\n search: ['name'],\n formatter: 'Principal',\n width: 350\n};\n\nexport const GROUP_ROLE_NAME = {\n name: 'group-role-names',\n labelKey: 'tableHeaders.groupRoleNames',\n value: 'id',\n formatter: 'PrincipalGroupBindings',\n};\n\nexport const HPA_REFERENCE = {\n name: 'reference',\n labelKey: 'tableHeaders.hpaReference',\n value: 'spec.scaleTargetRef.name',\n sort: 'spec.scaleTargetRef.name',\n};\n\nexport const MIN_REPLICA = {\n name: 'minimum-replica',\n labelKey: 'tableHeaders.minReplicas',\n value: 'spec.minReplicas',\n sort: 'spec.minReplicas',\n};\n\nexport const MAX_REPLICA = {\n name: 'maximum-replica',\n labelKey: 'tableHeaders.maxReplicas',\n value: 'spec.maxReplicas',\n sort: 'spec.maxReplicas',\n};\n\nexport const CURRENT_REPLICA = {\n name: 'current-replica',\n labelKey: 'tableHeaders.currentReplicas',\n value: 'status.currentReplicas',\n sort: 'status.currentReplicas',\n};\n\nexport const EXPIRY_STATE = {\n ...STATE,\n value: '$',\n formatter: 'LiveExpiryBadgeState',\n};\n\nexport const ACCESS_KEY = {\n name: 'id',\n labelKey: 'tableHeaders.accessKey',\n align: 'left',\n sort: ['name'],\n width: 200,\n};\n\nexport const SCOPE = {\n name: 'scope',\n value: 'clusterName',\n labelKey: 'tableHeaders.scope',\n dashIfEmpty: true,\n align: 'left',\n sort: ['scope'],\n width: 100,\n};\n\nexport const SCOPE_NORMAN = {\n ...SCOPE,\n value: 'clusterId',\n sort: ['clusterId'],\n};\n\nexport const EXPIRES = {\n name: 'expires',\n value: 'expiresAt',\n labelKey: 'tableHeaders.expires',\n align: 'left',\n sort: ['expiresAt'],\n width: 200,\n formatter: 'LiveExpiryDate'\n};\n\nexport const RESTART = {\n name: 'restart',\n labelKey: 'tableHeaders.restart',\n value: 'restartRequired',\n sort: ['restartRequired', 'nameSort'],\n formatter: 'Checked',\n width: 75,\n align: 'center'\n};\n\nexport const ROLE = {\n name: 'role',\n value: 'roleDisplay',\n labelKey: 'tableHeaders.role',\n};\n\nexport const FEATURE_DESCRIPTION = {\n name: 'description',\n labelKey: 'tableHeaders.description',\n value: 'status.description',\n align: 'left',\n sort: ['status.description'],\n formatter: 'Translate',\n formatterOpts: { prefix: 'featureFlags.description' },\n};\n\nexport const STATE_NORMAN = {\n name: 'state',\n labelKey: 'tableHeaders.state',\n sort: ['stateSort', 'nameSort'],\n value: 'stateDisplay',\n width: 100,\n default: 'unknown',\n formatter: 'BadgeStateFormatter',\n};\n\nexport const KUBE_NODE_OS = {\n name: 'operating-system',\n labelKey: 'tableHeaders.operatingSystem',\n value: 'status.nodeInfo.operatingSystem',\n sort: ['status.nodeInfo.operatingSystem'],\n formatter: 'Capitalize'\n};\n\nexport const MACHINE_NODE_OS = {\n name: 'operating-system',\n labelKey: 'tableHeaders.operatingSystem',\n value: 'operatingSystem',\n sort: ['operatingSystem'],\n formatter: 'Capitalize',\n dashIfEmpty: true,\n};\n\nexport const MANAGEMENT_NODE_OS = {\n name: 'operating-system',\n labelKey: 'tableHeaders.operatingSystem',\n value: 'status.internalNodeStatus.nodeInfo.operatingSystem',\n sort: ['status.internalNodeStatus.nodeInfo.operatingSystem'],\n formatter: 'Capitalize',\n dashIfEmpty: true,\n};\n\n// FLEET\n\nexport const FLEET_BUNDLE_LAST_UPDATED = {\n name: 'lastUpdated',\n labelKey: 'tableHeaders.lastUpdated',\n value: 'lastUpdateTime',\n formatter: 'LiveDate',\n formatterOpts: { addSuffix: true },\n sort: ['lastUpdateTime']\n};\n\nexport const FLEET_BUNDLE_TYPE = {\n name: 'bundleType',\n labelKey: 'tableHeaders.fleetBundleType',\n value: 'bundleType',\n sort: ['bundleType'],\n width: 100,\n};\n\nexport const UI_PLUGIN_CATALOG = [\n {\n name: 'state',\n labelKey: 'tableHeaders.state',\n sort: ['stateSort', 'nameSort'],\n value: 'state',\n width: 100,\n default: 'unknown',\n formatter: 'BadgeStateFormatter',\n formatterOpts: { arbitrary: true }\n },\n {\n name: 'name',\n labelKey: 'tableHeaders.name',\n value: 'name',\n sort: ['nameSort'],\n formatter: 'LinkDetail'\n },\n {\n name: 'image',\n sort: ['image'],\n labelKey: 'plugins.manageCatalog.headers.image.label',\n value: 'deploymentImage'\n },\n {\n name: 'cacheState',\n sort: ['cacheState'],\n labelKey: 'plugins.manageCatalog.headers.cacheState.label',\n value: 'cacheState',\n formatter: 'ExtensionCache'\n }\n];\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".labeled-tooltip{position:absolute;width:100%;height:100%;left:0;top:0}.labeled-tooltip.hoverable{height:0%}.labeled-tooltip .status-icon{position:absolute;right:30px;top:18px;z-index:3}.labeled-tooltip .tooltip{position:absolute;width:calc(100% + 2px);top:calc(100% + 6px)}.labeled-tooltip .tooltip .tooltip-arrow{right:30px}.labeled-tooltip .tooltip .tooltip-inner{padding:10px}.labeled-tooltip.error .status-icon{color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-inner{color:var(--input-bg);background:var(--error);border-color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-arrow{border-bottom-color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-arrow:after{border:none}.labeled-tooltip.error .status-icon{top:7px;right:5px}.labeled-tooltip.warning .status-icon{color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-inner{color:var(--input-bg);background:var(--warning);border-color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-arrow{border-bottom-color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-arrow:after{border:none}.labeled-tooltip.success .status-icon{color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-inner{color:var(--input-bg);background:var(--success);border-color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-arrow{border-bottom-color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-arrow:after{border:none}.tooltip .tooltip-inner>pre{padding:2px;vertical-align:middle}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","export * from \"-!../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonDropdown.vue?vue&type=style&index=0&id=4b526572&prod&lang=scss&scoped=true&\"","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.project.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.project.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./management.cattle.io.project.vue?vue&type=template&id=3a26ac99&scoped=true&\"\nimport script from \"./management.cattle.io.project.vue?vue&type=script&lang=js&\"\nexport * from \"./management.cattle.io.project.vue?vue&type=script&lang=js&\"\nimport style0 from \"./management.cattle.io.project.vue?vue&type=style&index=0&id=3a26ac99&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3a26ac99\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Card.vue?vue&type=style&index=0&id=6b7b8e40&prod&lang=scss&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]{background-color:transparent;border:none;font-size:18px}.table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]:focus,.table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]:hover{background-color:var(--accent-btn);box-shadow:none}.table-options-group .table-options-container[data-v-96d8a090]{width:350px;border:1px solid var(--primary);background-color:var(--body-bg);padding:20px;z-index:1}.table-options-group .table-options-container .table-options-grouping[data-v-96d8a090]{display:flex;align-items:center;margin-bottom:20px}.table-options-group .table-options-container .table-options-grouping span[data-v-96d8a090]{white-space:nowrap;margin-right:10px}.table-options-group .table-options-container ul[data-v-96d8a090]{list-style:none;margin:0;padding:0;max-height:200px;overflow-y:auto}.table-options-group .table-options-container ul li[data-v-96d8a090]{margin:0;padding:0}.table-options-group .table-options-container ul li.visible[data-v-96d8a090]{margin:0 0 10px 0}.sortable>SPAN[data-v-96d8a090]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.sortable>SPAN[data-v-96d8a090]:active,.sortable>SPAN[data-v-96d8a090]:hover{text-decoration:underline;color:var(--body-text)}thead tr[data-v-96d8a090]{background-color:var(--sortable-table-header-bg);color:var(--body-text);text-align:left}thead tr[data-v-96d8a090]:not(.loading){border-bottom:1px solid var(--sortable-table-top-divider)}th[data-v-96d8a090]{padding:8px 5px;font-weight:400;border:0;color:var(--body-text)}th .table-header-container[data-v-96d8a090]{display:inherit}th .table-header-container>span[data-v-96d8a090]{display:flex;align-items:center}th .table-header-container.not-filterable[data-v-96d8a090],th .table-header-container.not-filterable .icon-stack[data-v-96d8a090]{margin-top:-2px}th .table-header-container .not-filter-icon[data-v-96d8a090]{font-size:16px;color:var(--primary);vertical-align:super}th[data-v-96d8a090]:first-child{padding-left:10px}th[data-v-96d8a090]:last-child{padding-right:10px}th:not(.sortable)>SPAN[data-v-96d8a090]{display:block;margin-bottom:2px}th A[data-v-96d8a090]{color:var(--body-text)}@media only screen and (max-width:480px){th.desktop[data-v-96d8a090],th.laptop[data-v-96d8a090],th.tablet[data-v-96d8a090]{display:none}}@media only screen and (max-width:992px){th.desktop[data-v-96d8a090],th.laptop[data-v-96d8a090]{display:none}}@media only screen and (max-width:1281px){th.desktop[data-v-96d8a090]{display:none}}.icon-stack[data-v-96d8a090]{width:12px}.icon-sort.faded[data-v-96d8a090]{opacity:.3}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"mt-10\"},[_c('div',{staticClass:\"mb-30\"},[_vm._v(\" \"+_vm._s(_vm.t('promptRemove.attemptingToRemove', { type: _vm.type }))+\" \"),_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.podNames),expression:\"podNames\"}],staticClass:\"machine-name\"})]),_c('div',{staticClass:\"mb-30\"},[_c('Checkbox',{attrs:{\"label\":_vm.t('promptForceRemove.forceDelete')},model:{value:(_vm.forceDelete),callback:function ($$v) {_vm.forceDelete=$$v},expression:\"forceDelete\"}})],1),_c('Banner',{attrs:{\"color\":\"warning\",\"label-key\":\"promptForceRemove.podRemoveWarning\"}}),_vm._l((_vm.errors),function(error,i){return _c('Banner',{key:i,attrs:{\"color\":\"error\",\"label\":error}})})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"banner\",class:{\n [_vm.color]: true,\n }},[(_vm.icon)?_c('div',{staticClass:\"banner__icon\",attrs:{\"data-testid\":\"banner-icon\"}},[_c('i',{staticClass:\"icon icon-2x\",class:_vm.icon})]):_vm._e(),_c('div',{staticClass:\"banner__content\",class:{\n closable: _vm.closable,\n stacked: _vm.stacked,\n icon: _vm.icon\n },attrs:{\"data-testid\":\"banner-content\"}},[_vm._t(\"default\",function(){return [(_vm.labelKey)?_c('t',{attrs:{\"k\":_vm.labelKey,\"raw\":true}}):(_vm.messageLabel)?_c('span',[_vm._v(_vm._s(_vm.messageLabel))]):_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.nlToBr(_vm.label)),expression:\"nlToBr(label)\"}]})]}),(_vm.closable)?_c('div',{staticClass:\"banner__content__closer\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('i',{staticClass:\"icon icon-close closer-icon\",attrs:{\"data-testid\":\"banner-close\"}})]):_vm._e()],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport Vue from 'vue';\nimport { nlToBr } from '@shell/utils/string';\nimport { stringify } from '@shell/utils/error';\n\nexport default Vue.extend({\n props: {\n /**\n * A color class that represents the color of the banner.\n * @values primary, secondary, success, warning, error, info\n */\n color: {\n type: String,\n default: 'secondary'\n },\n /**\n * The label to display as the banner's default content.\n */\n label: {\n type: [String, Error, Object],\n default: null\n },\n /**\n * The i18n key for the label to display as the banner's default content.\n */\n labelKey: {\n type: String,\n default: null\n },\n /**\n * Add icon for the banner\n */\n icon: {\n type: String,\n default: null\n },\n /**\n * Toggles the banner's close button.\n */\n closable: {\n type: Boolean,\n default: false\n },\n /**\n * Toggles the stacked class for the banner.\n */\n stacked: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n /**\n * Return message text as label.\n */\n messageLabel(): string | void {\n return !(typeof this.label === 'string') ? stringify(this.label) : undefined;\n }\n },\n methods: { nlToBr }\n});\n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Banner.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Banner.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Banner.vue?vue&type=template&id=02d86e5d&scoped=true&\"\nimport script from \"./Banner.vue?vue&type=script&lang=ts&\"\nexport * from \"./Banner.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Banner.vue?vue&type=style&index=0&id=02d86e5d&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"02d86e5d\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./pod.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./pod.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./pod.vue?vue&type=template&id=db441fb2&scoped=true&\"\nimport script from \"./pod.vue?vue&type=script&lang=js&\"\nexport * from \"./pod.vue?vue&type=script&lang=js&\"\nimport style0 from \"./pod.vue?vue&type=style&index=0&id=db441fb2&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"db441fb2\",\n null\n \n)\n\nexport default component.exports","module.exports = __WEBPACK_EXTERNAL_MODULE__5877__;","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".card-container{border-radius:var(--border-radius);display:flex;flex-basis:40%;margin:10px;min-height:100px;padding:10px;box-shadow:0 0 20px var(--shadow)}.card-container.highlight-border{border-left:5px solid var(--primary)}.card-container:not(.top){align-items:top;flex-direction:row;justify-content:start}.card-container .card-wrap{width:100%}.card-container .card-body{color:var(--input-label);display:flex;flex-direction:column;justify-content:center}.card-container .card-actions{align-self:end;display:flex;padding-top:20px}.card-container .card-title{align-items:center;display:flex;width:100%}.card-container .card-title h5{margin:0}.card-container .card-title .flex-right{margin-left:auto}.card-container.card-sticky{overflow:hidden}.card-container.card-sticky .card-wrap{display:flex;flex-direction:column}.card-container.card-sticky .card-wrap .card-body{justify-content:flex-start;overflow:scroll}.card-container.card-sticky .card-wrap>*{flex:0}.card-container.card-sticky .card-wrap .card-body{flex:1}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseDifference;\n","module.exports = __webpack_public_path__ + \"fonts/icons.068811ed.ttf\";","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","import { ANNOTATIONS_TO_IGNORE_REGEX, LABELS_TO_IGNORE_REGEX } from '@shell/config/labels-annotations';\nimport omitBy from 'lodash/omitBy';\nimport pickBy from 'lodash/pickBy';\nimport Vue from 'vue';\nimport { matchesSomeRegex } from '@shell/utils/string';\nimport Resource from '@shell/plugins/dashboard-store/resource-class';\n\n// these are defined elsewhere in Steve models and will cause the error \"Cannot set property of [object Object] which has only a getter\" if defined at top-level\nexport function cleanHybridResources(data) {\n const potentialNormanHoldovers = ['state', 'name', 'description', 'labels', 'annotations'];\n\n potentialNormanHoldovers.forEach((key) => delete data[key]);\n\n return data;\n}\n\nexport default class HybridModel extends Resource {\n constructor(data, ctx, rehydrateNamespace = null, setClone = false) {\n const cleanedData = cleanHybridResources(data);\n\n super(cleanedData, ctx, rehydrateNamespace, setClone);\n }\n\n get labels() {\n const all = this.metadata?.labels || {};\n\n return omitBy(all, (value, key) => {\n return matchesSomeRegex(key, LABELS_TO_IGNORE_REGEX);\n });\n }\n\n setLabels(val) {\n if ( !this.metadata ) {\n this.metadata = {};\n }\n\n const all = this.metadata.labels || {};\n const wasIgnored = pickBy(all, (value, key) => {\n return matchesSomeRegex(key, LABELS_TO_IGNORE_REGEX);\n });\n\n Vue.set(this.metadata, 'labels', { ...wasIgnored, ...val });\n }\n\n setLabel(key, val) {\n if ( val ) {\n if ( !this.metadata ) {\n this.metadata = {};\n }\n\n if ( !this.metadata.labels ) {\n this.metadata.labels = {};\n }\n\n Vue.set(this.metadata.labels, key, val);\n } else if ( this.metadata?.labels ) {\n Vue.set(this.metadata.labels, key, undefined);\n delete this.metadata.labels[key];\n }\n }\n\n get annotations() {\n const all = this.metadata?.annotations || {};\n\n return omitBy(all, (value, key) => {\n return matchesSomeRegex(key, ANNOTATIONS_TO_IGNORE_REGEX);\n });\n }\n\n setAnnotations(val) {\n if ( !this.metadata ) {\n this.metadata = {};\n }\n\n const all = this.metadata.annotations || {};\n const wasIgnored = pickBy(all, (value, key) => {\n return matchesSomeRegex(key, ANNOTATIONS_TO_IGNORE_REGEX);\n });\n\n Vue.set(this.metadata, 'annotations', { ...wasIgnored, ...val });\n }\n\n setAnnotation(key, val) {\n if ( val ) {\n if ( !this.metadata ) {\n this.metadata = {};\n }\n\n if ( !this.metadata.annotations ) {\n this.metadata.annotations = {};\n }\n\n Vue.set(this.metadata.annotations, key, val);\n } else if ( this.metadata?.annotations ) {\n Vue.set(this.metadata.annotations, key, undefined);\n delete this.metadata.annotations[key];\n }\n }\n\n get state() {\n return this.stateObj?.name || 'unknown';\n }\n}\n","import { DESCRIPTION } from '@shell/config/labels-annotations';\nimport HybridModel from './hybrid-class';\n\nexport default class SteveModel extends HybridModel {\n get name() {\n return this.metadata?.name || this._name;\n }\n\n get namespace() {\n return this.metadata?.namespace;\n }\n\n get description() {\n return this.metadata?.annotations?.[DESCRIPTION] || this.spec?.description || this._description;\n }\n\n /**\n * Set description based on the type of model available with private fallback\n */\n set description(value) {\n if (this.metadata?.annotations) {\n this.metadata.annotations[DESCRIPTION] = value;\n }\n\n if (this.spec) {\n this.spec.description = value;\n }\n\n this._description = value;\n }\n}\n","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n url = url && url.__esModule ? url.default : url;\n\n if (typeof url !== 'string') {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^['\"].*['\"]$/.test(url)) {\n // eslint-disable-next-line no-param-reassign\n url = url.slice(1, -1);\n }\n\n if (options.hash) {\n // eslint-disable-next-line no-param-reassign\n url += options.hash;\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n'), \"\\\"\");\n }\n\n return url;\n};","export const CSRF = 'CSRF';\nexport const USERNAME = 'R_USERNAME';\nexport const LOCALE = 'R_LOCALE';\nexport const REDIRECTED = 'R_REDIRECTED';\n","var baseFor = require('./_baseFor'),\n castFunction = require('./_castFunction'),\n keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","export type GC_PREFERENCES = {\n enabled: boolean,\n enabledInterval: boolean,\n interval: number,\n enabledOnNavigate: boolean,\n ageThreshold: number,\n countThreshold: number\n}\n\nexport const GC_DEFAULTS: GC_PREFERENCES = {\n enabled: false,\n\n // When GC Runs\n enabledInterval: true,\n interval: 1 * 60 * 5,\n enabledOnNavigate: true,\n\n // How GC handles resources when GC'ing\n ageThreshold: 1 * 60 * 2,\n countThreshold: 500,\n};\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.globalrole.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.globalrole.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./management.cattle.io.globalrole.vue?vue&type=template&id=effd72b0&scoped=true&\"\nimport script from \"./management.cattle.io.globalrole.vue?vue&type=script&lang=js&\"\nexport * from \"./management.cattle.io.globalrole.vue?vue&type=script&lang=js&\"\nimport style0 from \"./management.cattle.io.globalrole.vue?vue&type=style&index=0&id=effd72b0&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"effd72b0\",\n null\n \n)\n\nexport default component.exports","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","export * from \"-!../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionDropdown.vue?vue&type=style&index=0&id=70f0de36&prod&lang=scss&\"","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","// This file has 2 sections that control getting and using specializations of particular types\n// over the generic info that is specified or generated from schemas.\n//\n// 1) Getting info about types\n//\n// labelFor(schema, count) Get the display label for a schema. Count is (in English) 1 or not-1 for pluralizing\n// groupLabelFor(schema) Get the label for the API group of this schema's type\n// isIgnored(schema) Returns true if this type should be hidden from the tree\n// groupForBasicType(schema) Returns the group a type should be shown in basic view, or false-y if it shouldn't be shown.\n// typeWeightFor(type, forBasic) Get the weight value for a particular type label\n// groupWeightFor(group, forBasic) Get the weight value for a particular group\n// headersFor(schema) Returns the column definitions for a type to give to SortableTable\n// activeProducts() Returns the list of products that are installed and should be shown\n//\n// 2) Detecting and using custom list/detail/edit/header components\n//\n// hasCustomList(type) Does type have a custom list implementation?\n// hasCustomDetail(type[,subType]) Does type have a custom detail implementation?\n// hasCustomEdit(type[,subType]) Does type have a custom edit implementation?\n// importList(type) Returns a promise that resolves to the list component for type\n// importDetail(type[,subType]) Returns a promise that resolves to the detail component for type\n// importEdit(type[,subType]) Returns a promise that resolves to the edit component for type\n// optionsFor(schemaOrType) Return the configured options for a type (from configureType)\n//\n// 3) Changing specialization info about a type\n// For all:\n// let { thingYouWant } = DSL(instanceOfTheStore, 'product');\n//\n// product( Add a product into the nav\n// removable, -- Is the product removable (true) or built-in (false).\n// weight, -- Sort order and divider sections in the product menu. 3=global (fleet, ecm), 2=always on (apps, explorer) 1=other\n// showClusterSwitcher, -- Show the cluster switcher in the header (default true)\n// showNamespaceFilter, -- Show the namespace filter in the header (default false)\n// showWorkspaceSwitcher, -- Show the workspace switcher in the header (conflicts with namespace) (default false)\n// ifHave, -- Show this product only if the given capability is available\n// ifHaveGroup, -- Show this product only if the given group exists in the store [inStore]\n// ifHaveType, -- Show this product only if the given type exists in the store [inStore], This can also be specified as an object { type: TYPE, store: 'management' } if the type isn't in the current [inStore]\n// ifHaveVerb, -- In combination with ifHaveTYpe, show it only if the type also has this collectionMethod\n// inStore, -- Which store to look at for if* above and the left-nav, defaults to \"cluster\"\n// inExplorer, -- Determines if the product is to be scoped to the explorer\n// public, -- If true, show to all users. If false, only show when the Developer Tools pref is on (default true)\n// category, -- Group to show the product in for the nav hamburger menu\n// typeStoreMap, -- An object mapping types to the store that should be used to retrieve information about the type\n// hideSystemResources -- Hide resources in namespaces where namespace.isSystem === true, or a namespace managed by fleet (per its annotation) and hide those namespaces from ns/project list and nsfilter (default false)\n// hideNamespaceLocation -- Hide the namespace link in the ResourceDetail masthead of namespaced resources and hide the ExplorerProjectsNamespaces namespace link (default false)\n// })\n//\n// externalLink(stringOrFn) The product has an external page (function gets context object\n//\n// virtualType(obj) Add an item to the tree that goes to a route instead of an actual type.\n// -- obj can contain anything in the objects getTree returns.\n// -- obj must have a `name` that is unique among all virtual types.\n// -- `cluster` is automatically added to route.params if it exists.\n//\n// spoofedType(obj) Create a fake type that can be treated like a normal type\n//\n// basicType( Mark type(s) as always shown in the top of the nav\n// type(s), -- Type name or array of type names\n// group -- Group to show the type(s) under; false-y for top-level.\n// )\n// basicType( Mark all types in group as always shown in the top of the nav\n// group, -- Group to show\n// asLabel -- Label to display the group as; false-y for top-level.\n// )\n// ignoreType(type) Never show type\n// weightType( Set the weight (sorting) order of one or more types\n// typeOrArrayOfTypes,\n// weight, -- Higher numbers are shown first/higher up on the nav tree\n// forBasic -- Apply to basic type instead of regular type tree\n// )\n// mapType( Remap a type id to a display name\n// matchRegexOrString, -- Type to match, or regex that matches types\n// replacementStringOrFn, -- String to replace the type with, or\n// -- sync function: (type, capturedString, schemaObj => { return 'new-type'; }\n// mapWeight, -- Priority for apply this mapping (higher numbers applied first)\n// continueOnMatch -- If true, continue applying to hit other rules that might match the new type.\n// )\n// moveType( Change the group a type is in\n// matchRegexOrString, -- Type to match, or regex that matches types\n// newGroup, -- Group to move the type into\n// mapWeight, -- Priority for apply this mapping (higher numbers applied first)\n// )\n// componentForType( Map matching types to a single component name\n// ( (this is helpful if multiple types should be rendered by a single component)\n// matchRegexOrString, -- Type to match, or regex that matches types\n// replacementString -- String to replace the type with\n// )\n// configureType( Display options for a particular type\n// type, -- Type to apply to\n// options -- Object of options. Defaults/Supported: {\n// isCreatable: true, -- If false, disable create even if schema says it's allowed\n// isEditable: true, -- Ditto, for edit\n// isRemovable: true, -- Ditto, for remove/delete\n// showState: true, -- If false, hide state in columns and masthead\n// showAge: true, -- If false, hide age in columns and masthead\n// showConfigView: true -- If false, hide masthead config button in view mode\n// showListMasthead: true, -- If false, hide masthead in list view\n// canYaml: true,\n// resource: undefined -- Use this resource in ResourceDetails instead\n// resourceDetail: undefined -- Use this resource specifically for ResourceDetail's detail component\n// resourceEdit: undefined -- Use this resource specifically for ResourceDetail's edit component\n// depaginate: undefined -- Use this to depaginate requests for this type\n// resourceEditMasthead: true -- Show the Masthead in the edit resource component\n// customRoute: undefined,\n// hasGraph: undefined -- If true, render ForceDirectedTreeChart graph (ATTENTION: option graphConfig is needed also!!!)\n// graphConfig: undefined -- Use this to pass along the graph configuration\n// notFilterNamespace: undefined -- Define namespaces that do not need to be filtered\n// localOnly: False -- Hide this type from the nav/search bar on downstream clusters\n// }\n// )\n// ignoreGroup(group): Never show group or any types in it\n// weightGroup( Set the weight (sorting) of one or more groups\n// groupOrArrayOfGroups, -- see weightType...\n// weight\n// )\n// setGroupDefaultType( Set the default child type to show when the group is expanded\n// groupOrArrayOfGroups, -- see setGroupDefaultType...\n// defaultType\n// )\n// mapGroup( Remap a group name to a display name\n// matchRegexOrString, -- see mapType...\n// replacementString,\n// mapWeight,\n// continueOnMatch\n// )\nimport { AGE, NAME, NAMESPACE as NAMESPACE_COL, STATE } from '@shell/config/table-headers';\nimport {\n CATALOG,\n COUNT,\n SCHEMA,\n MANAGEMENT,\n NAMESPACE\n} from '@shell/config/types';\nimport { VIEW_IN_API, EXPANDED_GROUPS, FAVORITE_TYPES } from '@shell/store/prefs';\nimport {\n addObject, findBy, insertAt, isArray, removeObject, filterBy\n} from '@shell/utils/array';\nimport { clone, get } from '@shell/utils/object';\nimport {\n ensureRegex, escapeHtml, escapeRegex, ucFirst, pluralize\n} from '@shell/utils/string';\nimport {\n importChart, importList, importDetail, importEdit, listProducts, loadProduct, importCustomPromptRemove, resolveList, resolveEdit, resolveWindowComponent, importWindowComponent, importLogin, resolveChart, resolveDetail, importDialog, importMachineConfig, resolveMachineConfigComponent, resolveCloudCredentialComponent, importCloudCredential\n} from '@shell/utils/dynamic-importer';\n\nimport { NAME as EXPLORER } from '@shell/config/product/explorer';\nimport isObject from 'lodash/isObject';\nimport { normalizeType } from '@shell/plugins/dashboard-store/normalize';\nimport { sortBy } from '@shell/utils/sort';\n\nimport { haveV1Monitoring, haveV2Monitoring } from '@shell/utils/monitoring';\nimport { NEU_VECTOR_NAMESPACE } from '@shell/config/product/neuvector';\n\nexport const NAMESPACED = 'namespaced';\nexport const CLUSTER_LEVEL = 'cluster';\nexport const BOTH = 'both';\n\nexport const ALL = 'all';\nexport const BASIC = 'basic';\nexport const FAVORITE = 'favorite';\nexport const USED = 'used';\n\nexport const ROOT = 'root';\n\nexport const SPOOFED_PREFIX = '__[[spoofed]]__';\nexport const SPOOFED_API_PREFIX = '__[[spoofedapi]]__';\n\nconst instanceMethods = {};\nconst graphConfigMap = {};\n\nconst FIELD_REGEX = /^\\$\\.metadata\\.fields\\[([0-9]*)\\]/;\n\nexport const IF_HAVE = {\n V1_MONITORING: 'v1-monitoring',\n V2_MONITORING: 'v2-monitoring',\n PROJECT: 'project',\n NO_PROJECT: 'no-project',\n NOT_V1_ISTIO: 'not-v1-istio',\n MULTI_CLUSTER: 'multi-cluster',\n NEUVECTOR_NAMESPACE: 'neuvector-namespace',\n ADMIN: 'admin-user',\n MCM_DISABLED: 'mcm-disabled',\n NOT_STANDALONE_HARVESTER: 'not-standalone-harvester',\n};\n\nexport function DSL(store, product, module = 'type-map') {\n // store.commit(`${ module }/product`, { name: product });\n\n return {\n product(inOpt) {\n const opt = {\n name: product,\n weight: 1,\n inStore: 'cluster',\n inExplorer: false,\n removable: true,\n showClusterSwitcher: true,\n showNamespaceFilter: false,\n public: true,\n filterMode: 'namespaces',\n ...inOpt\n };\n\n for ( const k of ['ifHaveGroup', 'ifHaveType'] ) {\n if ( opt[k] ) {\n opt[k] = regexToString(ensureRegex(opt[k]));\n }\n }\n\n store.commit(`${ module }/product`, opt);\n },\n\n basicType(types, group) {\n // Support passing in a map of types and using just the values\n if ( !isArray(types) && types && isObject(types) ) {\n types = Object.values(types);\n }\n\n store.commit(`${ module }/basicType`, {\n product, types, group\n });\n },\n\n // Type- and Group-dependent\n groupBy(type, field) {\n store.commit(`${ module }/groupBy`, { type, field });\n },\n\n headers(type, headers) {\n headers.forEach((header) => {\n // If on the client, then use the value getter if there is one\n if (header.getValue) {\n // we need to store the .value prop for the advanced filtering\n header.valueProp = header.value;\n header.value = header.getValue;\n }\n\n delete header.getValue;\n });\n\n store.commit(`${ module }/headers`, { type, headers });\n },\n\n hideBulkActions(type, field) {\n store.commit(`${ module }/hideBulkActions`, { type, field });\n },\n\n configureType(match, options) {\n if (options.graphConfig) {\n graphConfigMap[match] = options.graphConfig;\n delete options.graphConfig;\n }\n store.commit(`${ module }/configureType`, { ...options, match });\n },\n\n componentForType(match, replace) {\n store.commit(`${ module }/componentForType`, { match, replace });\n },\n\n ignoreType(regexOrString) {\n store.commit(`${ module }/ignoreType`, regexOrString);\n },\n\n ignoreGroup(regexOrString, cb) {\n store.commit(`${ module }/ignoreGroup`, { regexOrString, cb });\n },\n\n weightGroup(input, weight, forBasic) {\n if ( isArray(input) ) {\n store.commit(`${ module }/weightGroup`, {\n groups: input, weight, forBasic\n });\n } else {\n store.commit(`${ module }/weightGroup`, {\n group: input, weight, forBasic\n });\n }\n },\n\n setGroupDefaultType(input, defaultType) {\n if ( isArray(input) ) {\n store.commit(`${ module }/setGroupDefaultType`, { groups: input, defaultType });\n } else {\n store.commit(`${ module }/setGroupDefaultType`, { group: input, defaultType });\n }\n },\n\n weightType(input, weight, forBasic) {\n if ( isArray(input) ) {\n store.commit(`${ module }/weightType`, {\n types: input, weight, forBasic\n });\n } else {\n store.commit(`${ module }/weightType`, {\n type: input, weight, forBasic\n });\n }\n },\n\n mapGroup(match, replace, weight = 5, continueOnMatch = false) {\n store.commit(`${ module }/mapGroup`, {\n match, replace, weight, continueOnMatch\n });\n },\n\n mapType(match, replace, weight = 5, continueOnMatch = false) {\n store.commit(`${ module }/mapType`, {\n match, replace, weight, continueOnMatch\n });\n },\n\n moveType(match, group, weight = 5, continueOnMatch = false) {\n store.commit(`${ module }/moveType`, {\n match, group, weight,\n });\n },\n\n virtualType(obj) {\n store.commit(`${ module }/virtualType`, { product, obj });\n },\n\n spoofedType(obj) {\n store.commit(`${ module }/spoofedType`, { product, obj });\n }\n };\n}\n\nlet called = false;\n\nexport async function applyProducts(store, $plugin) {\n if (called) {\n return;\n }\n\n called = true;\n for ( const product of listProducts() ) {\n const impl = await loadProduct(product);\n\n if ( impl?.init ) {\n impl.init(store);\n }\n }\n // Load the products from all plugins\n $plugin.loadProducts();\n}\n\nexport function productsLoaded() {\n return called;\n}\n\nexport const state = function() {\n return {\n products: [],\n virtualTypes: {},\n spoofedTypes: {},\n basicTypes: {},\n groupIgnore: [],\n groupWeights: {},\n groupDefaultTypes: {},\n basicGroupWeights: { [ROOT]: 1000 },\n groupMappings: [],\n typeIgnore: [],\n basicTypeWeights: {},\n typeWeights: {},\n typeMappings: [],\n typeMoveMappings: [],\n typeToComponentMappings: [],\n typeOptions: [],\n groupBy: {},\n headers: {},\n hideBulkActions: {},\n schemaGeneration: 1,\n cache: {\n typeMove: {},\n groupLabel: {},\n ignore: {},\n list: {},\n chart: {},\n detail: {},\n edit: {},\n componentFor: {},\n promptRemove: {},\n windowComponents: {},\n 'machine-config': {},\n 'cloud-credential': {}\n\n },\n };\n};\n\nexport const getters = {\n // ----------------------------------------------------------------------------\n // 1 ) Getting info\n // ----------------------------------------------------------------------------\n // Turns a type name into a display label (e.g. management.cattle.io.cluster -> Cluster)\n labelFor(state, getters, rootState, rootGetters) {\n return (schema, count = 1, language = null) => {\n return _applyMapping(schema, state.typeMappings, 'id', false, () => {\n const key = `typeLabel.\"${ schema.id.toLowerCase() }\"`;\n\n if ( rootGetters['i18n/exists'](key, language) ) {\n return rootGetters['i18n/t'](key, { count }, language).trim();\n }\n\n const out = schema?.attributes?.kind || schema.id || '?';\n\n // Add spaces, but breaks typing names into jump menu naturally\n // out = ucFirst(out.replace(/([a-z])([A-Z])/g,'$1 $2'));\n\n if ( count === 1 ) {\n return out;\n }\n\n // This works for most things... if you don't like it, put in a typeLabel translation for above.\n return pluralize(out);\n });\n };\n },\n\n // Turns a group name into a display label (e.g. management.cattle.io.v3.cluster -> Cluster)\n groupLabelFor(state) {\n return (schemaOrName) => {\n let group = schemaOrName;\n\n if ( typeof schemaOrName === 'object' ) {\n let moved = false;\n\n for ( const rule of state.typeMoveMappings ) {\n const re = stringToRegex(rule.match);\n\n if ( schemaOrName.id.match(re) ) {\n moved = true;\n group = rule.replace;\n }\n }\n\n if ( !moved ) {\n group = group.attributes.group;\n }\n }\n\n if ( typeof group !== 'string' ) {\n return null;\n }\n\n const out = _applyMapping(group, state.groupMappings, null, state.cache.groupLabel, (group) => {\n const match = group.match(/^(.*)\\.k8s\\.io$/);\n\n if ( match ) {\n return match[1].split(/\\./).map((x) => ucFirst(x)).join('.');\n }\n\n return group;\n });\n\n return out;\n };\n },\n\n groupForBasicType(state) {\n return (product, schemaId) => {\n return state.basicTypes?.[product]?.[schemaId];\n };\n },\n\n optionsFor(state) {\n const def = {\n isCreatable: true,\n isEditable: true,\n isRemovable: true,\n showState: true,\n showAge: true,\n canYaml: true,\n namespaced: null,\n listGroups: [],\n depaginate: false,\n customRoute: undefined,\n resourceEditMasthead: true,\n };\n\n return (schemaOrType) => {\n if (!schemaOrType) {\n return {};\n }\n\n const type = (typeof schemaOrType === 'object' ? schemaOrType.id : schemaOrType);\n const found = state.typeOptions.find((entry) => {\n const re = stringToRegex(entry.match);\n\n return re.test(type);\n });\n\n const opts = Object.assign({}, def, found || {});\n\n return opts;\n };\n },\n\n isFavorite(state, getters, rootState, rootGetters) {\n return (schemaId) => {\n return rootGetters['prefs/get'](FAVORITE_TYPES).includes(schemaId) || false;\n };\n },\n\n typeWeightFor(state) {\n return (type, forBasic) => {\n type = type?.toLowerCase();\n\n if ( forBasic ) {\n return state.basicTypeWeights[type] || 0;\n } else {\n return state.typeWeights[type] || 0;\n }\n };\n },\n\n groupWeightFor(state) {\n return (group, forBasic) => {\n group = group.toLowerCase();\n\n if ( forBasic ) {\n return state.basicGroupWeights[group] || 0;\n } else {\n return state.groupWeights[group] || 0;\n }\n };\n },\n\n groupDefaultTypeFor(state) {\n return (group) => {\n group = group.toLowerCase();\n\n return state.groupDefaultTypes[group];\n };\n },\n\n getTree(state, getters, rootState, rootGetters) {\n return (productId, mode, allTypes, clusterId, namespaceMode, namespaces, currentType, search) => {\n // getTree has four modes:\n // - `basic` matches data types that should always be shown even if there\n // are 0 of them.\n // - `used` matches the data types where there are more than 0 of them\n // in the current set of namespaces.\n // - `all` matches all types.\n // - `favorite` matches starred types.\n // namespaceMode: 'namespaced', 'cluster', or 'both'\n // namespaces: null means all, otherwise it will be an array of specific namespaces to include\n const isBasic = mode === BASIC;\n\n let searchRegex;\n\n if ( search ) {\n searchRegex = new RegExp(`^(.*)(${ escapeRegex(search) })(.*)$`, 'i');\n }\n\n const root = { children: [] };\n\n // Add types from shortest to longest so that parents\n // get added before children\n const keys = Object.keys(allTypes).sort((a, b) => a.length - b.length);\n\n // Set these for later\n const currentLocal = rootGetters['i18n/current']();\n const defaultLocal = rootGetters['i18n/default']();\n\n for ( const type of keys ) {\n const typeObj = allTypes[type];\n\n if ( typeObj.schema && getters.isIgnored(typeObj.schema) ) {\n // Skip ignored groups & types\n continue;\n }\n\n const namespaced = typeObj.namespaced;\n\n if ( (namespaceMode === NAMESPACED && !namespaced ) || (namespaceMode === CLUSTER_LEVEL && namespaced) ) {\n // Skip types that are not the right namespace mode\n continue;\n }\n\n const count = _matchingCounts(typeObj, namespaces);\n const groupForBasicType = getters.groupForBasicType(productId, typeObj.name);\n\n if ( typeObj.id === currentType ) {\n // If this is the type currently being shown, always show it\n } else if ( isBasic && !groupForBasicType ) {\n // If we want the basic tree only return basic types;\n continue;\n } else if ( mode === USED && count <= 0 ) {\n // If there's none of this type, ignore this entry when viewing only in-use types\n // Note: count is sometimes null, which is <= 0.\n continue;\n }\n\n const label = typeObj.labelKey ? rootGetters['i18n/t'](typeObj.labelKey) || typeObj.label : typeObj.label;\n const virtual = !!typeObj.virtual;\n let icon = typeObj.icon;\n\n if ( (!virtual || typeObj.isSpoofed ) && !icon ) {\n if ( namespaced ) {\n icon = 'folder';\n } else {\n icon = 'globe';\n }\n }\n\n const labelDisplay = highlightLabel(label, icon, typeObj.count, typeObj.schema);\n\n if ( !labelDisplay ) {\n // Search happens in highlight and returns null if not found\n continue;\n }\n\n let group;\n\n if ( isBasic ) {\n group = _ensureGroup(root, groupForBasicType, true);\n } else if ( mode === FAVORITE ) {\n group = _ensureGroup(root, 'starred');\n group.weight = 1000;\n } else if ( mode === USED ) {\n group = _ensureGroup(root, `inUse::${ getters.groupLabelFor(typeObj.schema) }`);\n } else {\n group = _ensureGroup(root, typeObj.schema || typeObj.group || ROOT);\n }\n\n let route = typeObj.route;\n\n // Make the default route if one isn't set\n if (!route ) {\n route = {\n name: 'c-cluster-product-resource',\n params: {\n product: productId,\n cluster: clusterId,\n resource: typeObj.name,\n }\n };\n\n typeObj.route = route;\n }\n\n // Cluster ID and Product should always be set\n if ( route && typeof route === 'object' ) {\n route.params = route.params || {};\n route.params.cluster = clusterId;\n route.params.product = productId;\n }\n\n group.children.push({\n label,\n labelDisplay,\n mode: typeObj.mode,\n count,\n exact: typeObj.exact || false,\n namespaced,\n route,\n name: typeObj.name,\n weight: typeObj.weight || getters.typeWeightFor(typeObj.schema?.id || label, isBasic),\n overview: !!typeObj.overview,\n });\n }\n\n // Recursively sort the groups\n _sortGroup(root, mode);\n\n return root.children;\n\n // ----------------------\n\n function _ensureGroup(tree, schemaOrName, forBasic = false) {\n let name = getters.groupLabelFor(schemaOrName);\n const isRoot = ( name === ROOT || name.startsWith(`${ ROOT }::`) );\n\n if ( name && name.includes('::') ) {\n let parent;\n\n [parent, name] = name.split('::', 2);\n tree = _ensureGroup(tree, parent);\n }\n\n // Translate if an entry exists\n let label = name;\n const key = `nav.group.\"${ name }\"`;\n\n if ( rootGetters['i18n/exists'](key) ) {\n label = rootGetters['i18n/t'](key);\n }\n\n let group = findBy(tree.children, 'name', name);\n\n if ( !group ) {\n group = {\n name,\n label,\n weight: getters.groupWeightFor(name, forBasic),\n defaultType: getters.groupDefaultTypeFor(name),\n };\n\n tree.children.push(group);\n }\n\n if ( isRoot ) {\n group.isRoot = true;\n }\n\n if ( !group.children ) {\n group.children = [];\n }\n\n return group;\n }\n\n function highlightLabel(original, icon, count, schema) {\n let label = escapeHtml(original);\n\n if ( searchRegex ) {\n let match = label.match(searchRegex);\n\n if (!match) {\n if ( currentLocal !== defaultLocal && schema ) {\n const defaultLabel = getters.labelFor(schema, count, defaultLocal);\n\n if (defaultLabel && defaultLabel !== label ) {\n label += ` (${ defaultLabel })`;\n match = label.match(searchRegex);\n }\n }\n }\n\n if ( match ) {\n label = `${ escapeHtml(match[1]) }${ escapeHtml(match[2]) }${ escapeHtml(match[3]) }`;\n } else {\n return null;\n }\n }\n\n if ( icon ) {\n label = `${ label }`;\n }\n\n return label;\n }\n };\n },\n\n isSpoofed(state, getters, rootState, rootGetters) {\n return (type, product) => {\n product = product || rootGetters['productId'];\n const productSpoofedTypes = state.spoofedTypes[product] || [];\n\n return productSpoofedTypes.some((st) => st.type === type);\n };\n },\n\n isVirtual(state, getters, rootState, rootGetters) {\n return (name, product) => {\n product = product || rootGetters['productId'];\n const productVirtualTypes = state.virtualTypes[product] || [];\n\n return productVirtualTypes.some((st) => st.name === name);\n };\n },\n\n getSpoofedInstances(state, getters, rootState, rootGetters) {\n return async(type, product) => {\n product = product || rootGetters['productId'];\n const getInstances = instanceMethods[product]?.[type] || (() => []);\n const instances = await getInstances();\n\n instances.forEach((instance) => {\n const type = instance.type;\n const id = instance.id;\n const link = `/${ SPOOFED_PREFIX }/${ type }/${ id }`;\n const apiLink = `/${ SPOOFED_API_PREFIX }/${ type }/${ id }`;\n\n instance.links = {\n remove: instance.links?.remove || link,\n self: instance.links?.self || link,\n update: instance.links?.update || link,\n view: instance.links?.view || apiLink,\n };\n instance.isSpoofed = true;\n });\n\n return instances;\n };\n },\n\n getSpoofedInstance(state, getters, rootState, rootGetters) {\n return async(type, product, id) => {\n const productInstances = await getters.getSpoofedInstances(type, product);\n\n return productInstances.find( (instance) => instance.id === id);\n };\n },\n\n allSpoofedTypes(state, getters, rootState, rootGetters) {\n return Object.values(state.spoofedTypes).flat();\n },\n\n spoofedSchemas(state, getters, rootState, rootGetters) {\n return (product) => {\n const types = state.spoofedTypes[product] || [];\n\n return types.flatMap((type) => {\n const schemas = type.schemas || [];\n\n return schemas.map((schema) => ({\n ...schema,\n isSpoofed: true\n }));\n });\n };\n },\n\n allSpoofedSchemas(state, getters, rootState, rootGetters) {\n return getters.allSpoofedTypes.flatMap((type) => {\n const schemas = type.schemas || [];\n\n return schemas.map((schema) => ({\n ...schema,\n isSpoofed: true\n }));\n });\n },\n\n allTypes(state, getters, rootState, rootGetters) {\n return (product, mode = ALL) => {\n const module = findBy(state.products, 'name', product)?.inStore;\n const schemas = rootGetters[`${ module }/all`](SCHEMA);\n const counts = rootGetters[`${ module }/all`](COUNT)?.[0]?.counts || {};\n const isDev = rootGetters['prefs/get'](VIEW_IN_API);\n const isBasic = mode === BASIC;\n\n const out = {};\n\n for ( const schema of schemas ) {\n const attrs = schema.attributes || {};\n const count = counts[schema.id];\n const label = getters.labelFor(schema, count);\n const weight = getters.typeWeightFor(schema?.id || label, isBasic);\n const typeOptions = getters['optionsFor'](schema);\n\n if ( isBasic ) {\n // These are separate ifs so that things with no kind can still be basic\n if ( !getters.groupForBasicType(product, schema.id) ) {\n continue;\n }\n } else if ( mode === FAVORITE && !getters.isFavorite(schema.id) ) {\n continue;\n } else if ( !attrs.kind ) {\n // Skip the schemas that aren't top-level types\n continue;\n } else if ( typeof typeOptions.ifRancherCluster !== 'undefined' && typeOptions.ifRancherCluster !== rootGetters.isRancher ) {\n continue;\n } else if (typeOptions.localOnly && !rootGetters.currentCluster?.isLocal) {\n continue;\n }\n\n out[schema.id] = {\n label,\n mode,\n weight,\n schema,\n name: schema.id,\n namespaced: typeOptions.namespaced === null ? attrs.namespaced : typeOptions.namespaced,\n count: count ? count.summary.count || 0 : null,\n byNamespace: count ? count.namespaces : {},\n revision: count ? count.revision : null,\n route: typeOptions.customRoute\n };\n }\n\n // Add virtual and spoofed types\n if ( mode !== USED ) {\n const virtualTypes = state.virtualTypes[product] || [];\n const spoofedTypes = state.spoofedTypes[product] || [];\n const allTypes = [...virtualTypes, ...spoofedTypes];\n\n for ( const type of allTypes ) {\n const item = clone(type);\n const id = item.name;\n const weight = type.weight || getters.typeWeightFor(item.label, isBasic);\n\n // Is there a virtual/spoofed type override for schema type?\n // Currently used by harvester, this should be investigated and removed if possible\n if (out[id]) {\n delete out[id];\n }\n\n if ( item['public'] === false && !isDev ) {\n continue;\n }\n\n if (item.ifHave && !ifHave(rootGetters, item.ifHave)) {\n continue;\n }\n\n if ( item.ifHaveType ) {\n const targetedSchemas = typeof item.ifHaveType === 'string' ? schemas : rootGetters[`${ item.ifHaveType.store }/all`](SCHEMA);\n const type = typeof item.ifHaveType === 'string' ? item.ifHaveType : item.ifHaveType?.type;\n\n const haveIds = filterBy(targetedSchemas, 'id', normalizeType(type)).map((s) => s.id);\n\n if (!haveIds.length) {\n continue;\n }\n\n if (item.ifHaveVerb && !ifHaveVerb(rootGetters, module, item.ifHaveVerb, haveIds)) {\n continue;\n }\n }\n\n if ( item.ifHaveSubTypes ) {\n const hasSome = (item.ifHaveSubTypes || []).some((type) => {\n return !!findBy(schemas, 'id', normalizeType(type));\n });\n\n if (!hasSome) {\n continue;\n }\n }\n\n if ( typeof item.ifRancherCluster !== 'undefined' && item.ifRancherCluster !== rootGetters.isRancher ) {\n continue;\n }\n\n if ( isBasic && !getters.groupForBasicType(product, id) ) {\n continue;\n } else if ( mode === FAVORITE && !getters.isFavorite(id) ) {\n continue;\n }\n\n item.mode = mode;\n item.weight = weight;\n\n // Ensure labelKey is taken into account... with a mock count\n // This is harmless if the translation doesn't require count\n if (item.labelKey && rootGetters['i18n/exists'](item.labelKey)) {\n item.label = rootGetters['i18n/t'](item.labelKey, { count: 2 }).trim();\n delete item.labelKey; // Label should really take precedence over labelKey, but it doesn't, so remove it\n } else {\n item.label = item.label || item.name;\n }\n\n out[id] = item;\n }\n }\n\n return out;\n };\n },\n\n groupByFor(state) {\n return (schema) => {\n return state.groupBy[schema?.id];\n };\n },\n\n hideBulkActionsFor(state) {\n return (schema) => {\n return state.hideBulkActions[schema.id];\n };\n },\n\n headersFor(state, getters, rootState, rootGetters) {\n return (schema) => {\n const attributes = schema.attributes || {};\n const columns = attributes.columns || [];\n const typeOptions = getters['optionsFor'](schema);\n\n // A specific list has been provided\n if ( state.headers[schema.id] ) {\n return state.headers[schema.id].map((entry) => {\n if ( typeof entry === 'string' ) {\n const col = findBy(columns, 'name', entry);\n\n if ( col ) {\n return fromSchema(col, rootGetters);\n } else {\n return null;\n }\n } else {\n return entry;\n }\n }).filter((col) => !!col);\n }\n\n // Otherwise make one up from schema\n const out = typeOptions.showState ? [STATE] : [];\n const namespaced = attributes.namespaced || false;\n let hasName = false;\n\n for ( const col of columns ) {\n if ( col.format === 'name' ) {\n hasName = true;\n out.push(NAME);\n if ( namespaced ) {\n out.push(NAMESPACE_COL);\n }\n } else {\n out.push(fromSchema(col, rootGetters));\n }\n }\n\n if ( !hasName ) {\n insertAt(out, 1, NAME);\n if ( namespaced ) {\n insertAt(out, 2, NAMESPACE_COL);\n }\n }\n\n // Age always goes last\n if ( out.includes(AGE) ) {\n removeObject(out, AGE);\n if ( typeOptions.showAge ) {\n out.push(AGE);\n }\n }\n\n return out;\n\n function fromSchema(col, rootGetters) {\n let formatter, width, formatterOpts;\n\n if ( (col.format === '' || col.format === 'date') && col.name === 'Age' ) {\n return AGE;\n }\n\n if ( col.format === 'date' || col.type === 'date' ) {\n formatter = 'Date';\n width = 120;\n formatterOpts = { multiline: true };\n }\n\n if ( col.type === 'number' || col.type === 'int' ) {\n formatter = 'Number';\n }\n\n const colName = col.name.includes(' ') ? col.name.split(' ').map((word) => word.charAt(0).toUpperCase() + word.substring(1) ).join('') : col.name;\n\n const exists = rootGetters['i18n/exists'];\n const t = rootGetters['i18n/t'];\n const labelKey = `tableHeaders.${ colName.charAt(0).toLowerCase() + colName.slice(1) }`;\n const description = col.description || '';\n const tooltip = description && description[description.length - 1] === '.' ? description.slice(0, -1) : description;\n\n return {\n name: col.name.toLowerCase(),\n label: exists(labelKey) ? t(labelKey) : col.name,\n value: _rowValueGetter(col),\n sort: [col.field],\n formatter,\n formatterOpts,\n width,\n tooltip\n };\n }\n };\n },\n\n // ------------------------------------\n // Custom list/detail/edit/header component detection\n //\n // Note: you can't refactor these into one function that does `@/${kind}/${type}`,\n // because babel needs some hardcoded idea where to look for the dependency.\n //\n // Note 2: Yes these are editing state in a getter for caching... it's ok, probably.\n // ------------------------------------\n hasCustomList(state, getters, rootState) {\n return (rawType) => {\n const key = getters.componentFor(rawType);\n\n return hasCustom(state, rootState, 'list', key, (key) => resolveList(key));\n };\n },\n\n hasCustomChart(state, getters, rootState) {\n return (rawType) => {\n const key = getters.componentFor(rawType);\n\n return hasCustom(state, rootState, 'chart', key, (key) => resolveChart(key));\n };\n },\n\n hasCustomDetail(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'detail', key, (key) => resolveDetail(key));\n };\n },\n\n hasGraph(state, getters) {\n return (resource) => {\n const typeOptions = getters['optionsFor'](resource);\n\n if (typeOptions && typeOptions.hasGraph) {\n return graphConfigMap[resource];\n }\n\n return null;\n };\n },\n\n hasCustomEdit(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'edit', key, (key) => resolveEdit(key));\n };\n },\n\n hasComponent(state, getters, rootState) {\n return (path) => {\n return hasCustom(state, rootState, 'edit', path, (path) => resolveEdit(path));\n };\n },\n\n hasCustomPromptRemove(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'promptRemove', key, () => require.resolve(`@shell/promptRemove/${ key }`));\n };\n },\n\n hasCustomWindowComponent(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'windowComponents', key, (key) => resolveWindowComponent(key));\n };\n },\n\n hasCustomMachineConfigComponent(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'machine-config', key, (key) => resolveMachineConfigComponent(key));\n };\n },\n\n hasCustomCloudCredentialComponent(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'cloud-credential', key, (key) => resolveCloudCredentialComponent(key));\n };\n },\n\n importComponent(state, getters) {\n return (path) => {\n return importEdit(path);\n };\n },\n\n importDialog(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'dialog', getters.componentFor(rawType, subType), importDialog);\n };\n },\n\n importList(state, getters, rootState) {\n return (rawType) => {\n return loadExtension(rootState, 'list', getters.componentFor(rawType), importList);\n };\n },\n\n importChart(state, getters, rootState) {\n return (rawType) => {\n return loadExtension(rootState, 'chart', getters.componentFor(rawType), importChart);\n };\n },\n\n importDetail(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'detail', getters.componentFor(rawType, subType), importDetail);\n };\n },\n\n importEdit(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'edit', getters.componentFor(rawType, subType), importEdit);\n };\n },\n\n importCustomPromptRemove(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'promptRemove', getters.componentFor(rawType, subType), importCustomPromptRemove);\n };\n },\n\n importWindowComponent(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'windowComponents', getters.componentFor(rawType, subType), importWindowComponent);\n };\n },\n\n importLogin(state, getters, rootState) {\n return (authType) => {\n return loadExtension(rootState, 'login', authType, importLogin);\n };\n },\n\n importMachineConfig(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'machine-config', getters.componentFor(rawType, subType), importMachineConfig);\n };\n },\n\n importCloudCredential(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'cloud-credential', getters.componentFor(rawType, subType), importCloudCredential);\n };\n },\n\n componentFor(state, getters) {\n return (type, subType) => {\n let key = type;\n\n if ( subType ) {\n key = `${ type }/${ subType }`;\n }\n\n if ( state.cache.componentFor[key] !== undefined ) {\n return state.cache.componentFor[key];\n }\n\n let out = type;\n\n const mapping = state.typeToComponentMappings.find((mapping) => {\n const re = stringToRegex(mapping.match);\n\n return re.test(key);\n });\n\n if ( mapping ) {\n out = mapping.replace;\n } else if ( subType ) {\n // Try again without the subType\n out = getters.componentFor(type);\n }\n\n state.cache.componentFor[key] = out;\n\n return out;\n };\n },\n\n isIgnored(state, getters, rootState, rootGetters) {\n return (schema) => {\n let out = false;\n\n for ( const rule of state.groupIgnore ) {\n const group = schema?.attributes?.group;\n\n if (group && group.match(stringToRegex(rule.type) && isObject(rule) && rule.type)) {\n out = rule.cb(rootGetters);\n break;\n }\n\n if ( group && typeof rule === 'string' && group.match(stringToRegex(rule)) ) {\n out = true;\n break;\n }\n }\n\n if ( !out ) {\n for ( const rule of state.typeIgnore ) {\n if ( schema.id.match(stringToRegex(rule)) ) {\n out = true;\n break;\n }\n }\n }\n\n state.cache.ignore[schema.id] = out;\n\n return out;\n };\n },\n\n activeProducts(state, getters, rootState, rootGetters) {\n const knownTypes = {};\n const knownGroups = {};\n const isDev = rootGetters['prefs/get'](VIEW_IN_API);\n\n if ( state.schemaGeneration < 0 ) {\n // This does nothing, but makes activeProducts depend on schemaGeneration\n // so that it can be used to update the product list on schema change.\n return;\n }\n\n return state.products.filter((p) => {\n const module = p.inStore;\n\n if ( p['public'] === false && !isDev ) {\n return false;\n }\n\n if ( p.ifGetter && !rootGetters[p.ifGetter] ) {\n return false;\n }\n\n if ( !knownTypes[module] ) {\n const schemas = rootGetters[`${ module }/all`](SCHEMA);\n\n knownTypes[module] = [];\n knownGroups[module] = [];\n\n for ( const s of schemas ) {\n knownTypes[module].push(s._id);\n\n if ( s._group ) {\n addObject(knownGroups[module], s._group);\n }\n }\n }\n\n if ( p.ifFeature) {\n const features = Array.isArray(p.ifFeature) ? p.ifFeature : [p.ifFeature];\n\n for (const f of features) {\n if (!rootGetters['features/get'](f)) {\n return false;\n }\n }\n }\n\n if ( p.ifHave && !ifHave(rootGetters, p.ifHave)) {\n return false;\n }\n\n if ( p.ifHaveType ) {\n const haveIds = knownTypes[module].filter((t) => t.match(stringToRegex(p.ifHaveType)) );\n\n if ( !haveIds.length ) {\n return false;\n }\n\n if ( p.ifHaveVerb && !ifHaveVerb(rootGetters, module, p.ifHaveVerb, haveIds)) {\n return false;\n }\n }\n\n if ( p.ifHaveGroup && !knownGroups[module].find((t) => t.match(stringToRegex(p.ifHaveGroup)) ) ) {\n return false;\n }\n\n return true;\n });\n },\n\n isProductActive(state, getters) {\n return (name) => {\n if ( findBy(getters['activeProducts'], 'name', name) ) {\n return true;\n }\n\n return false;\n };\n },\n\n rowValueGetter(state) {\n return (schema, colName) => {\n const col = _findColumnByName(schema, colName);\n\n return _rowValueGetter(col);\n };\n },\n\n isProductRegistered(state) {\n return (productName) => {\n const prod = state.products.find((p) => p.name === productName);\n\n return !!prod;\n };\n },\n};\n\nexport const mutations = {\n schemaChanged(state) {\n state.schemaGeneration = state.schemaGeneration + 1;\n },\n\n // Remove the specified product\n remove(state, { product, plugin }) {\n const existing = state.products.findIndex((p) => p.name === product);\n\n // Remove the product\n if (existing !== -1) {\n state.products.splice(existing, 1);\n }\n\n // Go through the basic types and remove the headers\n if (state.virtualTypes[product]) {\n delete state.virtualTypes[product];\n }\n\n if (state.basicTypes[product]) {\n // Remove table header configuration\n Object.keys(state.basicTypes[product]).forEach((type) => {\n delete state.headers[type];\n delete state.basicTypeWeights[type];\n delete state.cache.ignore[type];\n // These track whether the type has a custom component\n delete state.cache.detail[type];\n delete state.cache.edit[type];\n delete state.cache.list[type];\n\n // Delete all of the entries from the componentFor cache where the valye is the type\n // Can do this more efficiently\n Object.keys(state.cache.componentFor).forEach((k) => {\n const v = state.cache.componentFor[k];\n\n if (v === type) {\n delete state.cache.componentFor[k];\n }\n });\n });\n\n delete state.basicTypes[product];\n }\n\n if (plugin) {\n // kind is list, edit, detail etc\n Object.keys(plugin.types).forEach((kind) => {\n if (state.cache[kind]) {\n Object.keys(plugin.types[kind]).forEach((type) => {\n delete state.cache[kind][type];\n });\n }\n });\n }\n },\n\n product(state, obj) {\n const existing = findBy(state.products, 'name', obj.name);\n\n if ( existing ) {\n Object.assign(existing, obj);\n } else {\n addObject(state.products, obj);\n }\n },\n\n virtualType(state, { product, obj }) {\n if ( !state.virtualTypes[product] ) {\n state.virtualTypes[product] = [];\n }\n\n const copy = clone(obj);\n\n copy.virtual = true;\n\n const existing = findBy(state.virtualTypes[product], 'name', copy.name);\n\n if ( existing ) {\n Object.assign(existing, copy);\n } else {\n addObject(state.virtualTypes[product], copy);\n }\n },\n\n spoofedType(state, { product, obj }) {\n if ( !state.spoofedTypes[product] ) {\n state.spoofedTypes[product] = [];\n }\n\n const copy = clone(obj);\n\n instanceMethods[product] = instanceMethods[product] || {};\n instanceMethods[product][copy.type] = copy.getInstances;\n delete copy.getInstances;\n\n copy.name = copy.type;\n copy.isSpoofed = true;\n copy.virtual = true;\n copy.schemas.forEach((schema) => {\n schema.links = {\n collection: `/${ SPOOFED_PREFIX }/${ schema.id }`,\n ...(schema.links || {})\n };\n });\n\n const existing = findBy(state.spoofedTypes[product], 'type', copy.type);\n\n if ( existing ) {\n Object.assign(existing, copy);\n } else {\n addObject(state.spoofedTypes[product], copy);\n }\n },\n\n basicType(state, { product, group, types }) {\n if ( !product ) {\n product = EXPLORER;\n }\n\n if ( !group ) {\n group = ROOT;\n }\n\n if ( !isArray(types) ) {\n types = [types];\n }\n\n if ( !state.basicTypes[product] ) {\n state.basicTypes[product] = {};\n }\n\n for ( const t of types ) {\n state.basicTypes[product][t] = group;\n }\n },\n\n ignoreGroup(state, { regexOrString: match, cb }) {\n match = ensureRegex(match);\n // State shouldn't contain actual RegExp objects, because they don't serialize\n cb ? state.groupIgnore.push({\n type: regexToString(match),\n cb\n }) : state.groupIgnore.push(regexToString(match));\n },\n\n ignoreType(state, match) {\n match = ensureRegex(match);\n state.typeIgnore.push(regexToString(match));\n },\n\n groupBy(state, { type, field }) {\n state.groupBy[type] = field;\n },\n\n headers(state, { type, headers }) {\n state.headers[type] = headers;\n },\n\n hideBulkActions(state, { type, field }) {\n state.hideBulkActions[type] = field;\n },\n\n // weightGroup({group: 'core', weight: 99}); -- higher groups are shown first\n // These operate on group names *after* mapping but *before* translation\n weightGroup(state, {\n group, groups, weight, forBasic\n }) {\n if ( !groups ) {\n groups = [];\n }\n\n if ( group ) {\n groups.push(group);\n }\n\n const map = forBasic ? state.basicGroupWeights : state.groupWeights;\n\n for ( const g of groups ) {\n map[g.toLowerCase()] = weight;\n }\n },\n\n // setGroupDefaultType({group: 'core', defaultType: 'name'});\n // By default when a group is clicked, the first item is selected - this allows\n // this behaviour to be changed and a named child type can be chosen\n // These operate on group names *after* mapping but *before* translation\n setGroupDefaultType(state, { group, groups, defaultType }) {\n if ( !groups ) {\n groups = [];\n }\n\n if ( group ) {\n groups.push(group);\n }\n\n for ( const g of groups ) {\n state.groupDefaultTypes[g.toLowerCase()] = defaultType;\n }\n },\n\n // weightType('Cluster' 99); -- higher groups are shown first\n // These operate on *schema* type names, before mapping\n weightType(state, {\n type, types, weight, forBasic\n }) {\n if ( !types ) {\n types = [];\n }\n\n if ( type ) {\n types.push(type);\n }\n\n const map = forBasic ? state.basicTypeWeights : state.typeWeights;\n\n for ( const t of types ) {\n map[t.toLowerCase()] = weight;\n }\n },\n\n // mapGroup('ugly.thing', 'Nice Thing', 1);\n // mapGroup(/ugly.thing.(stuff)', '$1', 2);\n // mapGroup(/ugly.thing.(stuff)', function(groupStr, ruleObj, regexMatch, typeObj) { return ucFirst(group.id) } , 2);\n mapGroup(state, {\n match, replace, weight = 5, continueOnMatch = false\n }) {\n _addMapping(state.groupMappings, match, replace, weight, continueOnMatch);\n },\n\n mapType(state, {\n match, replace, weight = 5, continueOnMatch = false\n }) {\n _addMapping(state.typeMappings, match, replace, weight, continueOnMatch);\n },\n\n // moveType('apps.deployment', 'Core');\n moveType(state, { match, group, weight = 5 }) {\n _addMapping(state.typeMoveMappings, match, group, weight);\n },\n\n componentForType(state, { match, replace }) {\n match = ensureRegex(match);\n match = regexToString(match);\n state.typeToComponentMappings.push({ match, replace });\n },\n\n configureType(state, options) {\n const match = regexToString(ensureRegex(options.match));\n\n const idx = state.typeOptions.findIndex((obj) => obj.match === match);\n let obj = { ...options, match };\n\n if ( idx >= 0 ) {\n obj = Object.assign(state.typeOptions[idx], obj);\n state.typeOptions.splice(idx, 1, obj);\n } else {\n const obj = Object.assign({}, options, { match });\n\n state.typeOptions.push(obj);\n }\n },\n\n};\n\nexport const actions = {\n removeProduct({ commit }, metadata) {\n commit('remove', metadata);\n },\n\n addFavorite({ dispatch, rootGetters }, type) {\n const types = rootGetters['prefs/get'](FAVORITE_TYPES) || [];\n\n addObject(types, type);\n\n dispatch('prefs/set', { key: FAVORITE_TYPES, value: types }, { root: true });\n },\n\n removeFavorite({ dispatch, rootGetters }, type) {\n const types = rootGetters['prefs/get'](FAVORITE_TYPES) || [];\n\n removeObject(types, type);\n\n dispatch('prefs/set', { key: FAVORITE_TYPES, value: types }, { root: true });\n },\n\n toggleGroup({ dispatch, rootGetters }, { group, expanded }) {\n const groups = rootGetters['prefs/get'](EXPANDED_GROUPS);\n\n if ( expanded ) {\n addObject(groups, group);\n } else {\n removeObject(groups, group);\n }\n\n dispatch('prefs/set', { key: EXPANDED_GROUPS, value: groups }, { root: true });\n },\n\n configureType({ commit }, options) {\n commit('configureType', options);\n }\n};\n\nfunction _sortGroup(tree, mode) {\n const by = ['weight:desc', 'namespaced', 'label'];\n\n tree.children = sortBy(tree.children, by);\n\n for (const entry of tree.children ) {\n if ( entry.children ) {\n _sortGroup(entry, mode);\n }\n }\n}\n\nfunction _matchingCounts(typeObj, namespaces) {\n // That was easy\n if ( !typeObj.namespaced || !typeObj.byNamespace || namespaces === null || typeObj.count === null) {\n return typeObj.count;\n }\n\n let out = 0;\n\n // Otherwise start with 0 and count up\n for ( const namespace of namespaces ) {\n out += typeObj.byNamespace[namespace]?.count || 0;\n }\n\n return out;\n}\n\nfunction _applyMapping(objOrValue, mappings, keyField, cache, defaultFn) {\n let key = objOrValue;\n let found = false;\n\n if ( keyField ) {\n if ( typeof objOrValue !== 'object' ) {\n return objOrValue;\n }\n\n key = get(objOrValue, keyField);\n\n if ( typeof key !== 'string' ) {\n return null;\n }\n }\n\n if ( key && cache && cache[key] ) {\n return cache[key];\n }\n\n let out = `${ key }`;\n\n for ( const rule of mappings ) {\n const re = stringToRegex(rule.match);\n const captured = out.match(re);\n\n if ( captured && rule.replace ) {\n out = out.replace(re, rule.replace);\n\n found = true;\n if ( !rule.continueOnMatch ) {\n break;\n }\n }\n }\n\n if ( !found && defaultFn ) {\n out = defaultFn(out, objOrValue);\n }\n\n if ( cache ) {\n cache[key] = out;\n }\n\n return out;\n}\n\nfunction _addMapping(mappings, match, replace, weight, continueOnMatch) {\n match = regexToString(ensureRegex(match));\n\n mappings.push({\n match,\n replace,\n weight,\n continueOnMatch,\n insertIndex: mappings.length,\n });\n\n // Re-sort the list by weight (highest first) and insert time (oldest first)\n mappings.sort((a, b) => {\n const pri = b.weight - a.weight;\n\n if ( pri ) {\n return pri;\n }\n\n return a.insertIndex - b.insertIndex;\n });\n}\n\n// Regexes can't be represented in state because they don't serialize to JSON..\nconst regexCache = {};\n\nfunction regexToString(regex) {\n return regex.source;\n}\n\nfunction stringToRegex(str) {\n let out = regexCache[str];\n\n if ( !out ) {\n out = new RegExp(str);\n regexCache[str] = out;\n }\n\n return out;\n}\n\nfunction ifHave(getters, option) {\n switch (option) {\n case IF_HAVE.V2_MONITORING: {\n return haveV2Monitoring(getters);\n }\n case IF_HAVE.V1_MONITORING: {\n return haveV1Monitoring(getters);\n }\n case IF_HAVE.PROJECT: {\n return !!project(getters);\n }\n case IF_HAVE.NO_PROJECT: {\n return !project(getters);\n }\n case IF_HAVE.NOT_V1_ISTIO: {\n return !isV1Istio(getters);\n }\n case IF_HAVE.MULTI_CLUSTER: {\n return getters.isMultiCluster;\n }\n case IF_HAVE.NEUVECTOR_NAMESPACE: {\n return getters[`cluster/all`](NAMESPACE).find((n) => n.metadata.name === NEU_VECTOR_NAMESPACE);\n }\n case IF_HAVE.ADMIN: {\n return isAdminUser(getters);\n }\n case IF_HAVE.MCM_DISABLED: {\n return !getters['isRancherInHarvester'];\n }\n case IF_HAVE.NOT_STANDALONE_HARVESTER: {\n return !getters['isStandaloneHarvester'];\n }\n default:\n return false;\n }\n}\n\n// Could list a larger set of resources that typically only an admin user would have\nexport function isAdminUser(getters) {\n const canEditSettings = (getters['management/schemaFor'](MANAGEMENT.SETTING)?.resourceMethods || []).includes('PUT');\n const canEditFeatureFlags = (getters['management/schemaFor'](MANAGEMENT.FEATURE)?.resourceMethods || []).includes('PUT');\n const canInstallApps = (getters['management/schemaFor'](CATALOG.APP)?.resourceMethods || []).includes('PUT');\n const canAddRepos = (getters['management/schemaFor'](CATALOG.CLUSTER_REPO)?.resourceMethods || []).includes('PUT');\n const canPutHelmOperations = (getters['management/schemaFor'](CATALOG.OPERATION)?.resourceMethods || []).includes('PUT');\n\n return canEditSettings && canEditFeatureFlags && canInstallApps && canAddRepos && canPutHelmOperations;\n}\n\nfunction _findColumnByName(schema, colName) {\n const attributes = schema.attributes || {};\n const columns = attributes.columns || [];\n\n return findBy(columns, 'name', colName);\n}\n\nfunction _rowValueGetter(col) {\n // 'field' comes from the schema - typically it is of the form $.metadata.field[N]\n // We will use JsonPath to look up this value, which is costly - so if we can detect this format\n // Use a more efficient function to get the value\n const value = col.field.startsWith('.') ? `$${ col.field }` : col.field;\n\n if (process.client) {\n const found = value.match(FIELD_REGEX);\n\n if (found && found.length === 2) {\n const fieldIndex = parseInt(found[1], 10);\n\n return (row) => row.metadata?.fields?.[fieldIndex];\n }\n }\n\n return value;\n}\n\n// Is V1 Istio installed?\nfunction isV1Istio(getters) {\n const cluster = getters['currentCluster'];\n\n return !!cluster?.status?.istioEnabled;\n}\n\nfunction ifHaveVerb(rootGetters, module, verb, haveIds) {\n for ( const haveId of haveIds ) {\n const schema = rootGetters[`${ module }/schemaFor`](haveId);\n const want = verb.toLowerCase();\n const collectionMethods = schema.collectionMethods || [];\n const resourceMethods = schema.resourceMethods || [];\n const have = [...collectionMethods, ...resourceMethods].map((x) => x.toLowerCase());\n\n if ( !have.includes(want) && !have.includes(`blocked-${ want }`) ) {\n return false;\n }\n }\n\n return true;\n}\n\n// Look at the namespace filters to determine if a project is selected\nexport function project(getters) {\n const clusterId = getters['currentCluster']?.id;\n\n if ( !clusterId ) {\n return null;\n }\n\n const filters = getters['namespaceFilters'];\n const namespaces = [];\n let projectName = null;\n\n for (const filter of filters) {\n const [type, id] = filter.split('://', 2);\n\n if (type === 'project') {\n if (projectName !== null) {\n // More than one project selected\n return null;\n }\n projectName = id;\n } else if (type === 'ns') {\n namespaces.push(id);\n } else {\n // Something other than project or namespace\n return null;\n }\n }\n\n // No project found?\n if (!projectName) {\n return null;\n }\n\n // We have one project and a set of namespaces\n // Check that all of the namespaces belong to the project\n const project = getters['management/byId'](MANAGEMENT.PROJECT, `${ clusterId }/${ projectName }`);\n\n // No additional namespaces means just the project is selected\n if (namespaces.length === 0) {\n return project;\n }\n\n // Convert the project namespaces into a map so we can check existence easily\n const prjNamespaceMap = project.namespaces.reduce((m, ns) => {\n m[ns.metadata.name] = true;\n\n return m;\n }, {});\n\n // All of the namespace filters must belong to the project\n const found = namespaces.reduce((total, ns) => {\n return prjNamespaceMap[ns] ? total + 1 : 0;\n }, 0);\n\n if (found !== namespaces.length) {\n return null;\n }\n\n return project;\n}\n\nfunction hasCustom(state, rootState, kind, key, fallback) {\n const cache = state.cache[kind];\n\n if ( cache[key] !== undefined ) {\n return cache[key];\n }\n\n // Check to see if the custom kind is provided by a plugin\n if (!!rootState.$plugin.getDynamic(kind, key)) {\n cache[key] = true;\n\n return cache[key];\n }\n\n // Fallback\n try {\n fallback(key);\n cache[key] = true;\n } catch (e) {\n cache[key] = false;\n }\n\n return cache[key];\n}\n\nfunction loadExtension(rootState, kind, key, fallback) {\n const ext = rootState.$plugin.getDynamic(kind, key);\n\n if (ext) {\n if (typeof ext === 'function') {\n return ext;\n }\n\n return () => ext;\n }\n\n return fallback(key);\n}\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.roletemplate.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.roletemplate.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./management.cattle.io.roletemplate.vue?vue&type=template&id=5050d908&scoped=true&\"\nimport script from \"./management.cattle.io.roletemplate.vue?vue&type=script&lang=js&\"\nexport * from \"./management.cattle.io.roletemplate.vue?vue&type=script&lang=js&\"\nimport style0 from \"./management.cattle.io.roletemplate.vue?vue&type=style&index=0&id=5050d908&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5050d908\",\n null\n \n)\n\nexport default component.exports","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".text.info[data-v-5050d908]{display:flex;align-items:center}.text.info>span[data-v-5050d908]{margin-right:5px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ActionDropdown.vue?vue&type=template&id=70f0de36&\"\nimport script from \"./ActionDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./ActionDropdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ActionDropdown.vue?vue&type=style&index=0&id=70f0de36&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/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('thead',[_c('tr',{class:{'loading': _vm.loading}},[(_vm.tableActions)?_c('th',{attrs:{\"width\":_vm.checkWidth,\"align\":\"middle\"}},[_c('Checkbox',{staticClass:\"check\",attrs:{\"data-testid\":\"sortable-table_check_select_all\",\"indeterminate\":_vm.isIndeterminate,\"disabled\":_vm.noRows || _vm.noResults},model:{value:(_vm.isAll),callback:function ($$v) {_vm.isAll=$$v},expression:\"isAll\"}})],1):_vm._e(),(_vm.subExpandColumn)?_c('th',{attrs:{\"width\":_vm.expandWidth}}):_vm._e(),_vm._l((_vm.columns),function(col){return _c('th',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hasAdvancedFiltering || (_vm.hasAdvancedFiltering && col.isColVisible)),expression:\"!hasAdvancedFiltering || (hasAdvancedFiltering && col.isColVisible)\"}],key:col.name,class:{ sortable: col.sort, [col.breakpoint]: !!col.breakpoint},attrs:{\"align\":col.align || 'left',\"width\":col.width},on:{\"click\":function($event){$event.preventDefault();return _vm.changeSort($event, col)}}},[_c('div',{staticClass:\"table-header-container\",class:{ 'not-filterable': _vm.hasAdvancedFiltering && !col.isFilter }},[(col.sort)?_c('span',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.tooltip(col)),expression:\"tooltip(col)\"}]},[_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.labelFor(col)),expression:\"labelFor(col)\"}]}),_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasAdvancedFiltering && !col.isFilter),expression:\"hasAdvancedFiltering && !col.isFilter\"},{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.t('sortableTable.tableHeader.noFilter')),expression:\"t('sortableTable.tableHeader.noFilter')\"}],staticClass:\"icon icon-info not-filter-icon\"}),_c('span',{staticClass:\"icon-stack\"},[_c('i',{staticClass:\"icon icon-sort icon-stack-1x faded\"}),(_vm.isCurrent(col) && !_vm.descending)?_c('i',{staticClass:\"icon icon-sort-down icon-stack-1x\"}):_vm._e(),(_vm.isCurrent(col) && _vm.descending)?_c('i',{staticClass:\"icon icon-sort-up icon-stack-1x\"}):_vm._e()])]):_c('span',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.tooltip(col)),expression:\"tooltip(col)\"}]},[_vm._v(_vm._s(_vm.labelFor(col)))])])])}),(_vm.rowActions && _vm.hasAdvancedFiltering && _vm.tableColsOptions.length)?_c('th',{attrs:{\"width\":_vm.rowActionsWidth}},[_c('div',{ref:\"table-options\",staticClass:\"table-options-group\"},[_c('button',{staticClass:\"btn btn-sm role-multi-action table-options-btn\",attrs:{\"aria-haspopup\":\"true\",\"aria-expanded\":\"false\",\"type\":\"button\"},on:{\"click\":_vm.tableColsOptionsClick}},[_c('i',{staticClass:\"icon icon-actions\"})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.tableColsOptionsVisibility),expression:\"tableColsOptionsVisibility\"}],staticClass:\"table-options-container\",style:(_vm.tableColsMenuPosition)},[(_vm.hasAdvGrouping)?_c('div',{staticClass:\"table-options-grouping\"},[_c('span',{staticClass:\"table-options-col-subtitle\"},[_vm._v(_vm._s(_vm.t('sortableTable.tableHeader.groupBy'))+\":\")]),_c('LabeledSelect',{staticClass:\"table-options-grouping-select\",attrs:{\"clearable\":true,\"options\":_vm.groupOptions,\"disabled\":false,\"searchable\":false,\"mode\":\"edit\",\"multiple\":false,\"taggable\":false},model:{value:(_vm.advGroup),callback:function ($$v) {_vm.advGroup=$$v},expression:\"advGroup\"}})],1):_vm._e(),_c('p',{staticClass:\"table-options-col-subtitle mb-20\"},[_vm._v(\" \"+_vm._s(_vm.t('sortableTable.tableHeader.show'))+\": \")]),_c('ul',_vm._l((_vm.tableColsOptions),function(col,index){return _c('li',{directives:[{name:\"show\",rawName:\"v-show\",value:(col.isTableOption),expression:\"col.isTableOption\"}],key:index,class:{ 'visible': !col.preventColToggle }},[_c('Checkbox',{directives:[{name:\"show\",rawName:\"v-show\",value:(!col.preventColToggle),expression:\"!col.preventColToggle\"}],staticClass:\"table-options-checkbox\",attrs:{\"label\":col.label},on:{\"input\":function($event){return _vm.tableOptionsCheckbox($event, col.label)}},model:{value:(col.isColVisible),callback:function ($$v) {_vm.$set(col, \"isColVisible\", $$v)},expression:\"col.isColVisible\"}})],1)}),0)])])]):(_vm.rowActions)?_c('th',{attrs:{\"width\":_vm.rowActionsWidth}}):_vm._e()],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export function getParent(el, parentSelector) {\n el = el?.parentElement;\n\n if (!el) {\n return null;\n }\n\n const matchFn = el.matches || el.matchesSelector;\n\n if (!matchFn.call(el, parentSelector)) {\n return getParent(el, parentSelector);\n }\n\n return el;\n}\n","import { isMore, isRange, suppressContextMenu, isAlternate } from '@shell/utils/platform';\nimport { get } from '@shell/utils/object';\nimport { filterBy } from '@shell/utils/array';\nimport { getParent } from '@shell/utils/dom';\n\nexport const ALL = 'all';\nexport const SOME = 'some';\nexport const NONE = 'none';\n\nexport default {\n mounted() {\n const table = this.$el.querySelector('TABLE');\n\n this._onRowClickBound = this.onRowClick.bind(this);\n this._onRowMousedownBound = this.onRowMousedown.bind(this);\n this._onRowContextBound = this.onRowContext.bind(this);\n\n table.addEventListener('click', this._onRowClickBound);\n table.addEventListener('mousedown', this._onRowMousedownBound);\n table.addEventListener('contextmenu', this._onRowContextBound);\n },\n\n beforeDestroy() {\n const table = this.$el.querySelector('TABLE');\n\n table.removeEventListener('click', this._onRowClickBound);\n table.removeEventListener('mousedown', this._onRowMousedownBound);\n table.removeEventListener('contextmenu', this._onRowContextBound);\n },\n\n computed: {\n // Used for the table-level selection check-box to show checked (all selected)/intermediate (some selected)/unchecked (none selected)\n howMuchSelected() {\n const total = this.pagedRows.length;\n const selected = this.selectedRows.length;\n\n if ( selected >= total && total > 0 ) {\n return ALL;\n } else if ( selected > 0 ) {\n return SOME;\n }\n\n return NONE;\n },\n\n // NOTE: The logic here could be simplified and made more performant\n bulkActionsForSelection() {\n let disableAll = false;\n // pagedRows is all rows in the current page\n const all = this.pagedRows;\n const allRows = this.arrangedRows;\n let selected = this.selectedRows;\n\n // Nothing is selected\n if ( !this.selectedRows.length ) {\n // and there are no rows\n if ( !allRows ) {\n return [];\n }\n\n const firstNode = allRows[0];\n\n selected = firstNode ? [firstNode] : [];\n disableAll = true;\n }\n\n const map = {};\n\n // Find and add all the actions for all the nodes so that we know\n // what all the possible actions are\n for ( const node of all ) {\n if (node.availableActions) {\n for ( const act of node.availableActions ) {\n if ( act.bulkable ) {\n _add(map, act, false);\n }\n }\n }\n }\n\n // Go through all the selected items and add the actions (which were already identified above)\n // as available for some (or all) of the selected nodes\n for ( const node of selected ) {\n if (node.availableActions) {\n for ( const act of node.availableActions ) {\n if ( act.bulkable && act.enabled ) {\n _add(map, act, false);\n }\n }\n }\n }\n\n // If there's no items actually selected, we want to see all the actions\n // so you know what exists, but have them all be disabled since there's nothing to do them on.\n const out = _filter(map, disableAll);\n\n // Enable a bulkaction if some of the selected items can perform the action\n out.forEach((bulkAction) => {\n const actionEnabledForSomeSelected = this.selectedRows.some((node) => {\n const availableActions = node.availableActions || [];\n\n return availableActions.some((action) => action.action === bulkAction.action && action.enabled);\n });\n\n bulkAction.enabled = this.selectedRows.length > 0 && actionEnabledForSomeSelected;\n });\n\n return out.sort((a, b) => (b.weight || 0) - (a.weight || 0));\n }\n },\n\n data() {\n return {\n // List of selected items in the table\n selectedRows: [],\n prevNode: null,\n };\n },\n\n watch: {\n // On page change\n pagedRows() {\n // When the table contents changes:\n // - Remove items that are in the selection but no longer in the table.\n\n const content = this.pagedRows;\n const toRemove = [];\n\n for (const node of this.selectedRows) {\n if (!content.includes(node) ) {\n toRemove.push(node);\n }\n }\n\n this.update([], toRemove);\n }\n },\n\n methods: {\n onToggleAll(value) {\n if ( value ) {\n this.update(this.pagedRows, []);\n\n return true;\n } else {\n this.update([], this.pagedRows);\n\n return false;\n }\n },\n\n onRowMousedown(e) {\n if ( isRange(e) || this.isSelectionCheckbox(e.target) ) {\n e.preventDefault();\n }\n },\n\n onRowMouseEnter(e) {\n const tr = e.target.closest('TR');\n\n if (tr.classList.contains('sub-row')) {\n const trMainRow = tr.previousElementSibling;\n\n trMainRow.classList.add('sub-row-hovered');\n }\n },\n\n onRowMouseLeave(e) {\n const tr = e.target.closest('TR');\n\n if (tr.classList.contains('sub-row')) {\n const trMainRow = tr.previousElementSibling;\n\n trMainRow.classList.remove('sub-row-hovered');\n }\n },\n\n nodeForEvent(e) {\n const tagName = e.target.tagName;\n const tgt = e.target;\n const actionElement = tgt.closest('.actions');\n\n if ( tgt.classList.contains('select-all-check') ) {\n return;\n }\n\n if ( !actionElement ) {\n if (\n tagName === 'A' ||\n tagName === 'BUTTON' ||\n getParent(tgt, '.btn')\n ) {\n return;\n }\n }\n\n const tgtRow = e.target.closest('TR');\n\n return this.nodeForRow(tgtRow);\n },\n\n nodeForRow(tgtRow) {\n if ( tgtRow?.classList.contains('separator-row') ) {\n return;\n }\n\n while ( tgtRow && !tgtRow.classList.contains('main-row') ) {\n tgtRow = tgtRow.previousElementSibling;\n }\n\n if ( !tgtRow ) {\n return;\n }\n\n const nodeId = tgtRow.dataset.nodeId;\n\n if ( !nodeId ) {\n return;\n }\n\n const node = this.pagedRows.find( (x) => get(x, this.keyField) === nodeId );\n\n return node;\n },\n\n async onRowClick(e) {\n const node = this.nodeForEvent(e);\n const td = e.target.closest('TD');\n const skipSelect = td?.classList.contains('skip-select');\n\n if (skipSelect) {\n return;\n }\n const selection = this.selectedRows;\n const isCheckbox = this.isSelectionCheckbox(e.target) || td?.classList.contains('row-check');\n const isExpand = td?.classList.contains('row-expand');\n const content = this.pagedRows;\n\n this.$emit('rowClick', e);\n\n if ( !node ) {\n return;\n }\n\n if ( isExpand ) {\n this.toggleExpand(node);\n\n return;\n }\n\n const actionElement = e.target.closest('.actions');\n\n if ( actionElement ) {\n let resources = [node];\n\n if ( this.mangleActionResources ) {\n const i = actionElement.querySelector('i');\n\n i.classList.remove('icon-actions');\n i.classList.add('icon-spinner');\n i.classList.add('icon-spin');\n\n try {\n resources = await this.mangleActionResources(resources);\n } finally {\n i.classList.remove('icon-spinner');\n i.classList.remove('icon-spin');\n i.classList.add('icon-actions');\n }\n }\n\n this.$store.commit(`action-menu/show`, {\n resources,\n event: e,\n elem: actionElement\n });\n\n return;\n }\n\n const isSelected = selection.includes(node);\n let prevNode = this.prevNode;\n\n // PrevNode is only valid if it's in the current content\n if ( !prevNode || !content.includes(prevNode) ) {\n prevNode = node;\n }\n\n if ( isMore(e) ) {\n this.toggle(node);\n } else if ( isRange(e) ) {\n const toToggle = this.nodesBetween(prevNode, node);\n\n if ( isSelected ) {\n this.update([], toToggle);\n } else {\n this.update(toToggle, []);\n }\n } else if ( isCheckbox ) {\n this.toggle(node);\n } else {\n this.update([node], content);\n }\n\n this.prevNode = node;\n },\n\n async onRowContext(e) {\n const node = this.nodeForEvent(e);\n\n if ( suppressContextMenu(e) ) {\n return;\n }\n\n if ( !node ) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n this.prevNode = node;\n const isSelected = this.selectedRows.includes(node);\n\n if ( !isSelected ) {\n this.update([node], this.selectedRows.slice());\n }\n\n let resources = this.selectedRows;\n\n if ( this.mangleActionResources ) {\n resources = await this.mangleActionResources(resources);\n }\n\n this.$store.commit(`action-menu/show`, {\n resources,\n event: e,\n });\n },\n\n keySelectRow(row, more = false) {\n const node = this.nodeForRow(row);\n const content = this.pagedRows;\n\n if ( !node ) {\n return;\n }\n\n if ( more ) {\n this.update([node], []);\n } else {\n this.update([node], content);\n }\n\n this.prevNode = node;\n },\n\n isSelectionCheckbox(element) {\n return element.tagName === 'INPUT' &&\n element.type === 'checkbox' &&\n element.closest('.selection-checkbox') !== null;\n },\n\n nodesBetween(a, b) {\n let toToggle = [];\n const key = this.groupBy;\n\n if ( key ) {\n // Grouped has 2 levels to look through\n const grouped = this.groupedRows;\n\n let from = this.groupIdx(a);\n let to = this.groupIdx(b);\n\n if ( !from || !to ) {\n return [];\n }\n\n // From has to come before To\n if ( (from.group > to.group) || ((from.group === to.group) && (from.item > to.item)) ) {\n [from, to] = [to, from];\n }\n\n for ( let i = from.group ; i <= to.group ; i++ ) {\n const items = grouped[i].rows;\n let j = (from.group === i ? from.item : 0);\n\n while ( items[j] && ( i < to.group || j <= to.item )) {\n toToggle.push(items[j]);\n j++;\n }\n }\n } else {\n // Ungrouped is much simpler\n const content = this.pagedRows;\n let from = content.indexOf(a);\n let to = content.indexOf(b);\n\n [from, to] = [Math.min(from, to), Math.max(from, to)];\n toToggle = content.slice(from, to + 1);\n }\n\n // check if there is already duplicate content selected (selectedRows) on the list to toggle...\n toToggle = toToggle.filter((item) => !this.selectedRows.includes(item));\n\n return toToggle;\n },\n\n groupIdx(node) {\n const grouped = this.groupedRows;\n\n for ( let i = 0 ; i < grouped.length ; i++ ) {\n const rows = grouped[i].rows;\n\n for ( let j = 0 ; j < rows.length ; j++ ) {\n if ( rows[j] === node ) {\n return {\n group: i,\n item: j\n };\n }\n }\n }\n\n return null;\n },\n\n toggle(node) {\n const add = [];\n const remove = [];\n\n if (this.selectedRows.includes(node)) {\n remove.push(node);\n } else {\n add.push(node);\n }\n\n this.update(add, remove);\n },\n\n update(toAdd, toRemove) {\n toRemove.forEach((row) => {\n const index = this.selectedRows.findIndex((r) => r === row);\n\n if (index !== -1) {\n this.selectedRows.splice(index, 1);\n }\n });\n\n if ( toAdd ) {\n this.selectedRows.push(...toAdd);\n }\n\n // Uncheck and check the checkboxes of nodes that have been added/removed\n if (toRemove.length) {\n this.$nextTick(() => {\n for ( let i = 0 ; i < toRemove.length ; i++ ) {\n this.updateInput(toRemove[i], false, this.keyField);\n }\n });\n }\n\n if (toAdd.length) {\n this.$nextTick(() => {\n for ( let i = 0 ; i < toAdd.length ; i++ ) {\n this.updateInput(toAdd[i], true, this.keyField);\n }\n });\n }\n\n this.$nextTick(() => {\n this.$emit('selection', this.selectedRows);\n });\n },\n\n updateInput(node, on, keyField) {\n const id = get(node, keyField);\n\n if ( id ) {\n // Note: This is looking for the checkbox control for the row\n const input = this.$el.querySelector(`div[data-checkbox-ctrl][data-node-id=\"${ id }\"]`);\n\n if ( input && !input.disabled ) {\n const label = input.querySelector('label');\n\n if (label) {\n label.value = on;\n }\n let tr = input.closest('tr');\n let first = true;\n\n while ( tr && (first || tr.classList.contains('sub-row') ) ) {\n if (on) {\n tr.classList.add('row-selected');\n } else {\n tr.classList.remove('row-selected');\n }\n tr = tr.nextElementSibling;\n first = false;\n }\n }\n }\n },\n\n select(nodes) {\n nodes.forEach((node) => {\n const id = get(node, this.keyField);\n const input = this.$el.querySelector(`label[data-node-id=\"${ id }\"]`);\n\n input.dispatchEvent(new Event('click'));\n });\n },\n\n applyTableAction(action, args, event) {\n const opts = { alt: event && isAlternate(event), event };\n\n // Go through the table selection and filter out those actions that can't run the chosen action\n const executableSelection = this.selectedRows.filter((row) => {\n const matchingResourceAction = row.availableActions.find((a) => a.action === action.action);\n\n return matchingResourceAction?.enabled;\n });\n\n _execute(executableSelection, action, args, opts, this);\n\n this.actionOfInterest = null;\n },\n\n clearSelection() {\n this.update([], this.selectedRows);\n },\n\n }\n};\n\n// ---------------------------------------------------------------------\n// --- Helpers that were in selectionStore.js --------------------------\n// ---------------------------------------------------------------------\n\nlet anon = 0;\n\nfunction _add(map, act, incrementCounts = true) {\n let id = act.action;\n\n if ( !id ) {\n id = `anon${ anon }`;\n anon++;\n }\n\n let obj = map[id];\n\n if ( !obj ) {\n obj = Object.assign({}, act);\n map[id] = obj;\n obj.allEnabled = false;\n }\n\n if ( !act.enabled ) {\n obj.allEnabled = false;\n } else {\n obj.anyEnabled = true;\n }\n\n if ( incrementCounts ) {\n obj.available = (obj.available || 0) + (!act.enabled ? 0 : 1 );\n obj.total = (obj.total || 0) + 1;\n }\n\n return obj;\n}\n\nfunction _filter(map, disableAll = false) {\n const out = filterBy(Object.values(map), 'anyEnabled', true);\n\n for ( const act of out ) {\n if ( disableAll ) {\n act.enabled = false;\n } else {\n act.enabled = ( act.available >= act.total );\n }\n }\n\n return out;\n}\n\nfunction _execute(resources, action, args, opts = {}, ctx) {\n args = args || [];\n\n // New pattern for extensions - always call invoke\n if (action.invoke) {\n const actionOpts = {\n action,\n event: opts.event,\n isAlt: !!opts.alt,\n };\n\n return action.invoke.apply(ctx, [actionOpts, resources || [], args]);\n }\n\n if ( resources.length > 1 && action.bulkAction && !opts.alt ) {\n const fn = resources[0][action.bulkAction];\n\n if ( fn ) {\n return fn.call(resources[0], resources, ...args);\n }\n }\n\n const promises = [];\n\n for ( const resource of resources ) {\n let fn;\n\n if (opts.alt && action.altAction) {\n fn = resource[action.altAction];\n } else {\n fn = resource[action.action];\n }\n\n if ( fn ) {\n promises.push(fn.apply(resource, args));\n }\n }\n\n return Promise.all(promises);\n}\n","// @TODO replace this with popper.js...\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const TOP = 'top';\nexport const CENTER = 'center'; // These are both the same externally so you can use either,\nexport const MIDDLE = 'center'; // but have different meaning inside this file (center->left/right, middle->top/bottom)\nexport const BOTTOM = 'bottom';\nexport const AUTO = 'auto';\n\nexport function boundingRect(elem) {\n const pos = elem.getBoundingClientRect();\n const width = elem.offsetWidth;\n const height = elem.offsetHeight;\n\n return {\n top: pos.top,\n right: pos.left + width,\n bottom: pos.top + height,\n left: pos.left,\n width,\n height,\n };\n}\n\nexport function fakeRectFor(event) {\n return {\n top: event.clientY,\n left: event.clientX,\n bottom: event.clientY,\n right: event.clientX,\n width: 0,\n height: 0,\n };\n}\n\nexport function screenRect() {\n const width = window.innerWidth;\n const height = window.innerHeight;\n const top = window.pageYOffset;\n const left = window.pageXOffset;\n\n return {\n top,\n right: left + width,\n bottom: top + height,\n left,\n width,\n height,\n };\n}\n\nexport function fitOnScreen(contentElem, triggerElemOrEvent, opt, useDefaults) {\n let {\n positionX = AUTO, // Preferred horizontal position\n positionY = AUTO, // Preferred vertical position\n } = opt || {};\n\n const {\n fudgeX = 0,\n fudgeY = 0,\n overlapX = true, // Position on \"top\" of the trigger horizontally\n overlapY = false, // Position on \"top\" of the trigger vertically\n } = opt || {};\n\n const screen = screenRect();\n let trigger;\n\n if ( triggerElemOrEvent instanceof Event ) {\n trigger = fakeRectFor(triggerElemOrEvent);\n } else {\n trigger = boundingRect(triggerElemOrEvent);\n }\n\n let content = {};\n\n if (contentElem) {\n content = boundingRect(contentElem);\n }\n\n if (useDefaults) {\n content = {\n top: 0,\n right: 147,\n bottom: 163,\n left: 0,\n width: 147,\n height: 80\n };\n }\n\n // console.log('screen', screen);\n // console.log('trigger', trigger);\n // console.log('content', content);\n\n const style = { position: 'absolute' };\n\n const originFor = {\n left: (overlapX ? trigger.left : trigger.right ),\n center: (trigger.left + trigger.right ) / 2,\n right: (overlapX ? trigger.right : trigger.left ),\n top: (overlapY ? trigger.bottom : trigger.top ),\n middle: (trigger.top + trigger.bottom ) / 2,\n bottom: (overlapY ? trigger.top : trigger.bottom ),\n };\n\n // console.log('origin', originFor);\n\n const gapIf = {\n left: screen.right - content.width - originFor.left,\n center: Math.min(screen.right - (content.width / 2) - originFor.center, originFor.center - (content.width / 2) - screen.left),\n right: originFor.right - content.width - screen.left,\n top: originFor.bottom - content.height - screen.top,\n middle: Math.min(originFor.middle - (content.height / 2) - screen.top, screen.bottom - (content.height / 2) - originFor.middle),\n bottom: screen.bottom - content.height - originFor.top,\n };\n\n // console.log('gapIf', gapIf);\n\n if ( positionX === CENTER && gapIf.center < 0) {\n positionX = AUTO;\n }\n\n if ( positionX === AUTO ) {\n positionX = gapIf.left < 0 || gapIf.right * 1.5 > gapIf.left ? RIGHT : LEFT;\n } else if ( positionY === LEFT && gapIf.left < 0 ) {\n positionX = RIGHT;\n } else if ( positionY === RIGHT && gapIf.right < 0 ) {\n positionX = LEFT;\n }\n\n switch ( positionX ) {\n case LEFT:\n style.left = `${ originFor.left - fudgeX }px`;\n break;\n case CENTER:\n style.left = `${ ((originFor.left + originFor.right) / 2) - (content.width / 2) - fudgeX }px`;\n break;\n case RIGHT:\n style.left = `${ originFor.right + fudgeX - content.width }px`;\n // style.right = `${ screen.width - originFor.right - fudgeX }px`;\n break;\n }\n\n if ( positionY === MIDDLE && gapIf.middle < 0) {\n positionY = AUTO;\n }\n\n if ( positionY === AUTO ) {\n positionY = gapIf.top < 0 || gapIf.bottom * 1.5 > gapIf.top ? BOTTOM : TOP;\n } else if ( positionY === TOP && gapIf.top < 0 ) {\n positionY = BOTTOM;\n } else if ( positionY === BOTTOM && gapIf.bottom < 0 ) {\n positionY = TOP;\n }\n\n switch ( positionY ) {\n case TOP:\n style.top = `${ originFor.top + fudgeY - content.height }px`;\n break;\n case CENTER:\n style.top = `${ ((originFor.top + originFor.bottom) / 2) + fudgeY - content.height }px`;\n break;\n case BOTTOM:\n style.top = `${ originFor.bottom - fudgeY }px`;\n break;\n }\n\n // console.log(positionX, positionY, style);\n\n return style;\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"select\",staticClass:\"labeled-select\",class:{\n disabled: _vm.isView || _vm.disabled,\n focused: _vm.focused,\n [_vm.mode]: true,\n [_vm.status]: _vm.status,\n taggable: _vm.$attrs.taggable,\n taggable: _vm.$attrs.multiple,\n hoverable: _vm.hoverTooltip,\n 'compact-input': _vm.isCompact,\n 'no-label': !_vm.hasLabel,\n },on:{\"click\":_vm.focusSearch,\"focus\":_vm.focusSearch}},[_c('div',{class:{ 'labeled-container': true, raised: _vm.raised, empty: _vm.empty, [_vm.mode]: true },style:({ border: 'none' })},[(_vm.hasLabel)?_c('label',[(_vm.labelKey)?_c('t',{attrs:{\"k\":_vm.labelKey}}):(_vm.label)?[_vm._v(_vm._s(_vm.label))]:_vm._e(),(_vm.requiredField)?_c('span',{staticClass:\"required\"},[_vm._v(\"*\")]):_vm._e()],2):_vm._e()]),_c('v-select',_vm._g(_vm._b({ref:\"select-input\",staticClass:\"inline\",class:{ 'no-label': !(_vm.label || '').length },attrs:{\"append-to-body\":_vm.appendToBody,\"calculate-position\":_vm.positionDropdown,\"clearable\":_vm.clearable,\"disabled\":_vm.isView || _vm.disabled || _vm.loading,\"get-option-key\":_vm.getOptionKey,\"get-option-label\":(opt) => _vm.getOptionLabel(opt),\"label\":_vm.optionLabel,\"options\":_vm.options,\"map-keydown\":_vm.mappedKeys,\"placeholder\":_vm.placeholder,\"reduce\":(x) => _vm.reduce(x),\"searchable\":_vm.isSearchable,\"selectable\":_vm.selectable,\"value\":_vm.value != null && !_vm.loading ? _vm.value : '',\"dropdown-should-open\":_vm.dropdownShouldOpen},on:{\"search:blur\":_vm.onBlur,\"search:focus\":_vm.onFocus,\"search\":_vm.onSearch,\"open\":_vm.onOpen,\"close\":_vm.onClose,\"option:selected\":function($event){return _vm.$emit('selecting', $event)}},scopedSlots:_vm._u([{key:\"option\",fn:function(option){return [(option.kind === 'group')?[_c('div',{staticClass:\"vs__option-kind-group\"},[_c('b',[_vm._v(_vm._s(_vm.getOptionLabel(option)))]),(option.badge)?_c('div',[_vm._v(\" \"+_vm._s(option.badge)+\" \")]):_vm._e()])]:(option.kind === 'divider')?[_c('hr')]:(option.kind === 'highlighted')?[_c('div',{staticClass:\"option-kind-highlighted\"},[_vm._v(\" \"+_vm._s(option.label)+\" \")])]:_c('div',{on:{\"mousedown\":(e) => _vm.onClickOption(option, e)}},[_vm._v(\" \"+_vm._s(_vm.getOptionLabel(option))+\" \"),(option.error)?_c('i',{staticClass:\"icon icon-warning pull-right\",staticStyle:{\"font-size\":\"20px\"}}):_vm._e()])]}},_vm._l((_vm.$scopedSlots),function(_,slot){return {key:slot,fn:function(scope){return [_vm._t(slot,null,null,scope)]}}})],null,true)},'v-select',_vm.$attrs,false),_vm.$listeners)),(_vm.loading)?_c('i',{staticClass:\"icon icon-spinner icon-spin icon-lg\"}):_vm._e(),(_vm.tooltip && !_vm.focused)?_c('LabeledTooltip',{attrs:{\"hover\":_vm.hoverTooltip,\"value\":_vm.tooltip,\"status\":_vm.status}}):_vm._e(),(!!_vm.validationMessage)?_c('LabeledTooltip',{attrs:{\"hover\":_vm.hoverTooltip,\"value\":_vm.validationMessage}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\n\nexport default Vue.extend({\n props: {\n compact: {\n type: Boolean,\n default: null\n },\n label: {\n type: String,\n default: null\n },\n\n labelKey: {\n type: String,\n default: null\n },\n },\n\n computed: {\n isCompact(): boolean {\n // Compact if explicitly set - otherwise compact if there is no label\n return this.compact !== null ? this.compact : !(this.label || this.labelKey);\n }\n }\n});\n","/**\n * Sets the width of a DOM element. Adapted from [youmightnotneedjquery.com](https://youmightnotneedjquery.com/#set_width)\n * @param {Element} el - The target DOM element\n * @param {function | string | number} val - The desired width represented as a Number\n */\nexport function setWidth(el, val) {\n if (!el) {\n return;\n }\n\n if (typeof val === 'function') {\n val = val();\n }\n\n if (typeof val === 'string') {\n el.style.width = val;\n\n return;\n }\n\n el.style.width = `${ val }px`;\n}\n\n/**\n * Gets the width of a DOM element. Adapted from [youmightnotneedjquery.com](https://youmightnotneedjquery.com/#get_width)\n * @param {Element} el - The target DOM element\n * @returns Number representing the width for the provided element\n */\nexport function getWidth(el) {\n if (!el || !el.length) {\n return;\n }\n\n if (el.length) {\n return parseFloat(getComputedStyle(el[0]).width.replace('px', ''));\n } else {\n return parseFloat(getComputedStyle(el).width.replace('px', ''));\n }\n}\n","import Vue from 'vue';\nimport { _EDIT, _VIEW } from '@shell/config/query-params';\nimport { getWidth, setWidth } from '@shell/utils/width';\n\ninterface LabeledFormElement {\n raised: boolean;\n focused: boolean;\n blurred: number | null;\n}\n\nexport default Vue.extend({\n inheritAttrs: false,\n\n props: {\n mode: {\n type: String,\n default: _EDIT,\n },\n\n label: {\n type: String,\n default: null\n },\n\n labelKey: {\n type: String,\n default: null\n },\n\n placeholderKey: {\n type: String,\n default: null\n },\n\n tooltip: {\n type: [String, Object],\n default: null\n },\n\n hoverTooltip: {\n type: Boolean,\n default: true,\n },\n\n tooltipKey: {\n type: String,\n default: null\n },\n\n required: {\n type: Boolean,\n default: false,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n placeholder: {\n type: [String, Number],\n default: ''\n },\n\n value: {\n type: [String, Number, Object],\n default: ''\n },\n\n options: {\n default: null,\n type: Array\n },\n\n searchable: {\n default: false,\n type: Boolean\n },\n\n rules: {\n default: () => [],\n type: Array,\n // we only want functions in the rules array\n validator: (rules: any) => rules.every((rule: any) => ['function'].includes(typeof rule))\n }\n },\n\n data(): LabeledFormElement {\n return {\n raised: this.mode === _VIEW || !!`${ this.value }`,\n focused: false,\n blurred: null,\n };\n },\n\n computed: {\n requiredField(): boolean {\n // using \"any\" for a type on \"rule\" here is dirty but the use of the optional chaining operator makes it safe for what we're doing here.\n return (this.required || this.rules.some((rule: any): boolean => rule?.name === 'required'));\n },\n empty(): boolean {\n return !!`${ this.value }`;\n },\n\n isView(): boolean {\n return this.mode === _VIEW;\n },\n\n isDisabled(): boolean {\n return this.disabled || this.isView;\n },\n\n isSearchable(): boolean {\n const { searchable } = this;\n const options = ( this.options || [] );\n\n if (searchable || options.length >= 10) {\n return true;\n }\n\n return false;\n },\n validationMessage(): string | undefined {\n // we want to grab the required rule passed in if we can but if it's not there then we can just grab it from the formRulesGenerator\n const requiredRule = this.rules.find((rule: any) => rule?.name === 'required') as Function;\n const ruleMessages = [];\n const value = this?.value;\n\n if (requiredRule && this.blurred && !this.focused) {\n const message = requiredRule(value);\n\n if (!!message) {\n return message;\n }\n }\n\n for (const rule of this.rules as Function[]) {\n const message = rule(value);\n\n if (!!message && rule.name !== 'required') { // we're catching 'required' above so we can ignore it here\n ruleMessages.push(message);\n }\n }\n if (ruleMessages.length > 0 && (this.blurred || this.focused)) {\n return ruleMessages.join(', ');\n } else {\n return undefined;\n }\n }\n },\n\n methods: {\n resizeHandler() {\n // since the DD is positioned there is no way to 'inherit' the size of the input, this calcs the size of the parent and set the dd width if it is smaller. If not let it grow with the regular styles\n this.$nextTick(() => {\n const DD = (this.$refs.select as HTMLElement).querySelector('ul.vs__dropdown-menu');\n\n const selectWidth = getWidth(this.$refs.select as Element) || 0;\n const dropWidth = getWidth(DD as Element) || 0;\n\n if (dropWidth < selectWidth) {\n setWidth(DD as Element, selectWidth);\n }\n });\n },\n onFocus() {\n this.$emit('on-focus');\n\n return this.onFocusLabeled();\n },\n\n onFocusLabeled() {\n this.raised = true;\n this.focused = true;\n },\n\n onBlur() {\n this.$emit('on-blur');\n\n return this.onBlurLabeled();\n },\n\n onBlurLabeled() {\n this.focused = false;\n\n if ( !this.value ) {\n this.raised = false;\n }\n\n this.blurred = Date.now();\n }\n }\n});\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{ref:\"container\",staticClass:\"labeled-tooltip\",class:{[_vm.status]: true, hoverable: _vm.hover}},[(_vm.hover)?[_c('i',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.value.content ? { ...{content: _vm.value.content, classes: [`tooltip-${_vm.status}`]}, ..._vm.value } : _vm.value),expression:\"value.content ? { ...{content: value.content, classes: [`tooltip-${status}`]}, ...value } : value\"}],staticClass:\"icon status-icon\",class:{'hover':!_vm.value, [_vm.iconClass]: true}})]:[_c('i',{staticClass:\"icon status-icon\",class:{'hover':!_vm.value}}),(_vm.value)?_c('div',{staticClass:\"tooltip\",attrs:{\"x-placement\":\"bottom\"}},[_c('div',{staticClass:\"tooltip-arrow\"}),_c('div',{staticClass:\"tooltip-inner\"},[_vm._v(\" \"+_vm._s(_vm.value)+\" \")])]):_vm._e()]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport Vue from 'vue';\n\nexport default Vue.extend({\n props: {\n /**\n * The Labeled Tooltip value.\n */\n value: {\n type: [String, Object],\n default: null\n },\n\n /**\n * The status for the Labeled Tooltip. Controls the Labeled Tooltip class.\n * @values info, success, warning, error\n */\n status: {\n type: String,\n default: 'error'\n },\n\n /**\n * Displays the Labeled Tooltip on mouse hover.\n */\n hover: {\n type: Boolean,\n default: true\n }\n },\n computed: {\n iconClass() {\n return this.status === 'error' ? 'icon-warning' : 'icon-info';\n }\n }\n});\n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledTooltip.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledTooltip.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./LabeledTooltip.vue?vue&type=template&id=6fc47e64&\"\nimport script from \"./LabeledTooltip.vue?vue&type=script&lang=ts&\"\nexport * from \"./LabeledTooltip.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./LabeledTooltip.vue?vue&type=style&index=0&id=6fc47e64&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/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","export function onClickOption(option, e) {\r\n if (!this.$attrs.multiple) {\r\n return;\r\n }\r\n\r\n const getValue = (opt) => (this.optionKey ? this.get(opt, this.optionKey) : this.getOptionLabel(opt));\r\n const optionValue = getValue(option);\r\n const value = this.value || [];\r\n const optionIndex = value.findIndex((option) => getValue(option) === optionValue);\r\n\r\n if (optionIndex < 0) {\r\n return;\r\n }\r\n\r\n this.value.splice(optionIndex, 1);\r\n\r\n this.$emit('input', this.value);\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (this.closeOnSelect) {\r\n this.$refs['select-input'].closeSearchOptions();\r\n }\r\n}\r\n\r\n// This is a simpler positionner for the dropdown for a select control\r\n// We used to use popper for these, but it does not suppotr fractional pixel placements which\r\n// means the dropdown does not appear aligned to the control when placed in a column-based layout\r\nexport function calculatePosition(dropdownList, component, width, placement) {\r\n const selectEl = component.$parent.$el;\r\n const r = selectEl.getBoundingClientRect();\r\n const p = placement || 'bottom-start';\r\n const docHeight = document.body.offsetHeight;\r\n const bottom = docHeight - window.scrollY - r.y - 1;\r\n let top;\r\n\r\n // If placement is not at the top, then position if underneath\r\n if (!p.includes('top')) {\r\n // Position is bottom\r\n top = r.y + r.height - 1;\r\n\r\n // Check to see if the dropdown would fall off the screen, if so, try putting it above\r\n const end = top + dropdownList.offsetHeight;\r\n\r\n if (end > window.innerHeight) {\r\n top = undefined;\r\n } else {\r\n top += window.scrollY;\r\n }\r\n }\r\n\r\n if (!top) {\r\n dropdownList.style.bottom = `${ bottom }px`;\r\n dropdownList.classList.add('vs__dropdown-up');\r\n selectEl.classList.add('vs__dropdown-up');\r\n } else {\r\n dropdownList.style.top = `${ top }px`;\r\n dropdownList.classList.remove('vs__dropdown-up');\r\n selectEl.classList.remove('vs__dropdown-up');\r\n }\r\n\r\n dropdownList.style.left = `${ r.x }px`;\r\n dropdownList.style.width = 'min-content';\r\n dropdownList.style.minWidth = `${ r.width }px`;\r\n}\r\n","\n\n\n \n \n \n \n \n\n\n\n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabeledSelect.vue?vue&type=template&id=0abf511e&scoped=true&\"\nimport script from \"./LabeledSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./LabeledSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LabeledSelect.vue?vue&type=style&index=0&id=0abf511e&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0abf511e\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n \n \n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./THead.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./THead.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./THead.vue?vue&type=template&id=96d8a090&scoped=true&\"\nimport script from \"./THead.vue?vue&type=script&lang=js&\"\nexport * from \"./THead.vue?vue&type=script&lang=js&\"\nimport style0 from \"./THead.vue?vue&type=style&index=0&id=96d8a090&prod&lang=scss&scoped=true&\"\nimport style1 from \"./THead.vue?vue&type=style&index=1&id=96d8a090&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"96d8a090\",\n null\n \n)\n\nexport default component.exports","import { get } from '@shell/utils/object';\nimport { addObject, addObjects, isArray, removeAt } from '@shell/utils/array';\n\nexport const ADV_FILTER_ALL_COLS_VALUE = 'allcols';\nexport const ADV_FILTER_ALL_COLS_LABEL = 'All Columns';\nconst LABEL_IDENTIFIER = ':::islabel';\n\nexport default {\n data() {\n return {\n searchQuery: null,\n previousFilter: null,\n previousResult: null,\n };\n },\n\n computed: {\n searchFields() {\n const out = columnsToSearchField(this.columns);\n\n if ( this.extraSearchFields ) {\n addObjects(out, this.extraSearchFields);\n }\n\n return out;\n },\n\n /*\n subFields: computed('subHeaders.@each.{searchField,name}', 'extraSearchSubFields.[]', function() {\n let out = headersToSearchField(get(this, 'subHeaders'));\n\n return out.addObjects(get(this, 'extraSearchSubFields') || []);\n }),\n */\n filteredRows() {\n // PROP hasAdvancedFiltering comes from Advanced Filtering mixin (careful changing data var there...)\n if (!this.hasAdvancedFiltering) {\n return this.handleFiltering();\n } else {\n return this.handleAdvancedFiltering();\n }\n },\n },\n\n methods: {\n handleAdvancedFiltering() {\n this.subMatches = null;\n\n if (this.searchQuery.length) {\n const out = (this.arrangedRows || []).slice();\n\n const res = out.filter((row) => {\n return this.searchQuery.every((f) => {\n if (f.prop === ADV_FILTER_ALL_COLS_VALUE) {\n // advFilterSelectOptions comes from Advanced Filtering mixin\n // remove the All Columns option from the list so that we don't iterate over it\n const allCols = this.advFilterSelectOptions.slice(1);\n let searchFields = [];\n\n allCols.forEach((col) => {\n if (col.value.includes('[') && col.value.includes(']')) {\n searchFields = searchFields.concat(JSON.parse(col.value));\n } else {\n // this means we are on the presence of a label, which should be dealt\n // carefully because of object path such row.metadata.labels.\"app.kubernetes.io/managed-by\n const value = col.isLabel ? `${ col.label }${ LABEL_IDENTIFIER }` : col.value;\n\n searchFields.push(value);\n }\n });\n\n return handleStringSearch(searchFields, [f.value], row);\n } else {\n if (f.prop.includes('[') && f.prop.includes(']')) {\n return handleStringSearch(JSON.parse(f.prop), [f.value], row);\n }\n\n let prop = f.prop;\n\n // this means we are on the presence of a label, which should be dealt\n // carefully because of object path such row.metadata.labels.\"app.kubernetes.io/managed-by\"\n if (f.prop.includes('metadata.labels')) {\n prop = `${ f.label }${ LABEL_IDENTIFIER }`;\n }\n\n return handleStringSearch([prop], [f.value], row);\n }\n });\n });\n\n return res;\n }\n\n // return arrangedRows array if we don't have anything to search for...\n return this.arrangedRows;\n },\n\n handleFiltering() {\n const searchText = (this.searchQuery || '').trim().toLowerCase();\n let out;\n\n if ( searchText && this.previousResult && searchText.startsWith(this.previousFilter) ) {\n // If the new search is an addition to the last one, we can start with the same set of results as last time\n // and filter those down, since adding more searchText can only reduce the number of results.\n out = this.previousResult.slice();\n } else {\n this.previousResult = null;\n out = (this.arrangedRows || []).slice();\n }\n\n this.previousFilter = searchText;\n\n if ( !searchText.length ) {\n this.subMatches = null;\n this.previousResult = null;\n\n return out;\n }\n\n const searchFields = this.searchFields;\n const searchTokens = searchText.split(/\\s*[, ]\\s*/);\n const subSearch = this.subSearch;\n const subFields = this.subFields;\n const subMatches = {};\n\n for ( let i = out.length - 1 ; i >= 0 ; i-- ) {\n const row = out[i];\n let hits = 0;\n let mainFound = true;\n\n mainFound = handleStringSearch(searchFields, searchTokens, row);\n\n if ( subFields && subSearch) {\n const subRows = row[subSearch] || [];\n\n for ( let k = subRows.length - 1 ; k >= 0 ; k-- ) {\n let subFound = true;\n\n subFound = handleStringSearch(subFields, searchTokens, row);\n\n if ( subFound ) {\n hits++;\n }\n }\n\n subMatches[get(row, this.keyField)] = hits;\n }\n\n if ( !mainFound && hits === 0 ) {\n removeAt(out, i);\n }\n }\n\n this.subMatches = subMatches;\n this.previousResult = out;\n\n return out;\n }\n },\n\n watch: {\n arrangedRows(q) {\n // The rows changed so the old filter result is no longer useful\n this.previousResult = null;\n }\n },\n};\n\nfunction columnsToSearchField(columns) {\n const out = [];\n\n (columns || []).forEach((column) => {\n const field = column.search;\n\n if ( field ) {\n if ( typeof field === 'string' ) {\n addObject(out, field);\n } else if ( isArray(field) ) {\n addObjects(out, field);\n }\n } else if ( field === false ) {\n // Don't add the name\n } else {\n // Use value/name as the default\n addObject(out, column.value || column.name);\n }\n });\n\n return out.filter((x) => !!x);\n}\n\nconst ipLike = /^[0-9a-f\\.:]+$/i;\n\nfunction handleStringSearch(searchFields, searchTokens, row) {\n for ( let j = 0 ; j < searchTokens.length ; j++ ) {\n let expect = true;\n let token = searchTokens[j];\n\n if ( token.substr(0, 1) === '!' ) {\n expect = false;\n token = token.substr(1);\n }\n\n if ( token && matches(searchFields, token, row) !== expect ) {\n return false;\n }\n\n return true;\n }\n}\n\nfunction matches(fields, token, item) {\n for ( let field of fields ) {\n if ( !field ) {\n continue;\n }\n\n // some items might not even have metadata.labels or metadata.labels.something... ignore those items. Nothing to filter by\n if (typeof field !== 'function' &&\n field.includes(LABEL_IDENTIFIER) &&\n (!item.metadata.labels || !item.metadata.labels[field.replace(LABEL_IDENTIFIER, '')])) {\n continue;\n }\n\n let modifier;\n let val;\n\n if (typeof field === 'function') {\n val = field(item);\n } else if (field.includes(LABEL_IDENTIFIER)) {\n val = item.metadata.labels[field.replace(LABEL_IDENTIFIER, '')];\n } else {\n const idx = field.indexOf(':');\n\n if ( idx > 0 ) {\n modifier = field.substr(idx + 1);\n field = field.substr(0, idx);\n }\n\n if ( field.includes('.') ) {\n val = get(item, field);\n } else {\n val = item[field];\n }\n }\n\n if ( val === undefined ) {\n continue;\n }\n\n val = (`${ val }`).toLowerCase();\n if ( !val ) {\n continue;\n }\n\n if ( !modifier ) {\n if ( val.includes((`${ token }`).toLowerCase()) ) {\n return true;\n }\n } else if ( modifier === 'exact' ) {\n if ( val === token ) {\n return true;\n }\n } else if ( modifier === 'ip' ) {\n const tokenMayBeIp = ipLike.test(token);\n\n if ( tokenMayBeIp ) {\n const re = new RegExp(`(?:^|\\\\.)${ token }(?:\\\\.|$)`);\n\n if ( re.test(val) ) {\n return true;\n }\n }\n } else if ( modifier === 'prefix' ) {\n if ( val.indexOf(token) === 0) {\n return true;\n }\n }\n }\n\n return false;\n}\n","import { sortBy } from '@shell/utils/sort';\nimport { addObject } from '@shell/utils/array';\n\nexport default {\n computed: {\n sortFields() {\n let fromGroup = ( this.groupBy ? this.groupSort || this.groupBy : null) || [];\n let fromColumn = [];\n\n const column = (this.columns || this.headers).find((x) => x && x.name && x.name.toLowerCase() === this.sortBy.toLowerCase());\n\n if ( this.sortBy && column && column.sort ) {\n fromColumn = column.sort;\n }\n\n if ( !Array.isArray(fromGroup) ) {\n fromGroup = [fromGroup];\n }\n\n if ( !Array.isArray(fromColumn) ) {\n fromColumn = [fromColumn];\n }\n\n const out = [...fromGroup, ...fromColumn];\n\n addObject(out, 'nameSort');\n addObject(out, 'id');\n\n return out;\n },\n\n arrangedRows() {\n let key;\n\n if ( this.sortGenerationFn ) {\n key = `${ this.sortGenerationFn.apply(this) }/${ this.rows.length }/${ this.descending }/${ this.sortFields.join(',') }`;\n\n if ( this.cacheKey === key ) {\n return this.cachedRows;\n }\n }\n\n const out = sortBy(this.rows, this.sortFields, this.descending);\n\n if ( key ) {\n this.cacheKey = key;\n this.cachedRows = out;\n }\n\n return out;\n },\n },\n\n data() {\n let sortBy = null;\n\n this._defaultSortBy = this.defaultSortBy;\n\n // Try to find a reasonable default sort\n if ( !this._defaultSortBy ) {\n const markedColumn = this.headers.find((x) => !!x.defaultSort);\n const nameColumn = this.headers.find( (x) => x.name === 'name');\n\n if ( markedColumn ) {\n this._defaultSortBy = markedColumn.name;\n } else if ( nameColumn ) {\n // Use the name column if there is one\n this._defaultSortBy = nameColumn.name;\n } else {\n // The first column that isn't state\n const first = this.headers.filter( (x) => x.name !== 'state' )[0];\n\n if ( first ) {\n this._defaultSortBy = first.name;\n } else {\n // I give up\n this._defaultSortBy = 'id';\n }\n }\n }\n\n // If the sort column doesn't exist or isn't specified, use default\n if ( !sortBy || !this.headers.find((x) => x.name === sortBy ) ) {\n sortBy = this._defaultSortBy;\n }\n\n return {\n sortBy,\n descending: false,\n cachedRows: null,\n cacheKey: null,\n };\n },\n\n methods: {\n changeSort(sort, desc) {\n this.sortBy = sort;\n this.descending = desc;\n\n // Always go back to the first page when the sort is changed\n this.setPage(1);\n },\n },\n};\n","import { ROWS_PER_PAGE } from '@shell/store/prefs';\n\nexport default {\n computed: {\n indexFrom() {\n return Math.max(0, 1 + this.perPage * (this.page - 1));\n },\n\n indexTo() {\n return Math.min(this.filteredRows.length, this.indexFrom + this.perPage - 1);\n },\n\n totalPages() {\n return Math.ceil(this.filteredRows.length / this.perPage );\n },\n\n showPaging() {\n return !this.loading && this.paging && this.totalPages > 1;\n },\n\n pagingDisplay() {\n const opt = {\n ...(this.pagingParams || {}),\n\n count: this.filteredRows.length,\n pages: this.totalPages,\n from: this.indexFrom,\n to: this.indexTo,\n };\n\n return this.$store.getters['i18n/t'](this.pagingLabel, opt);\n },\n\n pagedRows() {\n if ( this.paging ) {\n return this.filteredRows.slice(this.indexFrom - 1, this.indexTo);\n } else {\n return this.filteredRows;\n }\n }\n },\n\n data() {\n const perPage = this.getPerPage();\n\n return { page: 1, perPage };\n },\n\n watch: {\n pagedRows() {\n // Go to the last page if we end up \"past\" the last page because the table changed\n\n const from = this.indexFrom;\n const last = this.filteredRows.length;\n\n if ( this.totalPages > 0 && this.page > 1 && from > last ) {\n this.setPage(this.totalPages);\n }\n }\n },\n\n methods: {\n getPerPage() {\n // perPage can not change while the list is displayed\n let out = this.rowsPerPage || 0;\n\n if ( out <= 0 ) {\n out = parseInt(this.$store.getters['prefs/get'](ROWS_PER_PAGE), 10) || 0;\n }\n\n // This should ideally never happen, but the preference value could be invalid, so return something...\n if ( out <= 0 ) {\n out = 10;\n }\n\n return out;\n },\n\n setPage(num) {\n if (this.page === num) {\n return;\n }\n\n this.page = num;\n },\n\n goToPage(which) {\n let page;\n\n switch (which) {\n case 'first':\n page = 1;\n break;\n case 'prev':\n page = Math.max(1, this.page - 1 );\n break;\n case 'next':\n page = Math.min(this.totalPages, this.page + 1 );\n break;\n case 'last':\n page = this.totalPages;\n break;\n }\n\n this.setPage(page);\n }\n }\n};\n","import { get } from '@shell/utils/object';\n\nexport default {\n computed: {\n groupedRows() {\n const groupKey = this.groupBy;\n const refKey = this.groupRef || groupKey;\n\n if ( !groupKey) {\n return [{\n key: 'default',\n ref: 'default',\n rows: this.pagedRows,\n }];\n }\n\n const out = [];\n const map = {};\n\n for ( const obj of this.pagedRows ) {\n const key = get(obj, groupKey) || '';\n const ref = get(obj, refKey);\n let entry = map[key];\n\n if ( entry ) {\n entry.rows.push(obj);\n } else {\n entry = {\n key,\n ref,\n rows: [obj]\n };\n map[key] = entry;\n out.push(entry);\n }\n }\n\n return out;\n }\n }\n};\n","import debounce from 'lodash/debounce';\n\n// Use a visible display type to reduce flickering\nconst displayType = 'inline-block';\n\nexport default {\n\n data() {\n return {\n bulkActionsClass: 'bulk',\n bulkActionClass: 'bulk-action',\n bulkActionsDropdownClass: 'bulk-actions-dropdown',\n bulkActionAvailabilityClass: 'action-availability',\n\n hiddenActions: [],\n\n updateHiddenBulkActions: debounce(this.protectedUpdateHiddenBulkActions, 10)\n };\n },\n\n beforeDestroy() {\n window.removeEventListener('resize', this.onWindowResize);\n },\n\n mounted() {\n window.addEventListener('resize', this.onWindowResize);\n this.updateHiddenBulkActions();\n },\n\n watch: {\n selectedRows() {\n this.updateHiddenBulkActions();\n },\n keyedAvailableActions() {\n this.updateHiddenBulkActions();\n },\n },\n\n computed: {\n availableActions() {\n return this.bulkActionsForSelection.filter((act) => !act.external);\n },\n\n keyedAvailableActions() {\n return this.availableActions.map((aa) => aa.action);\n },\n\n selectedRowsText() {\n if (!this.selectedRows.length) {\n return null;\n }\n\n return this.t('sortableTable.actionAvailability.selected', { actionable: this.selectedRows.length });\n },\n\n // Shows a tooltip if the bulk action that the user is hovering over can not be applied to all selected rows\n actionTooltip() {\n if (!this.selectedRows.length || !this.actionOfInterest) {\n return null;\n }\n\n const runnableTotal = this.selectedRows.filter(this.canRunBulkActionOfInterest).length;\n\n if (runnableTotal === this.selectedRows.length) {\n return null;\n }\n\n return this.t('sortableTable.actionAvailability.some', {\n actionable: runnableTotal,\n total: this.selectedRows.length,\n });\n },\n },\n\n methods: {\n onWindowResize() {\n this.updateHiddenBulkActions();\n this.onScroll();\n },\n\n /**\n * Determine if any actions wrap over to a new line, if so group them into a dropdown instead\n */\n protectedUpdateHiddenBulkActions() {\n if (!this.$refs.container) {\n return;\n }\n\n const actionsContainer = this.$refs.container.querySelector(`.${ this.bulkActionsClass }`);\n const actionsDropdown = this.$refs.container.querySelector(`.${ this.bulkActionsDropdownClass }`);\n\n if (!actionsContainer || !actionsDropdown) {\n return;\n }\n\n const actionsContainerWidth = actionsContainer.offsetWidth;\n const actionsHTMLCollection = this.$refs.container.querySelectorAll(`.${ this.bulkActionClass }`);\n const actions = Array.from(actionsHTMLCollection || []);\n\n // Determine if the 'x selected' label should show and it's size\n const selectedRowsText = this.$refs.container.querySelector(`.${ this.bulkActionAvailabilityClass }`);\n let selectedRowsTextWidth = 0;\n\n if (this.selectedRowsText) {\n if (selectedRowsText) {\n selectedRowsText.style.display = displayType;\n selectedRowsTextWidth = selectedRowsText.offsetWidth;\n } else {\n selectedRowsText.style.display = 'none;';\n }\n }\n\n this.hiddenActions = [];\n\n let cumulativeWidth = 0;\n let showActionsDropdown = false;\n let totalAvailableWidth = actionsContainerWidth - selectedRowsTextWidth;\n\n // Loop through all actions to determine if some exceed the available space in the row, if so hide them and instead show in a dropdown\n for (let i = 0; i < actions.length; i++) {\n const ba = actions[i];\n\n ba.style.display = displayType;\n const actionWidth = ba.offsetWidth;\n\n cumulativeWidth += actionWidth + 15;\n if (cumulativeWidth >= totalAvailableWidth) {\n // There are too many actions so the drop down will be visible.\n if (!showActionsDropdown) {\n // If we haven't previously enabled the drop down...\n actionsDropdown.style.display = displayType;\n // By showing the drop down some previously visible actions may now be hidden, so start the process again\n // ... except taking into account the width of drop down width in the available space\n i = -1;\n cumulativeWidth = 0;\n showActionsDropdown = true;\n totalAvailableWidth = actionsContainerWidth - actionsDropdown.offsetWidth - selectedRowsTextWidth;\n } else {\n // Collate the actions in an array and hide in the normal row\n const id = ba.attributes.getNamedItem('id').value;\n\n this.hiddenActions.push(this.availableActions.find((aa) => aa.action === id));\n ba.style.display = 'none';\n }\n }\n }\n\n if (!showActionsDropdown) {\n actionsDropdown.style.display = 'none';\n }\n }\n }\n};\n","import { ADV_FILTER_ALL_COLS_VALUE, ADV_FILTER_ALL_COLS_LABEL } from './filtering';\n\nconst DEFAULT_ADV_FILTER_COLS_VALUE = ADV_FILTER_ALL_COLS_VALUE;\n\nexport default {\n props: {\n /**\n * Group value\n * To be used on the THead component when adv filtering is present\n */\n group: {\n type: String,\n default: () => ''\n },\n /**\n * Group options\n * All of the grouping options available to be used on the THead component when adv filtering is present\n */\n groupOptions: {\n type: Array,\n default: () => []\n },\n /**\n * Flag that controls visibility of advanced filtering feature\n */\n hasAdvancedFiltering: {\n type: Boolean,\n default: false\n },\n /**\n * Flag that controls visibility of labels as possibe toggable cols to be displayed on the Sortable Table\n */\n advFilterHideLabelsAsCols: {\n type: Boolean,\n default: false\n },\n /**\n * Flag that prevents filtering by labels\n */\n advFilterPreventFilteringLabels: {\n type: Boolean,\n default: false\n },\n },\n data() {\n return {\n columnOptions: [],\n colOptionsWatcher: null,\n advancedFilteringVisibility: false,\n advancedFilteringValues: [],\n advFilterSearchTerm: null,\n advFilterSelectedProp: DEFAULT_ADV_FILTER_COLS_VALUE,\n advFilterSelectedLabel: ADV_FILTER_ALL_COLS_LABEL,\n column: null,\n };\n },\n\n mounted() {\n if (this.hasAdvancedFiltering) {\n // trigger to first populate the cols options for filters\n this.updateColsOptions();\n }\n },\n\n watch: {\n advancedFilteringValues() {\n // passing different dummy args to make sure update is triggered\n this.watcherUpdateLiveAndDelayed(true, false);\n },\n advancedFilteringVisibility(neu) {\n if (neu) {\n // check if user clicked outside the advanced filter box\n window.addEventListener('click', this.onClickOutside);\n\n // update filtering options and toggable cols every time dropdown is open\n this.updateColsOptions();\n } else {\n // unregister click event\n window.removeEventListener('click', this.onClickOutside);\n }\n }\n },\n\n computed: {\n advFilterSelectOptions() {\n return this.columnOptions.filter((c) => c.isFilter && !c.preventFiltering);\n },\n\n advGroupOptions() {\n return this.groupOptions.map((item) => {\n return {\n label: this.t(item.tooltipKey),\n value: item.value\n };\n });\n },\n },\n\n methods: {\n handleColsVisibilyAndFiltering(cols) {\n const allCols = cols;\n\n this.columnOptions.forEach((advCol) => {\n if (advCol.isTableOption) {\n const index = allCols.findIndex((col) => col.name === advCol.name);\n\n if (index !== -1) {\n allCols[index].isColVisible = advCol.isColVisible;\n allCols[index].isFilter = advCol.isFilter;\n } else {\n allCols.push(advCol);\n }\n }\n });\n\n return allCols;\n },\n // advanced filtering methods\n setColsOptions() {\n let opts = [];\n const rowLabels = [];\n const headerProps = [];\n\n // Filter out any columns that are too heavy to show for large page sizes\n const filteredHeaders = this.headers.slice().filter((c) => (!c.maxPageSize || (c.maxPageSize && c.maxPageSize >= this.perPage)));\n\n // add table cols from config (headers)\n filteredHeaders.forEach((prop) => {\n const name = prop.name;\n const label = prop.labelKey ? this.t(`${ prop.labelKey }`) : prop.label;\n const isFilter = !!((!Object.keys(prop).includes('search') || prop.search));\n let sortVal = prop.sort;\n const valueProp = prop.valueProp || prop.value;\n let value = null;\n let isColVisible = true;\n\n if (prop.sort && valueProp) {\n if (typeof prop.sort === 'string') {\n sortVal = prop.sort.includes(':') ? [prop.sort.split(':')[0]] : [prop.sort];\n }\n\n if (!sortVal.includes(valueProp)) {\n value = JSON.stringify(sortVal.concat([valueProp]));\n } else {\n value = JSON.stringify([valueProp]);\n }\n } else if (valueProp) {\n value = JSON.stringify([valueProp]);\n } else {\n value = null;\n }\n\n // maintain current visibility of cols if they exist already\n if (this.columnOptions?.length) {\n const opt = this.columnOptions.find((colOpt) => colOpt.name === name && colOpt.label === label);\n\n if (opt) {\n isColVisible = opt.isColVisible;\n }\n }\n\n headerProps.push({\n name,\n label,\n value,\n isFilter,\n isTableOption: true,\n isColVisible\n });\n });\n\n // add labels as table cols\n if (this.rows.length) {\n this.rows.forEach((row) => {\n if (row.metadata?.labels && Object.keys(row.metadata?.labels).length) {\n Object.keys(row.metadata?.labels).forEach((label) => {\n const res = {\n name: label,\n label,\n value: `metadata.labels.${ label }`,\n isFilter: true,\n isTableOption: true,\n isColVisible: false,\n isLabel: true,\n preventFiltering: this.advFilterPreventFilteringLabels,\n preventColToggle: this.advFilterHideLabelsAsCols\n };\n\n // maintain current visibility of cols if they exist already\n if (this.columnOptions?.length) {\n const opt = this.columnOptions.find((colOpt) => colOpt.name === label && colOpt.label === label);\n\n if (opt) {\n res.isColVisible = opt.isColVisible;\n }\n }\n\n if (!rowLabels.filter((row) => row.label === label).length) {\n rowLabels.push(res);\n }\n });\n }\n });\n }\n\n opts = headerProps.concat(rowLabels);\n\n // add find on all cols option...\n if (opts.length) {\n opts.unshift({\n name: ADV_FILTER_ALL_COLS_LABEL,\n label: ADV_FILTER_ALL_COLS_LABEL,\n value: ADV_FILTER_ALL_COLS_VALUE,\n isFilter: true,\n isTableOption: false\n });\n }\n\n return opts;\n },\n addAdvancedFilter() {\n // set new advanced filter\n if (this.advFilterSelectedProp && this.advFilterSearchTerm) {\n this.advancedFilteringValues.push({\n prop: this.advFilterSelectedProp,\n value: this.advFilterSearchTerm,\n label: this.advFilterSelectedLabel\n });\n\n this.eventualSearchQuery = this.advancedFilteringValues;\n\n this.advancedFilteringVisibility = false;\n this.advFilterSelectedProp = DEFAULT_ADV_FILTER_COLS_VALUE;\n this.advFilterSelectedLabel = ADV_FILTER_ALL_COLS_LABEL;\n this.advFilterSearchTerm = null;\n }\n },\n clearAllAdvancedFilters() {\n this.advancedFilteringValues = [];\n this.eventualSearchQuery = this.advancedFilteringValues;\n\n this.advancedFilteringVisibility = false;\n this.advFilterSelectedProp = DEFAULT_ADV_FILTER_COLS_VALUE;\n this.advFilterSelectedLabel = ADV_FILTER_ALL_COLS_LABEL;\n this.advFilterSearchTerm = null;\n },\n clearAdvancedFilter(index) {\n this.advancedFilteringValues.splice(index, 1);\n this.eventualSearchQuery = this.advancedFilteringValues;\n },\n onClickOutside(event) {\n const advFilterBox = this.$refs['advanced-filter-group'];\n\n if (!advFilterBox || advFilterBox.contains(event.target)) {\n return;\n }\n this.advancedFilteringVisibility = false;\n },\n updateColsOptions() {\n this.columnOptions = this.setColsOptions();\n },\n\n // cols visibility\n changeColVisibility(colData) {\n const index = this.columnOptions.findIndex((col) => col.label === colData.label);\n\n if (index !== -1) {\n this.columnOptions[index].isColVisible = colData.value;\n }\n },\n },\n};\n","\n\n\n\n \n\n \n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--14-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=3b0138b8&scoped=true&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=3b0138b8&prod&lang=scss&scoped=true&\"\nimport style1 from \"./index.vue?vue&type=style&index=1&id=3b0138b8&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3b0138b8\",\n null\n \n)\n\nexport default component.exports","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"checkbox-outer-container\",attrs:{\"data-checkbox-ctrl\":\"\"}},[_c('label',{staticClass:\"checkbox-container\",class:{ 'disabled': _vm.isDisabled},attrs:{\"for\":_vm.id},on:{\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;$event.preventDefault();return _vm.clicked($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;$event.preventDefault();return _vm.clicked($event)}],\"click\":function($event){return _vm.clicked($event)}}},[_c('input',{attrs:{\"type\":\"checkbox\",\"tabindex\":-1,\"name\":_vm.id},domProps:{\"checked\":_vm.isChecked,\"value\":_vm.valueWhenTrue},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();}}}),_c('span',{staticClass:\"checkbox-custom\",class:{indeterminate: _vm.indeterminate},attrs:{\"tabindex\":_vm.isDisabled ? -1 : 0,\"aria-label\":_vm.label,\"aria-checked\":!!_vm.value,\"role\":\"checkbox\"}}),(_vm.$slots.label || _vm.label || _vm.labelKey || _vm.tooltipKey || _vm.tooltip)?_c('span',{staticClass:\"checkbox-label\",class:{ 'checkbox-primary': _vm.primary }},[_vm._t(\"label\",function(){return [(_vm.labelKey)?_c('t',{attrs:{\"k\":_vm.labelKey,\"raw\":true}}):(_vm.label)?[_vm._v(_vm._s(_vm.label))]:_vm._e(),(_vm.tooltipKey)?_c('i',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.t(_vm.tooltipKey)),expression:\"t(tooltipKey)\"}],staticClass:\"checkbox-info icon icon-info icon-lg\"}):(_vm.tooltip)?_c('i',{directives:[{name:\"clean-tooltip\",rawName:\"v-clean-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],staticClass:\"checkbox-info icon icon-info icon-lg\"}):_vm._e()]})],2):_vm._e()]),(_vm.descriptionKey || _vm.description)?_c('div',{staticClass:\"checkbox-outer-container-description\"},[(_vm.descriptionKey)?_c('t',{attrs:{\"k\":_vm.descriptionKey}}):(_vm.description)?[_vm._v(\" \"+_vm._s(_vm.description)+\" \")]:_vm._e()],2):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport Vue, { PropType } from 'vue';\nimport { _EDIT, _VIEW } from '@shell/config/query-params';\nimport { addObject, removeObject } from '@shell/utils/array';\nimport cloneDeep from 'lodash/cloneDeep';\n\nexport default Vue.extend({\n name: 'Checkbox',\n\n props: {\n /**\n * The checkbox value.\n */\n value: {\n type: [Boolean, Array, String] as PropType,\n default: false\n },\n\n /**\n * The checkbox label.\n */\n label: {\n type: String,\n default: null\n },\n\n /**\n * The i18n key to use for the checkbox label.\n */\n labelKey: {\n type: String,\n default: null\n },\n\n /**\n * Random ID generated for binding label to input.\n */\n id: {\n type: String,\n default: String(Math.random() * 1000)\n },\n\n /**\n * Disable the checkbox.\n */\n disabled: {\n type: Boolean,\n default: false\n },\n\n /**\n * Display an indeterminate state. Useful for cases where a checkbox might\n * be the parent to child checkboxes, and we need to show that a subset of\n * children are checked.\n */\n indeterminate: {\n type: Boolean,\n default: false\n },\n\n /**\n * The checkbox editing mode.\n * @values _EDIT, _VIEW\n */\n mode: {\n type: String,\n default: _EDIT\n },\n\n /**\n * The contents of the checkbox tooltip.\n */\n tooltip: {\n type: [String, Object],\n default: null\n },\n\n /**\n * The i18n key to use for the checkbox tooltip.\n */\n tooltipKey: {\n type: String,\n default: null\n },\n\n /**\n * A custom value to use when the checkbox is checked.\n */\n valueWhenTrue: {\n type: [Boolean, String, Number],\n default: true\n },\n\n /**\n * The i18n key to use for the checkbox description.\n */\n descriptionKey: {\n type: String,\n default: null\n },\n\n /**\n * The checkbox description.\n */\n description: {\n type: String,\n default: null\n },\n\n /**\n * Primary checkbox displays label so that it stands out more\n */\n primary: {\n type: Boolean,\n default: false\n },\n },\n\n computed: {\n /**\n * Determines if the checkbox is disabled.\n * @returns boolean: True when the disabled prop is true or when mode is\n * View.\n */\n isDisabled(): boolean {\n return (this.disabled || this.mode === _VIEW);\n },\n /**\n * Determines if the checkbox is checked when using custom values or\n * multiple values.\n * @returns boolean: True when at least one value is true in a collection or\n * when value matches `this.valueWhenTrue`.\n */\n isChecked(): boolean {\n return this.isMulti(this.value) ? this.findTrueValues(this.value) : this.value === this.valueWhenTrue;\n }\n },\n\n methods: {\n /**\n * Toggles the checked state for the checkbox and emits an 'input' event.\n */\n clicked(event: MouseEvent): boolean | void {\n if ((event.target as HTMLLinkElement).tagName === 'A' && (event.target as HTMLLinkElement).href) {\n // Ignore links inside the checkbox label so you can click them\n return true;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n if (this.isDisabled) {\n return;\n }\n\n const customEvent = {\n bubbles: true,\n cancelable: false,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey\n };\n\n const click = new CustomEvent('click', customEvent);\n\n // Flip the value\n const value = cloneDeep(this.value);\n\n if (this.isMulti(value)) {\n if (this.isChecked) {\n removeObject(value, this.valueWhenTrue);\n } else {\n addObject(value, this.valueWhenTrue);\n }\n this.$emit('input', value);\n } else if (this.isString(this.valueWhenTrue)) {\n if (this.isChecked) {\n this.$emit('input', null);\n } else {\n this.$emit('input', this.valueWhenTrue);\n }\n } else {\n this.$emit('input', !value);\n this.$el.dispatchEvent(click);\n }\n },\n\n /**\n * Determines if there are multiple values for the checkbox.\n */\n isMulti(value: boolean | boolean[] | string): value is boolean[] {\n return Array.isArray(value);\n },\n\n isString(value: boolean | number | string): value is boolean {\n return typeof value === 'string';\n },\n\n /**\n * Finds the first true value for multiple checkboxes.\n * @param value A collection of values for the checkbox.\n */\n findTrueValues(value: boolean[]): boolean {\n return value.find((v) => v === this.valueWhenTrue) || false;\n }\n }\n});\n","import mod from \"-!../../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../../thread-loader/dist/cjs.js!../../../../../babel-loader/lib/index.js!../../../../../ts-loader/index.js??ref--15-3!../../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Checkbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../../thread-loader/dist/cjs.js!../../../../../babel-loader/lib/index.js!../../../../../ts-loader/index.js??ref--15-3!../../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Checkbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Checkbox.vue?vue&type=template&id=1fdb6d7b&\"\nimport script from \"./Checkbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./Checkbox.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Checkbox.vue?vue&type=style&index=0&id=1fdb6d7b&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../@vue/cli-service/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","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","export * from \"-!../../../node_modules/vue-style-loader/index.js??ref--10-oneOf-1-0!../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../node_modules/sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterGridView.vue?vue&type=style&index=0&id=1dd06ec8&prod&scoped=true&lang=scss&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".cluster-list-view[data-v-56771e1c]{margin-bottom:2rem}.cluster-list-view .favorite-icon[data-v-56771e1c]{margin-right:1rem;background:none}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","export * from \"-!../../../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Checkbox.vue?vue&type=style&index=0&id=1fdb6d7b&prod&lang=scss&\"","import { ActionLocation, CardLocation, ExtensionPoint } from '@shell/core/types';\nimport { isMac } from '@shell/utils/platform';\nimport { ucFirst, randomStr } from '@shell/utils/string';\nimport { _EDIT, _CONFIG, _DETAIL, _LIST } from '@shell/config/query-params';\nimport { getProductFromRoute } from '@shell/middleware/authenticated';\nimport { isEqual } from '@shell/utils/object';\n\nfunction checkRouteProduct({ name, params, query }, locationConfigParam) {\n const product = getProductFromRoute({\n name, params, query\n });\n\n // alias for the homepage\n if (locationConfigParam === 'home' && name === 'home') {\n return true;\n } else if (locationConfigParam === product) {\n return true;\n }\n\n return false;\n}\n\nfunction checkRouteMode({ name, query }, locationConfigParam) {\n if (locationConfigParam === _EDIT && query.mode && query.mode === _EDIT) {\n return true;\n } else if (locationConfigParam === _CONFIG && query.as && query.as === _CONFIG) {\n return true;\n } else if (locationConfigParam === _DETAIL && name.includes('-id')) {\n return true;\n // alias to target all list views\n } else if (locationConfigParam === _LIST && !name.includes('-id') && name.includes('-resource')) {\n return true;\n }\n\n return false;\n}\n\nfunction checkExtensionRouteBinding($route, locationConfig, context) {\n // if no configuration is passed, consider it as global\n if (!Object.keys(locationConfig).length) {\n return true;\n }\n\n const { params } = $route;\n\n // \"params\" to be checked based on the locationConfig\n // This has become overloaded with mode and context\n const paramsToCheck = [\n 'product',\n 'resource',\n 'namespace',\n 'cluster',\n 'id',\n 'mode',\n // url query params\n 'queryParam',\n // Custom context specific params provided by the extension, not to be confused with location params\n 'context',\n ];\n\n let res = true;\n\n for (let i = 0; i < paramsToCheck.length; i++) {\n const param = paramsToCheck[i];\n\n if (locationConfig[param]) {\n const asArray = Array.isArray(locationConfig[param]) ? locationConfig[param] : [locationConfig[param]];\n\n for (let x = 0; x < asArray.length; x++) {\n const locationConfigParam = asArray[x];\n\n if (locationConfigParam) {\n // handle \"product\" in a separate way...\n if (param === 'product') {\n res = checkRouteProduct($route, locationConfigParam);\n // also handle \"mode\" in a separate way because it mainly depends on query params\n } else if (param === 'mode') {\n res = checkRouteMode($route, locationConfigParam);\n } else if (param === 'context') {\n // Need all keys and values to match\n res = isEqual(locationConfigParam, context);\n } else if (param === 'queryParam') {\n res = isEqual(locationConfigParam, $route.query);\n } else if (locationConfigParam === params[param]) {\n res = true;\n } else {\n res = false;\n }\n }\n\n // If a single location config param is good then this is an param (aka ['pods', 'configmap'] = pods or configmaps)\n if (res) {\n break;\n }\n }\n\n // If a single param (set of location config params) is bad then this is not an acceptable location\n if (!res) {\n break;\n }\n }\n }\n\n return res;\n}\n\nexport function getApplicableExtensionEnhancements(pluginCtx, actionType, uiArea, currRoute, translationCtx = pluginCtx, context) {\n const extensionEnhancements = [];\n\n // gate it so that we prevent errors on older versions of dashboard\n if (pluginCtx.$plugin?.getUIConfig) {\n const actions = pluginCtx.$plugin.getUIConfig(actionType, uiArea);\n\n actions.forEach((action, i) => {\n if (checkExtensionRouteBinding(currRoute, action.locationConfig, context || {})) {\n // ADD CARD PLUGIN UI ENHANCEMENT\n if (actionType === ExtensionPoint.CARD) {\n // intercept to apply translation\n if (uiArea === CardLocation.CLUSTER_DASHBOARD_CARD && action.labelKey) {\n actions[i].label = translationCtx.t(action.labelKey);\n }\n\n // ADD ACTION PLUGIN UI ENHANCEMENT\n } else if (actionType === ExtensionPoint.ACTION) {\n // TABLE ACTION\n if (uiArea === ActionLocation.TABLE) {\n // intercept to apply translation\n if (action.labelKey) {\n actions[i].label = translationCtx.t(action.labelKey);\n }\n\n // bulkable flag\n actions[i].bulkable = actions[i].multiple || actions[i].bulkable;\n\n // populate action identifier to prevent errors\n if (!actions[i].action) {\n actions[i].action = `custom-table-action-${ randomStr(10).toLowerCase() }`;\n }\n }\n\n // extract simplified shortcut definition on plugin - HEADER ACTION\n if (uiArea === ActionLocation.HEADER && action.shortcut) {\n // if it's a string, then assume CTRL for windows and META for mac\n if (typeof action.shortcut === 'string') {\n actions[i].shortcutLabel = () => {\n return isMac ? `(\\u2318-${ action.shortcut.toUpperCase() })` : `(Ctrl-${ action.shortcut.toUpperCase() })`;\n };\n actions[i].shortcutKey = { windows: ['ctrl', action.shortcut], mac: ['meta', action.shortcut] };\n // correct check for an Object type in JS... handle the object passed\n } else if (typeof action.shortcut === 'object' && !Array.isArray(action.shortcut) && action.shortcut !== null) {\n actions[i].shortcutKey = action.shortcut;\n const keyboardCombo = isMac ? actions[i].shortcut.mac : actions[i].shortcut.windows ? actions[i].shortcut.windows : [];\n let scLabel = '';\n\n keyboardCombo.forEach((key, i) => {\n if (i < keyboardCombo.length - 1) {\n if (key === 'meta') {\n key = '\\u2318';\n } else {\n key = ucFirst(key);\n }\n scLabel += `${ key }`;\n scLabel += '-';\n } else {\n scLabel += `${ key.toUpperCase() }`;\n }\n });\n\n actions[i].shortcutLabel = () => {\n return `(${ scLabel })`;\n };\n }\n }\n }\n\n extensionEnhancements.push(actions[i]);\n }\n });\n }\n\n return extensionEnhancements;\n}\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Loading.vue?vue&type=template&id=e765d1f4&scoped=true&\"\nimport script from \"./Loading.vue?vue&type=script&lang=js&\"\nexport * from \"./Loading.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Loading.vue?vue&type=style&index=0&id=e765d1f4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e765d1f4\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.app)?_c('Card',{staticClass:\"app-launcher-card\",attrs:{\"show-highlight-border\":false,\"sticky\":true},scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_c('div',{staticStyle:{\"width\":\"100%\"}},[_c('p',{staticStyle:{\"font-size\":\"1.2rem\"}},[_vm._v(\" \"+_vm._s(_vm.app.metadata?.name)+\" \")]),_c('div',{staticStyle:{\"color\":\"var(--input-label)\",\"display\":\"flex\",\"justify-content\":\"space-between\",\"margin-top\":\"4px\"}},[(_vm.app.kind === 'Service' && _vm.app.metadata?.labels?.['app.kubernetes.io/version'] !== undefined)?_c('p',[_vm._v(\" \"+_vm._s(_vm.kubernetesVersion)+\" \")]):_vm._e(),(_vm.app.kind === 'Service' && _vm.app.metadata?.labels?.['helm.sh/chart'] !== undefined)?_c('p',[_vm._v(\" \"+_vm._s(_vm.helmChart)+\" \")]):_vm._e(),(_vm.app.kind === 'Ingress')?_c('p',[_vm._v(\" Ingress \")]):_vm._e()])])]},proxy:true},{key:\"body\",fn:function(){return [(_vm.app.kind === 'Service')?_c('p',[_vm._v(\" \"+_vm._s((_vm.isGlobalApp || _vm.isFavorited) && _vm.isInGlobalView ? `${_vm.app.clusterName}/` : '')+_vm._s(_vm.namespace)+\"/\"+_vm._s(_vm.name)+\" \")]):_vm._e(),(_vm.app.kind === 'Ingress')?_c('p',[_vm._v(\" \"+_vm._s((_vm.isGlobalApp || _vm.isFavorited) && _vm.isInGlobalView ? `${_vm.app.clusterName}: ` : '')+_vm._s(_vm.ingressPath)+\" \")]):_vm._e()]},proxy:true},{key:\"actions\",fn:function(){return [(!_vm.isGlobalApp)?_c('button',{staticClass:\"icon-button\",on:{\"click\":_vm.toggleFavorite}},[_c('i',{class:['icon', _vm.isFavorited ? 'icon-star' : 'icon-star-open']})]):_c('i',{staticClass:\"icon icon-globe icon-only\"}),((_vm.endpoints?.length ?? 0) <= 1 && _vm.app.kind === 'Service')?_c('a',{staticClass:\"btn role-primary\",attrs:{\"disabled\":!_vm.endpoints?.length,\"href\":_vm.endpoints[0]?.value,\"target\":\"_blank\",\"rel\":\"noopener noreferrer nofollow\",\"title\":_vm.endpoints?.length === 0 ? _vm.t('appLauncher.noEndpointFoundForApp') : _vm.t('appLauncher.launchEndpoint', {\n endpoint: _vm.endpoints[0].label,\n })}},[_vm._v(\" \"+_vm._s(_vm.t('appLauncher.launch'))+\" \")]):(_vm.app.kind === 'Ingress')?_c('a',{staticClass:\"btn role-primary\",attrs:{\"href\":_vm.ingressPath,\"target\":\"_blank\",\"rel\":\"noopener noreferrer nofollow\"}},[_vm._v(\" \"+_vm._s(_vm.t('appLauncher.launch'))+\" \")]):_c('ButtonDropDown',{attrs:{\"button-label\":_vm.t('appLauncher.launch'),\"dropdown-options\":_vm.endpoints,\"title\":_vm.t('appLauncher.launchAnEndpointFromSelection')},on:{\"click-action\":(o) => _vm.openLink(o.value)}})]},proxy:true}],null,false,345375573)}):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"card-container\",class:{'highlight-border': _vm.showHighlightBorder, 'card-sticky': _vm.sticky},attrs:{\"data-testid\":\"card\"}},[_c('div',{staticClass:\"card-wrap\"},[_c('div',{staticClass:\"card-title\",attrs:{\"data-testid\":\"card-title-slot\"}},[_vm._t(\"title\",function(){return [_vm._v(\" \"+_vm._s(_vm.title)+\" \")]})],2),_c('hr'),_c('div',{staticClass:\"card-body\",attrs:{\"data-testid\":\"card-body-slot\"}},[_vm._t(\"body\",function(){return [_vm._v(\" \"+_vm._s(_vm.content)+\" \")]})],2),(_vm.showActions)?_c('div',{staticClass:\"card-actions\",attrs:{\"data-testid\":\"card-actions-slot\"}},[_vm._t(\"actions\",function(){return [_c('button',{staticClass:\"btn role-primary\",on:{\"click\":_vm.buttonAction}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \")])]})],2):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport Vue from 'vue';\n\nexport default Vue.extend({\n name: 'Card',\n props: {\n /**\n * The card's title.\n */\n title: {\n type: String,\n default: ''\n },\n /**\n * The text content for the card's body.\n */\n content: {\n type: String,\n default: ''\n },\n /**\n * The function to invoke when the default action button is clicked.\n */\n buttonAction: {\n type: Function,\n default: (): void => { }\n },\n /**\n * The text for the default action button.\n */\n buttonText: {\n type: String,\n default: 'go'\n },\n /**\n * Toggles the card's highlight-border class.\n */\n showHighlightBorder: {\n type: Boolean,\n default: true\n },\n /**\n * Toggles the card's Actions section.\n */\n showActions: {\n type: Boolean,\n default: true\n },\n sticky: {\n type: Boolean,\n default: false,\n },\n }\n});\n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Card.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Card.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Card.vue?vue&type=template&id=6b7b8e40&\"\nimport script from \"./Card.vue?vue&type=script&lang=ts&\"\nexport * from \"./Card.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Card.vue?vue&type=style&index=0&id=6b7b8e40&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/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('v-select',_vm._b({ref:\"button-dropdown\",staticClass:\"button-dropdown btn\",class:{\n disabled: _vm.disabled,\n focused: _vm.focused,\n },attrs:{\"append-to-body\":true,\"calculate-position\":_vm.withPopper,\"searchable\":false,\"clearable\":false,\"close-on-select\":_vm.closeOnSelect,\"filterable\":false,\"value\":_vm.buttonLabel,\"options\":_vm.dropdownOptions,\"map-keydown\":_vm.mappedKeys,\"get-option-key\":(opt) => (_vm.optionKey ? _vm.get(opt, _vm.optionKey) : _vm.getOptionLabel(opt)),\"get-option-label\":(opt) => _vm.getOptionLabel(opt),\"selectable\":_vm.selectable},on:{\"search:blur\":_vm.onBlur,\"search:focus\":_vm.onFocus,\"input\":function($event){return _vm.$emit('click-action', $event)}},scopedSlots:_vm._u([{key:\"selected-option\",fn:function(option){return [_c('button',{staticClass:\"dropdown-button-two btn\",attrs:{\"tabindex\":\"-1\",\"type\":\"button\"},on:{\"click\":function($event){return _vm.ddButtonAction(option)},\"focus\":_vm.focusSearch}},[_vm._v(\" \"+_vm._s(option.label)+\" \")])]}},_vm._l((_vm.$scopedSlots),function(_,slot){return {key:slot,fn:function(scope){return [(slot !== 'selected-option')?_vm._t(slot,null,null,scope):_vm._e()]}}})],null,true)},'v-select',_vm.$attrs,false),[_c('template',{slot:\"no-options\"},[_vm._t(\"no-options\")],2)],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function getBoundingClientRect(element) {\n var rect = element.getBoundingClientRect();\n return {\n width: rect.width,\n height: rect.height,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n y: rect.top\n };\n}","/*:: import type { Window } from '../types'; */\n\n/*:: declare function getWindow(node: Node | Window): Window; */\nexport default function getWindow(node) {\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getWindow from \"./getWindow.js\";\n/*:: declare function isElement(node: mixed): boolean %checks(node instanceof\n Element); */\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n/*:: declare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n HTMLElement); */\n\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nexport { isElement, isHTMLElement };","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe: assume body is always available\n return (isElement(element) ? element.ownerDocument : element.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\"; // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement);\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element) {\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// $FlowFixMe: this is a quicker (but less type safe) way to save quite some bytes from the bundle\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || // DOM Element detected\n // $FlowFixMe: need a better way to handle this...\n element.host || // ShadowRoot detected\n // $FlowFixMe: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the \nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = getNodeName(scrollParent) === 'body';\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n var offsetParent = element.offsetParent;\n\n if (offsetParent) {\n var html = getDocumentElement(offsetParent);\n\n if (getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && getComputedStyle(html).position !== 'static') {\n return html;\n }\n }\n\n return offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.willChange && css.willChange !== 'auto') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static') {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign(Object.assign(Object.assign({}, existing), current), {}, {\n options: Object.assign(Object.assign({}, existing.options), current.options),\n data: Object.assign(Object.assign({}, existing.data), current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nexport * from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign(Object.assign({}, DEFAULT_OPTIONS), defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(options) {\n cleanupModifierEffects();\n state.options = Object.assign(Object.assign(Object.assign({}, defaultOptions), state.options), options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = Math.floor(offsets[mainAxis]) - Math.floor(reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = Math.floor(offsets[mainAxis]) + Math.ceil(reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsets(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: Math.round(x * dpr) / dpr || 0,\n y: Math.round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive;\n\n var _roundOffsets = roundOffsets(offsets),\n x = _roundOffsets.x,\n y = _roundOffsets.y;\n\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n } // $FlowFixMe: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n /*:: offsetParent = (offsetParent: Element); */\n\n\n if (placement === top) {\n sideY = bottom;\n y -= offsetParent.clientHeight - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left) {\n sideX = right;\n x -= offsetParent.clientWidth - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign(Object.assign({}, commonStyles), {}, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref3) {\n var state = _ref3.state,\n options = _ref3.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign(Object.assign({}, state.styles.popper), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign(Object.assign({}, state.styles.arrow), mapToStyles(Object.assign(Object.assign({}, commonStyles), {}, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false\n })));\n }\n\n state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\";\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign(Object.assign({}, rects), {}, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = element.ownerDocument.body;\n var width = Math.max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = Math.max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += Math.max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","export default function contains(parent, child) {\n // $FlowFixMe: hasOwnProperty doesn't seem to work in tests\n var isShadow = Boolean(child.getRootNode && child.getRootNode().host); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (isShadow) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","export default function rectToClientRect(rect) {\n return Object.assign(Object.assign({}, rect), {}, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = Math.max(rect.top, accRect.top);\n accRect.right = Math.min(rect.right, accRect.right);\n accRect.bottom = Math.min(rect.bottom, accRect.bottom);\n accRect.left = Math.max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign(Object.assign({}, getFreshSideObject()), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var referenceElement = state.elements.reference;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(referenceElement);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign(Object.assign({}, popperRect), popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\n\n/*:: type OverflowsMap = { [ComputedPlacement]: number }; */\n\n/*;; type OverflowsMap = { [key in ComputedPlacement]: number }; */\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements; // $FlowFixMe\n\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","export default function within(min, value, max) {\n return Math.max(min, Math.min(value, max));\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport within from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign(Object.assign({}, state.rects), {}, {\n placement: state.placement\n })) : tetherOffset;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = popperOffsets[mainAxis] + overflow[mainSide];\n var max = popperOffsets[mainAxis] - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? Math.min(min, tetherMin) : min, offset, tether ? Math.max(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var _preventedOffset = within(_min, _offset, _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport within from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = state.modifiersData[name + \"#persistent\"].padding;\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element,\n _options$padding = options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n state.modifiersData[name + \"#persistent\"] = {\n padding: mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements))\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign(Object.assign({}, state.attributes.popper), {}, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import { popperGenerator, detectOverflow } from \"./index.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","\n\n\n \n\n\n\n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ButtonDropdown.vue?vue&type=template&id=4b526572&scoped=true&\"\nimport script from \"./ButtonDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./ButtonDropdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ButtonDropdown.vue?vue&type=style&index=0&id=4b526572&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4b526572\",\n null\n \n)\n\nexport default component.exports","type UriField = 'source' | 'protocol' | 'authority' | 'userInfo' | 'user' | 'password' | 'host' | 'port' | 'relative' | 'path' | 'directory' | 'file' | 'queryStr' | 'anchor'\ntype UriFields = {\n [key in UriField]: string; // eslint-disable-line no-unused-vars\n}\ntype QueryParams = {\n [key: string]: string\n}\n\ninterface ParsedUri extends UriFields {\n query: QueryParams;\n}\n\nexport function addParam(url: string, key: string, val: string | string[]): string {\n let out = url + (url.includes('?') ? '&' : '?');\n\n // val can be a string or an array of strings\n if ( !Array.isArray(val) ) {\n val = [val];\n }\n out += val.map((v) => {\n if ( v === null ) {\n return `${ encodeURIComponent(key) }`;\n } else {\n return `${ encodeURIComponent(key) }=${ encodeURIComponent(v) }`;\n }\n }).join('&');\n\n return out;\n}\n\nexport function addParams(url: string, params: QueryParams): string {\n if ( params && typeof params === 'object' ) {\n Object.keys(params).forEach((key) => {\n url = addParam(url, key, params[key]);\n });\n }\n\n return url;\n}\n\nexport function removeParam(url: string, key: string): string {\n const parsed = parse(url);\n\n if ( parsed.query?.[key] ) {\n delete parsed.query[key];\n }\n\n return stringify(parsed);\n}\n\nexport function parseLinkHeader(str: string): Record {\n const out: { [key: string]: string} = { };\n const lines = (str || '').split(',');\n\n for ( const line of lines ) {\n const match = line.match(/^\\s*<([^>]+)>\\s*;\\s*rel\\s*=\"(.*)\"/);\n\n if ( match ) {\n out[match[2].toLowerCase()] = match[1];\n }\n }\n\n return out;\n}\n\nexport function isMaybeSecure(port: number, proto: string): boolean {\n const protocol = proto.toLowerCase();\n\n return portMatch([port], [443, 8443], ['443']) || protocol === 'https';\n}\n\nexport function portMatch(ports: number[], equals: number[], endsWith: string[]): boolean {\n for (let i = 0; i < ports.length; i++) {\n const port = ports[i];\n\n if (equals.includes(port)) {\n return true;\n }\n\n for (let j = 0; j < endsWith.length; j++) {\n const suffix = `${ endsWith[j] }`;\n const portStr = `${ port }`;\n\n if (portStr !== suffix && portStr.endsWith(suffix)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n// parseUri 1.2.2\n// (c) Steven Levithan \n// https://javascriptsource.com/parseuri/\n// MIT License\nexport function parse(str: string): ParsedUri {\n const o = parse.options;\n const m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\n if (!m) {\n throw new Error(`Cannot parse as uri: ${ str }`);\n }\n const uri = {} as ParsedUri;\n let i = 14;\n\n while (i--) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri.query = {};\n uri.queryStr.replace(o.q.parser, (_, $1: string, $2: string): string => {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n\n return '';\n });\n\n return uri;\n}\n\nparse.options = {\n strictMode: false,\n key: ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'queryStr', 'anchor'],\n q: {\n name: 'query',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n} as {\n strictMode: boolean,\n key: UriField[],\n q: {\n name: 'query',\n parser: RegExp\n },\n parser: {\n strict: RegExp,\n loose: RegExp\n }\n};\n\nexport function stringify(uri: ParsedUri): string {\n let out = `${ uri.protocol }://`;\n\n if ( uri.user && uri.password ) {\n out += `${ uri.user }:${ uri.password }@`;\n } else if ( uri.user ) {\n out += `${ uri.user }@`;\n }\n\n out += uri.host;\n\n if ( uri.port ) {\n out += `:${ uri.port }`;\n }\n\n out += uri.path || '/';\n\n out = addParams(out, uri.query || {});\n\n if ( uri.anchor ) {\n out += `#${ uri.anchor }`;\n }\n\n return out;\n}\n","import { SECRET, SERVICE } from '@shell/config/types';\nimport isUrl from 'is-url';\nimport { get } from '@shell/utils/object';\nimport isEmpty from 'lodash/isEmpty';\nimport SteveModel from '@shell/plugins/steve/steve-class';\n\nfunction tlsHosts(spec) {\n const tls = spec.tls || [];\n\n return tls.flatMap((tls) => tls.hosts || []);\n}\n\nfunction isTlsHost(spec, host) {\n return tlsHosts(spec).includes(host);\n}\n\nexport function ingressFullPath(resource, rule, path = {}) {\n const spec = resource.spec;\n const hostValue = rule.host || '';\n const pathValue = path.path || '';\n let protocol = '';\n\n if (hostValue) {\n protocol = isTlsHost(spec, hostValue) ? 'https://' : 'http://';\n }\n\n return `${ protocol }${ hostValue }${ pathValue }`;\n}\n\nexport default class Ingress extends SteveModel {\n get tlsHosts() {\n return tlsHosts(this.spec);\n }\n\n get isTlsHost() {\n return (host) => isTlsHost(this.spec, host);\n }\n\n targetTo(workloads, serviceName) {\n if (!serviceName) {\n return null;\n }\n\n const isTargetsWorkload = serviceName.startsWith('ingress-');\n const id = `${ this.namespace }/${ serviceName }`;\n\n if ( isTargetsWorkload ) {\n const workload = workloads.find((w) => w.id === (id));\n\n return workload?.detailLocation || '';\n } else {\n return {\n name: 'c-cluster-product-resource-namespace-id',\n params: {\n resource: SERVICE,\n id: serviceName,\n namespace: this.namespace,\n }\n };\n }\n }\n\n createRulesForListPage(workloads, certificates) {\n const rules = this.spec.rules || [];\n\n return rules.flatMap((rule) => {\n const paths = rule?.http?.paths || [];\n\n return paths.map((path) => this.createPathForListPage(workloads, rule, path, certificates));\n });\n }\n\n createPathForListPage(workloads, rule, path, certificates) {\n const serviceName = get(path?.backend, this.serviceNamePath);\n const fullPath = this.fullPath(rule, path);\n\n return {\n // isUrl thinks urls which contain '*' are valid so I'm adding an additional check for '*'\n isUrl: isUrl(fullPath) && !fullPath.includes('*'),\n pathType: path.pathType,\n fullPath,\n serviceName,\n serviceTargetTo: this.targetTo(workloads, serviceName),\n certs: this.certLinks(rule, certificates),\n targetLink: this.targetLink(workloads, serviceName),\n port: get(path?.backend, this.servicePortPath)\n };\n }\n\n fullPath(rule, path) {\n return ingressFullPath(this, rule, path);\n }\n\n certLink(cert, certificates = []) {\n const secretName = cert.secretName || this.t('ingress.rulesAndCertificates.defaultCertificate');\n let to;\n\n if (cert.secretName && certificates.includes(secretName)) {\n to = {\n name: 'c-cluster-product-resource-namespace-id',\n params: {\n resource: SECRET,\n id: secretName\n }\n };\n }\n\n return {\n to,\n text: secretName,\n options: { internal: true }\n };\n }\n\n certLinks(rule, certificates) {\n const certs = this.spec.tls || [];\n const matchingCerts = certs.filter((cert) => {\n const hosts = cert.hosts || [];\n\n return hosts.includes(rule.host);\n });\n\n return matchingCerts.map((cert) => this.certLink(cert, certificates));\n }\n\n targetLink(workloads, serviceName) {\n return {\n to: this.targetTo(workloads, serviceName),\n text: serviceName,\n options: { internal: true }\n };\n }\n\n createDefaultService(workloads) {\n const backend = get(this.spec, this.defaultBackendPath);\n const serviceName = get(backend, this.serviceNamePath);\n\n if ( !serviceName ) {\n return null;\n }\n\n return {\n name: serviceName,\n targetTo: this.targetTo(workloads, serviceName)\n };\n }\n\n get cache() {\n if (!this.cacheObject) {\n this.cacheObject = {};\n }\n\n return this.cacheObject;\n }\n\n get showPathType() {\n if (!this.cache.showPathType) {\n this.cache.showPathType = this.$rootGetters['cluster/pathExistsInSchema'](this.type, 'spec.rules.http.paths.pathType');\n }\n\n return this.cache.showPathType;\n }\n\n get useNestedBackendField() {\n if (!this.cache.useNestedBackendField) {\n this.cache.useNestedBackendField = this.$rootGetters['cluster/pathExistsInSchema'](this.type, 'spec.rules.http.paths.backend.service.name');\n }\n\n return this.cache.useNestedBackendField;\n }\n\n get serviceNamePath() {\n const nestedPath = 'service.name';\n const flatPath = 'serviceName';\n\n return this.useNestedBackendField ? nestedPath : flatPath;\n }\n\n get servicePortPath() {\n const nestedPath = 'service.port.number';\n const flatPath = 'servicePort';\n\n return this.useNestedBackendField ? nestedPath : flatPath;\n }\n\n get defaultBackendPath() {\n const defaultBackend = this.$rootGetters['cluster/pathExistsInSchema'](this.type, 'spec.defaultBackend');\n\n return defaultBackend ? 'defaultBackend' : 'backend';\n }\n\n get hasDefaultBackend() {\n return !isEmpty(this.spec[this.defaultBackendPath]);\n }\n\n get details() {\n const out = this._details;\n\n if (this.spec?.ingressClassName) {\n out.push({\n label: this.t('ingress.ingressClass.label'),\n content: this.spec.ingressClassName,\n });\n }\n\n return out;\n }\n}\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLauncherCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLauncherCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AppLauncherCard.vue?vue&type=template&id=862d5938&scoped=true&\"\nimport script from \"./AppLauncherCard.vue?vue&type=script&lang=js&\"\nexport * from \"./AppLauncherCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppLauncherCard.vue?vue&type=style&index=0&id=862d5938&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"862d5938\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"cluster-actions\"},[_c('div',{staticClass:\"search-input\"},[_c('input',{attrs:{\"placeholder\":_vm.$store.getters['i18n/t']('appLauncher.filter')},domProps:{\"value\":_vm.searchQuery},on:{\"input\":function($event){return _vm.$emit('update:search-query', $event.target.value)}}})]),(_vm.isGridView)?_c('div',{staticClass:\"sort-buttons\",on:{\"click\":function($event){return _vm.$emit('toggle-sort')}}},[_c('div',{staticClass:\"sort-button\",class:{ active: _vm.sortOrder === 'asc' },attrs:{\"disabled\":_vm.sortOrder === 'asc'}},[_c('i',{staticClass:\"icon-chevron-up\"})]),_c('div',{staticClass:\"sort-label\"},[_c('p',[_vm._v(_vm._s(_vm.aToZorZtoA))])]),_c('div',{staticClass:\"sort-button\",class:{ active: _vm.sortOrder === 'desc' },attrs:{\"disabled\":_vm.sortOrder === 'desc'}},[_c('i',{staticClass:\"icon-chevron-down\"})])]):_vm._e(),_c('div',{staticClass:\"select-wrapper\"},[_c('select',{staticClass:\"cluster-select\",domProps:{\"value\":_vm.selectedCluster},on:{\"change\":function($event){return _vm.$emit('update:selected-cluster', $event.target.value)}}},_vm._l((_vm.clusterOptions),function(option){return _c('option',{key:option.value,domProps:{\"value\":option.value}},[_vm._v(\" \"+_vm._s(option.label)+\" \")])}),0)]),_c('button',{staticClass:\"icon-button\",on:{\"click\":function($event){return _vm.$emit('set-view', 'grid')}}},[_c('i',{staticClass:\"icon icon-apps\"})]),_c('button',{staticClass:\"icon-button\",on:{\"click\":function($event){return _vm.$emit('set-view', 'list')}}},[_c('i',{staticClass:\"icon icon-list-flat\"})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterActions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterActions.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClusterActions.vue?vue&type=template&id=88f0655a&scoped=true&\"\nimport script from \"./ClusterActions.vue?vue&type=script&lang=js&\"\nexport * from \"./ClusterActions.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClusterActions.vue?vue&type=style&index=0&id=88f0655a&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"88f0655a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"cluster-grid-view\"},[_c('div',{staticClass:\"cluster-header\"},[_c('h1',[_vm._v(\" \"+_vm._s(_vm.clusterData.name)+\" \")])]),_c('div',{staticClass:\"services-by-cluster-grid\"},_vm._l((_vm.clusterData.filteredApps),function(app){return _c('AppLauncherCard',{key:`${app.clusterId}-${app.id}-${app.kind}`,attrs:{\"app\":app,\"isInGlobalView\":false,\"favorited-apps\":_vm.favoritedApps},on:{\"toggle-favorite\":function($event){return _vm.$emit('toggle-favorite', $event)}}})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterGridView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterGridView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClusterGridView.vue?vue&type=template&id=1dd06ec8&scoped=true&\"\nimport script from \"./ClusterGridView.vue?vue&type=script&lang=js&\"\nexport * from \"./ClusterGridView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClusterGridView.vue?vue&type=style&index=0&id=1dd06ec8&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1dd06ec8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"cluster-list-view\"},[_c('div',{staticClass:\"cluster-header\"},[_c('h1',[_vm._v(\" \"+_vm._s(_vm.clusterData.name)+\" \")])]),_c('SortableTable',{attrs:{\"rows\":_vm.clusterData.filteredApps,\"headers\":_vm.tableHeaders,\"row-key\":'uniqueId',\"search\":false,\"table-actions\":false,\"row-actions\":false,\"no-rows-text\":_vm.$store.getters['i18n/t']('appLauncher.noAppsFound')},scopedSlots:_vm._u([{key:\"cell:name\",fn:function({ row }){return [_vm._v(\" \"+_vm._s(row.metadata.name)+\" \")]}},{key:\"cell:namespace\",fn:function({ row }){return [_vm._v(\" \"+_vm._s(row.metadata.namespace)+\" \")]}},{key:\"cell:version\",fn:function({ row }){return [_vm._v(\" \"+_vm._s(row.metadata.labels?.['app.kubernetes.io/version'])+\" \")]}},{key:\"cell:helmChart\",fn:function({ row }){return [_vm._v(\" \"+_vm._s(row.metadata.labels?.['helm.sh/chart'])+\" \")]}},{key:\"cell:actions\",fn:function({ row }){return [_c('div',{staticStyle:{\"display\":\"flex\",\"justify-content\":\"flex-end\"}},[_c('button',{staticClass:\"icon-button favorite-icon\",on:{\"click\":function($event){return _vm.$emit('toggle-favorite', row)}}},[_c('i',{class:['icon', _vm.isFavorited(row, _vm.favoritedApps) ? 'icon-star' : 'icon-star-open']})]),(_vm.getEndpoints(row)?.length <= 1)?_c('a',{staticClass:\"btn role-primary\",attrs:{\"href\":_vm.getEndpoints(row)[0]?.value,\"target\":\"_blank\",\"rel\":\"noopener noreferrer nofollow\"}},[_vm._v(\" \"+_vm._s(_vm.t('appLauncher.launch'))+\" \")]):_c('ButtonDropDown',{attrs:{\"button-label\":_vm.t('appLauncher.launch'),\"dropdown-options\":_vm.getEndpoints(row),\"title\":_vm.t('appLauncher.launchAnEndpointFromSelection')},on:{\"click-action\":_vm.openLink}})],1)]}}])})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterListView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ClusterListView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClusterListView.vue?vue&type=template&id=56771e1c&scoped=true&\"\nimport script from \"./ClusterListView.vue?vue&type=script&lang=js&\"\nexport * from \"./ClusterListView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClusterListView.vue?vue&type=style&index=0&id=56771e1c&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56771e1c\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--2-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=3b920c85&scoped=true&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=3b920c85&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3b920c85\",\n null\n \n)\n\nexport default component.exports","import Dashboard from '../pages/index.vue';\nimport { PRODUCT_NAME, BLANK_CLUSTER } from '../config/app-launcher';\n\nconst routes = [\n {\n name: `${ PRODUCT_NAME }-c-cluster`,\n path: `/${ PRODUCT_NAME }/c/:cluster`,\n component: Dashboard,\n meta: {\n product: PRODUCT_NAME,\n cluster: BLANK_CLUSTER,\n pkg: PRODUCT_NAME\n }\n }\n];\n\nexport default routes;","import { importTypes } from '@rancher/auto-import';\nimport { IPlugin } from '@shell/core/types';\nimport extensionRouting from './routing/extension-routing';\n\n// Init the package\nexport default function (plugin: IPlugin) {\n // Auto-import model, detail, edit from the folders\n importTypes(plugin);\n // Provide plugin metadata from package.json\n plugin.metadata = require('./package.json');\n // Load a product\n plugin.addProduct(require('./product'));\n // Add Vue routes\n plugin.addRoutes(extensionRouting);\n}\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n","import { get } from './object';\nimport { strPad } from './string';\n\n// Based on https://github.com/emberjs/ember.js/blob/master/packages/@ember/-internals/runtime/lib/type-of.js\n// and https://github.com/emberjs/ember.js/blob/master/packages/@ember/-internals/runtime/lib/mixins/array.js\n/*\nCopyright (c) 2019 Yehuda Katz, Tom Dale and Ember.js contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n// ........................................\n// TYPING & ARRAY MESSAGING\n//\nconst TYPE_MAP = {\n '[object Boolean]': 'boolean',\n '[object Number]': 'number',\n '[object String]': 'string',\n '[object Function]': 'function',\n '[object Array]': 'array',\n '[object Date]': 'date',\n '[object RegExp]': 'regexp',\n '[object Object]': 'object',\n '[object FileList]': 'filelist',\n};\n\nconst { toString } = Object.prototype;\n\n/**\n Returns a consistent type for the passed object.\n\n Use this instead of the built-in `typeof` to get the type of an item.\n It will return the same result across all browsers and includes a bit\n more detail. Here is what will be returned:\n\n | Return Value | Meaning |\n |---------------|------------------------------------------------------|\n | 'string' | String primitive or String object. |\n | 'number' | Number primitive or Number object. |\n | 'boolean' | Boolean primitive or Boolean object. |\n | 'null' | Null value |\n | 'undefined' | Undefined value |\n | 'function' | A function |\n | 'array' | An instance of Array |\n | 'regexp' | An instance of RegExp |\n | 'date' | An instance of Date |\n | 'filelist' | An instance of FileList |\n | 'error' | An instance of the Error object |\n | 'object' | A JavaScript object |\n\n Examples:\n\n import { typeOf } from '@shell/utils/type-of';\n\n typeOf(); // 'undefined'\n typeOf(null); // 'null'\n typeOf(undefined); // 'undefined'\n typeOf('michael'); // 'string'\n typeOf(new String('michael')); // 'string'\n typeOf(101); // 'number'\n typeOf(new Number(101)); // 'number'\n typeOf(true); // 'boolean'\n typeOf(new Boolean(true)); // 'boolean'\n typeOf(A); // 'function'\n typeOf([1, 2, 90]); // 'array'\n typeOf(/abc/); // 'regexp'\n typeOf(new Date()); // 'date'\n typeOf(event.target.files); // 'filelist'\n typeOf(new Error('teamocil')); // 'error'\n\n // 'normal' JavaScript object\n typeOf({ a: 'b' }); // 'object'\n*/\nexport function typeOf(item) {\n if (item === null) {\n return 'null';\n }\n if (item === undefined) {\n return 'undefined';\n }\n let ret = TYPE_MAP[toString.call(item)] || 'object';\n\n if (ret === 'object') {\n if (item instanceof Error) {\n ret = 'error';\n } else if (item instanceof Date) {\n ret = 'date';\n }\n }\n\n return ret;\n}\n\nexport function spaceship(a, b) {\n const diff = a - b;\n\n return (diff > 0) - (diff < 0);\n}\n\nconst TYPE_ORDER = {\n undefined: 0,\n null: 1,\n boolean: 2,\n number: 3,\n string: 4,\n array: 5,\n object: 6,\n instance: 7,\n function: 8,\n class: 9,\n date: 10,\n};\n\nexport function compare(a, b) {\n const typeA = typeOf(a);\n const typeB = typeOf(b);\n\n const res = spaceship(TYPE_ORDER[typeA], TYPE_ORDER[typeB]);\n\n if ( res ) {\n return res;\n }\n\n switch (typeA) {\n case 'boolean':\n case 'number':\n return spaceship(a, b);\n\n case 'string':\n return spaceship(a.localeCompare(b), 0);\n\n case 'array': {\n const aLen = a.length;\n const bLen = b.length;\n const len = Math.min(aLen, bLen);\n\n for (let i = 0; i < len; i++) {\n const r = compare(a[i], b[i]);\n\n if (r !== 0) {\n return r;\n }\n }\n\n // all elements are equal now\n // shorter array should be ordered first\n return spaceship(aLen, bLen);\n }\n case 'date':\n return spaceship(a.getTime(), b.getTime());\n }\n\n return 0;\n}\n\nexport function parseField(str) {\n const parts = str.split(/:/);\n\n if ( parts.length === 2 && parts[1] === 'desc' ) {\n return { field: parts[0], reverse: true };\n } else {\n return { field: str, reverse: false };\n }\n}\n\nexport function sortBy(ary, keys, desc) {\n if ( !Array.isArray(keys) ) {\n keys = [keys];\n }\n\n return ary.slice().sort((objA, objB) => {\n for ( let i = 0 ; i < keys.length ; i++ ) {\n const parsed = parseField(keys[i]);\n const a = get(objA, parsed.field);\n const b = get(objB, parsed.field);\n let res = compare(a, b);\n\n if ( res ) {\n if ( desc ) {\n res *= -1;\n }\n\n if ( parsed.reverse ) {\n res *= -1;\n }\n\n return res;\n }\n }\n\n return 0;\n });\n}\n\n// Turn foo1-bar2 into foo0000000001-bar0000000002 so that the numbers sort numerically\nconst splitRegex = /([^\\d]+)/;\nconst notNumericRegex = /^[0-9]+$/;\n\nexport function sortableNumericSuffix(str) {\n if ( typeof str !== 'string' ) {\n return str;\n }\n\n return str.split(splitRegex).map((x) => x.match(notNumericRegex) ? strPad(x, 10, '0') : x).join('').trim();\n}\n\nexport function isNumeric(num) {\n return !!`${ num }`.match(notNumericRegex);\n}\n","export * from \"-!../../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./LabeledTooltip.vue?vue&type=style&index=0&id=6fc47e64&prod&lang=scss&\"","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"cronstrue\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cronstrue\"] = factory();\n\telse\n\t\troot[\"cronstrue\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 4);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar stringUtilities_1 = __webpack_require__(1);\nvar cronParser_1 = __webpack_require__(2);\nvar ExpressionDescriptor = (function () {\n function ExpressionDescriptor(expression, options) {\n this.expression = expression;\n this.options = options;\n this.expressionParts = new Array(5);\n if (ExpressionDescriptor.locales[options.locale]) {\n this.i18n = ExpressionDescriptor.locales[options.locale];\n }\n else {\n console.warn(\"Locale '\" + options.locale + \"' could not be found; falling back to 'en'.\");\n this.i18n = ExpressionDescriptor.locales[\"en\"];\n }\n if (options.use24HourTimeFormat === undefined) {\n options.use24HourTimeFormat = this.i18n.use24HourTimeFormatByDefault();\n }\n }\n ExpressionDescriptor.toString = function (expression, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.throwExceptionOnParseError, throwExceptionOnParseError = _c === void 0 ? true : _c, _d = _b.verbose, verbose = _d === void 0 ? false : _d, _e = _b.dayOfWeekStartIndexZero, dayOfWeekStartIndexZero = _e === void 0 ? true : _e, use24HourTimeFormat = _b.use24HourTimeFormat, _f = _b.locale, locale = _f === void 0 ? \"en\" : _f;\n var options = {\n throwExceptionOnParseError: throwExceptionOnParseError,\n verbose: verbose,\n dayOfWeekStartIndexZero: dayOfWeekStartIndexZero,\n use24HourTimeFormat: use24HourTimeFormat,\n locale: locale\n };\n var descripter = new ExpressionDescriptor(expression, options);\n return descripter.getFullDescription();\n };\n ExpressionDescriptor.initialize = function (localesLoader) {\n ExpressionDescriptor.specialCharacters = [\"/\", \"-\", \",\", \"*\"];\n localesLoader.load(ExpressionDescriptor.locales);\n };\n ExpressionDescriptor.prototype.getFullDescription = function () {\n var description = \"\";\n try {\n var parser = new cronParser_1.CronParser(this.expression, this.options.dayOfWeekStartIndexZero);\n this.expressionParts = parser.parse();\n var timeSegment = this.getTimeOfDayDescription();\n var dayOfMonthDesc = this.getDayOfMonthDescription();\n var monthDesc = this.getMonthDescription();\n var dayOfWeekDesc = this.getDayOfWeekDescription();\n var yearDesc = this.getYearDescription();\n description += timeSegment + dayOfMonthDesc + dayOfWeekDesc + monthDesc + yearDesc;\n description = this.transformVerbosity(description, this.options.verbose);\n description = description.charAt(0).toLocaleUpperCase() + description.substr(1);\n }\n catch (ex) {\n if (!this.options.throwExceptionOnParseError) {\n description = this.i18n.anErrorOccuredWhenGeneratingTheExpressionD();\n }\n else {\n throw \"\" + ex;\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getTimeOfDayDescription = function () {\n var secondsExpression = this.expressionParts[0];\n var minuteExpression = this.expressionParts[1];\n var hourExpression = this.expressionParts[2];\n var description = \"\";\n if (!stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters) &&\n !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters) &&\n !stringUtilities_1.StringUtilities.containsAny(secondsExpression, ExpressionDescriptor.specialCharacters)) {\n description += this.i18n.atSpace() + this.formatTime(hourExpression, minuteExpression, secondsExpression);\n }\n else if (!secondsExpression &&\n minuteExpression.indexOf(\"-\") > -1 &&\n !(minuteExpression.indexOf(\",\") > -1) &&\n !(minuteExpression.indexOf(\"/\") > -1) &&\n !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters)) {\n var minuteParts = minuteExpression.split(\"-\");\n description += stringUtilities_1.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(), this.formatTime(hourExpression, minuteParts[0], \"\"), this.formatTime(hourExpression, minuteParts[1], \"\"));\n }\n else if (!secondsExpression &&\n hourExpression.indexOf(\",\") > -1 &&\n hourExpression.indexOf(\"-\") == -1 &&\n hourExpression.indexOf(\"/\") == -1 &&\n !stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters)) {\n var hourParts = hourExpression.split(\",\");\n description += this.i18n.at();\n for (var i = 0; i < hourParts.length; i++) {\n description += \" \";\n description += this.formatTime(hourParts[i], minuteExpression, \"\");\n if (i < hourParts.length - 2) {\n description += \",\";\n }\n if (i == hourParts.length - 2) {\n description += this.i18n.spaceAnd();\n }\n }\n }\n else {\n var secondsDescription = this.getSecondsDescription();\n var minutesDescription = this.getMinutesDescription();\n var hoursDescription = this.getHoursDescription();\n description += secondsDescription;\n if (description.length > 0 && minutesDescription.length > 0) {\n description += \", \";\n }\n description += minutesDescription;\n if (description.length > 0 && hoursDescription.length > 0) {\n description += \", \";\n }\n description += hoursDescription;\n }\n return description;\n };\n ExpressionDescriptor.prototype.getSecondsDescription = function () {\n var _this = this;\n var description = this.getSegmentDescription(this.expressionParts[0], this.i18n.everySecond(), function (s) {\n return s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Seconds(), s);\n }, function (s) {\n return _this.i18n.secondsX0ThroughX1PastTheMinute();\n }, function (s) {\n return s == \"0\"\n ? \"\"\n : parseInt(s) < 20\n ? _this.i18n.atX0SecondsPastTheMinute()\n : _this.i18n.atX0SecondsPastTheMinuteGt20() || _this.i18n.atX0SecondsPastTheMinute();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getMinutesDescription = function () {\n var _this = this;\n var secondsExpression = this.expressionParts[0];\n var hourExpression = this.expressionParts[2];\n var description = this.getSegmentDescription(this.expressionParts[1], this.i18n.everyMinute(), function (s) {\n return s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Minutes(), s);\n }, function (s) {\n return _this.i18n.minutesX0ThroughX1PastTheHour();\n }, function (s) {\n try {\n return s == \"0\" && hourExpression.indexOf(\"/\") == -1 && secondsExpression == \"\"\n ? _this.i18n.everyHour()\n : parseInt(s) < 20\n ? _this.i18n.atX0MinutesPastTheHour()\n : _this.i18n.atX0MinutesPastTheHourGt20() || _this.i18n.atX0MinutesPastTheHour();\n }\n catch (e) {\n return _this.i18n.atX0MinutesPastTheHour();\n }\n });\n return description;\n };\n ExpressionDescriptor.prototype.getHoursDescription = function () {\n var _this = this;\n var expression = this.expressionParts[2];\n var description = this.getSegmentDescription(expression, this.i18n.everyHour(), function (s) {\n return _this.formatTime(s, \"0\", \"\");\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Hours(), s);\n }, function (s) {\n return _this.i18n.betweenX0AndX1();\n }, function (s) {\n return _this.i18n.atX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getDayOfWeekDescription = function () {\n var _this = this;\n var daysOfWeekNames = this.i18n.daysOfTheWeek();\n var description = null;\n if (this.expressionParts[5] == \"*\") {\n description = \"\";\n }\n else {\n description = this.getSegmentDescription(this.expressionParts[5], this.i18n.commaEveryDay(), function (s) {\n var exp = s;\n if (s.indexOf(\"#\") > -1) {\n exp = s.substr(0, s.indexOf(\"#\"));\n }\n else if (s.indexOf(\"L\") > -1) {\n exp = exp.replace(\"L\", \"\");\n }\n return daysOfWeekNames[parseInt(exp)];\n }, function (s) {\n if (parseInt(s) == 1) {\n return \"\";\n }\n else {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0DaysOfTheWeek(), s);\n }\n }, function (s) {\n return _this.i18n.commaX0ThroughX1();\n }, function (s) {\n var format = null;\n if (s.indexOf(\"#\") > -1) {\n var dayOfWeekOfMonthNumber = s.substring(s.indexOf(\"#\") + 1);\n var dayOfWeekOfMonthDescription = null;\n switch (dayOfWeekOfMonthNumber) {\n case \"1\":\n dayOfWeekOfMonthDescription = _this.i18n.first();\n break;\n case \"2\":\n dayOfWeekOfMonthDescription = _this.i18n.second();\n break;\n case \"3\":\n dayOfWeekOfMonthDescription = _this.i18n.third();\n break;\n case \"4\":\n dayOfWeekOfMonthDescription = _this.i18n.fourth();\n break;\n case \"5\":\n dayOfWeekOfMonthDescription = _this.i18n.fifth();\n break;\n }\n format = _this.i18n.commaOnThe() + dayOfWeekOfMonthDescription + _this.i18n.spaceX0OfTheMonth();\n }\n else if (s.indexOf(\"L\") > -1) {\n format = _this.i18n.commaOnTheLastX0OfTheMonth();\n }\n else {\n var domSpecified = _this.expressionParts[3] != \"*\";\n format = domSpecified ? _this.i18n.commaAndOnX0() : _this.i18n.commaOnlyOnX0();\n }\n return format;\n });\n }\n return description;\n };\n ExpressionDescriptor.prototype.getMonthDescription = function () {\n var _this = this;\n var monthNames = this.i18n.monthsOfTheYear();\n var description = this.getSegmentDescription(this.expressionParts[4], \"\", function (s) {\n return monthNames[parseInt(s) - 1];\n }, function (s) {\n if (parseInt(s) == 1) {\n return \"\";\n }\n else {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Months(), s);\n }\n }, function (s) {\n return _this.i18n.commaMonthX0ThroughMonthX1() || _this.i18n.commaX0ThroughX1();\n }, function (s) {\n return _this.i18n.commaOnlyInMonthX0 ? _this.i18n.commaOnlyInMonthX0() : _this.i18n.commaOnlyInX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getDayOfMonthDescription = function () {\n var _this = this;\n var description = null;\n var expression = this.expressionParts[3];\n switch (expression) {\n case \"L\":\n description = this.i18n.commaOnTheLastDayOfTheMonth();\n break;\n case \"WL\":\n case \"LW\":\n description = this.i18n.commaOnTheLastWeekdayOfTheMonth();\n break;\n default:\n var weekDayNumberMatches = expression.match(/(\\d{1,2}W)|(W\\d{1,2})/);\n if (weekDayNumberMatches) {\n var dayNumber = parseInt(weekDayNumberMatches[0].replace(\"W\", \"\"));\n var dayString = dayNumber == 1\n ? this.i18n.firstWeekday()\n : stringUtilities_1.StringUtilities.format(this.i18n.weekdayNearestDayX0(), dayNumber.toString());\n description = stringUtilities_1.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(), dayString);\n break;\n }\n else {\n var lastDayOffSetMatches = expression.match(/L-(\\d{1,2})/);\n if (lastDayOffSetMatches) {\n var offSetDays = lastDayOffSetMatches[1];\n description = stringUtilities_1.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(), offSetDays);\n break;\n }\n else if (expression == \"*\" && this.expressionParts[5] != \"*\") {\n return \"\";\n }\n else {\n description = this.getSegmentDescription(expression, this.i18n.commaEveryDay(), function (s) {\n return s == \"L\" ? _this.i18n.lastDay() : ((_this.i18n.dayX0) ? stringUtilities_1.StringUtilities.format(_this.i18n.dayX0(), s) : s);\n }, function (s) {\n return s == \"1\" ? _this.i18n.commaEveryDay() : _this.i18n.commaEveryX0Days();\n }, function (s) {\n return _this.i18n.commaBetweenDayX0AndX1OfTheMonth();\n }, function (s) {\n return _this.i18n.commaOnDayX0OfTheMonth();\n });\n }\n break;\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getYearDescription = function () {\n var _this = this;\n var description = this.getSegmentDescription(this.expressionParts[6], \"\", function (s) {\n return /^\\d+$/.test(s) ? new Date(parseInt(s), 1).getFullYear().toString() : s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Years(), s);\n }, function (s) {\n return _this.i18n.commaYearX0ThroughYearX1() || _this.i18n.commaX0ThroughX1();\n }, function (s) {\n return _this.i18n.commaOnlyInYearX0 ? _this.i18n.commaOnlyInYearX0() : _this.i18n.commaOnlyInX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getSegmentDescription = function (expression, allDescription, getSingleItemDescription, getIntervalDescriptionFormat, getBetweenDescriptionFormat, getDescriptionFormat) {\n var _this = this;\n var description = null;\n if (!expression) {\n description = \"\";\n }\n else if (expression === \"*\") {\n description = allDescription;\n }\n else if (!stringUtilities_1.StringUtilities.containsAny(expression, [\"/\", \"-\", \",\"])) {\n description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), getSingleItemDescription(expression));\n }\n else if (expression.indexOf(\"/\") > -1) {\n var segments = expression.split(\"/\");\n description = stringUtilities_1.StringUtilities.format(getIntervalDescriptionFormat(segments[1]), segments[1]);\n if (segments[0].indexOf(\"-\") > -1) {\n var betweenSegmentDescription = this.generateBetweenSegmentDescription(segments[0], getBetweenDescriptionFormat, getSingleItemDescription);\n if (betweenSegmentDescription.indexOf(\", \") != 0) {\n description += \", \";\n }\n description += betweenSegmentDescription;\n }\n else if (!stringUtilities_1.StringUtilities.containsAny(segments[0], [\"*\", \",\"])) {\n var rangeItemDescription = stringUtilities_1.StringUtilities.format(getDescriptionFormat(segments[0]), getSingleItemDescription(segments[0]));\n rangeItemDescription = rangeItemDescription.replace(\", \", \"\");\n description += stringUtilities_1.StringUtilities.format(this.i18n.commaStartingX0(), rangeItemDescription);\n }\n }\n else if (expression.indexOf(\",\") > -1) {\n var segments = expression.split(\",\");\n var descriptionContent = \"\";\n for (var i = 0; i < segments.length; i++) {\n if (i > 0 && segments.length > 2) {\n descriptionContent += \",\";\n if (i < segments.length - 1) {\n descriptionContent += \" \";\n }\n }\n if (i > 0 && segments.length > 1 && (i == segments.length - 1 || segments.length == 2)) {\n descriptionContent += this.i18n.spaceAnd() + \" \";\n }\n if (segments[i].indexOf(\"-\") > -1) {\n var betweenSegmentDescription = this.generateBetweenSegmentDescription(segments[i], function (s) {\n return _this.i18n.commaX0ThroughX1();\n }, getSingleItemDescription);\n betweenSegmentDescription = betweenSegmentDescription.replace(\", \", \"\");\n descriptionContent += betweenSegmentDescription;\n }\n else {\n descriptionContent += getSingleItemDescription(segments[i]);\n }\n }\n description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), descriptionContent);\n }\n else if (expression.indexOf(\"-\") > -1) {\n description = this.generateBetweenSegmentDescription(expression, getBetweenDescriptionFormat, getSingleItemDescription);\n }\n return description;\n };\n ExpressionDescriptor.prototype.generateBetweenSegmentDescription = function (betweenExpression, getBetweenDescriptionFormat, getSingleItemDescription) {\n var description = \"\";\n var betweenSegments = betweenExpression.split(\"-\");\n var betweenSegment1Description = getSingleItemDescription(betweenSegments[0]);\n var betweenSegment2Description = getSingleItemDescription(betweenSegments[1]);\n betweenSegment2Description = betweenSegment2Description.replace(\":00\", \":59\");\n var betweenDescriptionFormat = getBetweenDescriptionFormat(betweenExpression);\n description += stringUtilities_1.StringUtilities.format(betweenDescriptionFormat, betweenSegment1Description, betweenSegment2Description);\n return description;\n };\n ExpressionDescriptor.prototype.formatTime = function (hourExpression, minuteExpression, secondExpression) {\n var hour = parseInt(hourExpression);\n var period = \"\";\n var setPeriodBeforeTime = false;\n if (!this.options.use24HourTimeFormat) {\n setPeriodBeforeTime = this.i18n.setPeriodBeforeTime && this.i18n.setPeriodBeforeTime();\n period = setPeriodBeforeTime ? this.getPeriod(hour) + \" \" : \" \" + this.getPeriod(hour);\n if (hour > 12) {\n hour -= 12;\n }\n if (hour === 0) {\n hour = 12;\n }\n }\n var minute = minuteExpression;\n var second = \"\";\n if (secondExpression) {\n second = \":\" + (\"00\" + secondExpression).substring(secondExpression.length);\n }\n return \"\" + (setPeriodBeforeTime ? period : \"\") + (\"00\" + hour.toString()).substring(hour.toString().length) + \":\" + (\"00\" + minute.toString()).substring(minute.toString().length) + second + (!setPeriodBeforeTime ? period : \"\");\n };\n ExpressionDescriptor.prototype.transformVerbosity = function (description, useVerboseFormat) {\n if (!useVerboseFormat) {\n description = description.replace(new RegExp(\", \" + this.i18n.everyMinute(), \"g\"), \"\");\n description = description.replace(new RegExp(\", \" + this.i18n.everyHour(), \"g\"), \"\");\n description = description.replace(new RegExp(this.i18n.commaEveryDay(), \"g\"), \"\");\n description = description.replace(/\\, ?$/, \"\");\n }\n return description;\n };\n ExpressionDescriptor.prototype.getPeriod = function (hour) {\n return hour >= 12 ? this.i18n.pm && this.i18n.pm() || \"PM\" : this.i18n.am && this.i18n.am() || \"AM\";\n };\n ExpressionDescriptor.locales = {};\n return ExpressionDescriptor;\n}());\nexports.ExpressionDescriptor = ExpressionDescriptor;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar StringUtilities = (function () {\n function StringUtilities() {\n }\n StringUtilities.format = function (template) {\n var values = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n return template.replace(/%s/g, function () {\n return values.shift();\n });\n };\n StringUtilities.containsAny = function (text, searchStrings) {\n return searchStrings.some(function (c) {\n return text.indexOf(c) > -1;\n });\n };\n return StringUtilities;\n}());\nexports.StringUtilities = StringUtilities;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar CronParser = (function () {\n function CronParser(expression, dayOfWeekStartIndexZero) {\n if (dayOfWeekStartIndexZero === void 0) { dayOfWeekStartIndexZero = true; }\n this.expression = expression;\n this.dayOfWeekStartIndexZero = dayOfWeekStartIndexZero;\n }\n CronParser.prototype.parse = function () {\n var parsed = this.extractParts(this.expression);\n this.normalize(parsed);\n this.validate(parsed);\n return parsed;\n };\n CronParser.prototype.extractParts = function (expression) {\n if (!this.expression) {\n throw new Error(\"Expression is empty\");\n }\n var parsed = expression.trim().split(/[ ]+/);\n if (parsed.length < 5) {\n throw new Error(\"Expression has only \" + parsed.length + \" part\" + (parsed.length == 1 ? \"\" : \"s\") + \". At least 5 parts are required.\");\n }\n else if (parsed.length == 5) {\n parsed.unshift(\"\");\n parsed.push(\"\");\n }\n else if (parsed.length == 6) {\n if (/\\d{4}$/.test(parsed[5])) {\n parsed.unshift(\"\");\n }\n else {\n parsed.push(\"\");\n }\n }\n else if (parsed.length > 7) {\n throw new Error(\"Expression has \" + parsed.length + \" parts; too many!\");\n }\n return parsed;\n };\n CronParser.prototype.normalize = function (expressionParts) {\n var _this = this;\n expressionParts[3] = expressionParts[3].replace(\"?\", \"*\");\n expressionParts[5] = expressionParts[5].replace(\"?\", \"*\");\n expressionParts[2] = expressionParts[2].replace(\"?\", \"*\");\n if (expressionParts[0].indexOf(\"0/\") == 0) {\n expressionParts[0] = expressionParts[0].replace(\"0/\", \"*/\");\n }\n if (expressionParts[1].indexOf(\"0/\") == 0) {\n expressionParts[1] = expressionParts[1].replace(\"0/\", \"*/\");\n }\n if (expressionParts[2].indexOf(\"0/\") == 0) {\n expressionParts[2] = expressionParts[2].replace(\"0/\", \"*/\");\n }\n if (expressionParts[3].indexOf(\"1/\") == 0) {\n expressionParts[3] = expressionParts[3].replace(\"1/\", \"*/\");\n }\n if (expressionParts[4].indexOf(\"1/\") == 0) {\n expressionParts[4] = expressionParts[4].replace(\"1/\", \"*/\");\n }\n if (expressionParts[5].indexOf(\"1/\") == 0) {\n expressionParts[5] = expressionParts[5].replace(\"1/\", \"*/\");\n }\n if (expressionParts[6].indexOf(\"1/\") == 0) {\n expressionParts[6] = expressionParts[6].replace(\"1/\", \"*/\");\n }\n expressionParts[5] = expressionParts[5].replace(/(^\\d)|([^#/\\s]\\d)/g, function (t) {\n var dowDigits = t.replace(/\\D/, \"\");\n var dowDigitsAdjusted = dowDigits;\n if (_this.dayOfWeekStartIndexZero) {\n if (dowDigits == \"7\") {\n dowDigitsAdjusted = \"0\";\n }\n }\n else {\n dowDigitsAdjusted = (parseInt(dowDigits) - 1).toString();\n }\n return t.replace(dowDigits, dowDigitsAdjusted);\n });\n if (expressionParts[5] == \"L\") {\n expressionParts[5] = \"6\";\n }\n if (expressionParts[3] == \"?\") {\n expressionParts[3] = \"*\";\n }\n if (expressionParts[3].indexOf(\"W\") > -1 &&\n (expressionParts[3].indexOf(\",\") > -1 || expressionParts[3].indexOf(\"-\") > -1)) {\n throw new Error(\"The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.\");\n }\n var days = {\n SUN: 0,\n MON: 1,\n TUE: 2,\n WED: 3,\n THU: 4,\n FRI: 5,\n SAT: 6\n };\n for (var day in days) {\n expressionParts[5] = expressionParts[5].replace(new RegExp(day, \"gi\"), days[day].toString());\n }\n var months = {\n JAN: 1,\n FEB: 2,\n MAR: 3,\n APR: 4,\n MAY: 5,\n JUN: 6,\n JUL: 7,\n AUG: 8,\n SEP: 9,\n OCT: 10,\n NOV: 11,\n DEC: 12\n };\n for (var month in months) {\n expressionParts[4] = expressionParts[4].replace(new RegExp(month, \"gi\"), months[month].toString());\n }\n if (expressionParts[0] == \"0\") {\n expressionParts[0] = \"\";\n }\n if (!/\\*|\\-|\\,|\\//.test(expressionParts[2]) &&\n (/\\*|\\//.test(expressionParts[1]) || /\\*|\\//.test(expressionParts[0]))) {\n expressionParts[2] += \"-\" + expressionParts[2];\n }\n for (var i = 0; i < expressionParts.length; i++) {\n if (expressionParts[i] == \"*/1\") {\n expressionParts[i] = \"*\";\n }\n if (expressionParts[i].indexOf(\"/\") > -1 && !/^\\*|\\-|\\,/.test(expressionParts[i])) {\n var stepRangeThrough = null;\n switch (i) {\n case 4:\n stepRangeThrough = \"12\";\n break;\n case 5:\n stepRangeThrough = \"6\";\n break;\n case 6:\n stepRangeThrough = \"9999\";\n break;\n default:\n stepRangeThrough = null;\n break;\n }\n if (stepRangeThrough != null) {\n var parts = expressionParts[i].split(\"/\");\n expressionParts[i] = parts[0] + \"-\" + stepRangeThrough + \"/\" + parts[1];\n }\n }\n }\n };\n CronParser.prototype.validate = function (parsed) {\n this.assertNoInvalidCharacters(\"DOW\", parsed[5]);\n this.assertNoInvalidCharacters(\"DOM\", parsed[3]);\n };\n CronParser.prototype.assertNoInvalidCharacters = function (partDescription, expression) {\n var invalidChars = expression.match(/[A-KM-VX-Z]+/gi);\n if (invalidChars && invalidChars.length) {\n throw new Error(partDescription + \" part contains invalid values: '\" + invalidChars.toString() + \"'\");\n }\n };\n return CronParser;\n}());\nexports.CronParser = CronParser;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar en = (function () {\n function en() {\n }\n en.prototype.atX0SecondsPastTheMinuteGt20 = function () {\n return null;\n };\n en.prototype.atX0MinutesPastTheHourGt20 = function () {\n return null;\n };\n en.prototype.commaMonthX0ThroughMonthX1 = function () {\n return null;\n };\n en.prototype.commaYearX0ThroughYearX1 = function () {\n return null;\n };\n en.prototype.use24HourTimeFormatByDefault = function () {\n return false;\n };\n en.prototype.anErrorOccuredWhenGeneratingTheExpressionD = function () {\n return \"An error occured when generating the expression description. Check the cron expression syntax.\";\n };\n en.prototype.everyMinute = function () {\n return \"every minute\";\n };\n en.prototype.everyHour = function () {\n return \"every hour\";\n };\n en.prototype.atSpace = function () {\n return \"At \";\n };\n en.prototype.everyMinuteBetweenX0AndX1 = function () {\n return \"Every minute between %s and %s\";\n };\n en.prototype.at = function () {\n return \"At\";\n };\n en.prototype.spaceAnd = function () {\n return \" and\";\n };\n en.prototype.everySecond = function () {\n return \"every second\";\n };\n en.prototype.everyX0Seconds = function () {\n return \"every %s seconds\";\n };\n en.prototype.secondsX0ThroughX1PastTheMinute = function () {\n return \"seconds %s through %s past the minute\";\n };\n en.prototype.atX0SecondsPastTheMinute = function () {\n return \"at %s seconds past the minute\";\n };\n en.prototype.everyX0Minutes = function () {\n return \"every %s minutes\";\n };\n en.prototype.minutesX0ThroughX1PastTheHour = function () {\n return \"minutes %s through %s past the hour\";\n };\n en.prototype.atX0MinutesPastTheHour = function () {\n return \"at %s minutes past the hour\";\n };\n en.prototype.everyX0Hours = function () {\n return \"every %s hours\";\n };\n en.prototype.betweenX0AndX1 = function () {\n return \"between %s and %s\";\n };\n en.prototype.atX0 = function () {\n return \"at %s\";\n };\n en.prototype.commaEveryDay = function () {\n return \", every day\";\n };\n en.prototype.commaEveryX0DaysOfTheWeek = function () {\n return \", every %s days of the week\";\n };\n en.prototype.commaX0ThroughX1 = function () {\n return \", %s through %s\";\n };\n en.prototype.first = function () {\n return \"first\";\n };\n en.prototype.second = function () {\n return \"second\";\n };\n en.prototype.third = function () {\n return \"third\";\n };\n en.prototype.fourth = function () {\n return \"fourth\";\n };\n en.prototype.fifth = function () {\n return \"fifth\";\n };\n en.prototype.commaOnThe = function () {\n return \", on the \";\n };\n en.prototype.spaceX0OfTheMonth = function () {\n return \" %s of the month\";\n };\n en.prototype.lastDay = function () {\n return \"the last day\";\n };\n en.prototype.commaOnTheLastX0OfTheMonth = function () {\n return \", on the last %s of the month\";\n };\n en.prototype.commaOnlyOnX0 = function () {\n return \", only on %s\";\n };\n en.prototype.commaAndOnX0 = function () {\n return \", and on %s\";\n };\n en.prototype.commaEveryX0Months = function () {\n return \", every %s months\";\n };\n en.prototype.commaOnlyInX0 = function () {\n return \", only in %s\";\n };\n en.prototype.commaOnTheLastDayOfTheMonth = function () {\n return \", on the last day of the month\";\n };\n en.prototype.commaOnTheLastWeekdayOfTheMonth = function () {\n return \", on the last weekday of the month\";\n };\n en.prototype.commaDaysBeforeTheLastDayOfTheMonth = function () {\n return \", %s days before the last day of the month\";\n };\n en.prototype.firstWeekday = function () {\n return \"first weekday\";\n };\n en.prototype.weekdayNearestDayX0 = function () {\n return \"weekday nearest day %s\";\n };\n en.prototype.commaOnTheX0OfTheMonth = function () {\n return \", on the %s of the month\";\n };\n en.prototype.commaEveryX0Days = function () {\n return \", every %s days\";\n };\n en.prototype.commaBetweenDayX0AndX1OfTheMonth = function () {\n return \", between day %s and %s of the month\";\n };\n en.prototype.commaOnDayX0OfTheMonth = function () {\n return \", on day %s of the month\";\n };\n en.prototype.commaEveryHour = function () {\n return \", every hour\";\n };\n en.prototype.commaEveryX0Years = function () {\n return \", every %s years\";\n };\n en.prototype.commaStartingX0 = function () {\n return \", starting %s\";\n };\n en.prototype.daysOfTheWeek = function () {\n return [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n };\n en.prototype.monthsOfTheYear = function () {\n return [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ];\n };\n return en;\n}());\nexports.en = en;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar expressionDescriptor_ts_1 = __webpack_require__(0);\nvar enLocaleLoader_1 = __webpack_require__(5);\nexpressionDescriptor_ts_1.ExpressionDescriptor.initialize(new enLocaleLoader_1.enLocaleLoader());\nexports.default = expressionDescriptor_ts_1.ExpressionDescriptor;\nvar toString = expressionDescriptor_ts_1.ExpressionDescriptor.toString;\nexports.toString = toString;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar en_1 = __webpack_require__(3);\nvar enLocaleLoader = (function () {\n function enLocaleLoader() {\n }\n enLocaleLoader.prototype.load = function (availableLocales) {\n availableLocales[\"en\"] = new en_1.en();\n };\n return enLocaleLoader;\n}());\nexports.enLocaleLoader = enLocaleLoader;\n\n\n/***/ })\n/******/ ]);\n});","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".cluster-actions[data-v-88f0655a]{display:flex;align-items:center;gap:1rem;position:fixed;right:5.8%;top:4.3rem;z-index:2;padding-bottom:.425rem;padding-right:4.4rem;background:inherit;border-bottom:var(--header-border-size) solid var(--header-border)}.icon-button[data-v-88f0655a]{padding:0;color:var(--primary);font-size:1.8rem}.icon-button[data-v-88f0655a],.sort-button[data-v-88f0655a]{background:none;border:none;cursor:pointer}.sort-button[data-v-88f0655a]{padding:none;color:#555;font-size:1.3rem;display:flex;align-items:center}.sort-label[data-v-88f0655a]{color:var(--primary);font-size:1rem;cursor:pointer}.sort-buttons[data-v-88f0655a]{display:flex;gap:1rem;align-items:center}.sort-button[data-v-88f0655a]:hover{color:var(--primary-hover)}.sort-button.active[data-v-88f0655a]{color:var(--primary)}.search-input[data-v-88f0655a]{text-align:right;justify-content:flex-end;display:flex;input[data-v-88f0655a]{width:190px;padding:11px;font-size:1rem;border:1px solid var(--border);border-radius:4px}}.select-wrapper select[data-v-88f0655a]{padding:.8rem;border:1px solid #ccc;border-radius:4px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","import { SETTING } from '@shell/config/settings';\nimport { MANAGEMENT } from '@shell/config/types';\n\nlet favIconSet = false;\n\nexport function haveSetFavIcon() {\n return favIconSet;\n}\n\nexport function setFavIcon(store) {\n const res = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.FAVICON);\n const brandSetting = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.BRAND);\n const link = findIconLink(document.head.getElementsByTagName('link'));\n\n if (link) {\n let brandImage;\n\n if (brandSetting?.value === 'suse') {\n brandImage = require('~shell/assets/brand/suse/favicon.png');\n } else if (brandSetting?.value === 'csp') {\n brandImage = require('~shell/assets/brand/csp/favicon.png');\n }\n\n link.href = res?.value || brandImage || defaultFavIcon;\n favIconSet = true;\n }\n}\n\nfunction getCurrentFavIcon() {\n const link = findIconLink(document.head.getElementsByTagName('link'));\n\n return link ? link.href : '';\n}\n\nfunction findIconLink(links) {\n for (let i = 0; i < links.length; i++) {\n const link = links[i];\n\n if (link.rel?.includes('icon')) {\n return link;\n }\n }\n\n return undefined;\n}\n\nconst defaultFavIcon = getCurrentFavIcon();\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n}\n\nmodule.exports = negate;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","export const PRODUCT_NAME = 'app-launcher';\nexport const BLANK_CLUSTER = '_';","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","export const waitFor = (testFn: Function, msg = '', timeoutMs = 3000000, intervalMs = 500, log = false): Promise => {\n gatedLog('Starting wait for', msg);\n\n return new Promise((resolve, reject) => {\n if (testFn()) {\n gatedLog('Wait for', msg || 'unknown', 'done immediately');\n resolve(this);\n }\n const timeout = setTimeout(() => {\n gatedLog('Wait for', msg, 'timed out');\n clearInterval(interval);\n clearTimeout(timeout);\n if (msg) {\n reject(new Error(`Failed waiting for: ${ msg }`));\n } else {\n throw new Error(`waitFor timed out after ${ timeoutMs / 1000 } seconds`);\n }\n }, timeoutMs);\n const interval = setInterval(() => {\n if ( testFn() ) {\n gatedLog('Wait for', msg, 'done');\n clearInterval(interval);\n clearTimeout(timeout);\n resolve(this);\n } else if (msg) {\n gatedLog('Wait for', msg, 'not done yet');\n }\n }, intervalMs);\n });\n\n function gatedLog(...args: any[]) {\n if (log) {\n console.log(...args); // eslint-disable-line no-console\n }\n }\n};\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".services-by-cluster-grid[data-v-1dd06ec8]{display:grid;grid-gap:1rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.cluster-header[data-v-1dd06ec8]{display:flex;align-items:center;justify-content:space-between;margin:1rem 0;background:var(--header-bg);border-bottom:var(--header-border-size) solid var(--header-border);height:var(--header-height);position:sticky;top:0;z-index:1}.favorite-icon[data-v-1dd06ec8]{margin-right:1rem}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","export function camelToTitle(str) {\n return dasherize((str || '')).split('-').map((str) => {\n return ucFirst(str);\n }).join(' ');\n}\n\nexport function ucFirst(str) {\n str = str || '';\n\n return str.substr(0, 1).toUpperCase() + str.substr(1);\n}\n\nexport function lcFirst(str) {\n str = str || '';\n\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n}\n\nexport function strPad(str, toLength, padChars = ' ', right = false) {\n str = `${ str }`;\n\n if (str.length >= toLength) {\n return str;\n }\n\n const neededLen = toLength - str.length + 1;\n const padStr = (new Array(neededLen)).join(padChars).substr(0, neededLen);\n\n if (right) {\n return str + padStr;\n } else {\n return padStr + str;\n }\n}\n\n// Turn thing1 into thing00000001 so that the numbers sort numerically\nexport function sortableNumericSuffix(str) {\n str = str || '';\n const match = str.match(/^(.*[^0-9])([0-9]+)$/);\n\n if (match) {\n return match[1] + strPad(match[2], 8, '0');\n }\n\n return str;\n}\n\nconst entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\n\nexport function escapeHtml(html) {\n return String(html).replace(/[&<>\"']/g, (s) => {\n return entityMap[s];\n });\n}\n\n/**\n * Return HTML markup from escaped HTML string, allowing specific tags\n * @param text string\n * @returns string\n */\nexport function decodeHtml(text) {\n const div = document.createElement('div');\n\n div.innerHTML = text;\n\n return div.textContent || div.innerText || '';\n}\n\nexport function escapeRegex(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nexport function random32(count) {\n count = Math.max(0, count || 1);\n\n const out = [];\n let i;\n\n if (window.crypto && window.crypto.getRandomValues) {\n const tmp = new Uint32Array(count);\n\n window.crypto.getRandomValues(tmp);\n for (i = 0; i < tmp.length; i++) {\n out[i] = tmp[i];\n }\n } else {\n for (i = 0; i < count; i++) {\n out[i] = Math.random() * 4294967296; // Math.pow(2,32);\n }\n }\n\n if (count === 1) {\n return out[0];\n } else {\n return out;\n }\n}\n\nconst alpha = 'abcdefghijklmnopqrstuvwxyz';\nconst num = '0123456789';\nconst sym = '!@#$%^&*()_+-=[]{};:,./<>?|';\n\nexport const CHARSET = {\n NUMERIC: num,\n NO_VOWELS: 'bcdfghjklmnpqrstvwxz2456789',\n ALPHA: alpha + alpha.toUpperCase(),\n ALPHA_NUM: alpha + alpha.toUpperCase() + num,\n ALPHA_LOWER: alpha,\n ALPHA_UPPER: alpha.toUpperCase(),\n HEX: `${ num }ABCDEF`,\n PASSWORD: alpha + alpha.toUpperCase() + num + alpha + alpha.toUpperCase() + num + sym,\n // ^-- includes alpha / ALPHA / num twice to reduce the occurrence of symbols\n};\n\nexport function randomStr(length = 16, chars = CHARSET.ALPHA_NUM) {\n if (!chars || !chars.length) {\n return null;\n }\n\n return random32(length).map((val) => {\n return chars[val % chars.length];\n }).join('');\n}\n\nexport function formatPercent(value, maxPrecision = 2) {\n if (value < 1 && maxPrecision >= 2) {\n return `${ Math.round(value * 100) / 100 }%`;\n } else if (value < 10 && maxPrecision >= 1) {\n return `${ Math.round(value * 10) / 10 }%`;\n } else {\n return `${ Math.round(value) }%`;\n }\n}\n\nexport function pluralize(str) {\n if ( str.match(/.*[^aeiou]y$/i) ) {\n return `${ str.substr(0, str.length - 1) }ies`;\n } else if ( str.endsWith('ics') ) {\n return str;\n } else if ( str.endsWith('s') ) {\n return `${ str }es`;\n } else {\n return `${ str }s`;\n }\n}\n\nexport function resourceNames(names, plusMore, t) {\n return names.reduce((res, name, i) => {\n if (i >= 5) {\n return res;\n }\n res += `${ escapeHtml( name ) }`;\n if (i === names.length - 1) {\n res += plusMore;\n } else {\n res += i === names.length - 2 ? t('generic.and') : t('generic.comma');\n }\n\n return res;\n }, '');\n}\n\nexport function indent(lines, count = 2, token = ' ', afterRegex = null) {\n if (typeof lines === 'string') {\n lines = lines.split(/\\n/);\n } else {\n lines = lines || [];\n }\n\n const padStr = (new Array(count + 1)).join(token);\n\n const out = lines.map((line) => {\n let prefix = '';\n let suffix = line;\n\n if (afterRegex) {\n const match = line.match(afterRegex);\n\n if (match) {\n prefix = match[match.length - 1];\n suffix = line.substr(match[0].length);\n }\n }\n\n return `${ prefix }${ padStr }${ suffix }`;\n });\n\n const str = out.join('\\n');\n\n return str;\n}\n\nconst decamelizeRegex = /([a-z\\d])([A-Z])/g;\n\nexport function decamelize(str) {\n return str.replace(decamelizeRegex, '$1_$2').toLowerCase();\n}\n\nconst dasherizeRegex = /[ _]/g;\n\nexport function dasherize(str) {\n return decamelize(str).replace(dasherizeRegex, '-');\n}\n\nexport function asciiLike(str) {\n str = str || '';\n\n if ( str.match(/[^\\r\\n\\t\\x20-\\x7F]/) ) {\n return false;\n }\n\n return true;\n}\n\nexport function coerceStringTypeToScalarType(val, type) {\n if ( type === 'float' ) {\n // Coerce strings to floats\n val = parseFloat(val) || null; // NaN becomes null\n } else if ( type === 'int' ) {\n // Coerce strings to ints\n val = parseInt(val, 10);\n\n if ( isNaN(val) ) {\n val = null;\n }\n } else if ( type === 'boolean') {\n // Coerce strings to boolean\n if (val.toLowerCase() === 'true') {\n val = true;\n } else if (val.toLowerCase() === 'false') {\n val = false;\n }\n }\n\n return val;\n}\n\nexport function matchesSomeRegex(stringRaw, regexes = []) {\n return regexes.some((regexRaw) => {\n const string = stringRaw || '';\n const regex = ensureRegex(regexRaw);\n\n return string.match(regex);\n });\n}\n\nexport function ensureRegex(strOrRegex, exact = true) {\n if ( typeof strOrRegex === 'string' ) {\n if ( exact ) {\n return new RegExp(`^${ escapeRegex(strOrRegex) }$`, 'i');\n } else {\n return new RegExp(`${ escapeRegex(strOrRegex) }`, 'i');\n }\n }\n\n return strOrRegex;\n}\n\nexport function nlToBr(value) {\n return escapeHtml(value || '').replace(/(\\r\\n|\\r|\\n)/g, '
\\n');\n}\n\nconst quotedMatch = /[^.\"']+|\"([^\"]*)\"|'([^']*)'/g;\n\nexport function splitObjectPath(path) {\n if ( path.includes('\"') || path.includes(\"'\") ) {\n // Path with quoted section\n return path.match(quotedMatch).map((x) => x.replace(/['\"]/g, ''));\n }\n\n // Regular path\n return path.split('.');\n}\n\nexport function joinObjectPath(ary) {\n let out = '';\n\n for ( const p of ary ) {\n if ( p.includes('.') ) {\n out += `.\"${ p }\"`;\n } else {\n out += `.${ p }`;\n }\n }\n\n if ( out.startsWith('.') ) {\n out = out.substr(1);\n }\n\n return out;\n}\n\nexport function shortenedImage(image) {\n return (image || '')\n .replace(/^(index\\.)?docker.io\\/(library\\/)?/, '')\n .replace(/:latest$/, '')\n .replace(/^(.*@sha256:)([0-9a-f]{8})[0-9a-f]+$/i, '$1$2…');\n}\n\nexport function isIpv4(ip) {\n const reg = /^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/;\n\n return reg.test(ip);\n}\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".table-options-checkbox .checkbox-custom{min-width:14px}.table-options-checkbox .checkbox-label{color:var(--body-text)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".filter-select .vs__selected-options .vs__selected{text-align:left}.sortable-table{border-collapse:collapse;min-width:400px;border-radius:5px 5px 0 0;outline:1px solid var(--border);overflow:hidden;background:var(--sortable-table-bg);border-radius:4px}.sortable-table.overflow-x{overflow-x:visible}.sortable-table.overflow-y{overflow-y:visible}.sortable-table td{padding:8px 5px;border:0}.sortable-table td:first-child{padding-left:10px}.sortable-table td:last-child{padding-right:10px}.sortable-table td.row-check{padding-top:12px}.sortable-table tbody tr{border-bottom:1px solid var(--sortable-table-top-divider);background-color:var(--sortable-table-row-bg)}.sortable-table tbody tr.main-row.has-sub-row{border-bottom:0}.sortable-table tbody tr.main-row:not(.row-selected):hover+.sub-row{background-color:var(--sortable-table-hover-bg)}.sortable-table tbody tr:last-of-type{border-bottom:0}.sortable-table tbody tr.sub-row-hovered,.sortable-table tbody tr:hover{background-color:var(--sortable-table-hover-bg)}.sortable-table tbody tr.state-description>td{font-size:13px;padding-top:0;overflow-wrap:anywhere}.sortable-table tbody tr.active-row{color:var(--sortable-table-header-bg)}.sortable-table tbody tr.row-selected{background:var(--sortable-table-selected-bg)}.sortable-table tbody .no-rows td{padding:30px 0;text-align:center}.sortable-table tbody .no-results:hover,.sortable-table tbody .no-rows:hover{background-color:var(--body-bg)}.sortable-table tbody.group:before{content:\\\"\\\";display:block;height:20px;background-color:transparent}.sortable-table tbody tr.group-row{background-color:initial}.sortable-table tbody tr.group-row:first-child{border-bottom:2px solid var(--sortable-table-row-bg)}.sortable-table tbody tr.group-row:not(:first-child){margin-top:20px}.sortable-table tbody tr.group-row td{padding:0}.sortable-table tbody tr.group-row td:first-of-type{border-left:1px solid var(--sortable-table-accent-bg)}.sortable-table tbody tr.group-row .group-tab{height:40px;line-height:40px;padding:0 10px;border-radius:4px 4px 0 0;background-color:var(--sortable-table-row-bg);position:relative;top:1px;display:inline-block;z-index:10;min-width:72px}.sortable-table tbody tr.group-row .group-tab:after,.sortable-table tbody tr.group-row .group-tab:before{content:\\\" \\\";display:table}.sortable-table tbody tr.group-row .group-tab:after{clear:both}.sortable-table tbody tr.group-row .group-tab>SPAN{color:var(--sortable-table-group-label)}.sortable-table tbody tr.group-row .group-tab:after{height:40px;width:70px;border-radius:5px 5px 0 0;background-color:var(--sortable-table-row-bg);content:\\\"\\\";position:absolute;right:-15px;top:0;transform:skewX(40deg);z-index:-1}.for-inputs TABLE.sortable-table{width:100%;border-collapse:collapse;margin-bottom:10px}.for-inputs TABLE.sortable-table>TBODY>TR>TD,.for-inputs TABLE.sortable-table>THEAD>TR>TH{padding-right:10px;padding-bottom:10px}.for-inputs TABLE.sortable-table>TBODY>TR>TD:last-of-type,.for-inputs TABLE.sortable-table>THEAD>TR>TH:last-of-type{padding-right:0}.for-inputs TABLE.sortable-table>TBODY>TR:first-of-type>TD{padding-top:10px}.for-inputs TABLE.sortable-table>TBODY>TR:last-of-type>TD{padding-bottom:0}.for-inputs.clone TABLE.sortable-table>THEAD>TR>TH,.for-inputs.create TABLE.sortable-table>THEAD>TR>TH,.for-inputs.edit TABLE.sortable-table>THEAD>TR>TH{border-color:transparent}.sortable-table-header{position:relative;z-index:11}.sortable-table-header.titled{display:flex;align-items:center}.fixed-header-actions.button{grid-template-columns:[bulk] auto [middle] min-content [search] minmax(min-content,350px)}.fixed-header-actions{padding:0 0 20px 0;width:100%;z-index:11;background:transparent;display:grid;grid-template-columns:[bulk] auto [middle] min-content [search] minmax(min-content,200px);grid-column-gap:10px}.fixed-header-actions.advanced-filtering{grid-template-columns:[bulk] auto [middle] minmax(min-content,auto) [search] minmax(min-content,auto)}.fixed-header-actions .bulk{grid-area:bulk}.fixed-header-actions .bulk>BUTTON{display:none}.fixed-header-actions .bulk>BUTTON:not(:last-of-type){margin-right:10px}.fixed-header-actions .bulk .action-availability{display:none;margin-left:10px;vertical-align:middle;margin-top:2px}.fixed-header-actions .bulk .dropdown-button li.disabled{color:var(--disabled-text);cursor:not-allowed}.fixed-header-actions .bulk .dropdown-button li.disabled:hover{color:var(--disabled-text);background-color:unset;cursor:not-allowed}.fixed-header-actions .bulk .bulk-action .icon{vertical-align:-10%}.fixed-header-actions .middle{grid-area:middle;white-space:nowrap}.fixed-header-actions .middle .icon.icon-backup.animate{animation-name:spin;animation-duration:1s;animation-iteration-count:infinite;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fixed-header-actions .search{grid-area:search;text-align:right;justify-content:flex-end}.fixed-header-actions .bulk-actions-dropdown{display:none}.fixed-header-actions .bulk-actions-dropdown .dropdown-button{background-color:var(--primary)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button:hover{background-color:var(--primary-hover-bg);color:var(--primary-hover-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button .icon-chevron-down,.fixed-header-actions .bulk-actions-dropdown .dropdown-button>*{color:var(--primary-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button .button-divider{border-color:var(--primary-text)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled{border-color:var(--disabled-bg)}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled .icon-chevron-down{color:var(--disabled-text)!important}.fixed-header-actions .bulk-actions-dropdown .dropdown-button.disabled .button-divider{border-color:var(--disabled-text)}.paging{margin-top:10px;text-align:center}.paging SPAN{display:inline-block;min-width:200px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","export * from \"-!../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.globalrole.vue?vue&type=style&index=0&id=effd72b0&prod&lang=scss&scoped=true&\"","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".labeled-select[data-v-0abf511e]{position:relative;padding-bottom:1px}.labeled-select.no-label.compact-input[data-v-0abf511e] .vs__actions:after{top:-2px}.labeled-select.no-label.compact-input .labeled-container[data-v-0abf511e]{padding:5px 0 1px 10px}.labeled-select.no-label[data-v-0abf511e]:not(.compact-input){height:61px;padding-top:4px}.labeled-select.no-label[data-v-0abf511e]:not(.compact-input) .vs__actions:after{top:0}.labeled-select .icon-spinner[data-v-0abf511e]{position:absolute;left:calc(50% - .5em);top:calc(50% - .5em)}.labeled-select .labeled-container[data-v-0abf511e]{padding:7px 0 0 10px;padding:10px 0 0 10px}.labeled-select .labeled-container label[data-v-0abf511e]{margin:0}.labeled-select .labeled-container .selected[data-v-0abf511e]{background-color:transparent}.labeled-select.view.labeled-input .labeled-container[data-v-0abf511e]{padding:0}.labeled-select.taggable.compact-input[data-v-0abf511e]{min-height:40px}.labeled-select.taggable.compact-input[data-v-0abf511e] .vs__selected-options{padding-top:8px!important}.labeled-select.taggable[data-v-0abf511e]:not(.compact-input){min-height:61px}.labeled-select.taggable[data-v-0abf511e]:not(.compact-input) .vs__selected-options{margin-top:0}.labeled-select[data-v-0abf511e]:not(.taggable) .vs__selected-options .vs__selected{width:100%}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options{padding:3px 0}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected{border-color:var(--accent-btn);height:20px;min-height:unset!important;padding:0 0 0 7px!important}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button{height:20px;line-height:14px}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button:hover{background-color:var(--primary);border-radius:0}.labeled-select.taggable[data-v-0abf511e] .vs__selected-options .vs__selected>button:hover:after{color:#fff}.labeled-select[data-v-0abf511e] .vs__selected-options{margin-top:-5px}.labeled-select[data-v-0abf511e] .v-select:not(.vs--single) .vs__selected-options{padding:5px 0}.labeled-select[data-v-0abf511e] .vs__actions:after{position:relative;top:-10px}.labeled-select[data-v-0abf511e] .v-select.vs--open .vs__dropdown-toggle{color:var(--outline)!important}[data-v-0abf511e] .labeled-select.disabled .labeled-container,[data-v-0abf511e] .labeled-select.disabled .vs__dropdown-toggle,[data-v-0abf511e] .labeled-select.disabled input,[data-v-0abf511e] .labeled-select.disabled label{cursor:not-allowed}.labeled-select .no-label[data-v-0abf511e].v-select:not(.vs--single){min-height:33px}.labeled-select .no-label[data-v-0abf511e].selected{padding-top:8px;padding-bottom:9px;position:relative;max-height:2.3em;overflow:hidden}.labeled-select .no-label[data-v-0abf511e] .vs__selected-options{padding:8px 0 7px 0}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group[data-v-0abf511e]{display:flex}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group>b[data-v-0abf511e]{flex:1}.vs__dropdown-menu .vs__dropdown-option .vs__option-kind-group>div[data-v-0abf511e]{background-color:var(--primary);border-radius:4px;color:var(--primary-text);font-size:12px;height:18px;line-height:18px;margin-top:1px;padding:0 10px}.vs__dropdown-option>.option-kind-highlighted[data-v-0abf511e]{color:var(--dropdown-highlight-text)}.vs__dropdown-option.vs__dropdown-option--highlight>.option-kind-highlighted[data-v-0abf511e],.vs__dropdown-option.vs__dropdown-option--selected>.option-kind-highlighted[data-v-0abf511e],.vs__dropdown-option>.option-kind-highlighted[data-v-0abf511e]:hover{color:var(--dropdown-hover-text)}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n","import { isArray } from '@shell/utils/array';\n\nexport class ClusterNotFoundError extends Error {\n constructor(message) {\n super(message);\n this.name = 'ClusterNotFoundError';\n }\n}\n\nexport class ApiError extends Error {\n constructor(res) {\n super(stringify(res));\n this.status = res._status || 0;\n this.statusText = res._statusText;\n this.headers = res.headers;\n this.url = res._url;\n }\n\n toString() {\n return `[${ this.status } ${ this.statusText }]: ${ this.message }`;\n }\n\n toJSON() {\n return {\n type: 'error',\n status: this.status,\n statusText: this.statusText,\n message: this.statusMessage,\n url: this.url,\n };\n }\n}\n\nexport function stringify(err) {\n let str;\n\n if ( typeof err === 'string' ) {\n str = err;\n } else if ( err && typeof err === 'object' ) {\n if ( err.message ) {\n str = err.message;\n\n if (typeof str === 'string') {\n try {\n const data = JSON.parse(str).data;\n\n if (data) {\n return data;\n }\n } catch {}\n }\n\n if ( err.detail ) {\n if ( str ) {\n str += ` (${ err.detail })`;\n } else {\n str = err.detail;\n }\n }\n } else if ( err.detail ) {\n str = err.detail;\n } else if ( err.url ) {\n str = `from ${ err.url }`;\n }\n }\n\n if (!str) {\n // Good luck...\n str = JSON.stringify(err);\n }\n\n return str;\n}\n\nexport function exceptionToErrorsArray(err) {\n if ( err?.response?.data ) {\n const body = err.response.data;\n\n if ( body && body.message ) {\n return [body.message];\n } else {\n return [err];\n }\n } else if (err.status && err.message) {\n return [err.message];\n } else if ( isArray(err) ) {\n return err;\n } else {\n return [err];\n }\n}\n","\nimport Resource from './resource-class';\n\nexport const BY_TYPE = 'byType';\n\nexport const SELF = '__[[SELF]]__';\n\nexport function classify(ctx, obj, isClone = false) {\n if ( obj instanceof Resource ) {\n return obj;\n }\n\n const customModel = ctx.getters['classify'](obj);\n\n const out = new customModel(obj, ctx, (process.server ? ctx.state.config.namespace : null), isClone);\n\n if ( process.server ) {\n Object.defineProperty(obj, '__rehydrate', {\n value: ctx.state.config.namespace,\n enumerable: true,\n configurable: true\n });\n\n if ( isClone ) {\n Object.defineProperty(obj, '__clone', {\n value: true,\n enumerable: true,\n configurable: true,\n writable: true\n });\n }\n }\n\n return out;\n}\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABjFBMVEVHcEwMMiwJLi4MMiwMMiwNMy0MMysMMiwNNC4MMiwMMiwMMiwMMiwMMiz///8MMix9ko7O1tUQNS+pt7UTODLn6+oNMy2/ycihr63c4eAONC5xh4RHZF/d4uFhenbi5+YrTUdyiIXM1NJsg4AqTEbJ0dAaPjjX3dyRo6C5xMPl6en2+Pjr7u4qS0YgQz0yUk1cdnLAysgPNC6GmZYfQj2TpKF7j4xrgn9vhoJPamZQa2cvUEuQoZ6Nn5xWcW3o7OuKnJk3VlH9/f2ls7Gvu7lMaGO9yMYUODMeQTzN1dTv8fEhRD5Tbmr19/eotrQzU06VpqPI0M/CzMpqgn68x8XS2djs7+5AXlqsubcVOTOerasdQDuYqKYwUUuClpN4jYlje3dUb2tSbWh6jotTbWmXp6X6+/vq7e3P19aSo6H4+fnK0tFBX1oZPTj09fXu8fB8kY41VVBCYFuuu7n+/v40VE9Xcm17kI3W3Nu2wb9IZWC+yMfg5OQ+XFc2VVBZc2+ntbO7xsSZqaY/XVnvk2EjAAAADnRSTlMArxyp8Siw8ifvrq3s8H1RQAIAAAFMSURBVDjLzZNVcwIxEICDH5Vd3B2KFYe6UHd3d3d37x9vrsNAe8Mdb51+D5lJ9stsks0SIpMrkAeFiCFEpkQBlAyRoyDlRCEsSAmW4G8FX2O9qrauwfU9ae/mCE01dsih17Zq0Ar9CUtBiHZ1wE+yVjcdzZOpnOAdBi4DAM4F85SFFQxjUIzIIursDlZYKRoHI8aWTHNUiO/ASfoiepSO/Baqlw2z4WkqbMPpOaauMxir4hjGGb2WCntwhi9PcHV5nAlz0yR7qWCGB3xP+p4DIdwohEKdPcYRdx97TQ8k8DGI+ApxpElaVKqgE0BXeOp9uMfPN8Qb2MIhAAdd9AegWZMXXAdwSx/VfwijiG1qtYlutnnUWk2+Fl6Auw+THiZ4q7m2yx5rfJC/3PPrm6s2w3/4cjxCicapJCJhQUIYweatEBPClEl5G1MiJl+FK1ex1JQuFwAAAABJRU5ErkJggg==\"","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';\nimport { NODE as NODE_TYPE } from '@shell/config/types';\nimport { COLUMN_BREAKPOINTS } from '@shell/components/SortableTable/index.vue';\n\n// Note: 'id' is always the last sort, so you don't have to specify it here.\n\nexport const STATE = {\n name: 'state',\n labelKey: 'tableHeaders.state',\n sort: ['stateSort', 'nameSort'],\n value: 'stateDisplay',\n getValue: (row) => row.stateDisplay,\n width: 100,\n default: 'unknown',\n formatter: 'BadgeStateFormatter',\n};\n\nexport const DOWNLOAD = {\n name: 'download',\n labelKey: 'tableHeaders.download',\n value: 'download',\n canBeVariable: true,\n align: 'right',\n};\n\n// This header is used for nodes in\n// both Cluster Explorer and Cluster Management.\nexport const INTERNAL_EXTERNAL_IP = {\n // @TODO this is called internal/external but displays external/internal (╯°□°)╯︵ ┻━┻\n name: 'internal-external-ip',\n labelKey: 'tableHeaders.internalExternalIp',\n search: ['externalIp', 'internalIp'],\n sort: ['externalIp', 'internalIp'],\n formatter: 'InternalExternalIP'\n};\n\nexport const NAME = {\n name: 'name',\n labelKey: 'tableHeaders.name',\n value: 'nameDisplay',\n getValue: (row) => row.nameDisplay,\n sort: ['nameSort'],\n formatter: 'LinkDetail',\n canBeVariable: true,\n};\n\nexport const LOGGING_OUTPUT_PROVIDERS = {\n name: 'logging-output-providers',\n labelKey: 'tableHeaders.loggingOutputProviders',\n value: 'providersDisplay',\n sort: ['providersSortable'],\n formatter: 'List',\n};\n\nexport const SIMPLE_NAME = {\n name: 'name',\n labelKey: 'tableHeaders.simpleName',\n value: 'name',\n sort: ['name'],\n width: 200,\n canBeVariable: true,\n};\n\nexport const EFFECT = {\n name: 'effect',\n labelKey: 'tableHeaders.effect',\n value: 'effect',\n sort: ['effect'],\n};\n\nexport const STORAGE_CLASS_PROVISIONER = {\n name: 'storage_class_provisioner',\n labelKey: 'tableHeaders.storage_class_provisioner',\n value: 'provisionerDisplay',\n sort: ['provisioner'],\n};\n\nexport const STORAGE_CLASS_DEFAULT = {\n name: 'storage_class_default',\n labelKey: 'tableHeaders.default',\n value: 'isDefault',\n sort: ['isDefault'],\n formatter: 'Checked',\n};\n\nexport const PERSISTENT_VOLUME_SOURCE = {\n name: 'persistent_volume_source',\n labelKey: 'tableHeaders.persistentVolumeSource',\n value: 'source',\n sort: ['provisioner'],\n};\n\nexport const PERSISTENT_VOLUME_CLAIM = {\n name: 'persistent-volume-claim',\n labelKey: 'tableHeaders.persistentVolumeClaim',\n sort: ['nameSort'],\n value: 'claimName',\n formatter: 'LinkDetail',\n formatterOpts: { reference: 'claim.detailLocation' },\n};\n\nexport const OUTPUT = {\n name: 'localOutputRefs',\n labelKey: 'tableHeaders.output',\n value: 'outputs',\n sort: ['outputsSortable'],\n formatter: 'ListLink',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const CONFIGURED_PROVIDERS = {\n name: 'providers',\n labelKey: 'tableHeaders.providers',\n value: 'providersDisplay',\n sort: 'providersSortable',\n formatter: 'List'\n};\n\nexport const CLUSTER_OUTPUT = {\n ...OUTPUT,\n name: 'globalOutputRefs',\n value: 'clusterOutputs',\n sort: ['clusterOutputsSortable'],\n labelKey: 'tableHeaders.clusterOutput',\n};\n\nexport const ID_UNLINKED = {\n name: 'id',\n labelKey: 'tableHeaders.id',\n value: 'id',\n sort: ['id'],\n canBeVariable: true,\n};\n\nexport const NAME_UNLINKED = {\n name: 'name',\n labelKey: 'tableHeaders.nameUnlinked',\n value: 'nameDisplay',\n sort: ['nameSort'],\n canBeVariable: true,\n};\n\nexport const NAMESPACE = {\n name: 'namespace',\n labelKey: 'tableHeaders.namespace',\n value: 'namespace',\n getValue: (row) => row.namespace,\n sort: 'namespace',\n dashIfEmpty: true,\n};\n\nexport const NODE = {\n name: 'node',\n labelKey: 'tableHeaders.node',\n value: 'spec.nodeName',\n getValue: (row) => row.spec?.nodeName,\n sort: 'spec.nodeName',\n formatter: 'LinkName',\n formatterOpts: { type: NODE_TYPE },\n};\n\nexport const NODE_NAME = {\n name: 'nodeName',\n labelKey: 'tableHeaders.nodeName',\n sort: 'name',\n value: 'name',\n getValue: (row) => row.name,\n formatter: 'LinkDetail',\n};\n\nexport const ROLES = {\n name: 'roles',\n labelKey: 'tableHeaders.roles',\n sort: 'roles',\n value: 'roles'\n};\n\nexport const VERSION = {\n name: 'version',\n labelKey: 'tableHeaders.version',\n sort: 'version',\n value: 'version',\n getValue: (row) => row.version\n};\n\nexport const CPU = {\n name: 'cpu',\n labelKey: 'tableHeaders.cpu',\n sort: 'cpuUsage',\n search: false,\n value: 'cpuUsagePercentage',\n formatter: 'PercentageBar',\n width: 120,\n};\n\nexport const RAM = {\n name: 'ram',\n labelKey: 'tableHeaders.ram',\n sort: 'ramUsage',\n search: false,\n value: 'ramUsagePercentage',\n formatter: 'PercentageBar',\n width: 120,\n};\n\nexport const PRINCIPAL = {\n name: 'principal',\n labelKey: 'tableHeaders.name',\n sort: 'principal.loginName',\n value: 'principalId',\n formatter: 'Principal',\n};\n\nexport const PODS = {\n name: 'pods',\n labelKey: 'tableHeaders.pods',\n sort: 'podConsumed',\n search: false,\n value: (row) => row.podConsumedUsage,\n formatter: 'PercentageBar',\n width: 120,\n};\n\nexport const AGE = {\n name: 'age',\n labelKey: 'tableHeaders.age',\n value: 'creationTimestamp',\n getValue: (row) => row.creationTimestamp,\n sort: 'creationTimestamp:desc',\n search: false,\n formatter: 'LiveDate',\n width: 100,\n align: 'left'\n};\n\nexport const AGE_NORMAN = {\n ...AGE,\n getValue: (row) => row.created,\n value: 'created',\n sort: 'created:desc',\n};\n\nexport const CREATION_DATE = {\n name: 'date',\n labelKey: 'tableHeaders.date',\n value: 'metadata.creationTimestamp',\n sort: ['date'],\n formatter: 'Date'\n};\n\nexport const DESCRIPTION = {\n name: 'description',\n labelKey: 'tableHeaders.description',\n align: 'left',\n sort: ['description'],\n width: 300,\n};\n\nexport const DURATION = {\n name: 'duration',\n labelKey: 'tableHeaders.duration',\n value: 'duration.value',\n sort: 'duration.seconds',\n formatter: 'LiveDuration',\n};\n\nexport const IMAGE_NAME = {\n name: 'image',\n labelKey: 'tableHeaders.image',\n value: 'image',\n sort: ['image', 'nameSort'],\n formatter: 'ImageName',\n};\n\nexport const POD_IMAGES = {\n name: 'pod_images',\n labelKey: 'tableHeaders.podImages',\n value: 'imageNames',\n getValue: (row) => row.imageNames,\n sort: 'imageNames',\n // search: 'imageNames',\n formatter: 'PodImages'\n};\n\nexport const POD_RESTARTS = {\n name: 'pod_restarts',\n labelKey: 'tableHeaders.podRestarts',\n formatter: 'LivePodRestarts',\n delayLoading: true,\n value: 'restartCount',\n getValue: (row) => row.restartCount,\n // This column is expensive to compute, so don't make it searchable\n search: false,\n liveUpdates: true\n};\n\nexport const ENDPOINTS = {\n name: 'endpoint',\n labelKey: 'tableHeaders.endpoints',\n value: 'status.endpoints',\n formatter: 'Endpoints',\n width: 60,\n align: 'center',\n};\n\nexport const SCALE = {\n name: 'scale',\n labelKey: 'tableHeaders.scale',\n value: 'scales.desired',\n sort: ['scales.desired', 'nameSort'],\n formatter: 'Scale',\n width: 60,\n align: 'center',\n};\n\nexport const SIMPLE_SCALE = {\n name: 'simple-scale',\n labelKey: 'tableHeaders.simpleScale',\n value: 'scale',\n sort: ['scale']\n};\n\nexport const WEIGHT = {\n name: 'weight',\n labelKey: 'tableHeaders.weight',\n value: 'status.computedWeight',\n sort: 'status.computedWeight',\n formatter: 'Weight',\n width: 60,\n align: 'center',\n};\n\nexport const SUCCESS = {\n name: 'success',\n labelKey: 'tableHeaders.success',\n value: 'success',\n width: 100,\n align: 'right',\n};\n\nexport const REQ_RATE = {\n name: 'req-rate',\n labelKey: 'tableHeaders.reqRate',\n value: 'rps',\n width: 100,\n align: 'right',\n};\n\nexport const P95 = {\n name: 'p95',\n labelKey: 'tableHeaders.p95',\n value: 'p95',\n width: 100,\n align: 'right',\n};\n\nexport const KEYS = {\n name: 'keys',\n labelKey: 'tableHeaders.keys',\n sort: false,\n value: 'keysDisplay',\n};\n\nexport const TARGET_KIND = {\n name: 'target-kind',\n labelKey: 'tableHeaders.targetKind',\n value: 'kindDisplay',\n width: 100,\n};\n\nexport const TARGET = {\n name: 'target',\n labelKey: 'tableHeaders.target',\n value: 'targetDisplay',\n};\n\nexport const USERNAME = {\n name: 'username',\n labelKey: 'tableHeaders.username',\n value: 'username',\n dashIfEmpty: true,\n sort: 'username',\n};\n\nexport const USER_DISPLAY_NAME = {\n name: 'name',\n labelKey: 'tableHeaders.name',\n value: 'nameDisplay',\n sort: ['nameSort'],\n dashIfEmpty: true,\n};\n\nexport const USER_PROVIDER = {\n name: 'provider',\n labelKey: 'tableHeaders.provider',\n value: 'providerDisplay',\n dashIfEmpty: true,\n sort: 'providerDisplay',\n};\n\nexport const USER_ID = {\n name: 'user-id',\n labelKey: 'tableHeaders.userId',\n value: 'id',\n formatter: 'LinkDetail',\n canBeVariable: true,\n sort: 'id',\n};\n\nexport const ADDRESS = {\n name: 'address',\n labelKey: 'tableHeaders.address',\n value: 'address',\n sort: ['address'],\n};\n\nexport const SIMPLE_TYPE = {\n name: 'type',\n labelKey: 'tableHeaders.simpleType',\n value: 'type',\n sort: ['type'],\n width: 175,\n};\n\nexport const IMAGE_SIZE = {\n name: 'sizeBytes',\n labelKey: 'tableHeaders.imageSize',\n value: 'sizeBytes',\n sort: ['sizeBytes'],\n formatter: 'Si'\n};\n\nexport const TYPE = {\n name: 'type',\n labelKey: 'tableHeaders.type',\n value: 'typeDisplay',\n getValue: (row) => row.typeDisplay,\n sort: ['typeDisplay'],\n width: 100,\n};\n\nexport const SUB_TYPE = {\n name: 'subType',\n labelKey: 'tableHeaders.subType',\n value: 'subTypeDisplay',\n sort: ['subTypeDisplay'],\n width: 120,\n};\n\nexport const EVENT_TYPE = {\n name: 'type',\n labelKey: 'tableHeaders.type',\n value: 'eventType',\n sort: 'eventType',\n};\n\nexport const STATUS = {\n name: 'status',\n labelKey: 'tableHeaders.status',\n value: 'status',\n sort: ['status'],\n width: 175\n};\nexport const LAST_SEEN_TIME = {\n name: 'lastSeen',\n labelKey: 'tableHeaders.lastSeen',\n value: 'lastSeen',\n sort: 'lastTimestamp:desc',\n tooltip: 'tableHeaders.lastSeenTooltip'\n};\nexport const LAST_HEARTBEAT_TIME = {\n name: 'lastHeartbeatTime',\n labelKey: 'tableHeaders.lastSeen',\n value: 'lastHeartbeatTime',\n sort: ['lastHeartbeatTime'],\n formatter: 'LiveDate',\n width: 175\n};\nexport const REASON = {\n name: 'reason',\n labelKey: 'tableHeaders.reason',\n value: 'reason',\n sort: ['reason']\n};\nexport const OBJECT = {\n name: 'object',\n labelKey: 'tableHeaders.object',\n value: 'involvedObject',\n sort: ['involvedObject.kind', 'involvedObject.name'],\n canBeVariable: true,\n formatter: 'InvolvedObjectLink',\n};\nexport const RECLAIM_POLICY = {\n name: 'reclaimPolicy',\n labelKey: 'tableHeaders.reclaimPolicy',\n value: 'spec.persistentVolumeReclaimPolicy',\n sort: ['spec.persistentVolumeReclaimPolicy']\n};\nexport const PV_REASON = {\n name: 'pvReason',\n labelKey: 'tableHeaders.reason',\n value: 'status.reason',\n sort: ['status.reason']\n};\n\nexport const MESSAGE = {\n name: 'message',\n labelKey: 'tableHeaders.message',\n value: 'message',\n sort: ['message']\n};\nexport const KEY = {\n name: 'key',\n labelKey: 'tableHeaders.key',\n value: 'key',\n sort: ['key']\n};\nexport const VALUE = {\n name: 'value',\n labelKey: 'tableHeaders.value',\n value: 'value',\n sort: ['value'],\n};\n\nexport const BUILT_IN = {\n name: 'builtIn',\n labelKey: 'tableHeaders.builtIn',\n value: 'builtIn',\n sort: ['builtIn'],\n align: 'center',\n formatter: 'IconIsDefault'\n};\n\nexport const CLUSTER_CREATOR_DEFAULT = {\n name: 'default',\n labelKey: 'tableHeaders.clusterCreatorDefault',\n value: 'default',\n sort: ['Default'],\n align: 'center',\n formatter: 'IconIsDefault'\n};\n\nexport const RBAC_DEFAULT = {\n name: 'default',\n labelKey: 'tableHeaders.default',\n value: 'default',\n formatter: 'Checked',\n sort: ['default']\n};\n\nexport const RBAC_BUILTIN = {\n name: 'builtin',\n labelKey: 'tableHeaders.builtin',\n value: 'builtin',\n formatter: 'Checked',\n sort: ['builtin']\n};\n\nexport const RESOURCE = {\n name: 'resource',\n labelKey: 'tableHeaders.resource',\n value: 'resource',\n sort: ['resourceNames']\n};\n\nexport const API_GROUP = {\n name: 'apigroups',\n labelKey: 'tableHeaders.apiGroup',\n value: 'apiGroups',\n sort: ['apiGroups']\n};\n\nexport const INGRESS_CLASS = {\n name: 'ingressClassName',\n labelKey: 'tableHeaders.ingressClass',\n value: `$['spec']['ingressClassName']`,\n sort: `$['spec']['ingressClassName']`,\n};\n\nexport const INGRESS_DEFAULT_BACKEND = {\n name: 'ingressDefaultBackend',\n labelKey: 'tableHeaders.ingressDefaultBackend',\n value: 'hasDefaultBackend',\n sort: ['hasDefaultBackend:desc'],\n formatter: 'Checked',\n width: 75,\n align: 'center'\n};\n\nexport const INGRESS_TARGET = {\n name: 'ingressTarget',\n labelKey: 'tableHeaders.ingressTarget',\n value: \"$['spec']\",\n formatter: 'IngressTarget',\n sort: \"$['spec']['rules'][0].host\",\n};\n\nexport const SPEC_TYPE = {\n name: 'type',\n labelKey: 'tableHeaders.type',\n value: `$['spec']['type']`,\n sort: `$['spec']['type']`,\n formatter: 'ServiceType',\n};\n\nexport const TARGET_PORT = {\n formatter: 'ServiceTargets',\n labelKey: 'tableHeaders.targetPort',\n name: 'targetPort',\n sort: `$['spec']['targetPort']`,\n value: `$['spec']['targetPort']`,\n};\n\nexport const SELECTOR = {\n formatter: 'KeyValue',\n name: 'selector',\n labelKey: 'tableHeaders.selector',\n value: `$['spec']['selector']`,\n sort: `$['spec']['selector']`,\n};\n\nexport const CHART = {\n name: 'chart',\n labelKey: 'tableHeaders.chart',\n value: 'chartDisplay',\n sort: ['chartDisplay', 'versionSort'],\n};\n\nexport const CHART_UPGRADE = {\n name: 'upgrade',\n labelKey: 'tableHeaders.upgrade',\n value: 'upgradeAvailable',\n sort: 'upgradeAvailableSort:desc',\n dashIfEmpty: true,\n};\n\nexport const RESOURCES = {\n name: 'resources',\n labelKey: 'tableHeaders.resources',\n value: 'spec.resources.length',\n sort: 'spec.resources.length',\n width: 100,\n};\n\nexport const URL = {\n name: 'url',\n labelKey: 'tableHeaders.url',\n value: 'spec.url',\n sort: 'spec.url',\n};\n\nexport const LAST_UPDATED = {\n name: 'lastUpdated',\n labelKey: 'tableHeaders.lastUpdated',\n value: 'lastTransitionTime',\n formatter: 'LiveDate',\n formatterOpts: { addSuffix: true },\n sort: ['lastTransitionTime']\n};\n\nexport const WORKSPACE = {\n name: 'workspace',\n label: 'Workspace',\n value: 'metadata.namespace',\n sort: ['metadata.namespace', 'nameSort'],\n};\n\nexport const WORKLOAD_IMAGES = {\n ...POD_IMAGES,\n value: '',\n breakpoint: COLUMN_BREAKPOINTS.LAPTOP\n};\n\nexport const WORKLOAD_ENDPOINTS = {\n name: 'workloadEndpoints',\n labelKey: 'tableHeaders.endpoints',\n value: `$['metadata']['annotations']['${ CATTLE_PUBLIC_ENDPOINTS }']`,\n getValue: (row) => row.metadata?.annotations?.[CATTLE_PUBLIC_ENDPOINTS],\n formatter: 'Endpoints',\n dashIfEmpty: true,\n breakpoint: COLUMN_BREAKPOINTS.DESKTOP,\n maxPageSize: 25, // Hide this column when the page size is bigger than 25\n};\n\nexport const WORKLOAD_HEALTH_SCALE = {\n name: 'workloadHealthScale',\n labelKey: 'tableHeaders.health',\n formatter: 'WorkloadHealthScale',\n getValue: () => undefined,\n width: 150,\n skipSelect: true,\n delayLoading: true,\n // This column is expensive to compute, so don't make it searchable\n search: false,\n liveUpdates: true,\n};\n\nexport const FLEET_SUMMARY = {\n name: 'summary',\n labelKey: 'tableHeaders.resources',\n value: 'status.resourceCounts',\n sort: false,\n search: false,\n formatter: 'FleetSummaryGraph',\n align: 'center',\n width: 100,\n};\n\nexport const APP_SUMMARY = {\n name: 'summary',\n labelKey: 'tableHeaders.resources',\n value: 'deployedResources.length',\n sort: false,\n search: false,\n formatter: 'AppSummaryGraph',\n align: 'center',\n width: 100,\n};\n\nexport const CONSTRAINT_VIOLATION_CONSTRAINT_LINK = {\n name: 'Constraint',\n labelKey: 'tableHeaders.constraint',\n value: 'constraintLink',\n sort: `constraintLink.text`,\n formatter: 'Link',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const CONSTRAINT_VIOLATION_RESOURCE_LINK = {\n name: 'Name',\n labelKey: 'tableHeaders.name',\n value: 'resourceLink',\n sort: `resourceLink.text`,\n search: `resourceLink.text`,\n formatter: 'Link',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const CONSTRAINT_VIOLATION_TYPE = {\n name: 'Type',\n labelKey: 'tableHeaders.type',\n value: `kind`,\n sort: `kind`\n};\n\nexport const CONSTRAINT_VIOLATION_NAMESPACE = {\n name: 'Namespace',\n labelKey: 'tableHeaders.namespace',\n value: `namespace`,\n sort: `namespace`,\n search: `namespace`,\n};\n\nexport const CONSTRAINT_VIOLATION_MESSAGE = {\n name: 'Message',\n labelKey: 'tableHeaders.message',\n value: `message`,\n sort: `message`\n};\n\nexport const CONSTRAINT_VIOLATION_TEMPLATE_LINK = {\n name: 'TemplateLink',\n labelKey: 'tableHeaders.template',\n value: `templateLink`,\n sort: `templateLink.text`,\n formatter: 'Link',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const CONSTRAINT_VIOLATION_COUNT = {\n name: 'Count',\n labelKey: 'tableHeaders.count',\n value: `count`,\n sort: `count`,\n formatter: 'QualityText',\n formatterOpts: {\n qualityFn(value) {\n if (value <= 10) {\n return 'success';\n }\n\n if (value <= 20) {\n return 'warning';\n }\n\n return 'error';\n }\n }\n};\n\nexport const RECEIVER_PROVIDERS = {\n name: 'receiver-providers',\n label: 'Configured Providers',\n value: 'receiverTypes',\n sort: 'receiverTypes',\n formatter: 'List',\n};\n\nexport const CONFIGURED_RECEIVER = {\n name: 'receiver',\n label: 'Configured Receiver',\n value: 'receiverLink',\n sort: 'receiverLink.text',\n formatter: 'Link',\n formatterOpts: { options: { internal: true } },\n};\n\nexport const GROUP_NAME = {\n name: 'group-name',\n labelKey: 'tableHeaders.groupName',\n value: 'id',\n sort: ['name'],\n search: ['name'],\n formatter: 'Principal',\n width: 350\n};\n\nexport const GROUP_ROLE_NAME = {\n name: 'group-role-names',\n labelKey: 'tableHeaders.groupRoleNames',\n value: 'id',\n formatter: 'PrincipalGroupBindings',\n};\n\nexport const HPA_REFERENCE = {\n name: 'reference',\n labelKey: 'tableHeaders.hpaReference',\n value: 'spec.scaleTargetRef.name',\n sort: 'spec.scaleTargetRef.name',\n};\n\nexport const MIN_REPLICA = {\n name: 'minimum-replica',\n labelKey: 'tableHeaders.minReplicas',\n value: 'spec.minReplicas',\n sort: 'spec.minReplicas',\n};\n\nexport const MAX_REPLICA = {\n name: 'maximum-replica',\n labelKey: 'tableHeaders.maxReplicas',\n value: 'spec.maxReplicas',\n sort: 'spec.maxReplicas',\n};\n\nexport const CURRENT_REPLICA = {\n name: 'current-replica',\n labelKey: 'tableHeaders.currentReplicas',\n value: 'status.currentReplicas',\n sort: 'status.currentReplicas',\n};\n\nexport const EXPIRY_STATE = {\n ...STATE,\n value: '$',\n formatter: 'LiveExpiryBadgeState',\n};\n\nexport const ACCESS_KEY = {\n name: 'id',\n labelKey: 'tableHeaders.accessKey',\n align: 'left',\n sort: ['name'],\n width: 200,\n};\n\nexport const SCOPE = {\n name: 'scope',\n value: 'clusterName',\n labelKey: 'tableHeaders.scope',\n dashIfEmpty: true,\n align: 'left',\n sort: ['scope'],\n width: 100,\n};\n\nexport const SCOPE_NORMAN = {\n ...SCOPE,\n value: 'clusterId',\n sort: ['clusterId'],\n};\n\nexport const EXPIRES = {\n name: 'expires',\n value: 'expiresAt',\n labelKey: 'tableHeaders.expires',\n align: 'left',\n sort: ['expiresAt'],\n width: 200,\n formatter: 'LiveExpiryDate'\n};\n\nexport const RESTART = {\n name: 'restart',\n labelKey: 'tableHeaders.restart',\n value: 'restartRequired',\n sort: ['restartRequired', 'nameSort'],\n formatter: 'Checked',\n width: 75,\n align: 'center'\n};\n\nexport const ROLE = {\n name: 'role',\n value: 'roleDisplay',\n labelKey: 'tableHeaders.role',\n};\n\nexport const FEATURE_DESCRIPTION = {\n name: 'description',\n labelKey: 'tableHeaders.description',\n value: 'status.description',\n align: 'left',\n sort: ['status.description'],\n formatter: 'Translate',\n formatterOpts: { prefix: 'featureFlags.description' },\n};\n\nexport const STATE_NORMAN = {\n name: 'state',\n labelKey: 'tableHeaders.state',\n sort: ['stateSort', 'nameSort'],\n value: 'stateDisplay',\n width: 100,\n default: 'unknown',\n formatter: 'BadgeStateFormatter',\n};\n\nexport const KUBE_NODE_OS = {\n name: 'operating-system',\n labelKey: 'tableHeaders.operatingSystem',\n value: 'status.nodeInfo.operatingSystem',\n sort: ['status.nodeInfo.operatingSystem'],\n formatter: 'Capitalize'\n};\n\nexport const MACHINE_NODE_OS = {\n name: 'operating-system',\n labelKey: 'tableHeaders.operatingSystem',\n value: 'operatingSystem',\n sort: ['operatingSystem'],\n formatter: 'Capitalize',\n dashIfEmpty: true,\n};\n\nexport const MANAGEMENT_NODE_OS = {\n name: 'operating-system',\n labelKey: 'tableHeaders.operatingSystem',\n value: 'status.internalNodeStatus.nodeInfo.operatingSystem',\n sort: ['status.internalNodeStatus.nodeInfo.operatingSystem'],\n formatter: 'Capitalize',\n dashIfEmpty: true,\n};\n\n// FLEET\n\nexport const FLEET_BUNDLE_LAST_UPDATED = {\n name: 'lastUpdated',\n labelKey: 'tableHeaders.lastUpdated',\n value: 'lastUpdateTime',\n formatter: 'LiveDate',\n formatterOpts: { addSuffix: true },\n sort: ['lastUpdateTime']\n};\n\nexport const FLEET_BUNDLE_TYPE = {\n name: 'bundleType',\n labelKey: 'tableHeaders.fleetBundleType',\n value: 'bundleType',\n sort: ['bundleType'],\n width: 100,\n};\n\nexport const UI_PLUGIN_CATALOG = [\n {\n name: 'state',\n labelKey: 'tableHeaders.state',\n sort: ['stateSort', 'nameSort'],\n value: 'state',\n width: 100,\n default: 'unknown',\n formatter: 'BadgeStateFormatter',\n formatterOpts: { arbitrary: true }\n },\n {\n name: 'name',\n labelKey: 'tableHeaders.name',\n value: 'name',\n sort: ['nameSort'],\n formatter: 'LinkDetail'\n },\n {\n name: 'image',\n sort: ['image'],\n labelKey: 'plugins.manageCatalog.headers.image.label',\n value: 'deploymentImage'\n },\n {\n name: 'cacheState',\n sort: ['cacheState'],\n labelKey: 'plugins.manageCatalog.headers.cacheState.label',\n value: 'cacheState',\n formatter: 'ExtensionCache'\n }\n];\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".labeled-tooltip{position:absolute;width:100%;height:100%;left:0;top:0}.labeled-tooltip.hoverable{height:0%}.labeled-tooltip .status-icon{position:absolute;right:30px;top:18px;z-index:3}.labeled-tooltip .tooltip{position:absolute;width:calc(100% + 2px);top:calc(100% + 6px)}.labeled-tooltip .tooltip .tooltip-arrow{right:30px}.labeled-tooltip .tooltip .tooltip-inner{padding:10px}.labeled-tooltip.error .status-icon{color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-inner{color:var(--input-bg);background:var(--error);border-color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-arrow{border-bottom-color:var(--error)}.labeled-tooltip.error .tooltip .tooltip-arrow:after{border:none}.labeled-tooltip.error .status-icon{top:7px;right:5px}.labeled-tooltip.warning .status-icon{color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-inner{color:var(--input-bg);background:var(--warning);border-color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-arrow{border-bottom-color:var(--warning)}.labeled-tooltip.warning .tooltip .tooltip-arrow:after{border:none}.labeled-tooltip.success .status-icon{color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-inner{color:var(--input-bg);background:var(--success);border-color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-arrow{border-bottom-color:var(--success)}.labeled-tooltip.success .tooltip .tooltip-arrow:after{border:none}.tooltip .tooltip-inner>pre{padding:2px;vertical-align:middle}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","export * from \"-!../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ButtonDropdown.vue?vue&type=style&index=0&id=4b526572&prod&lang=scss&scoped=true&\"","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.project.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.project.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./management.cattle.io.project.vue?vue&type=template&id=3a26ac99&scoped=true&\"\nimport script from \"./management.cattle.io.project.vue?vue&type=script&lang=js&\"\nexport * from \"./management.cattle.io.project.vue?vue&type=script&lang=js&\"\nimport style0 from \"./management.cattle.io.project.vue?vue&type=style&index=0&id=3a26ac99&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3a26ac99\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Card.vue?vue&type=style&index=0&id=6b7b8e40&prod&lang=scss&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]{background-color:transparent;border:none;font-size:18px}.table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]:focus,.table-options-group .table-options-btn.role-multi-action[data-v-96d8a090]:hover{background-color:var(--accent-btn);box-shadow:none}.table-options-group .table-options-container[data-v-96d8a090]{width:350px;border:1px solid var(--primary);background-color:var(--body-bg);padding:20px;z-index:1}.table-options-group .table-options-container .table-options-grouping[data-v-96d8a090]{display:flex;align-items:center;margin-bottom:20px}.table-options-group .table-options-container .table-options-grouping span[data-v-96d8a090]{white-space:nowrap;margin-right:10px}.table-options-group .table-options-container ul[data-v-96d8a090]{list-style:none;margin:0;padding:0;max-height:200px;overflow-y:auto}.table-options-group .table-options-container ul li[data-v-96d8a090]{margin:0;padding:0}.table-options-group .table-options-container ul li.visible[data-v-96d8a090]{margin:0 0 10px 0}.sortable>SPAN[data-v-96d8a090]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.sortable>SPAN[data-v-96d8a090]:active,.sortable>SPAN[data-v-96d8a090]:hover{text-decoration:underline;color:var(--body-text)}thead tr[data-v-96d8a090]{background-color:var(--sortable-table-header-bg);color:var(--body-text);text-align:left}thead tr[data-v-96d8a090]:not(.loading){border-bottom:1px solid var(--sortable-table-top-divider)}th[data-v-96d8a090]{padding:8px 5px;font-weight:400;border:0;color:var(--body-text)}th .table-header-container[data-v-96d8a090]{display:inherit}th .table-header-container>span[data-v-96d8a090]{display:flex;align-items:center}th .table-header-container.not-filterable[data-v-96d8a090],th .table-header-container.not-filterable .icon-stack[data-v-96d8a090]{margin-top:-2px}th .table-header-container .not-filter-icon[data-v-96d8a090]{font-size:16px;color:var(--primary);vertical-align:super}th[data-v-96d8a090]:first-child{padding-left:10px}th[data-v-96d8a090]:last-child{padding-right:10px}th:not(.sortable)>SPAN[data-v-96d8a090]{display:block;margin-bottom:2px}th A[data-v-96d8a090]{color:var(--body-text)}@media only screen and (max-width:480px){th.desktop[data-v-96d8a090],th.laptop[data-v-96d8a090],th.tablet[data-v-96d8a090]{display:none}}@media only screen and (max-width:992px){th.desktop[data-v-96d8a090],th.laptop[data-v-96d8a090]{display:none}}@media only screen and (max-width:1281px){th.desktop[data-v-96d8a090]{display:none}}.icon-stack[data-v-96d8a090]{width:12px}.icon-sort.faded[data-v-96d8a090]{opacity:.3}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"mt-10\"},[_c('div',{staticClass:\"mb-30\"},[_vm._v(\" \"+_vm._s(_vm.t('promptRemove.attemptingToRemove', { type: _vm.type }))+\" \"),_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.podNames),expression:\"podNames\"}],staticClass:\"machine-name\"})]),_c('div',{staticClass:\"mb-30\"},[_c('Checkbox',{attrs:{\"label\":_vm.t('promptForceRemove.forceDelete')},model:{value:(_vm.forceDelete),callback:function ($$v) {_vm.forceDelete=$$v},expression:\"forceDelete\"}})],1),_c('Banner',{attrs:{\"color\":\"warning\",\"label-key\":\"promptForceRemove.podRemoveWarning\"}}),_vm._l((_vm.errors),function(error,i){return _c('Banner',{key:i,attrs:{\"color\":\"error\",\"label\":error}})})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"banner\",class:{\n [_vm.color]: true,\n }},[(_vm.icon)?_c('div',{staticClass:\"banner__icon\",attrs:{\"data-testid\":\"banner-icon\"}},[_c('i',{staticClass:\"icon icon-2x\",class:_vm.icon})]):_vm._e(),_c('div',{staticClass:\"banner__content\",class:{\n closable: _vm.closable,\n stacked: _vm.stacked,\n icon: _vm.icon\n },attrs:{\"data-testid\":\"banner-content\"}},[_vm._t(\"default\",function(){return [(_vm.labelKey)?_c('t',{attrs:{\"k\":_vm.labelKey,\"raw\":true}}):(_vm.messageLabel)?_c('span',[_vm._v(_vm._s(_vm.messageLabel))]):_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.nlToBr(_vm.label)),expression:\"nlToBr(label)\"}]})]}),(_vm.closable)?_c('div',{staticClass:\"banner__content__closer\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('i',{staticClass:\"icon icon-close closer-icon\",attrs:{\"data-testid\":\"banner-close\"}})]):_vm._e()],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport Vue from 'vue';\nimport { nlToBr } from '@shell/utils/string';\nimport { stringify } from '@shell/utils/error';\n\nexport default Vue.extend({\n props: {\n /**\n * A color class that represents the color of the banner.\n * @values primary, secondary, success, warning, error, info\n */\n color: {\n type: String,\n default: 'secondary'\n },\n /**\n * The label to display as the banner's default content.\n */\n label: {\n type: [String, Error, Object],\n default: null\n },\n /**\n * The i18n key for the label to display as the banner's default content.\n */\n labelKey: {\n type: String,\n default: null\n },\n /**\n * Add icon for the banner\n */\n icon: {\n type: String,\n default: null\n },\n /**\n * Toggles the banner's close button.\n */\n closable: {\n type: Boolean,\n default: false\n },\n /**\n * Toggles the stacked class for the banner.\n */\n stacked: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n /**\n * Return message text as label.\n */\n messageLabel(): string | void {\n return !(typeof this.label === 'string') ? stringify(this.label) : undefined;\n }\n },\n methods: { nlToBr }\n});\n","import mod from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Banner.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../cache-loader/dist/cjs.js??ref--15-0!../../../../thread-loader/dist/cjs.js!../../../../babel-loader/lib/index.js!../../../../ts-loader/index.js??ref--15-3!../../../../cache-loader/dist/cjs.js??ref--2-0!../../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./Banner.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Banner.vue?vue&type=template&id=02d86e5d&scoped=true&\"\nimport script from \"./Banner.vue?vue&type=script&lang=ts&\"\nexport * from \"./Banner.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Banner.vue?vue&type=style&index=0&id=02d86e5d&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"02d86e5d\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./pod.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./pod.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./pod.vue?vue&type=template&id=db441fb2&scoped=true&\"\nimport script from \"./pod.vue?vue&type=script&lang=js&\"\nexport * from \"./pod.vue?vue&type=script&lang=js&\"\nimport style0 from \"./pod.vue?vue&type=style&index=0&id=db441fb2&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"db441fb2\",\n null\n \n)\n\nexport default component.exports","module.exports = __WEBPACK_EXTERNAL_MODULE__5877__;","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".card-container{border-radius:var(--border-radius);display:flex;flex-basis:40%;margin:10px;min-height:100px;padding:10px;box-shadow:0 0 20px var(--shadow)}.card-container.highlight-border{border-left:5px solid var(--primary)}.card-container:not(.top){align-items:top;flex-direction:row;justify-content:start}.card-container .card-wrap{width:100%}.card-container .card-body{color:var(--input-label);display:flex;flex-direction:column;justify-content:center}.card-container .card-actions{align-self:end;display:flex;padding-top:20px}.card-container .card-title{align-items:center;display:flex;width:100%}.card-container .card-title h5{margin:0}.card-container .card-title .flex-right{margin-left:auto}.card-container.card-sticky{overflow:hidden}.card-container.card-sticky .card-wrap{display:flex;flex-direction:column}.card-container.card-sticky .card-wrap .card-body{justify-content:flex-start;overflow:scroll}.card-container.card-sticky .card-wrap>*{flex:0}.card-container.card-sticky .card-wrap .card-body{flex:1}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseDifference;\n","module.exports = __webpack_public_path__ + \"fonts/icons.068811ed.ttf\";","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","import { ANNOTATIONS_TO_IGNORE_REGEX, LABELS_TO_IGNORE_REGEX } from '@shell/config/labels-annotations';\nimport omitBy from 'lodash/omitBy';\nimport pickBy from 'lodash/pickBy';\nimport Vue from 'vue';\nimport { matchesSomeRegex } from '@shell/utils/string';\nimport Resource from '@shell/plugins/dashboard-store/resource-class';\n\n// these are defined elsewhere in Steve models and will cause the error \"Cannot set property of [object Object] which has only a getter\" if defined at top-level\nexport function cleanHybridResources(data) {\n const potentialNormanHoldovers = ['state', 'name', 'description', 'labels', 'annotations'];\n\n potentialNormanHoldovers.forEach((key) => delete data[key]);\n\n return data;\n}\n\nexport default class HybridModel extends Resource {\n constructor(data, ctx, rehydrateNamespace = null, setClone = false) {\n const cleanedData = cleanHybridResources(data);\n\n super(cleanedData, ctx, rehydrateNamespace, setClone);\n }\n\n get labels() {\n const all = this.metadata?.labels || {};\n\n return omitBy(all, (value, key) => {\n return matchesSomeRegex(key, LABELS_TO_IGNORE_REGEX);\n });\n }\n\n setLabels(val) {\n if ( !this.metadata ) {\n this.metadata = {};\n }\n\n const all = this.metadata.labels || {};\n const wasIgnored = pickBy(all, (value, key) => {\n return matchesSomeRegex(key, LABELS_TO_IGNORE_REGEX);\n });\n\n Vue.set(this.metadata, 'labels', { ...wasIgnored, ...val });\n }\n\n setLabel(key, val) {\n if ( val ) {\n if ( !this.metadata ) {\n this.metadata = {};\n }\n\n if ( !this.metadata.labels ) {\n this.metadata.labels = {};\n }\n\n Vue.set(this.metadata.labels, key, val);\n } else if ( this.metadata?.labels ) {\n Vue.set(this.metadata.labels, key, undefined);\n delete this.metadata.labels[key];\n }\n }\n\n get annotations() {\n const all = this.metadata?.annotations || {};\n\n return omitBy(all, (value, key) => {\n return matchesSomeRegex(key, ANNOTATIONS_TO_IGNORE_REGEX);\n });\n }\n\n setAnnotations(val) {\n if ( !this.metadata ) {\n this.metadata = {};\n }\n\n const all = this.metadata.annotations || {};\n const wasIgnored = pickBy(all, (value, key) => {\n return matchesSomeRegex(key, ANNOTATIONS_TO_IGNORE_REGEX);\n });\n\n Vue.set(this.metadata, 'annotations', { ...wasIgnored, ...val });\n }\n\n setAnnotation(key, val) {\n if ( val ) {\n if ( !this.metadata ) {\n this.metadata = {};\n }\n\n if ( !this.metadata.annotations ) {\n this.metadata.annotations = {};\n }\n\n Vue.set(this.metadata.annotations, key, val);\n } else if ( this.metadata?.annotations ) {\n Vue.set(this.metadata.annotations, key, undefined);\n delete this.metadata.annotations[key];\n }\n }\n\n get state() {\n return this.stateObj?.name || 'unknown';\n }\n}\n","import { DESCRIPTION } from '@shell/config/labels-annotations';\nimport HybridModel from './hybrid-class';\n\nexport default class SteveModel extends HybridModel {\n get name() {\n return this.metadata?.name || this._name;\n }\n\n get namespace() {\n return this.metadata?.namespace;\n }\n\n get description() {\n return this.metadata?.annotations?.[DESCRIPTION] || this.spec?.description || this._description;\n }\n\n /**\n * Set description based on the type of model available with private fallback\n */\n set description(value) {\n if (this.metadata?.annotations) {\n this.metadata.annotations[DESCRIPTION] = value;\n }\n\n if (this.spec) {\n this.spec.description = value;\n }\n\n this._description = value;\n }\n}\n","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n url = url && url.__esModule ? url.default : url;\n\n if (typeof url !== 'string') {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^['\"].*['\"]$/.test(url)) {\n // eslint-disable-next-line no-param-reassign\n url = url.slice(1, -1);\n }\n\n if (options.hash) {\n // eslint-disable-next-line no-param-reassign\n url += options.hash;\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n'), \"\\\"\");\n }\n\n return url;\n};","export const CSRF = 'CSRF';\nexport const USERNAME = 'R_USERNAME';\nexport const LOCALE = 'R_LOCALE';\nexport const REDIRECTED = 'R_REDIRECTED';\n","var baseFor = require('./_baseFor'),\n castFunction = require('./_castFunction'),\n keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","export type GC_PREFERENCES = {\n enabled: boolean,\n enabledInterval: boolean,\n interval: number,\n enabledOnNavigate: boolean,\n ageThreshold: number,\n countThreshold: number\n}\n\nexport const GC_DEFAULTS: GC_PREFERENCES = {\n enabled: false,\n\n // When GC Runs\n enabledInterval: true,\n interval: 1 * 60 * 5,\n enabledOnNavigate: true,\n\n // How GC handles resources when GC'ing\n ageThreshold: 1 * 60 * 2,\n countThreshold: 500,\n};\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.globalrole.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.globalrole.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./management.cattle.io.globalrole.vue?vue&type=template&id=effd72b0&scoped=true&\"\nimport script from \"./management.cattle.io.globalrole.vue?vue&type=script&lang=js&\"\nexport * from \"./management.cattle.io.globalrole.vue?vue&type=script&lang=js&\"\nimport style0 from \"./management.cattle.io.globalrole.vue?vue&type=style&index=0&id=effd72b0&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"effd72b0\",\n null\n \n)\n\nexport default component.exports","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","export * from \"-!../../../vue-style-loader/index.js??ref--10-oneOf-1-0!../../../@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../sass-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionDropdown.vue?vue&type=style&index=0&id=70f0de36&prod&lang=scss&\"","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","// This file has 2 sections that control getting and using specializations of particular types\n// over the generic info that is specified or generated from schemas.\n//\n// 1) Getting info about types\n//\n// labelFor(schema, count) Get the display label for a schema. Count is (in English) 1 or not-1 for pluralizing\n// groupLabelFor(schema) Get the label for the API group of this schema's type\n// isIgnored(schema) Returns true if this type should be hidden from the tree\n// groupForBasicType(schema) Returns the group a type should be shown in basic view, or false-y if it shouldn't be shown.\n// typeWeightFor(type, forBasic) Get the weight value for a particular type label\n// groupWeightFor(group, forBasic) Get the weight value for a particular group\n// headersFor(schema) Returns the column definitions for a type to give to SortableTable\n// activeProducts() Returns the list of products that are installed and should be shown\n//\n// 2) Detecting and using custom list/detail/edit/header components\n//\n// hasCustomList(type) Does type have a custom list implementation?\n// hasCustomDetail(type[,subType]) Does type have a custom detail implementation?\n// hasCustomEdit(type[,subType]) Does type have a custom edit implementation?\n// importList(type) Returns a promise that resolves to the list component for type\n// importDetail(type[,subType]) Returns a promise that resolves to the detail component for type\n// importEdit(type[,subType]) Returns a promise that resolves to the edit component for type\n// optionsFor(schemaOrType) Return the configured options for a type (from configureType)\n//\n// 3) Changing specialization info about a type\n// For all:\n// let { thingYouWant } = DSL(instanceOfTheStore, 'product');\n//\n// product( Add a product into the nav\n// removable, -- Is the product removable (true) or built-in (false).\n// weight, -- Sort order and divider sections in the product menu. 3=global (fleet, ecm), 2=always on (apps, explorer) 1=other\n// showClusterSwitcher, -- Show the cluster switcher in the header (default true)\n// showNamespaceFilter, -- Show the namespace filter in the header (default false)\n// showWorkspaceSwitcher, -- Show the workspace switcher in the header (conflicts with namespace) (default false)\n// ifHave, -- Show this product only if the given capability is available\n// ifHaveGroup, -- Show this product only if the given group exists in the store [inStore]\n// ifHaveType, -- Show this product only if the given type exists in the store [inStore], This can also be specified as an object { type: TYPE, store: 'management' } if the type isn't in the current [inStore]\n// ifHaveVerb, -- In combination with ifHaveTYpe, show it only if the type also has this collectionMethod\n// inStore, -- Which store to look at for if* above and the left-nav, defaults to \"cluster\"\n// inExplorer, -- Determines if the product is to be scoped to the explorer\n// public, -- If true, show to all users. If false, only show when the Developer Tools pref is on (default true)\n// category, -- Group to show the product in for the nav hamburger menu\n// typeStoreMap, -- An object mapping types to the store that should be used to retrieve information about the type\n// hideSystemResources -- Hide resources in namespaces where namespace.isSystem === true, or a namespace managed by fleet (per its annotation) and hide those namespaces from ns/project list and nsfilter (default false)\n// hideNamespaceLocation -- Hide the namespace link in the ResourceDetail masthead of namespaced resources and hide the ExplorerProjectsNamespaces namespace link (default false)\n// })\n//\n// externalLink(stringOrFn) The product has an external page (function gets context object\n//\n// virtualType(obj) Add an item to the tree that goes to a route instead of an actual type.\n// -- obj can contain anything in the objects getTree returns.\n// -- obj must have a `name` that is unique among all virtual types.\n// -- `cluster` is automatically added to route.params if it exists.\n//\n// spoofedType(obj) Create a fake type that can be treated like a normal type\n//\n// basicType( Mark type(s) as always shown in the top of the nav\n// type(s), -- Type name or array of type names\n// group -- Group to show the type(s) under; false-y for top-level.\n// )\n// basicType( Mark all types in group as always shown in the top of the nav\n// group, -- Group to show\n// asLabel -- Label to display the group as; false-y for top-level.\n// )\n// ignoreType(type) Never show type\n// weightType( Set the weight (sorting) order of one or more types\n// typeOrArrayOfTypes,\n// weight, -- Higher numbers are shown first/higher up on the nav tree\n// forBasic -- Apply to basic type instead of regular type tree\n// )\n// mapType( Remap a type id to a display name\n// matchRegexOrString, -- Type to match, or regex that matches types\n// replacementStringOrFn, -- String to replace the type with, or\n// -- sync function: (type, capturedString, schemaObj => { return 'new-type'; }\n// mapWeight, -- Priority for apply this mapping (higher numbers applied first)\n// continueOnMatch -- If true, continue applying to hit other rules that might match the new type.\n// )\n// moveType( Change the group a type is in\n// matchRegexOrString, -- Type to match, or regex that matches types\n// newGroup, -- Group to move the type into\n// mapWeight, -- Priority for apply this mapping (higher numbers applied first)\n// )\n// componentForType( Map matching types to a single component name\n// ( (this is helpful if multiple types should be rendered by a single component)\n// matchRegexOrString, -- Type to match, or regex that matches types\n// replacementString -- String to replace the type with\n// )\n// configureType( Display options for a particular type\n// type, -- Type to apply to\n// options -- Object of options. Defaults/Supported: {\n// isCreatable: true, -- If false, disable create even if schema says it's allowed\n// isEditable: true, -- Ditto, for edit\n// isRemovable: true, -- Ditto, for remove/delete\n// showState: true, -- If false, hide state in columns and masthead\n// showAge: true, -- If false, hide age in columns and masthead\n// showConfigView: true -- If false, hide masthead config button in view mode\n// showListMasthead: true, -- If false, hide masthead in list view\n// canYaml: true,\n// resource: undefined -- Use this resource in ResourceDetails instead\n// resourceDetail: undefined -- Use this resource specifically for ResourceDetail's detail component\n// resourceEdit: undefined -- Use this resource specifically for ResourceDetail's edit component\n// depaginate: undefined -- Use this to depaginate requests for this type\n// resourceEditMasthead: true -- Show the Masthead in the edit resource component\n// customRoute: undefined,\n// hasGraph: undefined -- If true, render ForceDirectedTreeChart graph (ATTENTION: option graphConfig is needed also!!!)\n// graphConfig: undefined -- Use this to pass along the graph configuration\n// notFilterNamespace: undefined -- Define namespaces that do not need to be filtered\n// localOnly: False -- Hide this type from the nav/search bar on downstream clusters\n// }\n// )\n// ignoreGroup(group): Never show group or any types in it\n// weightGroup( Set the weight (sorting) of one or more groups\n// groupOrArrayOfGroups, -- see weightType...\n// weight\n// )\n// setGroupDefaultType( Set the default child type to show when the group is expanded\n// groupOrArrayOfGroups, -- see setGroupDefaultType...\n// defaultType\n// )\n// mapGroup( Remap a group name to a display name\n// matchRegexOrString, -- see mapType...\n// replacementString,\n// mapWeight,\n// continueOnMatch\n// )\nimport { AGE, NAME, NAMESPACE as NAMESPACE_COL, STATE } from '@shell/config/table-headers';\nimport {\n CATALOG,\n COUNT,\n SCHEMA,\n MANAGEMENT,\n NAMESPACE\n} from '@shell/config/types';\nimport { VIEW_IN_API, EXPANDED_GROUPS, FAVORITE_TYPES } from '@shell/store/prefs';\nimport {\n addObject, findBy, insertAt, isArray, removeObject, filterBy\n} from '@shell/utils/array';\nimport { clone, get } from '@shell/utils/object';\nimport {\n ensureRegex, escapeHtml, escapeRegex, ucFirst, pluralize\n} from '@shell/utils/string';\nimport {\n importChart, importList, importDetail, importEdit, listProducts, loadProduct, importCustomPromptRemove, resolveList, resolveEdit, resolveWindowComponent, importWindowComponent, importLogin, resolveChart, resolveDetail, importDialog, importMachineConfig, resolveMachineConfigComponent, resolveCloudCredentialComponent, importCloudCredential\n} from '@shell/utils/dynamic-importer';\n\nimport { NAME as EXPLORER } from '@shell/config/product/explorer';\nimport isObject from 'lodash/isObject';\nimport { normalizeType } from '@shell/plugins/dashboard-store/normalize';\nimport { sortBy } from '@shell/utils/sort';\n\nimport { haveV1Monitoring, haveV2Monitoring } from '@shell/utils/monitoring';\nimport { NEU_VECTOR_NAMESPACE } from '@shell/config/product/neuvector';\n\nexport const NAMESPACED = 'namespaced';\nexport const CLUSTER_LEVEL = 'cluster';\nexport const BOTH = 'both';\n\nexport const ALL = 'all';\nexport const BASIC = 'basic';\nexport const FAVORITE = 'favorite';\nexport const USED = 'used';\n\nexport const ROOT = 'root';\n\nexport const SPOOFED_PREFIX = '__[[spoofed]]__';\nexport const SPOOFED_API_PREFIX = '__[[spoofedapi]]__';\n\nconst instanceMethods = {};\nconst graphConfigMap = {};\n\nconst FIELD_REGEX = /^\\$\\.metadata\\.fields\\[([0-9]*)\\]/;\n\nexport const IF_HAVE = {\n V1_MONITORING: 'v1-monitoring',\n V2_MONITORING: 'v2-monitoring',\n PROJECT: 'project',\n NO_PROJECT: 'no-project',\n NOT_V1_ISTIO: 'not-v1-istio',\n MULTI_CLUSTER: 'multi-cluster',\n NEUVECTOR_NAMESPACE: 'neuvector-namespace',\n ADMIN: 'admin-user',\n MCM_DISABLED: 'mcm-disabled',\n NOT_STANDALONE_HARVESTER: 'not-standalone-harvester',\n};\n\nexport function DSL(store, product, module = 'type-map') {\n // store.commit(`${ module }/product`, { name: product });\n\n return {\n product(inOpt) {\n const opt = {\n name: product,\n weight: 1,\n inStore: 'cluster',\n inExplorer: false,\n removable: true,\n showClusterSwitcher: true,\n showNamespaceFilter: false,\n public: true,\n filterMode: 'namespaces',\n ...inOpt\n };\n\n for ( const k of ['ifHaveGroup', 'ifHaveType'] ) {\n if ( opt[k] ) {\n opt[k] = regexToString(ensureRegex(opt[k]));\n }\n }\n\n store.commit(`${ module }/product`, opt);\n },\n\n basicType(types, group) {\n // Support passing in a map of types and using just the values\n if ( !isArray(types) && types && isObject(types) ) {\n types = Object.values(types);\n }\n\n store.commit(`${ module }/basicType`, {\n product, types, group\n });\n },\n\n // Type- and Group-dependent\n groupBy(type, field) {\n store.commit(`${ module }/groupBy`, { type, field });\n },\n\n headers(type, headers) {\n headers.forEach((header) => {\n // If on the client, then use the value getter if there is one\n if (header.getValue) {\n // we need to store the .value prop for the advanced filtering\n header.valueProp = header.value;\n header.value = header.getValue;\n }\n\n delete header.getValue;\n });\n\n store.commit(`${ module }/headers`, { type, headers });\n },\n\n hideBulkActions(type, field) {\n store.commit(`${ module }/hideBulkActions`, { type, field });\n },\n\n configureType(match, options) {\n if (options.graphConfig) {\n graphConfigMap[match] = options.graphConfig;\n delete options.graphConfig;\n }\n store.commit(`${ module }/configureType`, { ...options, match });\n },\n\n componentForType(match, replace) {\n store.commit(`${ module }/componentForType`, { match, replace });\n },\n\n ignoreType(regexOrString) {\n store.commit(`${ module }/ignoreType`, regexOrString);\n },\n\n ignoreGroup(regexOrString, cb) {\n store.commit(`${ module }/ignoreGroup`, { regexOrString, cb });\n },\n\n weightGroup(input, weight, forBasic) {\n if ( isArray(input) ) {\n store.commit(`${ module }/weightGroup`, {\n groups: input, weight, forBasic\n });\n } else {\n store.commit(`${ module }/weightGroup`, {\n group: input, weight, forBasic\n });\n }\n },\n\n setGroupDefaultType(input, defaultType) {\n if ( isArray(input) ) {\n store.commit(`${ module }/setGroupDefaultType`, { groups: input, defaultType });\n } else {\n store.commit(`${ module }/setGroupDefaultType`, { group: input, defaultType });\n }\n },\n\n weightType(input, weight, forBasic) {\n if ( isArray(input) ) {\n store.commit(`${ module }/weightType`, {\n types: input, weight, forBasic\n });\n } else {\n store.commit(`${ module }/weightType`, {\n type: input, weight, forBasic\n });\n }\n },\n\n mapGroup(match, replace, weight = 5, continueOnMatch = false) {\n store.commit(`${ module }/mapGroup`, {\n match, replace, weight, continueOnMatch\n });\n },\n\n mapType(match, replace, weight = 5, continueOnMatch = false) {\n store.commit(`${ module }/mapType`, {\n match, replace, weight, continueOnMatch\n });\n },\n\n moveType(match, group, weight = 5, continueOnMatch = false) {\n store.commit(`${ module }/moveType`, {\n match, group, weight,\n });\n },\n\n virtualType(obj) {\n store.commit(`${ module }/virtualType`, { product, obj });\n },\n\n spoofedType(obj) {\n store.commit(`${ module }/spoofedType`, { product, obj });\n }\n };\n}\n\nlet called = false;\n\nexport async function applyProducts(store, $plugin) {\n if (called) {\n return;\n }\n\n called = true;\n for ( const product of listProducts() ) {\n const impl = await loadProduct(product);\n\n if ( impl?.init ) {\n impl.init(store);\n }\n }\n // Load the products from all plugins\n $plugin.loadProducts();\n}\n\nexport function productsLoaded() {\n return called;\n}\n\nexport const state = function() {\n return {\n products: [],\n virtualTypes: {},\n spoofedTypes: {},\n basicTypes: {},\n groupIgnore: [],\n groupWeights: {},\n groupDefaultTypes: {},\n basicGroupWeights: { [ROOT]: 1000 },\n groupMappings: [],\n typeIgnore: [],\n basicTypeWeights: {},\n typeWeights: {},\n typeMappings: [],\n typeMoveMappings: [],\n typeToComponentMappings: [],\n typeOptions: [],\n groupBy: {},\n headers: {},\n hideBulkActions: {},\n schemaGeneration: 1,\n cache: {\n typeMove: {},\n groupLabel: {},\n ignore: {},\n list: {},\n chart: {},\n detail: {},\n edit: {},\n componentFor: {},\n promptRemove: {},\n windowComponents: {},\n 'machine-config': {},\n 'cloud-credential': {}\n\n },\n };\n};\n\nexport const getters = {\n // ----------------------------------------------------------------------------\n // 1 ) Getting info\n // ----------------------------------------------------------------------------\n // Turns a type name into a display label (e.g. management.cattle.io.cluster -> Cluster)\n labelFor(state, getters, rootState, rootGetters) {\n return (schema, count = 1, language = null) => {\n return _applyMapping(schema, state.typeMappings, 'id', false, () => {\n const key = `typeLabel.\"${ schema.id.toLowerCase() }\"`;\n\n if ( rootGetters['i18n/exists'](key, language) ) {\n return rootGetters['i18n/t'](key, { count }, language).trim();\n }\n\n const out = schema?.attributes?.kind || schema.id || '?';\n\n // Add spaces, but breaks typing names into jump menu naturally\n // out = ucFirst(out.replace(/([a-z])([A-Z])/g,'$1 $2'));\n\n if ( count === 1 ) {\n return out;\n }\n\n // This works for most things... if you don't like it, put in a typeLabel translation for above.\n return pluralize(out);\n });\n };\n },\n\n // Turns a group name into a display label (e.g. management.cattle.io.v3.cluster -> Cluster)\n groupLabelFor(state) {\n return (schemaOrName) => {\n let group = schemaOrName;\n\n if ( typeof schemaOrName === 'object' ) {\n let moved = false;\n\n for ( const rule of state.typeMoveMappings ) {\n const re = stringToRegex(rule.match);\n\n if ( schemaOrName.id.match(re) ) {\n moved = true;\n group = rule.replace;\n }\n }\n\n if ( !moved ) {\n group = group.attributes.group;\n }\n }\n\n if ( typeof group !== 'string' ) {\n return null;\n }\n\n const out = _applyMapping(group, state.groupMappings, null, state.cache.groupLabel, (group) => {\n const match = group.match(/^(.*)\\.k8s\\.io$/);\n\n if ( match ) {\n return match[1].split(/\\./).map((x) => ucFirst(x)).join('.');\n }\n\n return group;\n });\n\n return out;\n };\n },\n\n groupForBasicType(state) {\n return (product, schemaId) => {\n return state.basicTypes?.[product]?.[schemaId];\n };\n },\n\n optionsFor(state) {\n const def = {\n isCreatable: true,\n isEditable: true,\n isRemovable: true,\n showState: true,\n showAge: true,\n canYaml: true,\n namespaced: null,\n listGroups: [],\n depaginate: false,\n customRoute: undefined,\n resourceEditMasthead: true,\n };\n\n return (schemaOrType) => {\n if (!schemaOrType) {\n return {};\n }\n\n const type = (typeof schemaOrType === 'object' ? schemaOrType.id : schemaOrType);\n const found = state.typeOptions.find((entry) => {\n const re = stringToRegex(entry.match);\n\n return re.test(type);\n });\n\n const opts = Object.assign({}, def, found || {});\n\n return opts;\n };\n },\n\n isFavorite(state, getters, rootState, rootGetters) {\n return (schemaId) => {\n return rootGetters['prefs/get'](FAVORITE_TYPES).includes(schemaId) || false;\n };\n },\n\n typeWeightFor(state) {\n return (type, forBasic) => {\n type = type?.toLowerCase();\n\n if ( forBasic ) {\n return state.basicTypeWeights[type] || 0;\n } else {\n return state.typeWeights[type] || 0;\n }\n };\n },\n\n groupWeightFor(state) {\n return (group, forBasic) => {\n group = group.toLowerCase();\n\n if ( forBasic ) {\n return state.basicGroupWeights[group] || 0;\n } else {\n return state.groupWeights[group] || 0;\n }\n };\n },\n\n groupDefaultTypeFor(state) {\n return (group) => {\n group = group.toLowerCase();\n\n return state.groupDefaultTypes[group];\n };\n },\n\n getTree(state, getters, rootState, rootGetters) {\n return (productId, mode, allTypes, clusterId, namespaceMode, namespaces, currentType, search) => {\n // getTree has four modes:\n // - `basic` matches data types that should always be shown even if there\n // are 0 of them.\n // - `used` matches the data types where there are more than 0 of them\n // in the current set of namespaces.\n // - `all` matches all types.\n // - `favorite` matches starred types.\n // namespaceMode: 'namespaced', 'cluster', or 'both'\n // namespaces: null means all, otherwise it will be an array of specific namespaces to include\n const isBasic = mode === BASIC;\n\n let searchRegex;\n\n if ( search ) {\n searchRegex = new RegExp(`^(.*)(${ escapeRegex(search) })(.*)$`, 'i');\n }\n\n const root = { children: [] };\n\n // Add types from shortest to longest so that parents\n // get added before children\n const keys = Object.keys(allTypes).sort((a, b) => a.length - b.length);\n\n // Set these for later\n const currentLocal = rootGetters['i18n/current']();\n const defaultLocal = rootGetters['i18n/default']();\n\n for ( const type of keys ) {\n const typeObj = allTypes[type];\n\n if ( typeObj.schema && getters.isIgnored(typeObj.schema) ) {\n // Skip ignored groups & types\n continue;\n }\n\n const namespaced = typeObj.namespaced;\n\n if ( (namespaceMode === NAMESPACED && !namespaced ) || (namespaceMode === CLUSTER_LEVEL && namespaced) ) {\n // Skip types that are not the right namespace mode\n continue;\n }\n\n const count = _matchingCounts(typeObj, namespaces);\n const groupForBasicType = getters.groupForBasicType(productId, typeObj.name);\n\n if ( typeObj.id === currentType ) {\n // If this is the type currently being shown, always show it\n } else if ( isBasic && !groupForBasicType ) {\n // If we want the basic tree only return basic types;\n continue;\n } else if ( mode === USED && count <= 0 ) {\n // If there's none of this type, ignore this entry when viewing only in-use types\n // Note: count is sometimes null, which is <= 0.\n continue;\n }\n\n const label = typeObj.labelKey ? rootGetters['i18n/t'](typeObj.labelKey) || typeObj.label : typeObj.label;\n const virtual = !!typeObj.virtual;\n let icon = typeObj.icon;\n\n if ( (!virtual || typeObj.isSpoofed ) && !icon ) {\n if ( namespaced ) {\n icon = 'folder';\n } else {\n icon = 'globe';\n }\n }\n\n const labelDisplay = highlightLabel(label, icon, typeObj.count, typeObj.schema);\n\n if ( !labelDisplay ) {\n // Search happens in highlight and returns null if not found\n continue;\n }\n\n let group;\n\n if ( isBasic ) {\n group = _ensureGroup(root, groupForBasicType, true);\n } else if ( mode === FAVORITE ) {\n group = _ensureGroup(root, 'starred');\n group.weight = 1000;\n } else if ( mode === USED ) {\n group = _ensureGroup(root, `inUse::${ getters.groupLabelFor(typeObj.schema) }`);\n } else {\n group = _ensureGroup(root, typeObj.schema || typeObj.group || ROOT);\n }\n\n let route = typeObj.route;\n\n // Make the default route if one isn't set\n if (!route ) {\n route = {\n name: 'c-cluster-product-resource',\n params: {\n product: productId,\n cluster: clusterId,\n resource: typeObj.name,\n }\n };\n\n typeObj.route = route;\n }\n\n // Cluster ID and Product should always be set\n if ( route && typeof route === 'object' ) {\n route.params = route.params || {};\n route.params.cluster = clusterId;\n route.params.product = productId;\n }\n\n group.children.push({\n label,\n labelDisplay,\n mode: typeObj.mode,\n count,\n exact: typeObj.exact || false,\n namespaced,\n route,\n name: typeObj.name,\n weight: typeObj.weight || getters.typeWeightFor(typeObj.schema?.id || label, isBasic),\n overview: !!typeObj.overview,\n });\n }\n\n // Recursively sort the groups\n _sortGroup(root, mode);\n\n return root.children;\n\n // ----------------------\n\n function _ensureGroup(tree, schemaOrName, forBasic = false) {\n let name = getters.groupLabelFor(schemaOrName);\n const isRoot = ( name === ROOT || name.startsWith(`${ ROOT }::`) );\n\n if ( name && name.includes('::') ) {\n let parent;\n\n [parent, name] = name.split('::', 2);\n tree = _ensureGroup(tree, parent);\n }\n\n // Translate if an entry exists\n let label = name;\n const key = `nav.group.\"${ name }\"`;\n\n if ( rootGetters['i18n/exists'](key) ) {\n label = rootGetters['i18n/t'](key);\n }\n\n let group = findBy(tree.children, 'name', name);\n\n if ( !group ) {\n group = {\n name,\n label,\n weight: getters.groupWeightFor(name, forBasic),\n defaultType: getters.groupDefaultTypeFor(name),\n };\n\n tree.children.push(group);\n }\n\n if ( isRoot ) {\n group.isRoot = true;\n }\n\n if ( !group.children ) {\n group.children = [];\n }\n\n return group;\n }\n\n function highlightLabel(original, icon, count, schema) {\n let label = escapeHtml(original);\n\n if ( searchRegex ) {\n let match = label.match(searchRegex);\n\n if (!match) {\n if ( currentLocal !== defaultLocal && schema ) {\n const defaultLabel = getters.labelFor(schema, count, defaultLocal);\n\n if (defaultLabel && defaultLabel !== label ) {\n label += ` (${ defaultLabel })`;\n match = label.match(searchRegex);\n }\n }\n }\n\n if ( match ) {\n label = `${ escapeHtml(match[1]) }${ escapeHtml(match[2]) }${ escapeHtml(match[3]) }`;\n } else {\n return null;\n }\n }\n\n if ( icon ) {\n label = `${ label }`;\n }\n\n return label;\n }\n };\n },\n\n isSpoofed(state, getters, rootState, rootGetters) {\n return (type, product) => {\n product = product || rootGetters['productId'];\n const productSpoofedTypes = state.spoofedTypes[product] || [];\n\n return productSpoofedTypes.some((st) => st.type === type);\n };\n },\n\n isVirtual(state, getters, rootState, rootGetters) {\n return (name, product) => {\n product = product || rootGetters['productId'];\n const productVirtualTypes = state.virtualTypes[product] || [];\n\n return productVirtualTypes.some((st) => st.name === name);\n };\n },\n\n getSpoofedInstances(state, getters, rootState, rootGetters) {\n return async(type, product) => {\n product = product || rootGetters['productId'];\n const getInstances = instanceMethods[product]?.[type] || (() => []);\n const instances = await getInstances();\n\n instances.forEach((instance) => {\n const type = instance.type;\n const id = instance.id;\n const link = `/${ SPOOFED_PREFIX }/${ type }/${ id }`;\n const apiLink = `/${ SPOOFED_API_PREFIX }/${ type }/${ id }`;\n\n instance.links = {\n remove: instance.links?.remove || link,\n self: instance.links?.self || link,\n update: instance.links?.update || link,\n view: instance.links?.view || apiLink,\n };\n instance.isSpoofed = true;\n });\n\n return instances;\n };\n },\n\n getSpoofedInstance(state, getters, rootState, rootGetters) {\n return async(type, product, id) => {\n const productInstances = await getters.getSpoofedInstances(type, product);\n\n return productInstances.find( (instance) => instance.id === id);\n };\n },\n\n allSpoofedTypes(state, getters, rootState, rootGetters) {\n return Object.values(state.spoofedTypes).flat();\n },\n\n spoofedSchemas(state, getters, rootState, rootGetters) {\n return (product) => {\n const types = state.spoofedTypes[product] || [];\n\n return types.flatMap((type) => {\n const schemas = type.schemas || [];\n\n return schemas.map((schema) => ({\n ...schema,\n isSpoofed: true\n }));\n });\n };\n },\n\n allSpoofedSchemas(state, getters, rootState, rootGetters) {\n return getters.allSpoofedTypes.flatMap((type) => {\n const schemas = type.schemas || [];\n\n return schemas.map((schema) => ({\n ...schema,\n isSpoofed: true\n }));\n });\n },\n\n allTypes(state, getters, rootState, rootGetters) {\n return (product, mode = ALL) => {\n const module = findBy(state.products, 'name', product)?.inStore;\n const schemas = rootGetters[`${ module }/all`](SCHEMA);\n const counts = rootGetters[`${ module }/all`](COUNT)?.[0]?.counts || {};\n const isDev = rootGetters['prefs/get'](VIEW_IN_API);\n const isBasic = mode === BASIC;\n\n const out = {};\n\n for ( const schema of schemas ) {\n const attrs = schema.attributes || {};\n const count = counts[schema.id];\n const label = getters.labelFor(schema, count);\n const weight = getters.typeWeightFor(schema?.id || label, isBasic);\n const typeOptions = getters['optionsFor'](schema);\n\n if ( isBasic ) {\n // These are separate ifs so that things with no kind can still be basic\n if ( !getters.groupForBasicType(product, schema.id) ) {\n continue;\n }\n } else if ( mode === FAVORITE && !getters.isFavorite(schema.id) ) {\n continue;\n } else if ( !attrs.kind ) {\n // Skip the schemas that aren't top-level types\n continue;\n } else if ( typeof typeOptions.ifRancherCluster !== 'undefined' && typeOptions.ifRancherCluster !== rootGetters.isRancher ) {\n continue;\n } else if (typeOptions.localOnly && !rootGetters.currentCluster?.isLocal) {\n continue;\n }\n\n out[schema.id] = {\n label,\n mode,\n weight,\n schema,\n name: schema.id,\n namespaced: typeOptions.namespaced === null ? attrs.namespaced : typeOptions.namespaced,\n count: count ? count.summary.count || 0 : null,\n byNamespace: count ? count.namespaces : {},\n revision: count ? count.revision : null,\n route: typeOptions.customRoute\n };\n }\n\n // Add virtual and spoofed types\n if ( mode !== USED ) {\n const virtualTypes = state.virtualTypes[product] || [];\n const spoofedTypes = state.spoofedTypes[product] || [];\n const allTypes = [...virtualTypes, ...spoofedTypes];\n\n for ( const type of allTypes ) {\n const item = clone(type);\n const id = item.name;\n const weight = type.weight || getters.typeWeightFor(item.label, isBasic);\n\n // Is there a virtual/spoofed type override for schema type?\n // Currently used by harvester, this should be investigated and removed if possible\n if (out[id]) {\n delete out[id];\n }\n\n if ( item['public'] === false && !isDev ) {\n continue;\n }\n\n if (item.ifHave && !ifHave(rootGetters, item.ifHave)) {\n continue;\n }\n\n if ( item.ifHaveType ) {\n const targetedSchemas = typeof item.ifHaveType === 'string' ? schemas : rootGetters[`${ item.ifHaveType.store }/all`](SCHEMA);\n const type = typeof item.ifHaveType === 'string' ? item.ifHaveType : item.ifHaveType?.type;\n\n const haveIds = filterBy(targetedSchemas, 'id', normalizeType(type)).map((s) => s.id);\n\n if (!haveIds.length) {\n continue;\n }\n\n if (item.ifHaveVerb && !ifHaveVerb(rootGetters, module, item.ifHaveVerb, haveIds)) {\n continue;\n }\n }\n\n if ( item.ifHaveSubTypes ) {\n const hasSome = (item.ifHaveSubTypes || []).some((type) => {\n return !!findBy(schemas, 'id', normalizeType(type));\n });\n\n if (!hasSome) {\n continue;\n }\n }\n\n if ( typeof item.ifRancherCluster !== 'undefined' && item.ifRancherCluster !== rootGetters.isRancher ) {\n continue;\n }\n\n if ( isBasic && !getters.groupForBasicType(product, id) ) {\n continue;\n } else if ( mode === FAVORITE && !getters.isFavorite(id) ) {\n continue;\n }\n\n item.mode = mode;\n item.weight = weight;\n\n // Ensure labelKey is taken into account... with a mock count\n // This is harmless if the translation doesn't require count\n if (item.labelKey && rootGetters['i18n/exists'](item.labelKey)) {\n item.label = rootGetters['i18n/t'](item.labelKey, { count: 2 }).trim();\n delete item.labelKey; // Label should really take precedence over labelKey, but it doesn't, so remove it\n } else {\n item.label = item.label || item.name;\n }\n\n out[id] = item;\n }\n }\n\n return out;\n };\n },\n\n groupByFor(state) {\n return (schema) => {\n return state.groupBy[schema?.id];\n };\n },\n\n hideBulkActionsFor(state) {\n return (schema) => {\n return state.hideBulkActions[schema.id];\n };\n },\n\n headersFor(state, getters, rootState, rootGetters) {\n return (schema) => {\n const attributes = schema.attributes || {};\n const columns = attributes.columns || [];\n const typeOptions = getters['optionsFor'](schema);\n\n // A specific list has been provided\n if ( state.headers[schema.id] ) {\n return state.headers[schema.id].map((entry) => {\n if ( typeof entry === 'string' ) {\n const col = findBy(columns, 'name', entry);\n\n if ( col ) {\n return fromSchema(col, rootGetters);\n } else {\n return null;\n }\n } else {\n return entry;\n }\n }).filter((col) => !!col);\n }\n\n // Otherwise make one up from schema\n const out = typeOptions.showState ? [STATE] : [];\n const namespaced = attributes.namespaced || false;\n let hasName = false;\n\n for ( const col of columns ) {\n if ( col.format === 'name' ) {\n hasName = true;\n out.push(NAME);\n if ( namespaced ) {\n out.push(NAMESPACE_COL);\n }\n } else {\n out.push(fromSchema(col, rootGetters));\n }\n }\n\n if ( !hasName ) {\n insertAt(out, 1, NAME);\n if ( namespaced ) {\n insertAt(out, 2, NAMESPACE_COL);\n }\n }\n\n // Age always goes last\n if ( out.includes(AGE) ) {\n removeObject(out, AGE);\n if ( typeOptions.showAge ) {\n out.push(AGE);\n }\n }\n\n return out;\n\n function fromSchema(col, rootGetters) {\n let formatter, width, formatterOpts;\n\n if ( (col.format === '' || col.format === 'date') && col.name === 'Age' ) {\n return AGE;\n }\n\n if ( col.format === 'date' || col.type === 'date' ) {\n formatter = 'Date';\n width = 120;\n formatterOpts = { multiline: true };\n }\n\n if ( col.type === 'number' || col.type === 'int' ) {\n formatter = 'Number';\n }\n\n const colName = col.name.includes(' ') ? col.name.split(' ').map((word) => word.charAt(0).toUpperCase() + word.substring(1) ).join('') : col.name;\n\n const exists = rootGetters['i18n/exists'];\n const t = rootGetters['i18n/t'];\n const labelKey = `tableHeaders.${ colName.charAt(0).toLowerCase() + colName.slice(1) }`;\n const description = col.description || '';\n const tooltip = description && description[description.length - 1] === '.' ? description.slice(0, -1) : description;\n\n return {\n name: col.name.toLowerCase(),\n label: exists(labelKey) ? t(labelKey) : col.name,\n value: _rowValueGetter(col),\n sort: [col.field],\n formatter,\n formatterOpts,\n width,\n tooltip\n };\n }\n };\n },\n\n // ------------------------------------\n // Custom list/detail/edit/header component detection\n //\n // Note: you can't refactor these into one function that does `@/${kind}/${type}`,\n // because babel needs some hardcoded idea where to look for the dependency.\n //\n // Note 2: Yes these are editing state in a getter for caching... it's ok, probably.\n // ------------------------------------\n hasCustomList(state, getters, rootState) {\n return (rawType) => {\n const key = getters.componentFor(rawType);\n\n return hasCustom(state, rootState, 'list', key, (key) => resolveList(key));\n };\n },\n\n hasCustomChart(state, getters, rootState) {\n return (rawType) => {\n const key = getters.componentFor(rawType);\n\n return hasCustom(state, rootState, 'chart', key, (key) => resolveChart(key));\n };\n },\n\n hasCustomDetail(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'detail', key, (key) => resolveDetail(key));\n };\n },\n\n hasGraph(state, getters) {\n return (resource) => {\n const typeOptions = getters['optionsFor'](resource);\n\n if (typeOptions && typeOptions.hasGraph) {\n return graphConfigMap[resource];\n }\n\n return null;\n };\n },\n\n hasCustomEdit(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'edit', key, (key) => resolveEdit(key));\n };\n },\n\n hasComponent(state, getters, rootState) {\n return (path) => {\n return hasCustom(state, rootState, 'edit', path, (path) => resolveEdit(path));\n };\n },\n\n hasCustomPromptRemove(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'promptRemove', key, () => require.resolve(`@shell/promptRemove/${ key }`));\n };\n },\n\n hasCustomWindowComponent(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'windowComponents', key, (key) => resolveWindowComponent(key));\n };\n },\n\n hasCustomMachineConfigComponent(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'machine-config', key, (key) => resolveMachineConfigComponent(key));\n };\n },\n\n hasCustomCloudCredentialComponent(state, getters, rootState) {\n return (rawType, subType) => {\n const key = getters.componentFor(rawType, subType);\n\n return hasCustom(state, rootState, 'cloud-credential', key, (key) => resolveCloudCredentialComponent(key));\n };\n },\n\n importComponent(state, getters) {\n return (path) => {\n return importEdit(path);\n };\n },\n\n importDialog(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'dialog', getters.componentFor(rawType, subType), importDialog);\n };\n },\n\n importList(state, getters, rootState) {\n return (rawType) => {\n return loadExtension(rootState, 'list', getters.componentFor(rawType), importList);\n };\n },\n\n importChart(state, getters, rootState) {\n return (rawType) => {\n return loadExtension(rootState, 'chart', getters.componentFor(rawType), importChart);\n };\n },\n\n importDetail(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'detail', getters.componentFor(rawType, subType), importDetail);\n };\n },\n\n importEdit(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'edit', getters.componentFor(rawType, subType), importEdit);\n };\n },\n\n importCustomPromptRemove(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'promptRemove', getters.componentFor(rawType, subType), importCustomPromptRemove);\n };\n },\n\n importWindowComponent(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'windowComponents', getters.componentFor(rawType, subType), importWindowComponent);\n };\n },\n\n importLogin(state, getters, rootState) {\n return (authType) => {\n return loadExtension(rootState, 'login', authType, importLogin);\n };\n },\n\n importMachineConfig(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'machine-config', getters.componentFor(rawType, subType), importMachineConfig);\n };\n },\n\n importCloudCredential(state, getters, rootState) {\n return (rawType, subType) => {\n return loadExtension(rootState, 'cloud-credential', getters.componentFor(rawType, subType), importCloudCredential);\n };\n },\n\n componentFor(state, getters) {\n return (type, subType) => {\n let key = type;\n\n if ( subType ) {\n key = `${ type }/${ subType }`;\n }\n\n if ( state.cache.componentFor[key] !== undefined ) {\n return state.cache.componentFor[key];\n }\n\n let out = type;\n\n const mapping = state.typeToComponentMappings.find((mapping) => {\n const re = stringToRegex(mapping.match);\n\n return re.test(key);\n });\n\n if ( mapping ) {\n out = mapping.replace;\n } else if ( subType ) {\n // Try again without the subType\n out = getters.componentFor(type);\n }\n\n state.cache.componentFor[key] = out;\n\n return out;\n };\n },\n\n isIgnored(state, getters, rootState, rootGetters) {\n return (schema) => {\n let out = false;\n\n for ( const rule of state.groupIgnore ) {\n const group = schema?.attributes?.group;\n\n if (group && group.match(stringToRegex(rule.type) && isObject(rule) && rule.type)) {\n out = rule.cb(rootGetters);\n break;\n }\n\n if ( group && typeof rule === 'string' && group.match(stringToRegex(rule)) ) {\n out = true;\n break;\n }\n }\n\n if ( !out ) {\n for ( const rule of state.typeIgnore ) {\n if ( schema.id.match(stringToRegex(rule)) ) {\n out = true;\n break;\n }\n }\n }\n\n state.cache.ignore[schema.id] = out;\n\n return out;\n };\n },\n\n activeProducts(state, getters, rootState, rootGetters) {\n const knownTypes = {};\n const knownGroups = {};\n const isDev = rootGetters['prefs/get'](VIEW_IN_API);\n\n if ( state.schemaGeneration < 0 ) {\n // This does nothing, but makes activeProducts depend on schemaGeneration\n // so that it can be used to update the product list on schema change.\n return;\n }\n\n return state.products.filter((p) => {\n const module = p.inStore;\n\n if ( p['public'] === false && !isDev ) {\n return false;\n }\n\n if ( p.ifGetter && !rootGetters[p.ifGetter] ) {\n return false;\n }\n\n if ( !knownTypes[module] ) {\n const schemas = rootGetters[`${ module }/all`](SCHEMA);\n\n knownTypes[module] = [];\n knownGroups[module] = [];\n\n for ( const s of schemas ) {\n knownTypes[module].push(s._id);\n\n if ( s._group ) {\n addObject(knownGroups[module], s._group);\n }\n }\n }\n\n if ( p.ifFeature) {\n const features = Array.isArray(p.ifFeature) ? p.ifFeature : [p.ifFeature];\n\n for (const f of features) {\n if (!rootGetters['features/get'](f)) {\n return false;\n }\n }\n }\n\n if ( p.ifHave && !ifHave(rootGetters, p.ifHave)) {\n return false;\n }\n\n if ( p.ifHaveType ) {\n const haveIds = knownTypes[module].filter((t) => t.match(stringToRegex(p.ifHaveType)) );\n\n if ( !haveIds.length ) {\n return false;\n }\n\n if ( p.ifHaveVerb && !ifHaveVerb(rootGetters, module, p.ifHaveVerb, haveIds)) {\n return false;\n }\n }\n\n if ( p.ifHaveGroup && !knownGroups[module].find((t) => t.match(stringToRegex(p.ifHaveGroup)) ) ) {\n return false;\n }\n\n return true;\n });\n },\n\n isProductActive(state, getters) {\n return (name) => {\n if ( findBy(getters['activeProducts'], 'name', name) ) {\n return true;\n }\n\n return false;\n };\n },\n\n rowValueGetter(state) {\n return (schema, colName) => {\n const col = _findColumnByName(schema, colName);\n\n return _rowValueGetter(col);\n };\n },\n\n isProductRegistered(state) {\n return (productName) => {\n const prod = state.products.find((p) => p.name === productName);\n\n return !!prod;\n };\n },\n};\n\nexport const mutations = {\n schemaChanged(state) {\n state.schemaGeneration = state.schemaGeneration + 1;\n },\n\n // Remove the specified product\n remove(state, { product, plugin }) {\n const existing = state.products.findIndex((p) => p.name === product);\n\n // Remove the product\n if (existing !== -1) {\n state.products.splice(existing, 1);\n }\n\n // Go through the basic types and remove the headers\n if (state.virtualTypes[product]) {\n delete state.virtualTypes[product];\n }\n\n if (state.basicTypes[product]) {\n // Remove table header configuration\n Object.keys(state.basicTypes[product]).forEach((type) => {\n delete state.headers[type];\n delete state.basicTypeWeights[type];\n delete state.cache.ignore[type];\n // These track whether the type has a custom component\n delete state.cache.detail[type];\n delete state.cache.edit[type];\n delete state.cache.list[type];\n\n // Delete all of the entries from the componentFor cache where the valye is the type\n // Can do this more efficiently\n Object.keys(state.cache.componentFor).forEach((k) => {\n const v = state.cache.componentFor[k];\n\n if (v === type) {\n delete state.cache.componentFor[k];\n }\n });\n });\n\n delete state.basicTypes[product];\n }\n\n if (plugin) {\n // kind is list, edit, detail etc\n Object.keys(plugin.types).forEach((kind) => {\n if (state.cache[kind]) {\n Object.keys(plugin.types[kind]).forEach((type) => {\n delete state.cache[kind][type];\n });\n }\n });\n }\n },\n\n product(state, obj) {\n const existing = findBy(state.products, 'name', obj.name);\n\n if ( existing ) {\n Object.assign(existing, obj);\n } else {\n addObject(state.products, obj);\n }\n },\n\n virtualType(state, { product, obj }) {\n if ( !state.virtualTypes[product] ) {\n state.virtualTypes[product] = [];\n }\n\n const copy = clone(obj);\n\n copy.virtual = true;\n\n const existing = findBy(state.virtualTypes[product], 'name', copy.name);\n\n if ( existing ) {\n Object.assign(existing, copy);\n } else {\n addObject(state.virtualTypes[product], copy);\n }\n },\n\n spoofedType(state, { product, obj }) {\n if ( !state.spoofedTypes[product] ) {\n state.spoofedTypes[product] = [];\n }\n\n const copy = clone(obj);\n\n instanceMethods[product] = instanceMethods[product] || {};\n instanceMethods[product][copy.type] = copy.getInstances;\n delete copy.getInstances;\n\n copy.name = copy.type;\n copy.isSpoofed = true;\n copy.virtual = true;\n copy.schemas.forEach((schema) => {\n schema.links = {\n collection: `/${ SPOOFED_PREFIX }/${ schema.id }`,\n ...(schema.links || {})\n };\n });\n\n const existing = findBy(state.spoofedTypes[product], 'type', copy.type);\n\n if ( existing ) {\n Object.assign(existing, copy);\n } else {\n addObject(state.spoofedTypes[product], copy);\n }\n },\n\n basicType(state, { product, group, types }) {\n if ( !product ) {\n product = EXPLORER;\n }\n\n if ( !group ) {\n group = ROOT;\n }\n\n if ( !isArray(types) ) {\n types = [types];\n }\n\n if ( !state.basicTypes[product] ) {\n state.basicTypes[product] = {};\n }\n\n for ( const t of types ) {\n state.basicTypes[product][t] = group;\n }\n },\n\n ignoreGroup(state, { regexOrString: match, cb }) {\n match = ensureRegex(match);\n // State shouldn't contain actual RegExp objects, because they don't serialize\n cb ? state.groupIgnore.push({\n type: regexToString(match),\n cb\n }) : state.groupIgnore.push(regexToString(match));\n },\n\n ignoreType(state, match) {\n match = ensureRegex(match);\n state.typeIgnore.push(regexToString(match));\n },\n\n groupBy(state, { type, field }) {\n state.groupBy[type] = field;\n },\n\n headers(state, { type, headers }) {\n state.headers[type] = headers;\n },\n\n hideBulkActions(state, { type, field }) {\n state.hideBulkActions[type] = field;\n },\n\n // weightGroup({group: 'core', weight: 99}); -- higher groups are shown first\n // These operate on group names *after* mapping but *before* translation\n weightGroup(state, {\n group, groups, weight, forBasic\n }) {\n if ( !groups ) {\n groups = [];\n }\n\n if ( group ) {\n groups.push(group);\n }\n\n const map = forBasic ? state.basicGroupWeights : state.groupWeights;\n\n for ( const g of groups ) {\n map[g.toLowerCase()] = weight;\n }\n },\n\n // setGroupDefaultType({group: 'core', defaultType: 'name'});\n // By default when a group is clicked, the first item is selected - this allows\n // this behaviour to be changed and a named child type can be chosen\n // These operate on group names *after* mapping but *before* translation\n setGroupDefaultType(state, { group, groups, defaultType }) {\n if ( !groups ) {\n groups = [];\n }\n\n if ( group ) {\n groups.push(group);\n }\n\n for ( const g of groups ) {\n state.groupDefaultTypes[g.toLowerCase()] = defaultType;\n }\n },\n\n // weightType('Cluster' 99); -- higher groups are shown first\n // These operate on *schema* type names, before mapping\n weightType(state, {\n type, types, weight, forBasic\n }) {\n if ( !types ) {\n types = [];\n }\n\n if ( type ) {\n types.push(type);\n }\n\n const map = forBasic ? state.basicTypeWeights : state.typeWeights;\n\n for ( const t of types ) {\n map[t.toLowerCase()] = weight;\n }\n },\n\n // mapGroup('ugly.thing', 'Nice Thing', 1);\n // mapGroup(/ugly.thing.(stuff)', '$1', 2);\n // mapGroup(/ugly.thing.(stuff)', function(groupStr, ruleObj, regexMatch, typeObj) { return ucFirst(group.id) } , 2);\n mapGroup(state, {\n match, replace, weight = 5, continueOnMatch = false\n }) {\n _addMapping(state.groupMappings, match, replace, weight, continueOnMatch);\n },\n\n mapType(state, {\n match, replace, weight = 5, continueOnMatch = false\n }) {\n _addMapping(state.typeMappings, match, replace, weight, continueOnMatch);\n },\n\n // moveType('apps.deployment', 'Core');\n moveType(state, { match, group, weight = 5 }) {\n _addMapping(state.typeMoveMappings, match, group, weight);\n },\n\n componentForType(state, { match, replace }) {\n match = ensureRegex(match);\n match = regexToString(match);\n state.typeToComponentMappings.push({ match, replace });\n },\n\n configureType(state, options) {\n const match = regexToString(ensureRegex(options.match));\n\n const idx = state.typeOptions.findIndex((obj) => obj.match === match);\n let obj = { ...options, match };\n\n if ( idx >= 0 ) {\n obj = Object.assign(state.typeOptions[idx], obj);\n state.typeOptions.splice(idx, 1, obj);\n } else {\n const obj = Object.assign({}, options, { match });\n\n state.typeOptions.push(obj);\n }\n },\n\n};\n\nexport const actions = {\n removeProduct({ commit }, metadata) {\n commit('remove', metadata);\n },\n\n addFavorite({ dispatch, rootGetters }, type) {\n const types = rootGetters['prefs/get'](FAVORITE_TYPES) || [];\n\n addObject(types, type);\n\n dispatch('prefs/set', { key: FAVORITE_TYPES, value: types }, { root: true });\n },\n\n removeFavorite({ dispatch, rootGetters }, type) {\n const types = rootGetters['prefs/get'](FAVORITE_TYPES) || [];\n\n removeObject(types, type);\n\n dispatch('prefs/set', { key: FAVORITE_TYPES, value: types }, { root: true });\n },\n\n toggleGroup({ dispatch, rootGetters }, { group, expanded }) {\n const groups = rootGetters['prefs/get'](EXPANDED_GROUPS);\n\n if ( expanded ) {\n addObject(groups, group);\n } else {\n removeObject(groups, group);\n }\n\n dispatch('prefs/set', { key: EXPANDED_GROUPS, value: groups }, { root: true });\n },\n\n configureType({ commit }, options) {\n commit('configureType', options);\n }\n};\n\nfunction _sortGroup(tree, mode) {\n const by = ['weight:desc', 'namespaced', 'label'];\n\n tree.children = sortBy(tree.children, by);\n\n for (const entry of tree.children ) {\n if ( entry.children ) {\n _sortGroup(entry, mode);\n }\n }\n}\n\nfunction _matchingCounts(typeObj, namespaces) {\n // That was easy\n if ( !typeObj.namespaced || !typeObj.byNamespace || namespaces === null || typeObj.count === null) {\n return typeObj.count;\n }\n\n let out = 0;\n\n // Otherwise start with 0 and count up\n for ( const namespace of namespaces ) {\n out += typeObj.byNamespace[namespace]?.count || 0;\n }\n\n return out;\n}\n\nfunction _applyMapping(objOrValue, mappings, keyField, cache, defaultFn) {\n let key = objOrValue;\n let found = false;\n\n if ( keyField ) {\n if ( typeof objOrValue !== 'object' ) {\n return objOrValue;\n }\n\n key = get(objOrValue, keyField);\n\n if ( typeof key !== 'string' ) {\n return null;\n }\n }\n\n if ( key && cache && cache[key] ) {\n return cache[key];\n }\n\n let out = `${ key }`;\n\n for ( const rule of mappings ) {\n const re = stringToRegex(rule.match);\n const captured = out.match(re);\n\n if ( captured && rule.replace ) {\n out = out.replace(re, rule.replace);\n\n found = true;\n if ( !rule.continueOnMatch ) {\n break;\n }\n }\n }\n\n if ( !found && defaultFn ) {\n out = defaultFn(out, objOrValue);\n }\n\n if ( cache ) {\n cache[key] = out;\n }\n\n return out;\n}\n\nfunction _addMapping(mappings, match, replace, weight, continueOnMatch) {\n match = regexToString(ensureRegex(match));\n\n mappings.push({\n match,\n replace,\n weight,\n continueOnMatch,\n insertIndex: mappings.length,\n });\n\n // Re-sort the list by weight (highest first) and insert time (oldest first)\n mappings.sort((a, b) => {\n const pri = b.weight - a.weight;\n\n if ( pri ) {\n return pri;\n }\n\n return a.insertIndex - b.insertIndex;\n });\n}\n\n// Regexes can't be represented in state because they don't serialize to JSON..\nconst regexCache = {};\n\nfunction regexToString(regex) {\n return regex.source;\n}\n\nfunction stringToRegex(str) {\n let out = regexCache[str];\n\n if ( !out ) {\n out = new RegExp(str);\n regexCache[str] = out;\n }\n\n return out;\n}\n\nfunction ifHave(getters, option) {\n switch (option) {\n case IF_HAVE.V2_MONITORING: {\n return haveV2Monitoring(getters);\n }\n case IF_HAVE.V1_MONITORING: {\n return haveV1Monitoring(getters);\n }\n case IF_HAVE.PROJECT: {\n return !!project(getters);\n }\n case IF_HAVE.NO_PROJECT: {\n return !project(getters);\n }\n case IF_HAVE.NOT_V1_ISTIO: {\n return !isV1Istio(getters);\n }\n case IF_HAVE.MULTI_CLUSTER: {\n return getters.isMultiCluster;\n }\n case IF_HAVE.NEUVECTOR_NAMESPACE: {\n return getters[`cluster/all`](NAMESPACE).find((n) => n.metadata.name === NEU_VECTOR_NAMESPACE);\n }\n case IF_HAVE.ADMIN: {\n return isAdminUser(getters);\n }\n case IF_HAVE.MCM_DISABLED: {\n return !getters['isRancherInHarvester'];\n }\n case IF_HAVE.NOT_STANDALONE_HARVESTER: {\n return !getters['isStandaloneHarvester'];\n }\n default:\n return false;\n }\n}\n\n// Could list a larger set of resources that typically only an admin user would have\nexport function isAdminUser(getters) {\n const canEditSettings = (getters['management/schemaFor'](MANAGEMENT.SETTING)?.resourceMethods || []).includes('PUT');\n const canEditFeatureFlags = (getters['management/schemaFor'](MANAGEMENT.FEATURE)?.resourceMethods || []).includes('PUT');\n const canInstallApps = (getters['management/schemaFor'](CATALOG.APP)?.resourceMethods || []).includes('PUT');\n const canAddRepos = (getters['management/schemaFor'](CATALOG.CLUSTER_REPO)?.resourceMethods || []).includes('PUT');\n const canPutHelmOperations = (getters['management/schemaFor'](CATALOG.OPERATION)?.resourceMethods || []).includes('PUT');\n\n return canEditSettings && canEditFeatureFlags && canInstallApps && canAddRepos && canPutHelmOperations;\n}\n\nfunction _findColumnByName(schema, colName) {\n const attributes = schema.attributes || {};\n const columns = attributes.columns || [];\n\n return findBy(columns, 'name', colName);\n}\n\nfunction _rowValueGetter(col) {\n // 'field' comes from the schema - typically it is of the form $.metadata.field[N]\n // We will use JsonPath to look up this value, which is costly - so if we can detect this format\n // Use a more efficient function to get the value\n const value = col.field.startsWith('.') ? `$${ col.field }` : col.field;\n\n if (process.client) {\n const found = value.match(FIELD_REGEX);\n\n if (found && found.length === 2) {\n const fieldIndex = parseInt(found[1], 10);\n\n return (row) => row.metadata?.fields?.[fieldIndex];\n }\n }\n\n return value;\n}\n\n// Is V1 Istio installed?\nfunction isV1Istio(getters) {\n const cluster = getters['currentCluster'];\n\n return !!cluster?.status?.istioEnabled;\n}\n\nfunction ifHaveVerb(rootGetters, module, verb, haveIds) {\n for ( const haveId of haveIds ) {\n const schema = rootGetters[`${ module }/schemaFor`](haveId);\n const want = verb.toLowerCase();\n const collectionMethods = schema.collectionMethods || [];\n const resourceMethods = schema.resourceMethods || [];\n const have = [...collectionMethods, ...resourceMethods].map((x) => x.toLowerCase());\n\n if ( !have.includes(want) && !have.includes(`blocked-${ want }`) ) {\n return false;\n }\n }\n\n return true;\n}\n\n// Look at the namespace filters to determine if a project is selected\nexport function project(getters) {\n const clusterId = getters['currentCluster']?.id;\n\n if ( !clusterId ) {\n return null;\n }\n\n const filters = getters['namespaceFilters'];\n const namespaces = [];\n let projectName = null;\n\n for (const filter of filters) {\n const [type, id] = filter.split('://', 2);\n\n if (type === 'project') {\n if (projectName !== null) {\n // More than one project selected\n return null;\n }\n projectName = id;\n } else if (type === 'ns') {\n namespaces.push(id);\n } else {\n // Something other than project or namespace\n return null;\n }\n }\n\n // No project found?\n if (!projectName) {\n return null;\n }\n\n // We have one project and a set of namespaces\n // Check that all of the namespaces belong to the project\n const project = getters['management/byId'](MANAGEMENT.PROJECT, `${ clusterId }/${ projectName }`);\n\n // No additional namespaces means just the project is selected\n if (namespaces.length === 0) {\n return project;\n }\n\n // Convert the project namespaces into a map so we can check existence easily\n const prjNamespaceMap = project.namespaces.reduce((m, ns) => {\n m[ns.metadata.name] = true;\n\n return m;\n }, {});\n\n // All of the namespace filters must belong to the project\n const found = namespaces.reduce((total, ns) => {\n return prjNamespaceMap[ns] ? total + 1 : 0;\n }, 0);\n\n if (found !== namespaces.length) {\n return null;\n }\n\n return project;\n}\n\nfunction hasCustom(state, rootState, kind, key, fallback) {\n const cache = state.cache[kind];\n\n if ( cache[key] !== undefined ) {\n return cache[key];\n }\n\n // Check to see if the custom kind is provided by a plugin\n if (!!rootState.$plugin.getDynamic(kind, key)) {\n cache[key] = true;\n\n return cache[key];\n }\n\n // Fallback\n try {\n fallback(key);\n cache[key] = true;\n } catch (e) {\n cache[key] = false;\n }\n\n return cache[key];\n}\n\nfunction loadExtension(rootState, kind, key, fallback) {\n const ext = rootState.$plugin.getDynamic(kind, key);\n\n if (ext) {\n if (typeof ext === 'function') {\n return ext;\n }\n\n return () => ext;\n }\n\n return fallback(key);\n}\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","// style-loader: Adds some css to the DOM by adding a \n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.roletemplate.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--2-0!../../../@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./management.cattle.io.roletemplate.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./management.cattle.io.roletemplate.vue?vue&type=template&id=5050d908&scoped=true&\"\nimport script from \"./management.cattle.io.roletemplate.vue?vue&type=script&lang=js&\"\nexport * from \"./management.cattle.io.roletemplate.vue?vue&type=script&lang=js&\"\nimport style0 from \"./management.cattle.io.roletemplate.vue?vue&type=style&index=0&id=5050d908&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5050d908\",\n null\n \n)\n\nexport default component.exports","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".text.info[data-v-5050d908]{display:flex;align-items:center}.text.info>span[data-v-5050d908]{margin-right:5px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","// style-loader: Adds some css to the DOM by adding a