diff --git a/assets/capi/capi-0.1.0.tgz b/assets/capi/capi-0.1.0.tgz index 794deb8..2920104 100644 Binary files a/assets/capi/capi-0.1.0.tgz and b/assets/capi/capi-0.1.0.tgz differ diff --git a/assets/index.yaml b/assets/index.yaml index b1771e6..9bb4b6c 100644 --- a/assets/index.yaml +++ b/assets/index.yaml @@ -12,12 +12,12 @@ entries: catalog.cattle.io/ui-component: plugins apiVersion: v2 appVersion: 0.1.0 - created: "2024-01-27T00:18:37.163254551Z" + created: "2024-01-27T00:34:53.452567077Z" description: capi plugin - digest: 68d4864421487cf1ab18de281082061e499c960b59a0761e3048a307363655fe + digest: f0b4ddb73aeaa4d40e947e20fff1eeab34bb36b0b56468d30fbfd3380a8c7f0a name: capi type: application urls: - assets/capi/capi-0.1.0.tgz version: 0.1.0 -generated: "2024-01-27T00:18:37.162398689Z" +generated: "2024-01-27T00:34:53.452039442Z" diff --git a/extensions/capi/0.1.0/plugin/capi-0.1.0.umd.min.js b/extensions/capi/0.1.0/plugin/capi-0.1.0.umd.min.js index 6654f62..c2532dd 100644 --- a/extensions/capi/0.1.0/plugin/capi-0.1.0.umd.min.js +++ b/extensions/capi/0.1.0/plugin/capi-0.1.0.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["capi-0.1.0"]=e(require("__jszip"),require("__jsyaml"),require("vue")):t["capi-0.1.0"]=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=[];s=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 _},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 _(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 _=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)t.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["o"],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["k"].GLOBAL_ROLE:r=i["k"].GLOBAL_ROLE_BINDING,o="globalRoleName";break;default:r=n.includes(c)?i["k"].CLUSTER_ROLE_TEMPLATE_BINDING:i["k"].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["k"].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),_=c(e),w=y?f:s(t),x=_?f:s(e);w=w==p?h:w,x=x==p?h:x;var O=w==h,E=x==h,k=w==x;if(k&&l(t)){if(!l(e))return!1;y=!0,O=!1}if(k&&!O)return m||(m=new r),y||u(t)?o(t,e,n,v,g,m):i(t,e,w,n,v,g,m);if(!(n&d)){var A=O&&b.call(t,"__wrapped__"),S=E&&b.call(e,"__wrapped__");if(A||S){var T=A?t.value():t,C=S?e.value():e;return m||(m=new r),g(T,C,n,v,m)}}return!!k&&(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,"b",(function(){return i})),n.d(e,"a",(function(){return a}));var r=n("907c"),o=n("e24b");r["w"];function i(t){var e;return t=((null===(e=t)||void 0===e?void 0:e.type)||t||"").toLowerCase(),t}function a(t,e,n,r,i){const a=i.dispatch("cleanForDiff",t),s=i.dispatch("cleanForDiff",e.toJSON()),c=i.dispatch("cleanForDiff",n.toJSON()),l=Object(o["b"])(a,c),u=Object(o["b"])(a,s),d=Object(o["c"])(l,u);if(console.log("Background Change",l),console.log("User Change",u),console.log("Conflicts",d),e.metadata.resourceVersion=n.metadata.resourceVersion,Object(o["a"])(e,l),d.length){const t=[r["i18n/t"]("validation.conflict",{fields:d.join(", "),fieldCount:d.length})];return t}return!1}},"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},"0a75":function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return i}));var r=n("640c"),o=n("da25");class i extends r["a"]{get canEditYaml(){return!1}get canUpdate(){return!1}get detailLocation(){const t=super._detailLocation;return{...t,query:{[o["a"]]:o["s"]}}}get _availableActions(){const t=super._availableActions;return t.filter(t=>"goToEdit"!==t.action&&"goToViewConfig"!==t.action)}}},"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===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},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")},"152d":function(t,e,n){"use strict";n("e907")},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["n"]||!e.mode||e.mode!==a["n"]||e.as)||(!(n!==a["k"]||!e.as||e.as!==a["k"])||(!(n!==a["m"]||e.as||!t.includes("-id")||e.mode&&(null===e||void 0===e?void 0:e.mode)===a["n"])||(!(n!==a["p"]||t.includes("-id")||!t.includes("-resource"))||!(n!==a["l"]||!t.endsWith("-create")))))}function d(t,e,n){if(!Object.keys(e).length)return!0;const{params:r}=t,o=["product","resource","namespace","cluster","id","mode","path","hash","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["n"])(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}},"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("edit","ClusterConfig",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"c3c3"))),t.register("edit","ControlPlaneEndpointSection",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"d221"))),t.register("edit","NetworkSection",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"3eff"))),t.register("edit","WorkerItem",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"4c7b"))),t.register("edit","cluster.x-k8s.io.cluster",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"df7e"))),t.register("models","cluster.x-k8s.io.cluster",()=>n("0a75")),t.register("models","cluster.x-k8s.io.clusterclass",()=>n("6650")),t.register("models","operator.cluster.x-k8s.io.infrastructureprovider",()=>n("7eaa")),t.register("l10n","en-us",()=>n.e(7).then(n.t.bind(null,"1bb6",7))),t.register("formatters","AutoImportState",()=>n.e(2).then(n.bind(null,"bd44")))}var a=n("7083"),s=n("da25"),c=n("7e89"),l=function(){var t=this,e=t._self._c;return e("div",[t.embeddedCapiEnabled||!t.hasClusterClassSchema?e("div",{staticClass:"centered"},[e("h1",{staticClass:"mb-20"},[t._v(" "+t._s(t.t("capi.installation.title"))+" ")]),e("p",{staticClass:"description",domProps:{innerHTML:t._s(t.t("capi.installation.description",{},!0))}}),e("Banner",{attrs:{color:"warning"}},[e("div",[t.embeddedCapiEnabled?e("t",{attrs:{k:"capi.installation.disableFeatureFlag",raw:""}}):t._e(),e("br"),t.hasClusterClassSchema?t._e():e("t",{attrs:{k:"capi.installation.turtlesNeeded",raw:""}})],1)])],1):t._e()])},u=[],d=n("907c"),p=n("eb32"),f={name:"CAPITurtlesDashboard",async middleware({redirect:t,route:e,store:n}){try{const r=await n.dispatch("management/find",{type:d["w"],id:c["b"].CLUSTER_CLASS,opt:{force:!0}});if(r)return t({name:"c-cluster-product-resource",params:{...e.params,cluster:"_",resource:d["a"].CAPI_CLUSTER,product:"manager"}})}catch{}},components:{Banner:p["a"]},async fetch(){this.$store.getters["management/canList"](d["k"].FEATURE)&&(this.features=await this.$store.dispatch("management/findAll",{type:d["k"].FEATURE}))},data(){return{features:[]}},computed:{embeddedCapiEnabled(){var t;const e=this.features.find(t=>"embedded-cluster-api"===t.id);return(null===e||void 0===e||null===(t=e.spec)||void 0===t?void 0:t.value)||!e},hasClusterClassSchema(){return!!this.$store.getters["management/schemaFor"](c["b"].CLUSTER_CLASS)}}},h=f,v=(n("1f15"),n("d802")),b=Object(v["a"])(h,l,u,!1,null,"337ae8b8",null),g=b.exports;const m=[{name:"c-cluster-manager-capi",path:"/c/:cluster/manager/capi",component:g}];var y=m,_=function(t){i(t),t.metadata=n("9224"),t.addProduct(n("932e")),t.addRoutes(y),t.addTab(a["e"].RESOURCE_DETAIL,{resource:["namespace"],cluster:["local"],mode:[s["l"],s["j"],s["n"],"config"]},{name:"capi-auto-import",labelKey:"capi.autoImport.label",weight:-5,showHeader:!0,component:()=>n.e(4).then(n.bind(null,"64c9"))}),t.addTableColumn(a["f"].RESOURCE,{path:[{urlPath:"/c/local/explorer/projectsnamespaces",exact:!0}]},{name:"capi-auto-import",labelKey:"capi.autoImport.label",getValue:t=>"true"===t.labels[c["d"].AUTO_IMPORT],width:100,formatter:"AutoImportState"}),t.addPanel(a["d"].RESOURCE_LIST,{resource:["provisioning.cattle.io.cluster"]},{component:()=>n.e(5).then(n.bind(null,"deec"))})};e["default"]=_},"1d19":function(t,e,n){"use strict";n.d(e,"c",(function(){return s})),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["q"])(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},"1f15":function(t,e,n){"use strict";n("40ee")},"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},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)}}},"2cb5":function(t,e,n){"use strict";function r(t){return w(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,"b",(function(){return r})),n.d(e,"r",(function(){return o})),n.d(e,"q",(function(){return i})),n.d(e,"f",(function(){return s})),n.d(e,"g",(function(){return c})),n.d(e,"n",(function(){return h})),n.d(e,"m",(function(){return v})),n.d(e,"o",(function(){return b})),n.d(e,"h",(function(){return g})),n.d(e,"d",(function(){return w})),n.d(e,"a",(function(){return x})),n.d(e,"c",(function(){return O})),n.d(e,"k",(function(){return E})),n.d(e,"e",(function(){return k})),n.d(e,"l",(function(){return A})),n.d(e,"p",(function(){return T})),n.d(e,"j",(function(){return C})),n.d(e,"i",(function(){return R}));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 _=/[ _]/g;function w(t){return y(t).replace(_,"-")}function x(t){return t=t||"",!t.match(/[^\r\n\t\x20-\x7F]/)}function O(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 E(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 S=/[^."']+|"([^"]*)"|'([^']*)'/g;function T(t){return t.includes('"')||t.includes("'")?t.match(S).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}function R(t){const e=/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/;return e.test(t)}},"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},"3b1f":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".delete-warning[data-v-11104fb6]{color:var(--error)}.remove-project-dialog[data-v-11104fb6]{border:1px solid var(--border);padding:10px;border-radius:5px}.remove-project-dialog .display-name[data-v-11104fb6]{font-weight:700}",""]),t.exports=e},"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 E(t);f=setTimeout(O,w(t))}function E(t){return f=void 0,m&&l?y(t):(l=u=void 0,p)}function k(){void 0!==f&&clearTimeout(f),v=0,l=h=u=f=void 0}function A(){return void 0===f?p:E(o())}function S(){var t=o(),n=x(t);if(l=arguments,u=this,h=t,n){if(void 0===f)return _(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=k,S.flush=A,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 xt})),n.d(e,"s",(function(){return Ot})),n.d(e,"J",(function(){return Et})),n.d(e,"I",(function(){return kt})),n.d(e,"x",(function(){return At})),n.d(e,"w",(function(){return St})),n.d(e,"t",(function(){return Ct})),n.d(e,"u",(function(){return Rt})),n.d(e,"b",(function(){return It})),n.d(e,"c",(function(){return Nt})),n.d(e,"e",(function(){return jt})),n.d(e,"f",(function(){return Lt})),n.d(e,"y",(function(){return Dt})),n.d(e,"z",(function(){return Pt})),n.d(e,"n",(function(){return Ft})),n.d(e,"N",(function(){return $t})),n.d(e,"O",(function(){return Mt})),n.d(e,"Q",(function(){return Ut})),n.d(e,"P",(function(){return Bt})),n.d(e,"M",(function(){return Gt})),n.d(e,"K",(function(){return Ht})),n.d(e,"g",(function(){return Vt})),n.d(e,"o",(function(){return qt})),n.d(e,"B",(function(){return Kt})),n.d(e,"v",(function(){return zt})),n.d(e,"C",(function(){return Wt})),n.d(e,"A",(function(){return Yt})),n.d(e,"q",(function(){return Xt})),n.d(e,"k",(function(){return Jt})),n.d(e,"l",(function(){return Qt})),n.d(e,"m",(function(){return Zt})),n.d(e,"G",(function(){return te})),n.d(e,"L",(function(){return ee})),n.d(e,"F",(function(){return ne})),n.d(e,"T",(function(){return re})),n.d(e,"R",(function(){return oe})),n.d(e,"S",(function(){return ie})),n.d(e,"j",(function(){return ae})),n.d(e,"r",(function(){return se})),n.d(e,"p",(function(){return ce})),n.d(e,"d",(function(){return le})),n.d(e,"i",(function(){return ue})),n.d(e,"a",(function(){return de})),n.d(e,"E",(function(){return fe})),n.d(e,"h",(function(){return he})),n.d(e,"D",(function(){return ve}));var r=n("4ac6"),o=n("907c"),i=function(){var t=this,e=t._self._c;return e("div",{ref:"container",attrs:{"data-testid":"cluster-list-container"}},[e("div",{staticClass:"sortable-table-header",class:{titled:t.$slots.title&&t.$slots.title.length}},[t._t("title"),t.showHeaderRow?e("div",{staticClass:"fixed-header-actions",class:{button:!!t.$slots["header-button"],"advanced-filtering":t.hasAdvancedFiltering}},[e("div",{staticClass:"bulk",class:t.bulkActionsClass},[t._t("header-left",(function(){return[t.tableActions?[t._l(t.availableActions,(function(n){return e("button",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.actionTooltip,expression:"actionTooltip"}],key:n.action,staticClass:"btn role-primary",class:{[t.bulkActionClass]:!0},attrs:{id:n.action,type:"button",disabled:!n.enabled,"data-testid":t.componentTestid+"-"+n.action},on:{click:function(e){return t.applyTableAction(n,null,e)},mouseover:function(e){return t.setBulkActionOfInterest(n)},mouseleave:function(e){return t.setBulkActionOfInterest(null)}}},[n.icon?e("i",{class:n.icon}):t._e(),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:n.label,expression:"act.label"}]})])})),e("ActionDropdown",{staticClass:"bulk-actions-dropdown",class:t.bulkActionsDropdownClass,attrs:{"disable-button":!t.selectedRows.length,size:"sm"},scopedSlots:t._u([{key:"button-content",fn:function(){return[e("button",{ref:"actionDropDown",staticClass:"btn bg-primary mr-0",attrs:{disabled:!t.selectedRows.length}},[e("i",{staticClass:"icon icon-gear"}),e("span",[t._v(t._s(t.t("sortableTable.bulkActions.collapsed.label")))]),e("i",{staticClass:"ml-10 icon icon-chevron-down"})])]},proxy:!0},{key:"popover-content",fn:function(){return[e("ul",{staticClass:"list-unstyled menu"},t._l(t.hiddenActions,(function(n){return e("li",{directives:[{name:"close-popover",rawName:"v-close-popover"},{name:"clean-tooltip",rawName:"v-clean-tooltip",value:{content:t.actionTooltip,placement:"right"},expression:"{\n content: actionTooltip,\n placement: 'right'\n }"}],key:n.action,class:{disabled:!n.enabled},on:{click:function(e){return t.applyTableAction(n,null,e)},mouseover:function(e){return t.setBulkActionOfInterest(n)},mouseleave:function(e){return t.setBulkActionOfInterest(null)}}},[n.icon?e("i",{class:n.icon}):t._e(),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:n.label,expression:"act.label"}]})])})),0)]},proxy:!0}],null,!1,2209545330)}),t.selectedRowsText?e("label",{staticClass:"action-availability",class:t.bulkActionAvailabilityClass},[t._v(" "+t._s(t.selectedRowsText)+" ")]):t._e()]:t._e()]}))],2),!t.hasAdvancedFiltering&&t.$slots["header-middle"]&&t.$slots["header-middle"].length?e("div",{staticClass:"middle"},[t._t("header-middle")],2):t._e(),t.search||t.hasAdvancedFiltering||t.isTooManyItemsToAutoUpdate||t.$slots["header-right"]&&t.$slots["header-right"].length?e("div",{staticClass:"search row",attrs:{"data-testid":"search-box-filter-row"}},[t.hasAdvancedFiltering?e("ul",{staticClass:"advanced-filters-applied"},t._l(t.advancedFilteringValues,(function(n,r){return e("li",{key:r},[e("span",{staticClass:"label"},[t._v(t._s(`"${n.value}" ${t.t("sortableTable.in")} ${n.label}`))]),e("span",{staticClass:"cross",on:{click:function(e){return t.clearAdvancedFilter(r)}}},[t._v("✕")]),e("div",{staticClass:"bg"})])})),0):t._e(),t._t("header-right"),t.isTooManyItemsToAutoUpdate?e("AsyncButton",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.t("performance.manualRefresh.buttonTooltip"),expression:"t('performance.manualRefresh.buttonTooltip')"}],staticClass:"manual-refresh",attrs:{mode:"refresh","current-phase":t.currentPhase},on:{click:t.debouncedRefreshTableData}}):t._e(),t.hasAdvancedFiltering?e("div",{ref:"advanced-filter-group",staticClass:"advanced-filter-group"},[e("button",{staticClass:"btn role-primary",on:{click:function(e){t.advancedFilteringVisibility=!t.advancedFilteringVisibility}}},[t._v(" "+t._s(t.t("sortableTable.addFilter"))+" ")]),e("div",{directives:[{name:"show",rawName:"v-show",value:t.advancedFilteringVisibility,expression:"advancedFilteringVisibility"}],staticClass:"advanced-filter-container"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.advFilterSearchTerm,expression:"advFilterSearchTerm"}],ref:"advancedSearchQuery",staticClass:"advanced-search-box",attrs:{type:"search",placeholder:t.t("sortableTable.filterFor")},domProps:{value:t.advFilterSearchTerm},on:{input:function(e){e.target.composing||(t.advFilterSearchTerm=e.target.value)}}}),e("div",{staticClass:"middle-block"},[e("span",[t._v(t._s(t.t("sortableTable.in")))]),e("LabeledSelect",{staticClass:"filter-select",attrs:{clearable:!0,options:t.advFilterSelectOptions,disabled:!1,searchable:!1,mode:"edit",multiple:!1,taggable:!1,placeholder:t.t("sortableTable.selectCol")},on:{selecting:e=>t.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)},a=[],s=n("9ce4"),c=n("050d"),l=n.n(c),u=n("2cb5"),d=n("e24b"),p=n("bddd"),f=n("0df0"),h=n("d709"),v=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)])},b=[],g={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(){}}},m=g,y=(n("78e0"),n("d802")),_=Object(y["a"])(m,v,b,!1,null,null,null),w=_.exports,x=n("05ca"),O=n.n(x),E=n("44db"),k=n.n(E),A=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)])},S=[],T=n("98d3");function C(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:C(t,e)}const R="all",I="some",N="none";var j={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?R:e>0?I:N},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&&D(o,t,!1);for(const a of r)if(a.availableActions)for(const t of a.availableActions)t.bulkable&&t.enabled&&D(o,t,!1);const i=P(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(T["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||C(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(d["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(T["c"])(t))this.toggle(e);else if(Object(T["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(T["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(d["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(d["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(T["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});F(o,t,e,r,this),this.actionOfInterest=null},clearSelection(){this.update([],this.selectedRows)}}};let L=0;function D(t,e,n=!0){let r=e.action;r||(r="anon"+L,L++);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 P(t,e=!1){const n=Object(p["d"])(Object.values(t),"anyEnabled",!0);for(const r of n)r.enabled=!e&&r.available>=r.total;return n}function F(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 $="left",M="right",U="top",B="center",G="center",H="bottom",V="auto";function q(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 K(t){return{top:t.clientY,left:t.clientX,bottom:t.clientY,right:t.clientX,width:0,height:0}}function z(){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 W(t,e,n,r){let{positionX:o=V,positionY:i=V}=n||{};const{fudgeX:a=0,fudgeY:s=0,overlapX:c=!0,overlapY:l=!1}=n||{},u=z();let d;d=e instanceof Event?K(e):q(e);let p={};t&&(p=q(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===B&&v.center<0&&(o=V),o===V?o=v.left<0||1.5*v.right>v.left?M:$:i===$&&v.left<0?o=M:i===M&&v.right<0&&(o=$),o){case $:f.left=h.left-a+"px";break;case B:f.left=(h.left+h.right)/2-p.width/2-a+"px";break;case M:f.left=h.right+a-p.width+"px";break}switch(i===G&&v.middle<0&&(i=V),i===V?i=v.top<0||1.5*v.bottom>v.top?H:U:i===U&&v.top<0?i=H:i===H&&v.bottom<0&&(i=U),i){case U:f.top=h.top+s-p.height+"px";break;case B:f.top=(h.top+h.bottom)/2+s-p.height+"px";break;case H:f.top=h.bottom-s+"px";break}return f}var Y=n("466b"),X={components:{Checkbox:f["a"],LabeledSelect:Y["a"]},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!==N},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===I}},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=W(e,t||n,{overlapX:!0,fudgeX:26,fudgeY:-22,positionX:B,positionY:V})),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}}},J=X,Q=(n("d6e7"),n("c310"),Object(y["a"])(J,A,S,!1,null,"96d8a090",null)),Z=Q.exports;const tt="allcols",et="All Columns",nt=":::islabel";var rt={data(){return{searchQuery:null,previousFilter:null,previousResult:null}},computed:{searchFields(){const t=ot(this.columns);return this.extraSearchFields&&Object(p["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===tt){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}${nt}`:t.value;r.push(e)}}),at(r,[e.value],t)}{if(e.prop.includes("[")&&e.prop.includes("]"))return at(JSON.parse(e.prop),[e.value],t);let n=e.prop;return e.prop.includes("metadata.labels")&&(n=`${e.label}${nt}`),at([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,l=!0;if(l=at(n,r,t),i&&o){const e=t[o]||[];for(let n=e.length-1;n>=0;n--){let e=!0;e=at(i,r,t),e&&c++}a[Object(d["f"])(t,this.keyField)]=c}l||0!==c||Object(p["h"])(e,s)}return this.subMatches=a,this.previousResult=e,e}},watch:{arrangedRows(t){this.previousResult=null}}};function ot(t){const e=[];return(t||[]).forEach(t=>{const n=t.search;n?"string"===typeof n?Object(p["a"])(e,n):Object(p["g"])(n)&&Object(p["b"])(e,n):!1===n||Object(p["a"])(e,t.value||t.name)}),e.filter(t=>!!t)}const it=/^[0-9a-f\.:]+$/i;function at(t,e,n){for(let r=0;r0&&(t=r.substr(e+1),r=r.substr(0,e)),o=r.includes(".")?Object(d["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=it.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 ct=n("1d19"),lt={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(p["a"])(r,"nameSort"),Object(p["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(ct["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)}}},ut=n("5000"),dt={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"](ut["g"]),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)},getPageByRow(t,e=(t=>t)){const n=this.filteredRows.map(e).indexOf(t);return-1===n?null:Math.ceil(n/this.perPage)}}},pt={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(d["f"])(o,t)||"",a=Object(d["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 ft="inline-block";var ht={data(){return{bulkActionsClass:"bulk",bulkActionClass:"bulk-action",bulkActionsDropdownClass:"bulk-actions-dropdown",bulkActionAvailabilityClass:"action-availability",hiddenActions:[],updateHiddenBulkActions:k()(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=ft,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=ft,u=-1,s=0,c=!0,l=n-e.offsetWidth-a}c||(e.style.display="none")}}};const vt=tt;var bt={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:vt,advFilterSelectedLabel:et,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:et,label:et,value:tt,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=vt,this.advFilterSelectedLabel=et,this.advFilterSearchTerm=null)},clearAllAdvancedFilters(){this.advancedFilteringValues=[],this.eventualSearchQuery=this.advancedFilteringValues,this.advancedFilteringVisibility=!1,this.advFilterSelectedProp=vt,this.advFilterSelectedLabel=et,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 gt={},mt={TABLET:"tablet",LAPTOP:"laptop",DESKTOP:"desktop"};var yt={name:"SortableTable",components:{THead:Z,Checkbox:f["a"],AsyncButton:h["b"],ActionDropdown:w,LabeledSelect:Y["a"]},mixins:[rt,lt,dt,pt,j,ht,bt],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:h["a"].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:k()((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?h["a"].ACTION:h["a"].WAITING,t&&t!==e&&this.$nextTick(()=>this.updateLiveAndDelayed())},immediate:!0}},created(){this.debouncedRefreshTableData=k()(this.refreshTableData,500)},computed:{...Object(s["a"])({isTooManyItemsToAutoUpdate:"resource-fetch/isTooManyItemsToAutoUpdate"}),...Object(s["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(p["i"])(t,e)}const e=t.find(t=>!t.width);if(!e){const e=t.find(t=>t.canBeVariable);if(e){const n=Object(d["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(u["d"])(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(gt[r.formatter])a=gt[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:d["f"],dasherize:u["d"],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=l()();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(u["r"])(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(d["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:O()((function(t,e=!1){const n=this.focusAdjacent(!0),r=C(n,"tr");null!==r&&void 0!==r&&r.classList.contains("row-selected")||this.keySelectRow(r,e)}),50),focusPrevious:O()((function(t,e=!1){const n=this.focusAdjacent(!1),r=C(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(d["f"])(t,e)]),r=t.stateDescription;return n||r},handleActionButtonClick(t,e){this.$emit("clickedActionButton",{event:e,targetElement:this.$refs["actionButton"+t][0]})}}},_t=yt,wt=(n("7e5c"),n("9001"),Object(y["a"])(_t,i,a,!1,null,"3b0138b8",null));wt.exports;const xt={name:"state",labelKey:"tableHeaders.state",sort:["stateSort","nameSort"],value:"stateDisplay",getValue:t=>t.stateDisplay,width:100,default:"unknown",formatter:"BadgeStateFormatter"},Ot={name:"name",labelKey:"tableHeaders.name",value:"nameDisplay",getValue:t=>t.nameDisplay,sort:["nameSort"],formatter:"LinkDetail",canBeVariable:!0},Et={name:"storage_class_provisioner",labelKey:"tableHeaders.storage_class_provisioner",value:"provisionerDisplay",sort:["provisioner"]},kt={name:"storage_class_default",labelKey:"tableHeaders.default",value:"isDefault",sort:["isDefault"],formatter:"Checked"},At={name:"persistent_volume_source",labelKey:"tableHeaders.persistentVolumeSource",value:"source",sort:["provisioner"]},St={name:"persistent-volume-claim",labelKey:"tableHeaders.persistentVolumeClaim",sort:["nameSort"],value:"claimName",formatter:"LinkDetail",formatterOpts:{reference:"claim.detailLocation"}},Tt={name:"localOutputRefs",labelKey:"tableHeaders.output",value:"outputs",sort:["outputsSortable"],formatter:"ListLink",formatterOpts:{options:{internal:!0}}},Ct={name:"namespace",labelKey:"tableHeaders.namespace",value:"namespace",getValue:t=>t.namespace,sort:"namespace",dashIfEmpty:!0},Rt={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["o"]}},It={name:"age",labelKey:"tableHeaders.age",value:"creationTimestamp",getValue:t=>t.creationTimestamp,sort:"creationTimestamp:desc",search:!1,formatter:"LiveDate",width:100,align:"left"},Nt={...It,getValue:t=>t.created,value:"created",sort:"created:desc"},jt={name:"description",labelKey:"tableHeaders.description",align:"left",sort:["description"],width:300},Lt={name:"duration",labelKey:"tableHeaders.duration",value:"duration.value",sort:"duration.seconds",formatter:"LiveDuration"},Dt={name:"pod_images",labelKey:"tableHeaders.podImages",value:"imageNames",getValue:t=>t.imageNames,sort:"imageNames",formatter:"PodImages"},Pt={name:"pod_restarts",labelKey:"tableHeaders.podRestarts",formatter:"LivePodRestarts",delayLoading:!0,value:"restartCount",getValue:t=>t.restartCount,search:!1,liveUpdates:!0},Ft={name:"keys",labelKey:"tableHeaders.keys",sort:!1,value:"keysDisplay"},$t={name:"username",labelKey:"tableHeaders.username",value:"username",dashIfEmpty:!0,sort:"username"},Mt={name:"name",labelKey:"tableHeaders.name",value:"nameDisplay",sort:["nameSort"],dashIfEmpty:!0},Ut={name:"provider",labelKey:"tableHeaders.provider",value:"providerDisplay",dashIfEmpty:!0,sort:"providerDisplay"},Bt={name:"user-id",labelKey:"tableHeaders.userId",value:"id",formatter:"LinkDetail",canBeVariable:!0,sort:"id"},Gt={name:"type",labelKey:"tableHeaders.type",value:"typeDisplay",getValue:t=>t.typeDisplay,sort:["typeDisplay"],width:100},Ht={name:"subType",labelKey:"tableHeaders.subType",value:"subTypeDisplay",sort:["subTypeDisplay"],width:120},Vt={name:"type",labelKey:"tableHeaders.type",value:"eventType",sort:"eventType"},qt={name:"lastSeen",labelKey:"tableHeaders.lastSeen",value:"lastSeen",sort:"lastTimestamp:desc",tooltip:"tableHeaders.lastSeenTooltip"},Kt={name:"reason",labelKey:"tableHeaders.reason",value:"reason",sort:["reason"]},zt={name:"object",labelKey:"tableHeaders.object",value:"involvedObject",sort:["involvedObject.kind","involvedObject.name"],canBeVariable:!0,formatter:"InvolvedObjectLink"},Wt={name:"reclaimPolicy",labelKey:"tableHeaders.reclaimPolicy",value:"spec.persistentVolumeReclaimPolicy",sort:["spec.persistentVolumeReclaimPolicy"]},Yt={name:"pvReason",labelKey:"tableHeaders.reason",value:"status.reason",sort:["status.reason"]},Xt={name:"message",labelKey:"tableHeaders.message",value:"message",sort:["message"]},Jt={name:"ingressClassName",labelKey:"tableHeaders.ingressClass",value:"$['spec']['ingressClassName']",sort:"$['spec']['ingressClassName']"},Qt={name:"ingressDefaultBackend",labelKey:"tableHeaders.ingressDefaultBackend",value:"hasDefaultBackend",sort:["hasDefaultBackend:desc"],formatter:"Checked",width:75,align:"center"},Zt={name:"ingressTarget",labelKey:"tableHeaders.ingressTarget",value:"$['spec']",formatter:"IngressTarget",sort:"$['spec']['rules'][0].host"},te={name:"type",labelKey:"tableHeaders.type",value:"$['spec']['type']",sort:"$['spec']['type']",formatter:"ServiceType"},ee={formatter:"ServiceTargets",labelKey:"tableHeaders.targetPort",name:"targetPort",sort:"$['spec']['targetPort']",value:"$['spec']['targetPort']"},ne={formatter:"KeyValue",name:"selector",labelKey:"tableHeaders.selector",value:"$['spec']['selector']",sort:"$['spec']['selector']"},re={...Dt,value:"",breakpoint:mt.LAPTOP},oe={name:"workloadEndpoints",labelKey:"tableHeaders.endpoints",value:`$['metadata']['annotations']['${r["c"]}']`,getValue:t=>{var e;return null===(e=t.metadata)||void 0===e||null===(e=e.annotations)||void 0===e?void 0:e[r["c"]]},formatter:"Endpoints",dashIfEmpty:!0,breakpoint:mt.DESKTOP,maxPageSize:25},ie={name:"workloadHealthScale",labelKey:"tableHeaders.health",formatter:"WorkloadHealthScale",getValue:()=>{},width:150,skipSelect:!0,delayLoading:!0,search:!1,liveUpdates:!0},ae={name:"reference",labelKey:"tableHeaders.hpaReference",value:"spec.scaleTargetRef.name",sort:"spec.scaleTargetRef.name"},se={name:"minimum-replica",labelKey:"tableHeaders.minReplicas",value:"spec.minReplicas",sort:"spec.minReplicas"},ce={name:"maximum-replica",labelKey:"tableHeaders.maxReplicas",value:"spec.maxReplicas",sort:"spec.maxReplicas"},le={name:"current-replica",labelKey:"tableHeaders.currentReplicas",value:"status.currentReplicas",sort:"status.currentReplicas"},ue={...xt,value:"$",formatter:"LiveExpiryBadgeState"},de={name:"id",labelKey:"tableHeaders.accessKey",align:"left",sort:["name"],width:200},pe={name:"scope",value:"clusterName",labelKey:"tableHeaders.scope",dashIfEmpty:!0,align:"left",sort:["scope"],width:100},fe={...pe,value:"clusterId",sort:["clusterId"]},he={name:"expires",value:"expiresAt",labelKey:"tableHeaders.expires",align:"left",sort:["expiresAt"],width:200,formatter:"LiveExpiryDate"},ve={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},"466b":function(t,e,n){"use strict";var r=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)},o=[],i=n("df7c"),a=n("480e"),s=n("e24b"),c=n("d174"),l=n("9f16"),u=n("e8f0"),d=n("9e74"),p=n.n(d),f={name:"LabeledSelect",components:{LabeledTooltip:c["a"]},mixins:[i["a"],a["a"],l["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=>p()(this.reduce(t),this.reduce(e)));if(e){const t=Object(s["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(s["f"])(t,this.optionLabel)){if(this.localizedLabel){const e=Object(s["f"])(t,this.optionLabel);return this.$store.getters["i18n/t"](e)||e}return Object(s["f"])(t,this.optionLabel)}return t},positionDropdown(t,e,{width:n}){Object(u["a"])(t,e,n,this.placement)},get:s["f"],onClickOption(t,e){u["b"].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(s["f"])(t,this.optionKey):this.getOptionLabel(t)}}},h=f,v=(n("a805"),n("d802")),b=Object(v["a"])(h,r,o,!1,null,"0abf511e",null);e["a"]=b.exports},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]",_="[object ArrayBuffer]",w="[object DataView]",x=r?r.prototype:void 0,O=x?x.valueOf:void 0;function E(t,e,n,r,x,E,k){switch(n){case w:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case _:return!(t.byteLength!=e.byteLength||!E(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 A=s;case g:var S=r&l;if(A||(A=c),t.size!=e.size&&!S)return!1;var T=k.get(t);if(T)return T==e;r|=u,k.set(t,e);var C=a(A(t),A(e),r,x,E,k);return k["delete"](t),C;case y:if(O)return O.call(t)==O.call(e)}return!1}t.exports=E},"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},"480e":function(t,e,n){"use strict";var r=n("8bbf"),o=n.n(r),i=n("da25");function a(t,e){t&&("function"===typeof e&&(e=e()),t.style.width="string"!==typeof e?e+"px":e)}function s(t){if(t&&t.length)return t.length?parseFloat(getComputedStyle(t[0]).width.replace("px","")):parseFloat(getComputedStyle(t).width.replace("px",""))}e["a"]=o.a.extend({inheritAttrs:!1,props:{mode:{type:String,default:i["n"]},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===i["r"]||!!(""+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===i["r"]},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=s(this.$refs.select)||0,n=s(t)||0;nt.replace(/^ui-/,""),mangleWrite:t=>"ui-"+t}),o("pcs","",{asCookie:s,asUserPreference:!1}),o("locale","en-us",{asCookie:s}),o("keymap","sublime",{options:["sublime","emacs","vim"]})),h=o("per-page",100,{options:[10,25,50,100],parseJSON:a}),v=(o("logs-wrap",!0,{parseJSON:a}),o("logs-time",!0,{parseJSON:a}),o("logs-range","30 minutes",{parseJSON:a}),o("hide-repos",[],{parseJSON:a}),o("hide-desc",[],{parseJSON:a}),o("hide-sensitive",!0,{options:[!0,!1],parseJSON:a}),o("show-pre-release",!1,{options:[!1,!0],parseJSON:a}),o("chart-mode","featured",{parseJSON:a}),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:a})),b=o("view-in-api",!1,{parseJSON:a,inheritFrom:v}),g=(o("all-namespaces",!1,{parseJSON:a,inheritFrom:v}),o("theme-shortcut",!1,{parseJSON:a,inheritFrom:v}),o("last-visited","home",{parseJSON:a}),o("seen-whatsnew","",{parseJSON:a}),o("read-whatsnew","",{parseJSON:a}),o("after-login-route","home",{parseJSON:a})),m=(o("home-page-cards",{},{parseJSON:a}),o("plugin-developer",!1,{parseJSON:a,inheritFrom:v}),"rke1"),y="rke2";o("provisioner",y,{options:[m,y]}),o("hide-psp-deprecation-banner",!1,{parseJSON:a}),o("scale-pool-prompt",null,{parseJSON:a})}).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.canManageNamespaces?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["m"]}),this.allProjects=await this.$store.dispatch("management/findAll",{type:s["k"].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["h"]]===(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;return null===(t=this.currentProject)||void 0===t||null===(t=t.spec)||void 0===t?void 0:t.displayName},names(){return this.filteredNamespaces.map(t=>t.nameDisplay).slice(0,5)},canManageNamespaces(){var t;return this.currentCluster.canUpdate||this.currentProject.canDelete&&this.filteredNamespaces.length&&(null===(t=this.filteredNamespaces[0])||void 0===t?void 0:t.canDelete)}},methods:{resourceNames:l["o"],remove(){return!(!this.deleteProjectNamespaces&&this.canManageNamespaces)&&Promise.all(this.filteredNamespaces.map(t=>t.remove())).then(()=>!1)}}},d=u,p=(n("152d"),n("d802")),f=Object(p["a"])(d,r,o,!1,null,"11104fb6",null);e["default"]=f.exports},"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=n("6418"),a=n("1032"),s=n("9ce4"),c=n("9ec3"),l={name:"PromptRemovePodDialog",components:{Banner:i["a"],Checkbox:a["a"]},props:{value:{type:Array,default:()=>[]},names:{type:Array,default:()=>[]},type:{type:String,required:!0}},data(){return{errors:[],forceDelete:!1}},computed:{...Object(s["b"])("action-menu",["toRemove"]),...Object(s["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(c["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)}}},u=l,d=(n("c210"),n("d802")),p=Object(d["a"])(u,r,o,!1,null,"db441fb2",null);e["default"]=p.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=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["k"])(e,r["f"]))}setLabels(t){this.metadata||(this.metadata={});const e=this.metadata.labels||{},n=s()(e,(t,e)=>Object(u["k"])(e,r["f"]));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["k"])(e,r["b"]))}setAnnotations(t){this.metadata||(this.metadata={});const e=this.metadata.annotations||{},n=s()(e,(t,e)=>Object(u["k"])(e,r["b"]));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;return(null===(t=this.metadata)||void 0===t||null===(t=t.annotations)||void 0===t?void 0:t[r["d"]])||(null===(e=this.spec)||void 0===e?void 0:e.description)||this._description}set description(t){var e;null!==(e=this.metadata)&&void 0!==e&&e.annotations&&(this.metadata.annotations[r["d"]]=t),this.spec&&(this.spec.description=t),this._description=t}}},6418:function(t,e,n){"use strict";var r=n("eb32");n.d(e,"a",(function(){return r["a"]}))},"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"),_=n.n(y);function w(t="",e,n){try{_.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["h"])(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;E(i,o,e,n),k(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")};E(t,o,e,n),k(t,o,e,n)})}if(o&&!Object(g["h"])(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;E(i,o,e,n),k(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")};E(t,o,e,n),k(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 E(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 k(t,e,n,r){const o=["In","NotIn","Exists","DoesNotExist"],{labelSelector:i}=t;if(i&&!Object(g["h"])(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 A=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]===A["u"].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 T(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 C=["server-url"];function R(t,e,n,r,o){const i=r[0];return C.includes(i)&&!t.toLowerCase().startsWith("https://")&&n.push(e["i18n/t"]("validation.setting.serverUrl.https")),n}e["a"]={clusterName:T,clusterIp:l,externalName:u,flowOutput:i,groupsAreValid:h,logdna:a,ruleGroups:f,interval:b,servicePort:c,matching:v,containerImages:m,cronSchedule:w,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,"d",(function(){return i})),n.d(e,"e",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"f",(function(){return c})),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),E=w.get(O);if(E)r(t,n,E);else{var k=_?_(x,O,n+"",t,e,w):void 0,A=void 0===k;if(A){var S=l(O),T=!S&&d(O),C=!S&&!T&&v(O);k=O,S||T||C?l(x)?k=x:u(x)?k=a(x):T?(A=!1,k=o(O,!0)):C?(A=!1,k=i(O,!0)):k=[]:h(O)||c(O)?(k=x,c(x)?k=g(x):f(x)&&!p(x)||(k=s(O))):A=!1}A&&(w.set(O,k),y(k,O,m,_,w),w["delete"](O)),r(t,n,k)}}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},"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,_=([n,r])=>o=>m(n)(o)||y(r)(o)?t("validation.betweenLengths",{key:e,min:n,max:r}):void 0,w=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,E=n=>{const r=""+n,o=r.match(/(^0+)(.+)/);return o?t("validation.number.isOctal",{key:e}):void 0},k=n=>parseInt(n,10)<1||parseInt(n,10)>65535?t("validation.number.between",{key:e,min:"1",max:"65535"}):void 0,A=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,T=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=>(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,N=(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}),L=(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},F=n=>/^\d+[hms]$/.test(n)?void 0:t("validation.monitoring.route.interval",{key:e}),$=e=>null!==e&&void 0!==e&&e.image?void 0:t("workload.validation.containerImage",{name:e.name}),M=e=>{var n,r;const o=e.jobTemplate?null===e||void 0===e||null===(n=e.jobTemplate)||void 0===n||null===(n=n.spec)||void 0===n||null===(n=n.template)||void 0===n||null===(n=n.spec)||void 0===n?void 0:n.containers:null===e||void 0===e||null===(r=e.template)||void 0===r||null===(r=r.spec)||void 0===r?void 0:r.containers;return o&&o.length?o.map(t=>$(t)).find(t=>t):t("validation.required",{key:t("workload.container.titles.containers")})},U=t=>{const e=[A,l("label"),h("label"),S,R("label")];return f(t,e)},B=t=>{const e=[A,l("label"),h("label"),T,C("label"),R("label",15)];return f(t,e)},G=t=>{const e=[A,s("label"),l("label"),h("label"),S,C("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=[A,l("hostname"),h("hostname"),S,C("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),K=t=>"This is an error returned by the testRule validator",z=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},Y=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=B(s.string);if(t)return t}},X=(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=X(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["u"].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["e"].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:N,backupTarget:et,betweenLengths:_,betweenValues:g,clusterIp:tt,clusterName:W,containerImage:$,containerImages:M,cronSchedule:D,dnsLabel:U,dnsLabelIanaServiceName:B,dnsLabelRestricted:G,externalName:q,fileRequired:rt,groupsAreValid:J,hostname:H,imageUrl:nt,interval:F,isHttps:P,matching:Q,maxLength:y,maxValue:b,minLength:m,minValue:v,noUpperCase:L,portNumber:k,required:j,requiredInt:w,isInteger:x,isPositive:O,isOctal:E,roleTemplateRules:Z,ruleGroups:z,servicePort:Y,subDomain:ot,testRule:K,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},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["e"])(i[t])));t.commit(n+"/product",i)},basicType(o,i){!Object(r["g"])(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["g"])(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["g"])(e)?t.commit(n+"/setGroupDefaultType",{groups:e,defaultType:o}):t.commit(n+"/setGroupDefaultType",{group:e,defaultType:o})},weightType(e,o,i){Object(r["g"])(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},"7e5c":function(t,e,n){"use strict";n("9c73")},"7e89":function(t,e,n){"use strict";n.d(e,"e",(function(){return r})),n.d(e,"a",(function(){return o})),n.d(e,"d",(function(){return i})),n.d(e,"b",(function(){return a})),n.d(e,"c",(function(){return s}));const r={CLASS:"class"},o="_",i={AUTO_IMPORT:"cluster-api.cattle.io/rancher-auto-import"},a={CLUSTER_CLASS:"cluster.x-k8s.io.clusterclass",PROVIDER:"operator.cluster.x-k8s.io.infrastructureprovider"},s={"kubekey-k3s":["k3s1","k3s2"],rke2:["rke2r1","rke2r2"]}},"7eaa":function(t,e,n){"use strict";n.r(e),n.d(e,"infraProvider",(function(){return o}));var r=n("640c");n("907c"),n("7e89");class o extends r["a"]{canYaml(){return!1}}},"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,"z",(function(){return r})),n.d(e,"p",(function(){return o})),n.d(e,"c",(function(){return i})),n.d(e,"d",(function(){return a})),n.d(e,"f",(function(){return s})),n.d(e,"h",(function(){return c})),n.d(e,"i",(function(){return l})),n.d(e,"j",(function(){return u})),n.d(e,"m",(function(){return d})),n.d(e,"o",(function(){return p})),n.d(e,"n",(function(){return f})),n.d(e,"q",(function(){return h})),n.d(e,"r",(function(){return v})),n.d(e,"s",(function(){return b})),n.d(e,"t",(function(){return g})),n.d(e,"v",(function(){return m})),n.d(e,"w",(function(){return y})),n.d(e,"y",(function(){return _})),n.d(e,"x",(function(){return w})),n.d(e,"A",(function(){return x})),n.d(e,"u",(function(){return O})),n.d(e,"C",(function(){return E})),n.d(e,"D",(function(){return k})),n.d(e,"b",(function(){return R})),n.d(e,"l",(function(){return I})),n.d(e,"k",(function(){return N})),n.d(e,"a",(function(){return j})),n.d(e,"g",(function(){return L})),n.d(e,"B",(function(){return D})),n.d(e,"e",(function(){return P}));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",_="service",w="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"},E="workload",k={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:A,CRON_JOB:S,JOB:T,...C}=k,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"}},N={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={CAPI_CLUSTER:"cluster.x-k8s.io.cluster",MACHINE_DEPLOYMENT:"cluster.x-k8s.io.machinedeployment",MACHINE_SET:"cluster.x-k8s.io.machineset",MACHINE:"cluster.x-k8s.io.machine",RANCHER_CLUSTER:"provisioning.cattle.io.cluster",MACHINE_CONFIG_GROUP:"rke-machine-config.cattle.io"},L={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"},D={CLUSTER_MEMBERS:"cluster-members",PROJECT_NAMESPACES:"projects-namespaces",NAMESPACES:"namespaces"},P="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["b"])(e.replace(/Id$/,"")):Object(c["b"])(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.8"}},"scripts":{"dev":"./node_modules/.bin/nuxt dev","nuxt":"./node_modules/.bin/nuxt"},"engines":{"node":">=14"},"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),_=l(s),w=c;(r&&w(new r(new ArrayBuffer(1)))!=v||o&&w(new o)!=u||i&&w(i.resolve())!=p||a&&w(new a)!=f||s&&w(new s)!=h)&&(w=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 _:return h}return e}),t.exports=w},"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"),_=n("35bb"),w=n("b506"),x=n("fe22"),O=n("0652"),E=n("cc7f"),k=1,A=2,S=4,T="[object Arguments]",C="[object Array]",R="[object Boolean]",I="[object Date]",N="[object Error]",j="[object Function]",L="[object GeneratorFunction]",D="[object Map]",P="[object Number]",F="[object Object]",$="[object RegExp]",M="[object Set]",U="[object String]",B="[object Symbol]",G="[object WeakMap]",H="[object ArrayBuffer]",V="[object DataView]",q="[object Float32Array]",K="[object Float64Array]",z="[object Int8Array]",W="[object Int16Array]",Y="[object Int32Array]",X="[object Uint8Array]",J="[object Uint8ClampedArray]",Q="[object Uint16Array]",Z="[object Uint32Array]",tt={};function et(t,e,n,C,R,I){var N,D=e&k,P=e&A,$=e&S;if(n&&(N=R?n(t,C,R,I):n(t)),void 0!==N)return N;if(!w(t))return t;var M=m(t);if(M){if(N=v(t),!D)return l(t,N)}else{var U=h(t),B=U==j||U==L;if(y(t))return c(t,D);if(U==F||U==T||B&&!R){if(N=P||B?{}:g(t),!D)return P?d(t,s(N,t)):u(t,a(N,t))}else{if(!tt[U])return R?t:{};N=b(t,U,D)}}I||(I=new r);var G=I.get(t);if(G)return G;I.set(t,N),x(t)?t.forEach((function(r){N.add(et(r,e,n,r,t,I))})):_(t)&&t.forEach((function(r,o){N.set(o,et(r,e,n,o,t,I))}));var H=$?P?f:p:P?E:O,V=M?void 0:H(t);return o(V||t,(function(r,o){V&&(o=r,r=t[o]),i(N,o,et(r,e,n,o,t,I))})),N}tt[T]=tt[C]=tt[H]=tt[V]=tt[R]=tt[I]=tt[q]=tt[K]=tt[z]=tt[W]=tt[Y]=tt[D]=tt[P]=tt[F]=tt[$]=tt[M]=tt[U]=tt[B]=tt[X]=tt[J]=tt[Q]=tt[Z]=!0,tt[N]=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},"932e":function(t,e,n){"use strict";n.r(e),n.d(e,"init",(function(){return a}));var r=n("907c"),o=n("7e89");const i="manager";function a(t,e){const{basicType:n,weightType:a,weightGroup:s,virtualType:c}=t.DSL(e,i);c({label:"CAPI Turtles",icon:"gear",name:"capi-dashboard",namespaced:!1,weight:99,route:{name:`c-cluster-${i}-capi`,params:{cluster:"_"}},overview:!0,exact:!0}),n(["capi-dashboard",r["a"].CAPI_CLUSTER,o["b"].CLUSTER_CLASS,o["b"].PROVIDER,r["a"].MACHINE_SET,r["a"].MACHINE_DEPLOYMENT],"CAPITurtles"),a(r["a"].CAPI_CLUSTER,10,!0),s("CAPITurtles",10,!0)}},"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},"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||M,r||$,!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["e"])(this.status.conditions||[],"type",t);return!!n&&(!e||(n.status||"").toLowerCase()===(""+e).toLowerCase())}waitForCondition(t,e="True",n=M,r=$){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["h"])}get canYaml(){return this.hasLink("view")}get canEditYaml(){var t;return(null===(t=this.schema)||void 0===t||null===(t=t.resourceMethods)||void 0===t||!t.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(!w()(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["c"]]:o["j"],[o["a"]]:o["q"],...t},this.currentRouter().push(e)}goToEdit(t={}){const e=this.detailLocation;e.query={...e.query,[o["c"]]:o["n"],[o["a"]]:o["q"],...t},this.currentRouter().push(e)}goToViewConfig(t={}){const e=this.detailLocation;e.query={...e.query,[o["c"]]:o["r"],[o["a"]]:o["k"],...t},this.currentRouter().push(e)}goToEditYaml(){const t=this.detailLocation;t.query={...t.query,[o["c"]]:o["n"],[o["a"]]:o["s"]},this.currentRouter().push(t)}goToViewYaml(){const t=this.detailLocation;t.query={...t.query,[o["c"]]:o["r"],[o["a"]]:o["s"]},this.currentRouter().push(t)}cloneYaml(t={}){const e=this.detailLocation;e.query={...e.query,[o["c"]]:o["j"],[o["a"]]:o["s"],...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["b"])(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){await this._saveYaml(t)}async _saveYaml(t){var e;const n=g.a.load(t);if(null!==(e=this.schema)&&void 0!==e&&null!==(e=e.attributes)&&void 0!==e&&e.namespaced&&!n.metadata.namespace){const t=this.$rootGetters["i18n/t"]("resourceYaml.errors.namespaceRequired");throw t}let r;const o=!this.id,i={"content-type":"application/yaml",accept:"application/json"};r=o?await this.schema.followLink("collection",{method:"POST",headers:i,data:t}):await this.followLink("update",{method:"PUT",headers:i,data:t}),await this.$dispatch("load",{data:r,existing:o?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 w()(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)),k()(c)&&(c=c.trim()),o){const e=Object(l["f"])(t,o);!w()(e)&&w()(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),!w()(c)&&L.includes(a)){const e=(c||"").toLowerCase();e!==c&&(c=e,C.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(!w()(o)&&a)s["a"][o](c,this.$rootGetters,n,i,d,t);else if(!w()(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["b"])(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&&!w()(d)&&L.includes(o)){const e=(d||"").toLowerCase();e!==d&&(d=e,C.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;const r={selectors:[],ids:[]};if(null===(n=this.metadata)||void 0===n||null===(n=n.relationships)||void 0===n||!n.length)return r;for(const o of this.metadata.relationships)if(("any"===t||o.rel===t)&&o[e+"Type"])if(o.selector)Object(a["b"])(r.selectors,{type:o.toType,namespace:o.toNamespace,selector:o.selector});else{const t=o[e+"Type"];let n=o[e+"Namespace"],i=o[e+"Id"];if(!n&&i.includes("/")){const t=i.indexOf("/");n=i.substr(0,t),i=i.substr(t+1)}const s=(n?n+"/":"")+i;Object(a["a"])(r.ids,{type:t,namespace:n,name:i,id:s})}return r}_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["capi-0.1.0"]=e(require("__jszip"),require("__jsyaml"),require("vue")):t["capi-0.1.0"]=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=[];s=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 _},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 _(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 _=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)t.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["o"],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["k"].GLOBAL_ROLE:r=i["k"].GLOBAL_ROLE_BINDING,o="globalRoleName";break;default:r=n.includes(c)?i["k"].CLUSTER_ROLE_TEMPLATE_BINDING:i["k"].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["k"].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),_=c(e),w=y?f:s(t),x=_?f:s(e);w=w==p?h:w,x=x==p?h:x;var O=w==h,E=x==h,k=w==x;if(k&&l(t)){if(!l(e))return!1;y=!0,O=!1}if(k&&!O)return m||(m=new r),y||u(t)?o(t,e,n,v,g,m):i(t,e,w,n,v,g,m);if(!(n&d)){var A=O&&b.call(t,"__wrapped__"),S=E&&b.call(e,"__wrapped__");if(A||S){var T=A?t.value():t,C=S?e.value():e;return m||(m=new r),g(T,C,n,v,m)}}return!!k&&(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,"b",(function(){return i})),n.d(e,"a",(function(){return a}));var r=n("907c"),o=n("e24b");r["w"];function i(t){var e;return t=((null===(e=t)||void 0===e?void 0:e.type)||t||"").toLowerCase(),t}function a(t,e,n,r,i){const a=i.dispatch("cleanForDiff",t),s=i.dispatch("cleanForDiff",e.toJSON()),c=i.dispatch("cleanForDiff",n.toJSON()),l=Object(o["b"])(a,c),u=Object(o["b"])(a,s),d=Object(o["c"])(l,u);if(console.log("Background Change",l),console.log("User Change",u),console.log("Conflicts",d),e.metadata.resourceVersion=n.metadata.resourceVersion,Object(o["a"])(e,l),d.length){const t=[r["i18n/t"]("validation.conflict",{fields:d.join(", "),fieldCount:d.length})];return t}return!1}},"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},"0a75":function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return i}));var r=n("640c"),o=n("da25");class i extends r["a"]{get canEditYaml(){return!1}get canUpdate(){return!1}get detailLocation(){const t=super._detailLocation;return{...t,query:{[o["a"]]:o["s"]}}}get _availableActions(){const t=super._availableActions;return t.filter(t=>"goToEdit"!==t.action&&"goToViewConfig"!==t.action)}}},"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===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},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")},"152d":function(t,e,n){"use strict";n("e907")},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["n"]||!e.mode||e.mode!==a["n"]||e.as)||(!(n!==a["k"]||!e.as||e.as!==a["k"])||(!(n!==a["m"]||e.as||!t.includes("-id")||e.mode&&(null===e||void 0===e?void 0:e.mode)===a["n"])||(!(n!==a["p"]||t.includes("-id")||!t.includes("-resource"))||!(n!==a["l"]||!t.endsWith("-create")))))}function d(t,e,n){if(!Object.keys(e).length)return!0;const{params:r}=t,o=["product","resource","namespace","cluster","id","mode","path","hash","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["n"])(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}},"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("edit","ClusterConfig",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"c3c3"))),t.register("edit","ControlPlaneEndpointSection",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"d221"))),t.register("edit","NetworkSection",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"3eff"))),t.register("edit","WorkerItem",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"4c7b"))),t.register("edit","cluster.x-k8s.io.cluster",()=>Promise.all([n.e(3),n.e(1)]).then(n.bind(null,"df7e"))),t.register("models","cluster.x-k8s.io.cluster",()=>n("0a75")),t.register("models","cluster.x-k8s.io.clusterclass",()=>n("6650")),t.register("models","operator.cluster.x-k8s.io.infrastructureprovider",()=>n("7eaa")),t.register("l10n","en-us",()=>n.e(7).then(n.t.bind(null,"1bb6",7))),t.register("formatters","AutoImportState",()=>n.e(2).then(n.bind(null,"bd44")))}var a=n("7083"),s=n("da25"),c=n("7e89"),l=function(){var t=this,e=t._self._c;return e("div",[t.embeddedCapiEnabled||!t.hasClusterClassSchema?e("div",{staticClass:"centered"},[e("h1",{staticClass:"mb-20"},[t._v(" "+t._s(t.t("capi.installation.title"))+" ")]),e("p",{staticClass:"description",domProps:{innerHTML:t._s(t.t("capi.installation.description",{},!0))}}),e("Banner",{attrs:{color:"warning"}},[e("div",[t.embeddedCapiEnabled?e("t",{attrs:{k:"capi.installation.disableFeatureFlag",raw:""}}):t._e(),e("br"),t.hasClusterClassSchema?t._e():e("t",{attrs:{k:"capi.installation.turtlesNeeded",raw:""}})],1)])],1):t._e()])},u=[],d=n("907c"),p=n("eb32"),f={name:"CAPITurtlesDashboard",async middleware({redirect:t,route:e,store:n}){try{const r=await n.dispatch("management/find",{type:d["w"],id:c["b"].CLUSTER_CLASS,opt:{force:!0}});if(r)return t({name:"c-cluster-product-resource",params:{...e.params,cluster:"_",resource:d["a"].CAPI_CLUSTER,product:"manager"}})}catch{}},components:{Banner:p["a"]},async fetch(){this.$store.getters["management/canList"](d["k"].FEATURE)&&(this.features=await this.$store.dispatch("management/findAll",{type:d["k"].FEATURE}))},data(){return{features:[]}},computed:{embeddedCapiEnabled(){var t;const e=this.features.find(t=>"embedded-cluster-api"===t.id);return(null===e||void 0===e||null===(t=e.spec)||void 0===t?void 0:t.value)||!e},hasClusterClassSchema(){return!!this.$store.getters["management/schemaFor"](c["b"].CLUSTER_CLASS)}}},h=f,v=(n("1f15"),n("d802")),b=Object(v["a"])(h,l,u,!1,null,"337ae8b8",null),g=b.exports;const m=[{name:"c-cluster-manager-capi",path:"/c/:cluster/manager/capi",component:g}];var y=m,_=function(t){var e;"true"===(null===t||void 0===t||null===(e=t.metadata)||void 0===e||null===(e=e.labels)||void 0===e?void 0:e[c["d"].AUTO_IMPORT])?delete t.metadata.labels[c["d"].AUTO_IMPORT]:(t.metadata.labels||(t.metadata.labels={}),t.metadata.labels[c["d"].AUTO_IMPORT]="true");try{t.save()}catch(n){const e=t.t("resource.errors.update",{name:t.name});t.$dispatch("growl/error",{title:e,message:n,timeout:5e3},{root:!0})}},w=function(t){i(t),t.metadata=n("9224"),t.addProduct(n("932e")),t.addRoutes(y),t.addTab(a["e"].RESOURCE_DETAIL,{resource:["namespace"],cluster:["local"],mode:[s["l"],s["j"],s["n"],"config"]},{name:"capi-auto-import",labelKey:"capi.autoImport.label",weight:-5,showHeader:!0,component:()=>n.e(4).then(n.bind(null,"64c9"))}),t.addAction(a["a"].TABLE,{path:[{urlPath:"/c/local/explorer/projectsnamespaces",exact:!0},{urlPath:"cluster.x-k8s.io.cluster",endsWith:!0}]},{labelKey:"capi.autoImport.enableAction",icon:"icon-plus",enabled(t){var e;return"true"!==(null===t||void 0===t||null===(e=t.metadata)||void 0===e||null===(e=e.labels)||void 0===e?void 0:e[c["d"].AUTO_IMPORT])},invoke(t,e=[]){e.forEach(t=>{_(t)})}}),t.addAction(a["a"].TABLE,{path:[{urlPath:"/c/local/explorer/projectsnamespaces",exact:!0},{urlPath:"cluster.x-k8s.io.cluster",endsWith:!0}]},{labelKey:"capi.autoImport.disableAction",icon:"icon-minus",enabled(t){var e;return"true"===(null===t||void 0===t||null===(e=t.metadata)||void 0===e||null===(e=e.labels)||void 0===e?void 0:e[c["d"].AUTO_IMPORT])},invoke(t,e=[]){e.forEach(t=>{_(t)})}}),t.addTableColumn(a["f"].RESOURCE,{path:[{urlPath:"/c/local/explorer/projectsnamespaces",exact:!0}]},{name:"capi-auto-import",labelKey:"capi.autoImport.label",getValue:t=>"true"===t.labels[c["d"].AUTO_IMPORT],width:100,formatter:"AutoImportState"}),t.addPanel(a["d"].RESOURCE_LIST,{resource:["provisioning.cattle.io.cluster"]},{component:()=>n.e(5).then(n.bind(null,"deec"))})};e["default"]=w},"1d19":function(t,e,n){"use strict";n.d(e,"c",(function(){return s})),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["q"])(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},"1f15":function(t,e,n){"use strict";n("40ee")},"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},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)}}},"2cb5":function(t,e,n){"use strict";function r(t){return w(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,"b",(function(){return r})),n.d(e,"r",(function(){return o})),n.d(e,"q",(function(){return i})),n.d(e,"f",(function(){return s})),n.d(e,"g",(function(){return c})),n.d(e,"n",(function(){return h})),n.d(e,"m",(function(){return v})),n.d(e,"o",(function(){return b})),n.d(e,"h",(function(){return g})),n.d(e,"d",(function(){return w})),n.d(e,"a",(function(){return x})),n.d(e,"c",(function(){return O})),n.d(e,"k",(function(){return E})),n.d(e,"e",(function(){return k})),n.d(e,"l",(function(){return A})),n.d(e,"p",(function(){return T})),n.d(e,"j",(function(){return C})),n.d(e,"i",(function(){return R}));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 _=/[ _]/g;function w(t){return y(t).replace(_,"-")}function x(t){return t=t||"",!t.match(/[^\r\n\t\x20-\x7F]/)}function O(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 E(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 S=/[^."']+|"([^"]*)"|'([^']*)'/g;function T(t){return t.includes('"')||t.includes("'")?t.match(S).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}function R(t){const e=/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/;return e.test(t)}},"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},"3b1f":function(t,e,n){var r=n("5eaa");e=r(!1),e.push([t.i,".delete-warning[data-v-11104fb6]{color:var(--error)}.remove-project-dialog[data-v-11104fb6]{border:1px solid var(--border);padding:10px;border-radius:5px}.remove-project-dialog .display-name[data-v-11104fb6]{font-weight:700}",""]),t.exports=e},"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 E(t);f=setTimeout(O,w(t))}function E(t){return f=void 0,m&&l?y(t):(l=u=void 0,p)}function k(){void 0!==f&&clearTimeout(f),v=0,l=h=u=f=void 0}function A(){return void 0===f?p:E(o())}function S(){var t=o(),n=x(t);if(l=arguments,u=this,h=t,n){if(void 0===f)return _(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=k,S.flush=A,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 xt})),n.d(e,"s",(function(){return Ot})),n.d(e,"J",(function(){return Et})),n.d(e,"I",(function(){return kt})),n.d(e,"x",(function(){return At})),n.d(e,"w",(function(){return St})),n.d(e,"t",(function(){return Ct})),n.d(e,"u",(function(){return Rt})),n.d(e,"b",(function(){return It})),n.d(e,"c",(function(){return Nt})),n.d(e,"e",(function(){return jt})),n.d(e,"f",(function(){return Lt})),n.d(e,"y",(function(){return Dt})),n.d(e,"z",(function(){return Pt})),n.d(e,"n",(function(){return Ft})),n.d(e,"N",(function(){return $t})),n.d(e,"O",(function(){return Mt})),n.d(e,"Q",(function(){return Ut})),n.d(e,"P",(function(){return Bt})),n.d(e,"M",(function(){return Gt})),n.d(e,"K",(function(){return Ht})),n.d(e,"g",(function(){return Vt})),n.d(e,"o",(function(){return Kt})),n.d(e,"B",(function(){return qt})),n.d(e,"v",(function(){return Wt})),n.d(e,"C",(function(){return zt})),n.d(e,"A",(function(){return Yt})),n.d(e,"q",(function(){return Xt})),n.d(e,"k",(function(){return Jt})),n.d(e,"l",(function(){return Qt})),n.d(e,"m",(function(){return Zt})),n.d(e,"G",(function(){return te})),n.d(e,"L",(function(){return ee})),n.d(e,"F",(function(){return ne})),n.d(e,"T",(function(){return re})),n.d(e,"R",(function(){return oe})),n.d(e,"S",(function(){return ie})),n.d(e,"j",(function(){return ae})),n.d(e,"r",(function(){return se})),n.d(e,"p",(function(){return ce})),n.d(e,"d",(function(){return le})),n.d(e,"i",(function(){return ue})),n.d(e,"a",(function(){return de})),n.d(e,"E",(function(){return fe})),n.d(e,"h",(function(){return he})),n.d(e,"D",(function(){return ve}));var r=n("4ac6"),o=n("907c"),i=function(){var t=this,e=t._self._c;return e("div",{ref:"container",attrs:{"data-testid":"cluster-list-container"}},[e("div",{staticClass:"sortable-table-header",class:{titled:t.$slots.title&&t.$slots.title.length}},[t._t("title"),t.showHeaderRow?e("div",{staticClass:"fixed-header-actions",class:{button:!!t.$slots["header-button"],"advanced-filtering":t.hasAdvancedFiltering}},[e("div",{staticClass:"bulk",class:t.bulkActionsClass},[t._t("header-left",(function(){return[t.tableActions?[t._l(t.availableActions,(function(n){return e("button",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.actionTooltip,expression:"actionTooltip"}],key:n.action,staticClass:"btn role-primary",class:{[t.bulkActionClass]:!0},attrs:{id:n.action,type:"button",disabled:!n.enabled,"data-testid":t.componentTestid+"-"+n.action},on:{click:function(e){return t.applyTableAction(n,null,e)},mouseover:function(e){return t.setBulkActionOfInterest(n)},mouseleave:function(e){return t.setBulkActionOfInterest(null)}}},[n.icon?e("i",{class:n.icon}):t._e(),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:n.label,expression:"act.label"}]})])})),e("ActionDropdown",{staticClass:"bulk-actions-dropdown",class:t.bulkActionsDropdownClass,attrs:{"disable-button":!t.selectedRows.length,size:"sm"},scopedSlots:t._u([{key:"button-content",fn:function(){return[e("button",{ref:"actionDropDown",staticClass:"btn bg-primary mr-0",attrs:{disabled:!t.selectedRows.length}},[e("i",{staticClass:"icon icon-gear"}),e("span",[t._v(t._s(t.t("sortableTable.bulkActions.collapsed.label")))]),e("i",{staticClass:"ml-10 icon icon-chevron-down"})])]},proxy:!0},{key:"popover-content",fn:function(){return[e("ul",{staticClass:"list-unstyled menu"},t._l(t.hiddenActions,(function(n){return e("li",{directives:[{name:"close-popover",rawName:"v-close-popover"},{name:"clean-tooltip",rawName:"v-clean-tooltip",value:{content:t.actionTooltip,placement:"right"},expression:"{\n content: actionTooltip,\n placement: 'right'\n }"}],key:n.action,class:{disabled:!n.enabled},on:{click:function(e){return t.applyTableAction(n,null,e)},mouseover:function(e){return t.setBulkActionOfInterest(n)},mouseleave:function(e){return t.setBulkActionOfInterest(null)}}},[n.icon?e("i",{class:n.icon}):t._e(),e("span",{directives:[{name:"clean-html",rawName:"v-clean-html",value:n.label,expression:"act.label"}]})])})),0)]},proxy:!0}],null,!1,2209545330)}),t.selectedRowsText?e("label",{staticClass:"action-availability",class:t.bulkActionAvailabilityClass},[t._v(" "+t._s(t.selectedRowsText)+" ")]):t._e()]:t._e()]}))],2),!t.hasAdvancedFiltering&&t.$slots["header-middle"]&&t.$slots["header-middle"].length?e("div",{staticClass:"middle"},[t._t("header-middle")],2):t._e(),t.search||t.hasAdvancedFiltering||t.isTooManyItemsToAutoUpdate||t.$slots["header-right"]&&t.$slots["header-right"].length?e("div",{staticClass:"search row",attrs:{"data-testid":"search-box-filter-row"}},[t.hasAdvancedFiltering?e("ul",{staticClass:"advanced-filters-applied"},t._l(t.advancedFilteringValues,(function(n,r){return e("li",{key:r},[e("span",{staticClass:"label"},[t._v(t._s(`"${n.value}" ${t.t("sortableTable.in")} ${n.label}`))]),e("span",{staticClass:"cross",on:{click:function(e){return t.clearAdvancedFilter(r)}}},[t._v("✕")]),e("div",{staticClass:"bg"})])})),0):t._e(),t._t("header-right"),t.isTooManyItemsToAutoUpdate?e("AsyncButton",{directives:[{name:"clean-tooltip",rawName:"v-clean-tooltip",value:t.t("performance.manualRefresh.buttonTooltip"),expression:"t('performance.manualRefresh.buttonTooltip')"}],staticClass:"manual-refresh",attrs:{mode:"refresh","current-phase":t.currentPhase},on:{click:t.debouncedRefreshTableData}}):t._e(),t.hasAdvancedFiltering?e("div",{ref:"advanced-filter-group",staticClass:"advanced-filter-group"},[e("button",{staticClass:"btn role-primary",on:{click:function(e){t.advancedFilteringVisibility=!t.advancedFilteringVisibility}}},[t._v(" "+t._s(t.t("sortableTable.addFilter"))+" ")]),e("div",{directives:[{name:"show",rawName:"v-show",value:t.advancedFilteringVisibility,expression:"advancedFilteringVisibility"}],staticClass:"advanced-filter-container"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.advFilterSearchTerm,expression:"advFilterSearchTerm"}],ref:"advancedSearchQuery",staticClass:"advanced-search-box",attrs:{type:"search",placeholder:t.t("sortableTable.filterFor")},domProps:{value:t.advFilterSearchTerm},on:{input:function(e){e.target.composing||(t.advFilterSearchTerm=e.target.value)}}}),e("div",{staticClass:"middle-block"},[e("span",[t._v(t._s(t.t("sortableTable.in")))]),e("LabeledSelect",{staticClass:"filter-select",attrs:{clearable:!0,options:t.advFilterSelectOptions,disabled:!1,searchable:!1,mode:"edit",multiple:!1,taggable:!1,placeholder:t.t("sortableTable.selectCol")},on:{selecting:e=>t.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)},a=[],s=n("9ce4"),c=n("050d"),l=n.n(c),u=n("2cb5"),d=n("e24b"),p=n("bddd"),f=n("0df0"),h=n("d709"),v=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)])},b=[],g={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(){}}},m=g,y=(n("78e0"),n("d802")),_=Object(y["a"])(m,v,b,!1,null,null,null),w=_.exports,x=n("05ca"),O=n.n(x),E=n("44db"),k=n.n(E),A=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)])},S=[],T=n("98d3");function C(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:C(t,e)}const R="all",I="some",N="none";var j={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?R:e>0?I:N},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&&D(o,t,!1);for(const a of r)if(a.availableActions)for(const t of a.availableActions)t.bulkable&&t.enabled&&D(o,t,!1);const i=P(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(T["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||C(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(d["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(T["c"])(t))this.toggle(e);else if(Object(T["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(T["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(d["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(d["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(T["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});F(o,t,e,r,this),this.actionOfInterest=null},clearSelection(){this.update([],this.selectedRows)}}};let L=0;function D(t,e,n=!0){let r=e.action;r||(r="anon"+L,L++);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 P(t,e=!1){const n=Object(p["d"])(Object.values(t),"anyEnabled",!0);for(const r of n)r.enabled=!e&&r.available>=r.total;return n}function F(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 $="left",M="right",U="top",B="center",G="center",H="bottom",V="auto";function K(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 q(t){return{top:t.clientY,left:t.clientX,bottom:t.clientY,right:t.clientX,width:0,height:0}}function W(){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 z(t,e,n,r){let{positionX:o=V,positionY:i=V}=n||{};const{fudgeX:a=0,fudgeY:s=0,overlapX:c=!0,overlapY:l=!1}=n||{},u=W();let d;d=e instanceof Event?q(e):K(e);let p={};t&&(p=K(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===B&&v.center<0&&(o=V),o===V?o=v.left<0||1.5*v.right>v.left?M:$:i===$&&v.left<0?o=M:i===M&&v.right<0&&(o=$),o){case $:f.left=h.left-a+"px";break;case B:f.left=(h.left+h.right)/2-p.width/2-a+"px";break;case M:f.left=h.right+a-p.width+"px";break}switch(i===G&&v.middle<0&&(i=V),i===V?i=v.top<0||1.5*v.bottom>v.top?H:U:i===U&&v.top<0?i=H:i===H&&v.bottom<0&&(i=U),i){case U:f.top=h.top+s-p.height+"px";break;case B:f.top=(h.top+h.bottom)/2+s-p.height+"px";break;case H:f.top=h.bottom-s+"px";break}return f}var Y=n("466b"),X={components:{Checkbox:f["a"],LabeledSelect:Y["a"]},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!==N},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===I}},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=z(e,t||n,{overlapX:!0,fudgeX:26,fudgeY:-22,positionX:B,positionY:V})),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}}},J=X,Q=(n("d6e7"),n("c310"),Object(y["a"])(J,A,S,!1,null,"96d8a090",null)),Z=Q.exports;const tt="allcols",et="All Columns",nt=":::islabel";var rt={data(){return{searchQuery:null,previousFilter:null,previousResult:null}},computed:{searchFields(){const t=ot(this.columns);return this.extraSearchFields&&Object(p["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===tt){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}${nt}`:t.value;r.push(e)}}),at(r,[e.value],t)}{if(e.prop.includes("[")&&e.prop.includes("]"))return at(JSON.parse(e.prop),[e.value],t);let n=e.prop;return e.prop.includes("metadata.labels")&&(n=`${e.label}${nt}`),at([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,l=!0;if(l=at(n,r,t),i&&o){const e=t[o]||[];for(let n=e.length-1;n>=0;n--){let e=!0;e=at(i,r,t),e&&c++}a[Object(d["f"])(t,this.keyField)]=c}l||0!==c||Object(p["h"])(e,s)}return this.subMatches=a,this.previousResult=e,e}},watch:{arrangedRows(t){this.previousResult=null}}};function ot(t){const e=[];return(t||[]).forEach(t=>{const n=t.search;n?"string"===typeof n?Object(p["a"])(e,n):Object(p["g"])(n)&&Object(p["b"])(e,n):!1===n||Object(p["a"])(e,t.value||t.name)}),e.filter(t=>!!t)}const it=/^[0-9a-f\.:]+$/i;function at(t,e,n){for(let r=0;r0&&(t=r.substr(e+1),r=r.substr(0,e)),o=r.includes(".")?Object(d["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=it.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 ct=n("1d19"),lt={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(p["a"])(r,"nameSort"),Object(p["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(ct["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)}}},ut=n("5000"),dt={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"](ut["g"]),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)},getPageByRow(t,e=(t=>t)){const n=this.filteredRows.map(e).indexOf(t);return-1===n?null:Math.ceil(n/this.perPage)}}},pt={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(d["f"])(o,t)||"",a=Object(d["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 ft="inline-block";var ht={data(){return{bulkActionsClass:"bulk",bulkActionClass:"bulk-action",bulkActionsDropdownClass:"bulk-actions-dropdown",bulkActionAvailabilityClass:"action-availability",hiddenActions:[],updateHiddenBulkActions:k()(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=ft,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=ft,u=-1,s=0,c=!0,l=n-e.offsetWidth-a}c||(e.style.display="none")}}};const vt=tt;var bt={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:vt,advFilterSelectedLabel:et,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:et,label:et,value:tt,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=vt,this.advFilterSelectedLabel=et,this.advFilterSearchTerm=null)},clearAllAdvancedFilters(){this.advancedFilteringValues=[],this.eventualSearchQuery=this.advancedFilteringValues,this.advancedFilteringVisibility=!1,this.advFilterSelectedProp=vt,this.advFilterSelectedLabel=et,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 gt={},mt={TABLET:"tablet",LAPTOP:"laptop",DESKTOP:"desktop"};var yt={name:"SortableTable",components:{THead:Z,Checkbox:f["a"],AsyncButton:h["b"],ActionDropdown:w,LabeledSelect:Y["a"]},mixins:[rt,lt,dt,pt,j,ht,bt],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:h["a"].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:k()((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?h["a"].ACTION:h["a"].WAITING,t&&t!==e&&this.$nextTick(()=>this.updateLiveAndDelayed())},immediate:!0}},created(){this.debouncedRefreshTableData=k()(this.refreshTableData,500)},computed:{...Object(s["a"])({isTooManyItemsToAutoUpdate:"resource-fetch/isTooManyItemsToAutoUpdate"}),...Object(s["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(p["i"])(t,e)}const e=t.find(t=>!t.width);if(!e){const e=t.find(t=>t.canBeVariable);if(e){const n=Object(d["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(u["d"])(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(gt[r.formatter])a=gt[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:d["f"],dasherize:u["d"],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=l()();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(u["r"])(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(d["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:O()((function(t,e=!1){const n=this.focusAdjacent(!0),r=C(n,"tr");null!==r&&void 0!==r&&r.classList.contains("row-selected")||this.keySelectRow(r,e)}),50),focusPrevious:O()((function(t,e=!1){const n=this.focusAdjacent(!1),r=C(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(d["f"])(t,e)]),r=t.stateDescription;return n||r},handleActionButtonClick(t,e){this.$emit("clickedActionButton",{event:e,targetElement:this.$refs["actionButton"+t][0]})}}},_t=yt,wt=(n("7e5c"),n("9001"),Object(y["a"])(_t,i,a,!1,null,"3b0138b8",null));wt.exports;const xt={name:"state",labelKey:"tableHeaders.state",sort:["stateSort","nameSort"],value:"stateDisplay",getValue:t=>t.stateDisplay,width:100,default:"unknown",formatter:"BadgeStateFormatter"},Ot={name:"name",labelKey:"tableHeaders.name",value:"nameDisplay",getValue:t=>t.nameDisplay,sort:["nameSort"],formatter:"LinkDetail",canBeVariable:!0},Et={name:"storage_class_provisioner",labelKey:"tableHeaders.storage_class_provisioner",value:"provisionerDisplay",sort:["provisioner"]},kt={name:"storage_class_default",labelKey:"tableHeaders.default",value:"isDefault",sort:["isDefault"],formatter:"Checked"},At={name:"persistent_volume_source",labelKey:"tableHeaders.persistentVolumeSource",value:"source",sort:["provisioner"]},St={name:"persistent-volume-claim",labelKey:"tableHeaders.persistentVolumeClaim",sort:["nameSort"],value:"claimName",formatter:"LinkDetail",formatterOpts:{reference:"claim.detailLocation"}},Tt={name:"localOutputRefs",labelKey:"tableHeaders.output",value:"outputs",sort:["outputsSortable"],formatter:"ListLink",formatterOpts:{options:{internal:!0}}},Ct={name:"namespace",labelKey:"tableHeaders.namespace",value:"namespace",getValue:t=>t.namespace,sort:"namespace",dashIfEmpty:!0},Rt={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["o"]}},It={name:"age",labelKey:"tableHeaders.age",value:"creationTimestamp",getValue:t=>t.creationTimestamp,sort:"creationTimestamp:desc",search:!1,formatter:"LiveDate",width:100,align:"left"},Nt={...It,getValue:t=>t.created,value:"created",sort:"created:desc"},jt={name:"description",labelKey:"tableHeaders.description",align:"left",sort:["description"],width:300},Lt={name:"duration",labelKey:"tableHeaders.duration",value:"duration.value",sort:"duration.seconds",formatter:"LiveDuration"},Dt={name:"pod_images",labelKey:"tableHeaders.podImages",value:"imageNames",getValue:t=>t.imageNames,sort:"imageNames",formatter:"PodImages"},Pt={name:"pod_restarts",labelKey:"tableHeaders.podRestarts",formatter:"LivePodRestarts",delayLoading:!0,value:"restartCount",getValue:t=>t.restartCount,search:!1,liveUpdates:!0},Ft={name:"keys",labelKey:"tableHeaders.keys",sort:!1,value:"keysDisplay"},$t={name:"username",labelKey:"tableHeaders.username",value:"username",dashIfEmpty:!0,sort:"username"},Mt={name:"name",labelKey:"tableHeaders.name",value:"nameDisplay",sort:["nameSort"],dashIfEmpty:!0},Ut={name:"provider",labelKey:"tableHeaders.provider",value:"providerDisplay",dashIfEmpty:!0,sort:"providerDisplay"},Bt={name:"user-id",labelKey:"tableHeaders.userId",value:"id",formatter:"LinkDetail",canBeVariable:!0,sort:"id"},Gt={name:"type",labelKey:"tableHeaders.type",value:"typeDisplay",getValue:t=>t.typeDisplay,sort:["typeDisplay"],width:100},Ht={name:"subType",labelKey:"tableHeaders.subType",value:"subTypeDisplay",sort:["subTypeDisplay"],width:120},Vt={name:"type",labelKey:"tableHeaders.type",value:"eventType",sort:"eventType"},Kt={name:"lastSeen",labelKey:"tableHeaders.lastSeen",value:"lastSeen",sort:"lastTimestamp:desc",tooltip:"tableHeaders.lastSeenTooltip"},qt={name:"reason",labelKey:"tableHeaders.reason",value:"reason",sort:["reason"]},Wt={name:"object",labelKey:"tableHeaders.object",value:"involvedObject",sort:["involvedObject.kind","involvedObject.name"],canBeVariable:!0,formatter:"InvolvedObjectLink"},zt={name:"reclaimPolicy",labelKey:"tableHeaders.reclaimPolicy",value:"spec.persistentVolumeReclaimPolicy",sort:["spec.persistentVolumeReclaimPolicy"]},Yt={name:"pvReason",labelKey:"tableHeaders.reason",value:"status.reason",sort:["status.reason"]},Xt={name:"message",labelKey:"tableHeaders.message",value:"message",sort:["message"]},Jt={name:"ingressClassName",labelKey:"tableHeaders.ingressClass",value:"$['spec']['ingressClassName']",sort:"$['spec']['ingressClassName']"},Qt={name:"ingressDefaultBackend",labelKey:"tableHeaders.ingressDefaultBackend",value:"hasDefaultBackend",sort:["hasDefaultBackend:desc"],formatter:"Checked",width:75,align:"center"},Zt={name:"ingressTarget",labelKey:"tableHeaders.ingressTarget",value:"$['spec']",formatter:"IngressTarget",sort:"$['spec']['rules'][0].host"},te={name:"type",labelKey:"tableHeaders.type",value:"$['spec']['type']",sort:"$['spec']['type']",formatter:"ServiceType"},ee={formatter:"ServiceTargets",labelKey:"tableHeaders.targetPort",name:"targetPort",sort:"$['spec']['targetPort']",value:"$['spec']['targetPort']"},ne={formatter:"KeyValue",name:"selector",labelKey:"tableHeaders.selector",value:"$['spec']['selector']",sort:"$['spec']['selector']"},re={...Dt,value:"",breakpoint:mt.LAPTOP},oe={name:"workloadEndpoints",labelKey:"tableHeaders.endpoints",value:`$['metadata']['annotations']['${r["c"]}']`,getValue:t=>{var e;return null===(e=t.metadata)||void 0===e||null===(e=e.annotations)||void 0===e?void 0:e[r["c"]]},formatter:"Endpoints",dashIfEmpty:!0,breakpoint:mt.DESKTOP,maxPageSize:25},ie={name:"workloadHealthScale",labelKey:"tableHeaders.health",formatter:"WorkloadHealthScale",getValue:()=>{},width:150,skipSelect:!0,delayLoading:!0,search:!1,liveUpdates:!0},ae={name:"reference",labelKey:"tableHeaders.hpaReference",value:"spec.scaleTargetRef.name",sort:"spec.scaleTargetRef.name"},se={name:"minimum-replica",labelKey:"tableHeaders.minReplicas",value:"spec.minReplicas",sort:"spec.minReplicas"},ce={name:"maximum-replica",labelKey:"tableHeaders.maxReplicas",value:"spec.maxReplicas",sort:"spec.maxReplicas"},le={name:"current-replica",labelKey:"tableHeaders.currentReplicas",value:"status.currentReplicas",sort:"status.currentReplicas"},ue={...xt,value:"$",formatter:"LiveExpiryBadgeState"},de={name:"id",labelKey:"tableHeaders.accessKey",align:"left",sort:["name"],width:200},pe={name:"scope",value:"clusterName",labelKey:"tableHeaders.scope",dashIfEmpty:!0,align:"left",sort:["scope"],width:100},fe={...pe,value:"clusterId",sort:["clusterId"]},he={name:"expires",value:"expiresAt",labelKey:"tableHeaders.expires",align:"left",sort:["expiresAt"],width:200,formatter:"LiveExpiryDate"},ve={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},"466b":function(t,e,n){"use strict";var r=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)},o=[],i=n("df7c"),a=n("480e"),s=n("e24b"),c=n("d174"),l=n("9f16"),u=n("e8f0"),d=n("9e74"),p=n.n(d),f={name:"LabeledSelect",components:{LabeledTooltip:c["a"]},mixins:[i["a"],a["a"],l["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=>p()(this.reduce(t),this.reduce(e)));if(e){const t=Object(s["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(s["f"])(t,this.optionLabel)){if(this.localizedLabel){const e=Object(s["f"])(t,this.optionLabel);return this.$store.getters["i18n/t"](e)||e}return Object(s["f"])(t,this.optionLabel)}return t},positionDropdown(t,e,{width:n}){Object(u["a"])(t,e,n,this.placement)},get:s["f"],onClickOption(t,e){u["b"].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(s["f"])(t,this.optionKey):this.getOptionLabel(t)}}},h=f,v=(n("a805"),n("d802")),b=Object(v["a"])(h,r,o,!1,null,"0abf511e",null);e["a"]=b.exports},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]",_="[object ArrayBuffer]",w="[object DataView]",x=r?r.prototype:void 0,O=x?x.valueOf:void 0;function E(t,e,n,r,x,E,k){switch(n){case w:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case _:return!(t.byteLength!=e.byteLength||!E(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 A=s;case g:var S=r&l;if(A||(A=c),t.size!=e.size&&!S)return!1;var T=k.get(t);if(T)return T==e;r|=u,k.set(t,e);var C=a(A(t),A(e),r,x,E,k);return k["delete"](t),C;case y:if(O)return O.call(t)==O.call(e)}return!1}t.exports=E},"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},"480e":function(t,e,n){"use strict";var r=n("8bbf"),o=n.n(r),i=n("da25");function a(t,e){t&&("function"===typeof e&&(e=e()),t.style.width="string"!==typeof e?e+"px":e)}function s(t){if(t&&t.length)return t.length?parseFloat(getComputedStyle(t[0]).width.replace("px","")):parseFloat(getComputedStyle(t).width.replace("px",""))}e["a"]=o.a.extend({inheritAttrs:!1,props:{mode:{type:String,default:i["n"]},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===i["r"]||!!(""+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===i["r"]},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=s(this.$refs.select)||0,n=s(t)||0;nt.replace(/^ui-/,""),mangleWrite:t=>"ui-"+t}),o("pcs","",{asCookie:s,asUserPreference:!1}),o("locale","en-us",{asCookie:s}),o("keymap","sublime",{options:["sublime","emacs","vim"]})),h=o("per-page",100,{options:[10,25,50,100],parseJSON:a}),v=(o("logs-wrap",!0,{parseJSON:a}),o("logs-time",!0,{parseJSON:a}),o("logs-range","30 minutes",{parseJSON:a}),o("hide-repos",[],{parseJSON:a}),o("hide-desc",[],{parseJSON:a}),o("hide-sensitive",!0,{options:[!0,!1],parseJSON:a}),o("show-pre-release",!1,{options:[!1,!0],parseJSON:a}),o("chart-mode","featured",{parseJSON:a}),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:a})),b=o("view-in-api",!1,{parseJSON:a,inheritFrom:v}),g=(o("all-namespaces",!1,{parseJSON:a,inheritFrom:v}),o("theme-shortcut",!1,{parseJSON:a,inheritFrom:v}),o("last-visited","home",{parseJSON:a}),o("seen-whatsnew","",{parseJSON:a}),o("read-whatsnew","",{parseJSON:a}),o("after-login-route","home",{parseJSON:a})),m=(o("home-page-cards",{},{parseJSON:a}),o("plugin-developer",!1,{parseJSON:a,inheritFrom:v}),"rke1"),y="rke2";o("provisioner",y,{options:[m,y]}),o("hide-psp-deprecation-banner",!1,{parseJSON:a}),o("scale-pool-prompt",null,{parseJSON:a})}).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.canManageNamespaces?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["m"]}),this.allProjects=await this.$store.dispatch("management/findAll",{type:s["k"].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["h"]]===(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;return null===(t=this.currentProject)||void 0===t||null===(t=t.spec)||void 0===t?void 0:t.displayName},names(){return this.filteredNamespaces.map(t=>t.nameDisplay).slice(0,5)},canManageNamespaces(){var t;return this.currentCluster.canUpdate||this.currentProject.canDelete&&this.filteredNamespaces.length&&(null===(t=this.filteredNamespaces[0])||void 0===t?void 0:t.canDelete)}},methods:{resourceNames:l["o"],remove(){return!(!this.deleteProjectNamespaces&&this.canManageNamespaces)&&Promise.all(this.filteredNamespaces.map(t=>t.remove())).then(()=>!1)}}},d=u,p=(n("152d"),n("d802")),f=Object(p["a"])(d,r,o,!1,null,"11104fb6",null);e["default"]=f.exports},"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=n("6418"),a=n("1032"),s=n("9ce4"),c=n("9ec3"),l={name:"PromptRemovePodDialog",components:{Banner:i["a"],Checkbox:a["a"]},props:{value:{type:Array,default:()=>[]},names:{type:Array,default:()=>[]},type:{type:String,required:!0}},data(){return{errors:[],forceDelete:!1}},computed:{...Object(s["b"])("action-menu",["toRemove"]),...Object(s["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(c["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)}}},u=l,d=(n("c210"),n("d802")),p=Object(d["a"])(u,r,o,!1,null,"db441fb2",null);e["default"]=p.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=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["k"])(e,r["f"]))}setLabels(t){this.metadata||(this.metadata={});const e=this.metadata.labels||{},n=s()(e,(t,e)=>Object(u["k"])(e,r["f"]));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["k"])(e,r["b"]))}setAnnotations(t){this.metadata||(this.metadata={});const e=this.metadata.annotations||{},n=s()(e,(t,e)=>Object(u["k"])(e,r["b"]));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;return(null===(t=this.metadata)||void 0===t||null===(t=t.annotations)||void 0===t?void 0:t[r["d"]])||(null===(e=this.spec)||void 0===e?void 0:e.description)||this._description}set description(t){var e;null!==(e=this.metadata)&&void 0!==e&&e.annotations&&(this.metadata.annotations[r["d"]]=t),this.spec&&(this.spec.description=t),this._description=t}}},6418:function(t,e,n){"use strict";var r=n("eb32");n.d(e,"a",(function(){return r["a"]}))},"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"),_=n.n(y);function w(t="",e,n){try{_.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["h"])(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;E(i,o,e,n),k(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")};E(t,o,e,n),k(t,o,e,n)})}if(o&&!Object(g["h"])(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;E(i,o,e,n),k(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")};E(t,o,e,n),k(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 E(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 k(t,e,n,r){const o=["In","NotIn","Exists","DoesNotExist"],{labelSelector:i}=t;if(i&&!Object(g["h"])(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 A=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]===A["u"].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 T(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 C=["server-url"];function R(t,e,n,r,o){const i=r[0];return C.includes(i)&&!t.toLowerCase().startsWith("https://")&&n.push(e["i18n/t"]("validation.setting.serverUrl.https")),n}e["a"]={clusterName:T,clusterIp:l,externalName:u,flowOutput:i,groupsAreValid:h,logdna:a,ruleGroups:f,interval:b,servicePort:c,matching:v,containerImages:m,cronSchedule:w,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,"d",(function(){return i})),n.d(e,"e",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"f",(function(){return c})),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),E=w.get(O);if(E)r(t,n,E);else{var k=_?_(x,O,n+"",t,e,w):void 0,A=void 0===k;if(A){var S=l(O),T=!S&&d(O),C=!S&&!T&&v(O);k=O,S||T||C?l(x)?k=x:u(x)?k=a(x):T?(A=!1,k=o(O,!0)):C?(A=!1,k=i(O,!0)):k=[]:h(O)||c(O)?(k=x,c(x)?k=g(x):f(x)&&!p(x)||(k=s(O))):A=!1}A&&(w.set(O,k),y(k,O,m,_,w),w["delete"](O)),r(t,n,k)}}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},"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,_=([n,r])=>o=>m(n)(o)||y(r)(o)?t("validation.betweenLengths",{key:e,min:n,max:r}):void 0,w=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,E=n=>{const r=""+n,o=r.match(/(^0+)(.+)/);return o?t("validation.number.isOctal",{key:e}):void 0},k=n=>parseInt(n,10)<1||parseInt(n,10)>65535?t("validation.number.between",{key:e,min:"1",max:"65535"}):void 0,A=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,T=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=>(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,N=(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}),L=(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},F=n=>/^\d+[hms]$/.test(n)?void 0:t("validation.monitoring.route.interval",{key:e}),$=e=>null!==e&&void 0!==e&&e.image?void 0:t("workload.validation.containerImage",{name:e.name}),M=e=>{var n,r;const o=e.jobTemplate?null===e||void 0===e||null===(n=e.jobTemplate)||void 0===n||null===(n=n.spec)||void 0===n||null===(n=n.template)||void 0===n||null===(n=n.spec)||void 0===n?void 0:n.containers:null===e||void 0===e||null===(r=e.template)||void 0===r||null===(r=r.spec)||void 0===r?void 0:r.containers;return o&&o.length?o.map(t=>$(t)).find(t=>t):t("validation.required",{key:t("workload.container.titles.containers")})},U=t=>{const e=[A,l("label"),h("label"),S,R("label")];return f(t,e)},B=t=>{const e=[A,l("label"),h("label"),T,C("label"),R("label",15)];return f(t,e)},G=t=>{const e=[A,s("label"),l("label"),h("label"),S,C("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=[A,l("hostname"),h("hostname"),S,C("hostname"),R("hostname")];for(let t=0;t(t=t?t.replace(/^\*\./,""):t,H(t)),K=e=>a()(e)?t("validation.service.externalName.none"):H(e),q=t=>"This is an error returned by the testRule validator",W=e=>a()(null===e||void 0===e?void 0:e.groups)?t("validation.prometheusRule.groups.required"):void 0,z=e=>n=>{var r;return e&&null!==(r=n||"")&&void 0!==r&&r.match(/^(c-.{5}|local)$/i)?t("validation.cluster.name"):void 0},Y=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=B(s.string);if(t)return t}},X=(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=X(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["u"].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["e"].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:N,backupTarget:et,betweenLengths:_,betweenValues:g,clusterIp:tt,clusterName:z,containerImage:$,containerImages:M,cronSchedule:D,dnsLabel:U,dnsLabelIanaServiceName:B,dnsLabelRestricted:G,externalName:K,fileRequired:rt,groupsAreValid:J,hostname:H,imageUrl:nt,interval:F,isHttps:P,matching:Q,maxLength:y,maxValue:b,minLength:m,minValue:v,noUpperCase:L,portNumber:k,required:j,requiredInt:w,isInteger:x,isPositive:O,isOctal:E,roleTemplateRules:Z,ruleGroups:W,servicePort:Y,subDomain:ot,testRule:q,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},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["e"])(i[t])));t.commit(n+"/product",i)},basicType(o,i){!Object(r["g"])(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["g"])(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["g"])(e)?t.commit(n+"/setGroupDefaultType",{groups:e,defaultType:o}):t.commit(n+"/setGroupDefaultType",{group:e,defaultType:o})},weightType(e,o,i){Object(r["g"])(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},"7e5c":function(t,e,n){"use strict";n("9c73")},"7e89":function(t,e,n){"use strict";n.d(e,"e",(function(){return r})),n.d(e,"a",(function(){return o})),n.d(e,"d",(function(){return i})),n.d(e,"b",(function(){return a})),n.d(e,"c",(function(){return s}));const r={CLASS:"class"},o="_",i={AUTO_IMPORT:"cluster-api.cattle.io/rancher-auto-import"},a={CLUSTER_CLASS:"cluster.x-k8s.io.clusterclass",PROVIDER:"operator.cluster.x-k8s.io.infrastructureprovider"},s={"kubekey-k3s":["k3s1","k3s2"],rke2:["rke2r1","rke2r2"]}},"7eaa":function(t,e,n){"use strict";n.r(e),n.d(e,"infraProvider",(function(){return o}));var r=n("640c");n("907c"),n("7e89");class o extends r["a"]{canYaml(){return!1}}},"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,"z",(function(){return r})),n.d(e,"p",(function(){return o})),n.d(e,"c",(function(){return i})),n.d(e,"d",(function(){return a})),n.d(e,"f",(function(){return s})),n.d(e,"h",(function(){return c})),n.d(e,"i",(function(){return l})),n.d(e,"j",(function(){return u})),n.d(e,"m",(function(){return d})),n.d(e,"o",(function(){return p})),n.d(e,"n",(function(){return f})),n.d(e,"q",(function(){return h})),n.d(e,"r",(function(){return v})),n.d(e,"s",(function(){return b})),n.d(e,"t",(function(){return g})),n.d(e,"v",(function(){return m})),n.d(e,"w",(function(){return y})),n.d(e,"y",(function(){return _})),n.d(e,"x",(function(){return w})),n.d(e,"A",(function(){return x})),n.d(e,"u",(function(){return O})),n.d(e,"C",(function(){return E})),n.d(e,"D",(function(){return k})),n.d(e,"b",(function(){return R})),n.d(e,"l",(function(){return I})),n.d(e,"k",(function(){return N})),n.d(e,"a",(function(){return j})),n.d(e,"g",(function(){return L})),n.d(e,"B",(function(){return D})),n.d(e,"e",(function(){return P}));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",_="service",w="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"},E="workload",k={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:A,CRON_JOB:S,JOB:T,...C}=k,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"}},N={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={CAPI_CLUSTER:"cluster.x-k8s.io.cluster",MACHINE_DEPLOYMENT:"cluster.x-k8s.io.machinedeployment",MACHINE_SET:"cluster.x-k8s.io.machineset",MACHINE:"cluster.x-k8s.io.machine",RANCHER_CLUSTER:"provisioning.cattle.io.cluster",MACHINE_CONFIG_GROUP:"rke-machine-config.cattle.io"},L={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"},D={CLUSTER_MEMBERS:"cluster-members",PROJECT_NAMESPACES:"projects-namespaces",NAMESPACES:"namespaces"},P="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["b"])(e.replace(/Id$/,"")):Object(c["b"])(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.8"}},"scripts":{"dev":"./node_modules/.bin/nuxt dev","nuxt":"./node_modules/.bin/nuxt"},"engines":{"node":">=14"},"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),_=l(s),w=c;(r&&w(new r(new ArrayBuffer(1)))!=v||o&&w(new o)!=u||i&&w(i.resolve())!=p||a&&w(new a)!=f||s&&w(new s)!=h)&&(w=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 _:return h}return e}),t.exports=w},"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"),_=n("35bb"),w=n("b506"),x=n("fe22"),O=n("0652"),E=n("cc7f"),k=1,A=2,S=4,T="[object Arguments]",C="[object Array]",R="[object Boolean]",I="[object Date]",N="[object Error]",j="[object Function]",L="[object GeneratorFunction]",D="[object Map]",P="[object Number]",F="[object Object]",$="[object RegExp]",M="[object Set]",U="[object String]",B="[object Symbol]",G="[object WeakMap]",H="[object ArrayBuffer]",V="[object DataView]",K="[object Float32Array]",q="[object Float64Array]",W="[object Int8Array]",z="[object Int16Array]",Y="[object Int32Array]",X="[object Uint8Array]",J="[object Uint8ClampedArray]",Q="[object Uint16Array]",Z="[object Uint32Array]",tt={};function et(t,e,n,C,R,I){var N,D=e&k,P=e&A,$=e&S;if(n&&(N=R?n(t,C,R,I):n(t)),void 0!==N)return N;if(!w(t))return t;var M=m(t);if(M){if(N=v(t),!D)return l(t,N)}else{var U=h(t),B=U==j||U==L;if(y(t))return c(t,D);if(U==F||U==T||B&&!R){if(N=P||B?{}:g(t),!D)return P?d(t,s(N,t)):u(t,a(N,t))}else{if(!tt[U])return R?t:{};N=b(t,U,D)}}I||(I=new r);var G=I.get(t);if(G)return G;I.set(t,N),x(t)?t.forEach((function(r){N.add(et(r,e,n,r,t,I))})):_(t)&&t.forEach((function(r,o){N.set(o,et(r,e,n,o,t,I))}));var H=$?P?f:p:P?E:O,V=M?void 0:H(t);return o(V||t,(function(r,o){V&&(o=r,r=t[o]),i(N,o,et(r,e,n,o,t,I))})),N}tt[T]=tt[C]=tt[H]=tt[V]=tt[R]=tt[I]=tt[K]=tt[q]=tt[W]=tt[z]=tt[Y]=tt[D]=tt[P]=tt[F]=tt[$]=tt[M]=tt[U]=tt[B]=tt[X]=tt[J]=tt[Q]=tt[Z]=!0,tt[N]=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},"932e":function(t,e,n){"use strict";n.r(e),n.d(e,"init",(function(){return a}));var r=n("907c"),o=n("7e89");const i="manager";function a(t,e){const{basicType:n,weightType:a,weightGroup:s,virtualType:c}=t.DSL(e,i);c({label:"CAPI Turtles",icon:"gear",name:"capi-dashboard",namespaced:!1,weight:99,route:{name:`c-cluster-${i}-capi`,params:{cluster:"_"}},overview:!0,exact:!0}),n(["capi-dashboard",r["a"].CAPI_CLUSTER,o["b"].CLUSTER_CLASS,o["b"].PROVIDER,r["a"].MACHINE_SET,r["a"].MACHINE_DEPLOYMENT],"CAPITurtles"),a(r["a"].CAPI_CLUSTER,10,!0),s("CAPITurtles",10,!0)}},"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},"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||M,r||$,!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["e"])(this.status.conditions||[],"type",t);return!!n&&(!e||(n.status||"").toLowerCase()===(""+e).toLowerCase())}waitForCondition(t,e="True",n=M,r=$){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["h"])}get canYaml(){return this.hasLink("view")}get canEditYaml(){var t;return(null===(t=this.schema)||void 0===t||null===(t=t.resourceMethods)||void 0===t||!t.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(!w()(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["c"]]:o["j"],[o["a"]]:o["q"],...t},this.currentRouter().push(e)}goToEdit(t={}){const e=this.detailLocation;e.query={...e.query,[o["c"]]:o["n"],[o["a"]]:o["q"],...t},this.currentRouter().push(e)}goToViewConfig(t={}){const e=this.detailLocation;e.query={...e.query,[o["c"]]:o["r"],[o["a"]]:o["k"],...t},this.currentRouter().push(e)}goToEditYaml(){const t=this.detailLocation;t.query={...t.query,[o["c"]]:o["n"],[o["a"]]:o["s"]},this.currentRouter().push(t)}goToViewYaml(){const t=this.detailLocation;t.query={...t.query,[o["c"]]:o["r"],[o["a"]]:o["s"]},this.currentRouter().push(t)}cloneYaml(t={}){const e=this.detailLocation;e.query={...e.query,[o["c"]]:o["j"],[o["a"]]:o["s"],...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["b"])(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){await this._saveYaml(t)}async _saveYaml(t){var e;const n=g.a.load(t);if(null!==(e=this.schema)&&void 0!==e&&null!==(e=e.attributes)&&void 0!==e&&e.namespaced&&!n.metadata.namespace){const t=this.$rootGetters["i18n/t"]("resourceYaml.errors.namespaceRequired");throw t}let r;const o=!this.id,i={"content-type":"application/yaml",accept:"application/json"};r=o?await this.schema.followLink("collection",{method:"POST",headers:i,data:t}):await this.followLink("update",{method:"PUT",headers:i,data:t}),await this.$dispatch("load",{data:r,existing:o?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 w()(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)),k()(c)&&(c=c.trim()),o){const e=Object(l["f"])(t,o);!w()(e)&&w()(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),!w()(c)&&L.includes(a)){const e=(c||"").toLowerCase();e!==c&&(c=e,C.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(!w()(o)&&a)s["a"][o](c,this.$rootGetters,n,i,d,t);else if(!w()(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["b"])(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&&!w()(d)&&L.includes(o)){const e=(d||"").toLowerCase();e!==d&&(d=e,C.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;const r={selectors:[],ids:[]};if(null===(n=this.metadata)||void 0===n||null===(n=n.relationships)||void 0===n||!n.length)return r;for(const o of this.metadata.relationships)if(("any"===t||o.rel===t)&&o[e+"Type"])if(o.selector)Object(a["b"])(r.selectors,{type:o.toType,namespace:o.toNamespace,selector:o.selector});else{const t=o[e+"Type"];let n=o[e+"Namespace"],i=o[e+"Id"];if(!n&&i.includes("/")){const t=i.indexOf("/");n=i.substr(0,t),i=i.substr(t+1)}const s=(n?n+"/":"")+i;Object(a["a"])(r.ids,{type:t,namespace:n,name:i,id:s})}return r}_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,_=2,w=4,x=8,O=16,E=32,k=64,A=128,S=256,T=512,C=30,R="...",I=800,N=16,j=1,L=2,D=3,P=1/0,F=9007199254740991,$=17976931348623157e292,M=NaN,U=4294967295,B=U-1,G=U>>>1,H=[["ary",A],["bind",y],["bindKey",_],["curry",x],["curryRight",O],["flip",T],["partial",E],["partialRight",k],["rearg",S]],V="[object Arguments]",q="[object Array]",K="[object AsyncFunction]",z="[object Boolean]",W="[object Date]",Y="[object DOMException]",X="[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]",_t="[object Uint8ClampedArray]",wt="[object Uint16Array]",xt="[object Uint32Array]",Ot=/\b__p \+= '';/g,Et=/\b(__p \+=) '' \+/g,kt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,At=/&(?:amp|lt|gt|quot|#39);/g,St=/[&<>"']/g,Tt=RegExp(At.source),Ct=RegExp(St.source),Rt=/<%-([\s\S]+?)%>/g,It=/<%([\s\S]+?)%>/g,Nt=/<%=([\s\S]+?)%>/g,jt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Lt=/^\w*$/,Dt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Pt=/[\\^$.*+?()[\]{}|]/g,Ft=RegExp(Pt.source),$t=/^\s+/,Mt=/\s/,Ut=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Bt=/\{\n\/\* \[wrapped with (.+)\] \*/,Gt=/,? & /,Ht=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Vt=/[()=,{}\[\]\/\s]/,qt=/\\(\\)?/g,Kt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,zt=/\w*$/,Wt=/^[-+]0x[0-9a-f]+$/i,Yt=/^0b[01]+$/i,Xt=/^\[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+"]",_e="\\d+",we="["+se+"]",xe="["+ce+"]",Oe="[^"+ne+ve+_e+se+ce+fe+"]",Ee="\\ud83c[\\udffb-\\udfff]",ke="(?:"+ye+"|"+Ee+")",Ae="[^"+ne+"]",Se="(?:\\ud83c[\\udde6-\\uddff]){2}",Te="[\\ud800-\\udbff][\\udc00-\\udfff]",Ce="["+fe+"]",Re="\\u200d",Ie="(?:"+xe+"|"+Oe+")",Ne="(?:"+Ce+"|"+Oe+")",je="(?:"+be+"(?:d|ll|m|re|s|t|ve))?",Le="(?:"+be+"(?:D|LL|M|RE|S|T|VE))?",De=ke+"?",Pe="["+he+"]?",Fe="(?:"+Re+"(?:"+[Ae,Se,Te].join("|")+")"+Pe+De+")*",$e="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Me="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Ue=Pe+De+Fe,Be="(?:"+[we,Se,Te].join("|")+")"+Ue,Ge="(?:"+[Ae+ye+"?",ye,Se,Te,ge].join("|")+")",He=RegExp(be,"g"),Ve=RegExp(ye,"g"),qe=RegExp(Ee+"(?="+Ee+")|"+Ge+Ue,"g"),Ke=RegExp([Ce+"?"+xe+"+"+je+"(?="+[me,Ce,"$"].join("|")+")",Ne+"+"+Le+"(?="+[me,Ce+Ie,"$"].join("|")+")",Ce+"?"+Ie+"+"+je,Ce+"+"+Le,Me,$e,_e,Be].join("|"),"g"),ze=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 ]/,Ye=["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"],Xe=-1,Je={};Je[ht]=Je[vt]=Je[bt]=Je[gt]=Je[mt]=Je[yt]=Je[_t]=Je[wt]=Je[xt]=!0,Je[V]=Je[q]=Je[pt]=Je[z]=Je[ft]=Je[W]=Je[X]=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[z]=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[_t]=Qe[wt]=Qe[xt]=!0,Qe[X]=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 _n(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 wn(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--&&$n(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 ze.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(!Eu(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),Fu(t)?t.forEach((function(r){s.add(mo(r,e,n,r,t,a))})):Au(t)&&t.forEach((function(r,o){s.set(o,mo(r,e,n,o,t,a))}));var m=u?l?Ua:Ma: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 _o(n,t,e)}}function _o(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 wo(t,e,n){if("function"!=typeof t)throw new ie(l);return ks((function(){t.apply(i,n)}),e)}function xo(t,e,n,r){var o=-1,i=An,a=!0,c=t.length,l=[],u=e.length;if(!c)return l;n&&(e=Tn(e,Xn(n))),r?(i=Sn,a=!1):e.length>=s&&(i=Qn,a=!1,e=new Yr(e));t:while(++oo?0:o+n),r=r===i||r>o?o:Wu(r),r<0&&(r+=o),r=n>r?0:Yu(r);while(n0&&n(s)?e>1?Co(s,e-1,n,r,o):Cn(o,s):r||(o[o.length]=s)}return o}var Ro=da(),Io=da(!0);function No(t,e){return t&&Ro(t,e,xd)}function jo(t,e){return t&&Io(t,e,xd)}function Lo(t,e){return kn(e,(function(e){return wu(t[e])}))}function Do(t,e){e=Vi(e,t);var n=0,r=e.length;while(null!=t&&ne}function Mo(t,e){return null!=t&&de.call(t,e)}function Uo(t,e){return null!=t&&e in ne(t)}function Bo(t,e,n){return t>=Be(e,n)&&t=120&&p.length>=120)?new Yr(c&&p):i}p=t[0];var f=-1,h=l[0];t:while(++f-1)s!==t&&ke.call(s,c,1),ke.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)?ke.call(t,o,1):Pi(t,o)}}return t}function mi(t,e){return t+Le(Ke()*(e-t+1))}function yi(t,e,r,o){var i=-1,a=Ue(je((e-t)/(r||1)),0),s=n(a);while(a--)s[o?a:++i]=t,t+=r;return s}function _i(t,e){var n="";if(!t||e<1||e>F)return n;do{e%2&&(n+=t),e=Le(e/2),e&&(t+=t)}while(e);return n}function wi(t,e){return As(_s(t,e,Rp),t+"")}function xi(t){return io(Bd(t))}function Oi(t,e){var n=Bd(t);return Cs(n,go(e,0,n.length))}function Ei(t,e,n,r){if(!Eu(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&&!Mu(a)&&(n?a<=e:a=s){var u=e?null:Ca(t);if(u)return pr(u);a=!1,o=Qn,l=new Yr}else l=e?[]:c;t:while(++r=r?t:Ti(t,e,n)}var zi=Re||function(t){return cn.clearTimeout(t)};function Wi(t,e){if(e)return t.slice();var n=t.length,r=we?we(n):new t.constructor(n);return t.copy(r),r}function Yi(t){var e=new t.constructor(t.byteLength);return new _e(e).set(new _e(t)),e}function Xi(t,e){var n=e?Yi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Ji(t){var e=new t.constructor(t.source,zt.exec(t));return e.lastIndex=t.lastIndex,e}function Qi(t){return hr?ne(hr.call(t)):{}}function Zi(t,e){var n=e?Yi(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=Mu(t),s=e!==i,c=null===e,l=e===e,u=Mu(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=Ue(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 $a((function(e){var n=e.length,r=n,o=Ar.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 Ar([],!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 Yr:i;a.set(t,e),a.set(e,t);while(++p1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Ut,"{\n/* [wrapped with "+e+"] */\n")}function is(t){return cu(t)||su(t)||!!(Ae&&t&&t[Ae])}function as(t,e){var n=typeof t;return e=null==e?F: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 Cs(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=wr(t);return e.__chain__=!0,e}function Kc(t,e){return e(t),t}function zc(t,e){return e(t)}var Wc=$a((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:zc,args:[o],thisArg:i}),new Ar(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(i),t}))):this.thru(o)}));function Yc(){return qc(this)}function Xc(){return new Ar(this.value(),this.__chain__)}function Jc(){this.__values__===i&&(this.__values__=Ku(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 kr){var r=Ls(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:zc,args:[hc],thisArg:i}),new Ar(e,this.__chain__)}return this.thru(hc)}function el(){return Mi(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)?En:ko;return n&&ss(t,e,n)&&(e=i),r(t,Va(e,3))}function ol(t,e){var n=cu(t)?kn:To;return n(t,Va(e,3))}var il=ga(Ks),al=ga(zs);function sl(t,e){return Co(bl(t,e),1)}function cl(t,e){return Co(bl(t,e),P)}function ll(t,e,n){return n=n===i?1:Wu(n),Co(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:Eo;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:Bd(t),n=n&&!r?Wu(n):0;var o=t.length;return n<0&&(n=Ue(o+n,0)),$u(t)?n<=o&&t.indexOf(e,n)>-1:!!o&&$n(t,e,n)>-1}var hl=wi((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?_n(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)?Tn: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 _l(t,e,n){var r=cu(t)?In:Vn,o=arguments.length<3;return r(t,Va(e,4),n,o,Eo)}function wl(t,e){var n=cu(t)?kn:To;return n(t,Bl(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 El(t){var e=cu(t)?so:Si;return e(t)}function kl(t){if(null==t)return 0;if(uu(t))return $u(t)?br(t):t.length;var e=Ja(t);return e==Z||e==at?t.size:ri(t).length}function Al(t,e,n){var r=cu(t)?Nn:Ci;return n&&ss(t,e,n)&&(e=i),r(t,Va(e,3))}var Sl=wi((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,Co(e,1),[])})),Tl=Ie||function(){return cn.Date.now()};function Cl(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,A,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 Nl=wi((function(t,e,n){var r=y;if(n.length){var o=dr(n,Ha(Nl));r|=E}return Ia(t,r,e,n,o)})),jl=wi((function(t,e,n){var r=y|_;if(n.length){var o=dr(n,Ha(jl));r|=E}return Ia(e,r,t,n,o)}));function Ll(t,e,n){e=n?i:e;var r=Ia(t,x,i,i,i,i,i,e);return r.placeholder=Ll.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=ks(y,e),p?v(t):s}function g(t){var n=t-u,r=t-d,o=e-n;return f?Be(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=Tl();if(m(t))return _(t);c=ks(y,g(t))}function _(t){return c=i,h&&r?v(t):(r=o=i,s)}function w(){c!==i&&zi(c),d=0,r=u=o=c=i}function x(){return c===i?s:_(Tl())}function O(){var t=Tl(),n=m(t);if(r=arguments,o=this,u=t,n){if(c===i)return b(u);if(f)return zi(c),c=ks(y,e),v(u)}return c===i&&(c=ks(y,e)),s}return e=Xu(e)||0,Eu(n)&&(p=!!n.leading,f="maxWait"in n,a=f?Ue(Xu(n.maxWait)||0,e):a,h="trailing"in n?!!n.trailing:h),O.cancel=w,O.flush=x,O}var Fl=wi((function(t,e){return wo(t,1,e)})),$l=wi((function(t,e,n){return wo(t,Xu(e)||0,n)}));function Ml(t){return Ia(t,T)}function Ul(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(Ul.Cache||Hr),n}function Bl(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)}Ul.Cache=Hr;var Hl=qi((function(t,e){e=1==e.length&&cu(e[0])?Tn(e[0],Xn(Va())):Tn(Co(e,1),Xn(Va()));var n=e.length;return wi((function(r){var o=-1,i=Be(r.length,n);while(++o=e})),su=qo(function(){return arguments}())?qo:function(t){return ku(t)&&de.call(t,"callee")&&!Ee.call(t,"callee")},cu=n.isArray,lu=hn?Xn(hn):Ko;function uu(t){return null!=t&&Ou(t.length)&&!wu(t)}function du(t){return ku(t)&&uu(t)}function pu(t){return!0===t||!1===t||ku(t)&&Fo(t)==z}var fu=Pe||Wp,hu=vn?Xn(vn):zo;function vu(t){return ku(t)&&1===t.nodeType&&!Lu(t)}function bu(t){if(null==t)return!0;if(uu(t)&&(cu(t)||"string"==typeof t||"function"==typeof t.splice||fu(t)||Uu(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(!ku(t))return!1;var e=Fo(t);return e==X||e==Y||"string"==typeof t.message&&"string"==typeof t.name&&!Lu(t)}function _u(t){return"number"==typeof t&&Fe(t)}function wu(t){if(!Eu(t))return!1;var e=Fo(t);return e==J||e==Q||e==K||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<=F}function Eu(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function ku(t){return null!=t&&"object"==typeof t}var Au=bn?Xn(bn):Xo;function Su(t,e){return t===e||Jo(t,e,Ka(e))}function Tu(t,e,n){return n="function"==typeof n?n:i,Jo(t,e,Ka(e),n)}function Cu(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 Nu(t){return null==t}function ju(t){return"number"==typeof t||ku(t)&&Fo(t)==tt}function Lu(t){if(!ku(t)||Fo(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?Xn(gn):Zo;function Pu(t){return xu(t)&&t>=-F&&t<=F}var Fu=mn?Xn(mn):ti;function $u(t){return"string"==typeof t||!cu(t)&&ku(t)&&Fo(t)==st}function Mu(t){return"symbol"==typeof t||ku(t)&&Fo(t)==ct}var Uu=yn?Xn(yn):ei;function Bu(t){return t===i}function Gu(t){return ku(t)&&Ja(t)==ut}function Hu(t){return ku(t)&&Fo(t)==dt}var Vu=Aa(ii),qu=Aa((function(t,e){return t<=e}));function Ku(t){if(!t)return[];if(uu(t))return $u(t)?gr(t):oa(t);if(Se&&t[Se])return cr(t[Se]());var e=Ja(t),n=e==Z?lr:e==at?pr:Bd;return n(t)}function zu(t){if(!t)return 0===t?t:0;if(t=Xu(t),t===P||t===-P){var e=t<0?-1:1;return e*$}return t===t?t:0}function Wu(t){var e=zu(t),n=e%1;return e===e?n?e-n:e:0}function Yu(t){return t?go(Wu(t),0,U):0}function Xu(t){if("number"==typeof t)return t;if(Mu(t))return M;if(Eu(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=Eu(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Yn(t);var n=Yt.test(t);return n||Jt.test(t)?on(t.slice(2),n?2:8):Wt.test(t)?M:+t}function Ju(t){return ia(t,Od(t))}function Qu(t){return t?go(Wu(t),-F,F):0===t?t:0}function Zu(t){return null==t?"":Li(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=$a(bo);function id(t,e){var n=Or(t);return null==e?n:fo(n,e)}var ad=wi((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,Ua(t),n),r&&(n=mo(n,h|v|b,La));var o=e.length;while(o--)Pi(n,e[o]);return n}));function Cd(t,e){return Id(t,Bl(Va(e)))}var Rd=$a((function(t,e){return null==t?{}:fi(t,e)}));function Id(t,e){if(null==t)return{};var n=Tn(Ua(t),(function(t){return[t]}));return e=Va(e),hi(t,n,(function(t,n){return e(t,n[0])}))}function Nd(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=Ke();return Be(t+o*(e-t+rn("1e-"+((o+"").length-1))),e)}return mi(t,e)}var Kd=ha((function(t,e,n){return e=e.toLowerCase(),t+(n?zd(e):e)}));function zd(t){return _p(Zu(t).toLowerCase())}function Wd(t){return t=Zu(t),t&&t.replace(Zt,nr).replace(Ve,"")}function Yd(t,e,n){t=Zu(t),e=Li(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 Xd(t){return t=Zu(t),t&&Ct.test(t)?t.replace(St,rr):t}function Jd(t){return t=Zu(t),t&&Ft.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(Le(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=Li(e),!e&&ar(t))?Ki(gr(t),0,n):t.split(e,n)):[]}var lp=ha((function(t,e,n){return t+(n?" ":"")+_p(e)}));function up(t,e,n){return t=Zu(t),n=null==n?0:go(Wu(n),0,t.length),e=Li(e),t.slice(n,n+e.length)==e}function dp(t,e,n){var r=wr.templateSettings;n&&ss(t,e,n)&&(e=i),t=Zu(t),e=nd({},e,r,Na);var a,s,c=nd({},e.imports,r.imports,Na),l=xd(c),d=Jn(c,l),p=0,f=e.interpolate||te,h="__p += '",v=re((e.escape||te).source+"|"+f.source+"|"+(f===Nt?Kt:te).source+"|"+(e.evaluate||te).source+"|$","g"),b="//# sourceURL="+(de.call(e,"sourceURL")?(e.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Xe+"]")+"\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(Et,"$1").replace(kt,"$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 Mt(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 Yn(t);if(!t||!(e=Li(e)))return t;var r=gr(t),o=gr(e),a=Zn(r,o),s=tr(r,o)+1;return Ki(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=Li(e)))return t;var r=gr(t),o=tr(r,gr(e))+1;return Ki(r,0,o).join("")}function bp(t,e,n){if(t=Zu(t),t&&(n||e===i))return t.replace($t,"");if(!t||!(e=Li(e)))return t;var r=gr(t),o=Zn(r,gr(e));return Ki(r,o).join("")}function gp(t,e){var n=C,r=R;if(Eu(e)){var o="separator"in e?e.separator:o;n="length"in e?Wu(e.length):n,r="omission"in e?Li(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?Ki(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(zt.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(Li(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&&Tt.test(t)?t.replace(At,yr):t}var yp=ha((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),_p=fa("toUpperCase");function wp(t,e,n){return t=Zu(t),e=n?i:e,e===i?sr(t)?xr(t):Dn(t):t.match(e)||[]}var xp=wi((function(t,e){try{return _n(t,i,e)}catch(n){return yu(n)?n:new o(n)}})),Op=$a((function(t,e){return xn(e,(function(e){e=Is(e),vo(t,e,Nl(t[e],t))})),t}));function Ep(t){var e=null==t?0:t.length,n=Va();return t=e?Tn(t,(function(t){if("function"!=typeof t[1])throw new ie(l);return[n(t[0]),t[1]]})):[],wi((function(n){var r=-1;while(++rF)return[];var n=U,r=Be(t,U);e=Va(e),t-=U;var o=zn(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(U)},No(Sr.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),o=wr[r?"take"+("last"==e?"Right":""):e],a=r||/^find/.test(e);o&&(wr.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(wr,Cn([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:zc,args:[d],thisArg:i}),new Ar(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);wr.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)}))}})),No(Sr.prototype,(function(t,e){var n=wr[e];if(n){var r=n.name+"";de.call(ln,r)||(ln[r]=[]),ln[r].push({name:e,func:n})}})),ln[ya(i,_).name]=[{name:"wrapper",func:i}],Sr.prototype.clone=Tr,Sr.prototype.reverse=Cr,Sr.prototype.value=Rr,wr.prototype.at=Wc,wr.prototype.chain=Yc,wr.prototype.commit=Xc,wr.prototype.next=Jc,wr.prototype.plant=Zc,wr.prototype.reverse=tl,wr.prototype.toJSON=wr.prototype.valueOf=wr.prototype.value=el,wr.prototype.first=wr.prototype.head,Se&&(wr.prototype[Se]=Qc),wr},Er=Or();cn._=Er,o=function(){return Er}.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}}async function o(t,e){const n=Object.keys(t),r=Object.values(t),o=await Promise[e](r),i={};for(let a=0;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 i})),n.d(e,"b",(function(){return a}))},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["k"].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===t||void 0===t||null===(e=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-1&&t%1==0&&t<=n}t.exports=r},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,"i",(function(){return o})),n.d(e,"j",(function(){return i})),n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"f",(function(){return c})),n.d(e,"g",(function(){return l})),n.d(e,"h",(function(){return u})),n.d(e,"c",(function(){return d})),n.d(e,"d",(function(){return f})),n.d(e,"e",(function(){return h})),n.d(e,"k",(function(){return v}));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){t.splice(0,t.length)}function p(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 f(t,e,n){return p("filter",t,e,n)}function h(t,e,n){return p("find",t,e,n)}function v(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(++r=0;e--){let n=t[e].split(/\./);while(n.length)Object(o["a"])(t,n.join(".")),n=n.slice(0,-1)}for(const e of t){const t=e.split(/\./),n=t[t.length-1],r=t.slice(0,-1).join(".");r===p&&y.resourceFields&&y.resourceFields[n]&&Object(o["a"])(_,n)}}const O=Object.keys(y.resourceFields||{});O.forEach(t=>{("undefined"!==typeof n[t]||0===i&&"_type"===t)&&Object(o["a"])(_,t)});for(const a in n)"undefined"!==typeof n[a]&&Object(o["a"])(_,a);for(const a of d){const t=a.split(/\./),e=t[t.length-1],n=t.slice(0,-1).join(".");n===p&&Object(o["i"])(_,e)}for(const a of u){const t=a.split(/\./),e=t[t.length-1],n=t.slice(0,-1).join(".");n===p&&y.resourceFields&&y.resourceFields[e]&&Object(o["i"])(O,e)}Object(o["j"])(O,_);const k=_.map(t=>T(t)),A=O.map(e=>{if("metadata"===p&&"namespace"===e){var n;const e=Object(o["e"])(t,"id",f);if(e&&(null===(n=e.attributes)||void 0===n||!n.namespaced))return null}return v(T(e))}),S=[...k,...A].filter(t=>null!==t).join("\n").trim();return S;function T(e){var l;const u=null===(l=y.resourceFields)||void 0===l?void 0:l[e];let d=e+":";if("_type"===e&&(d="type:"),!u){if(n[e])try{const t=Object(s["d"])(n),r=a.a.dump(t[e]);return"object"===typeof n[e]||Array.isArray(n[e])?d+="\n"+b(r.trim()):d+=" "+r.trim(),d}catch(S){console.error("Error: Unable to parse map data for yaml key: "+e,S)}return null}const v=x(u.type),_=w("map",v),O=w("array",v),k=w("reference",v);if(_){if(n[e])try{const t=Object(s["d"])(n),r=E(t[e],m[e]);d+="\n"+b(r)}catch(S){console.error("Error: Unable to parse map data for yaml of type: "+v,S)}if(c.includes(_))d+="# key: "+_;else{const n=h(t,_,null,r,i+1,p?`${p}.${e}`:e,f,m);let o=b(n);o=o.replace(/^(#)?\s\s\s\s/,"$1"),d+=""+o}return d}if(O){if(n[e])try{const t=Object(s["d"])(n);if(null!==t&&void 0!==t&&t[e]){const n=a.a.dump(t[e]);d+="\n"+b(n.trim())}}catch(S){console.error("Error: Unale to parse array data for yaml of type: "+v,S)}if(c.includes(O))d+="\n# - "+O;else{const n=h(t,O,null,!1,i+1,p?`${p}.${e}`:e,f,m);let r=b(n,2);r=r.replace(/^(#)?\s*\s\s([^\s])/,"$1 - $2"),d+="\n"+r}return d}if(k)return d+=" #"+k,d;if(c.includes(v))return"_type"===e&&"undefined"===typeof n[e]&&"undefined"!==typeof n["type"]?d+=" "+g(n["type"]):"undefined"===typeof n[e]?d+=" #"+g(v):d+=" "+g(n[e]),d;if("json"===v||".spec"===v)try{const t=a.a.dump(n[e]);return d+=t?"\n"+b(t.trim()):" #"+v,d}catch(S){}const A=Object(o["e"])(t,"id",v);if(A){let o;if(null!==A&&void 0!==A&&A.resourceFields&&!Object(s["h"])(null===A||void 0===A?void 0:A.resourceFields))o=h(t,v,n[e],r,i+1,p?`${p}.${e}`:e,f,m);else if(n[e])try{const t=a.a.dump(n[e]);o=t.trim()}catch(S){console.error("Error: Unale to parse data for yaml of type: "+v,S)}d+="\n"+b(o)}else d+=" #"+v;return d}}function v(t){return(t||"").split("\n").map(t=>"#"+t.replace(/#/g,"")).join("\n")}function b(t,e=1){return Object(r["h"])(t,e*p," ",/^#/)}function g(t){return a.a.dump(t).trim()}function m(t,e){const n=y(t,e);return{header:n,indentation:_(n)}}function y(t,e){const n=`(${e})[\\:][\\s|\\t]+[\\|\\>][\\d]*[\\-\\+]?`,r=new RegExp(n,"gi"),o=t.match(r);return(null===o||void 0===o?void 0:o[0])||""}function _(t){const e=t.substr(t.indexOf(":")+1),n=e.match(/\d+/);return(null===n||void 0===n?void 0:n[0])||""}function w(t,e){const n=new RegExp(`^${t}\\[(.*)\\]$`),r=e.match(n);if(r)return x(r[1])}function x(t){return"integer"===t?"int":"io.k8s.apimachinery.pkg.api.resource.Quantity"===t?"string":t}function O(t){const e=a.a.dump(t||{});return"{}\n"===e?"":e}function E(t,e={}){const n=a.a.dump(t);let r=n;const o=Object.keys(t).filter(e=>t[e].includes("\n"));if(o.length)for(const a of o){var i,s,c,l;const{header:t,indentation:n}=m(r,a),o=null!==(i=null===(s=e[a])||void 0===s?void 0:s.scalarStyle)&&void 0!==i?i:"|",u=null!==(c=null===(l=e[a])||void 0===l?void 0:l.chomping)&&void 0!==c?c:"";r=r.replace(t,`${a}: ${o}${u}${n}`)}return r}},c68c:function(t,e,n){var r=n("c316"),o=n("8bb9"),i=n("4a83"),a=n("770e");function s(t,e){return r(t)?t:o(t,e)?[t]:i(a(t))}t.exports=s},c87d:function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"b",(function(){return a}));var r=n("5877"),o=n.n(r);async function i(t,e,r="text/plain;charset=utf-8"){const o=new Blob([e],{type:r}),{saveAs:i}=await n.e(6).then(n.t.bind(null,"7ada",7));return i(o,t)}function a(t){const e=new o.a;for(const n in t)e.file(n,t[n]);return e.generateAsync({type:"blob"}).then(t=>t)}},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 _(t){}function w(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 _})),n.d(e,"n",(function(){return w}))},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")},d709:function(t,e,n){"use strict";n.d(e,"a",(function(){return c}));var r=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()])},o=[],i=n("8bbf"),a=n.n(i),s={memberOfObject:(t,e)=>Object.entries(t||{}).find(([t])=>t===e),memberOfComponent:(t,e)=>t[e]};const c={ACTION:"action",WAITING:"waiting",SUCCESS:"success",ERROR:"error"},l="text",u="tooltip";var d=a.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:l},size:{type:String,default:""},currentPhase:{type:String,default:c.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=s.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=s.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===c.WAITING},isDisabled(){return this.disabled||this.phase===c.WAITING},tooltip(){return this.labelAs===u?{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=c.WAITING);const e=t=>{this.done(t)};this.$emit("click",e)},done(t){"cancelled"===t?this.phase=c.ACTION:(this.phase=t?c.SUCCESS:c.ERROR,this.timer=setTimeout(()=>{this.timerDone()},this.delay))},timerDone(){this.phase!==c.SUCCESS&&this.phase!==c.ERROR||(this.phase=c.ACTION)},focus(){this.$refs.btn.focus()}}}),p=d,f=n("d802"),h=Object(f["a"])(p,r,o,!1,null,null,null);e["b"]=h.exports},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 E=Object.prototype.hasOwnProperty;function k(t,e){return t=t.slice(),t.push(e),t}function A(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 T(t,e,n,r,o){if(!(this instanceof T))try{return new T(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=!E.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}}T.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(!E.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=E.call(t,"flatten")?t.flatten:c,this.currResultType=E.call(t,"resultType")?t.resultType:this.currResultType,this.currSandbox=E.call(t,"sandbox")?t.sandbox:this.currSandbox,l=E.call(t,"wrap")?t.wrap:l,this.currPreventEval=E.call(t,"preventEval")?t.preventEval:this.currPreventEval,n=E.call(t,"callback")?t.callback:n,this.currOtherTypeCallback=E.call(t,"otherTypeCallback")?t.otherTypeCallback:this.currOtherTypeCallback,a=E.call(t,"parent")?t.parent:a,s=E.call(t,"parentProperty")?t.parentProperty:s,t=t.path}if(a=a||null,s=s||null,Array.isArray(t)&&(t=T.toPathString(t)),(t||""===t)&&e){var d=T.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}},T.prototype._getPreferredOutput=function(t){var e=this.currResultType;switch(e){case"all":var n=Array.isArray(t.path)?t.path:T.toPathArray(t.path);return t.pointer=T.toPointer(n),t.path="string"===typeof t.path?t.path:T.toPathString(t.path),t;case"value":case"parent":case"parentProperty":return t[e];case"path":return T.toPathString(t[e]);case"pointer":return T.toPointer(t.path);default:throw new TypeError("Unknown result type")}},T.prototype._handleCallback=function(t,e,n){if(e){var r=this._getPreferredOutput(t);t.path="string"===typeof t.path?t.path:T.toPathString(t.path),e(r,n,t)}},T.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&&E.call(e,d))h(this._trace(p,e[d],k(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(A(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(A(e,n),r[t],k(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:k(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(A(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(A(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&&E.call(e,d.slice(1))){var g=d.slice(1);h(this._trace(p,e[g],k(n,g),e,g,a,s,!0))}else if(d.includes(",")){var m,y=d.split(","),_=O(y);try{for(_.s();!(m=_.n()).done;){var w=m.value;h(this._trace(A(w,p),e,n,r,o,a,!0))}}catch(I){_.e(I)}finally{_.f()}}else!c&&e&&E.call(e,d)&&h(this._trace(p,e[d],k(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),N=(n("7195"),n("b506")),j=n.n(N),L=n("c316"),D=n.n(L),P=n("9e74"),F=n.n(P),$=(n("94a3"),n("2cb5")),M=n("bddd");function U(t,e,n){let r=t;if(!r)return;const o=Object($["p"])(e);for(let i=0;i{r=r.map(e=>Array.isArray(e)?e.map(e=>e[t]).flat():e?e[t]:null).flat()}),r.filter(t=>null!==t)}function G(t,e){if(!e)throw new Error("Cannot translate an empty input. The t function requires a string.");if(e.startsWith("$"))try{return T({path:e,json:t,wrap:!1})}catch(o){return console.log("JSON Path error",o,e,t),"(JSON Path err)"}var n;if(!e.includes("."))return null===(n=t)||void 0===n?void 0:n[e];const r=Object($["p"])(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 K(t)}),0===t[e].length&&delete t[e]):"undefined"===typeof n||null===n?delete t[e]:j()(n)&&(q(n)&&delete t[e],t[e]=K(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;othis.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 o(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"}n.d(e,"b",(function(){return r})),n.d(e,"a",(function(){return o}))},e902:function(t,e,n){var r=n("a4fc");function o(t,e){var n=t.length;while(n--)if(r(t[n][0],e))return n;return-1}t.exports=o},e907:function(t,e,n){var r=n("3b1f");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("74742296",r,!0,{sourceMap:!1,shadowMode:!1})},e91b: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.length)}t.exports=o},e942:function(t,e){function n(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}t.exports=n},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},ea69:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));function r(t){const e=r.options,n=e.parser[e.strictMode?"strict":"loose"].exec(t);if(!n)throw new Error("Cannot parse as uri: "+t);const o={};let i=14;while(i--)o[e.key[i]]=n[i]||"";return o.query={},o.queryStr.replace(e.q.parser,(t,n,r)=>(n&&(o[e.q.name][n]=r),"")),o}r.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("da25"),n("907c"),n("a8b9");const o=(t,e)=>{const n=t.getters["currentStore"](e),r=t.getters[n+"/schemaFor"];if(!n||!r)return!1;const o=r(e)||t.getters["type-map/isVirtual"](e);return!!o}},eb32:function(t,e,n){"use strict";var r=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)])},o=[],i=n("8bbf"),a=n.n(i),s=n("2cb5"),c=n("3e9d"),l=a.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(c["c"])(this.label):void 0}},methods:{nlToBr:s["l"]}}),u=l,d=(n("0843"),n("d802")),p=Object(d["a"])(u,r,o,!1,null,"02d86e5d",null);e["a"]=p.exports},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]",_="[object Int8Array]",w="[object Int16Array]",x="[object Int32Array]",O="[object Uint8Array]",E="[object Uint8ClampedArray]",k="[object Uint16Array]",A="[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 _:case w:case x:case O:case E:case k:case A: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]",_="[object DataView]",w="[object Float32Array]",x="[object Float64Array]",O="[object Int8Array]",E="[object Int16Array]",k="[object Int32Array]",A="[object Uint8Array]",S="[object Uint8ClampedArray]",T="[object Uint16Array]",C="[object Uint32Array]",R={};function I(t){return i(t)&&o(t.length)&&!!R[r(t)]}R[w]=R[x]=R[O]=R[E]=R[k]=R[A]=R[S]=R[T]=R[C]=!0,R[a]=R[s]=R[y]=R[c]=R[_]=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["w"]),a=Object(i["e"])(n,"id",Object(o["b"])(r["l"].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",A],["bind",y],["bindKey",_],["curry",x],["curryRight",O],["flip",T],["partial",E],["partialRight",k],["rearg",S]],V="[object Arguments]",K="[object Array]",q="[object AsyncFunction]",W="[object Boolean]",z="[object Date]",Y="[object DOMException]",X="[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]",_t="[object Uint8ClampedArray]",wt="[object Uint16Array]",xt="[object Uint32Array]",Ot=/\b__p \+= '';/g,Et=/\b(__p \+=) '' \+/g,kt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,At=/&(?:amp|lt|gt|quot|#39);/g,St=/[&<>"']/g,Tt=RegExp(At.source),Ct=RegExp(St.source),Rt=/<%-([\s\S]+?)%>/g,It=/<%([\s\S]+?)%>/g,Nt=/<%=([\s\S]+?)%>/g,jt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Lt=/^\w*$/,Dt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Pt=/[\\^$.*+?()[\]{}|]/g,Ft=RegExp(Pt.source),$t=/^\s+/,Mt=/\s/,Ut=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Bt=/\{\n\/\* \[wrapped with (.+)\] \*/,Gt=/,? & /,Ht=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Vt=/[()=,{}\[\]\/\s]/,Kt=/\\(\\)?/g,qt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Wt=/\w*$/,zt=/^[-+]0x[0-9a-f]+$/i,Yt=/^0b[01]+$/i,Xt=/^\[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+"]",_e="\\d+",we="["+se+"]",xe="["+ce+"]",Oe="[^"+ne+ve+_e+se+ce+fe+"]",Ee="\\ud83c[\\udffb-\\udfff]",ke="(?:"+ye+"|"+Ee+")",Ae="[^"+ne+"]",Se="(?:\\ud83c[\\udde6-\\uddff]){2}",Te="[\\ud800-\\udbff][\\udc00-\\udfff]",Ce="["+fe+"]",Re="\\u200d",Ie="(?:"+xe+"|"+Oe+")",Ne="(?:"+Ce+"|"+Oe+")",je="(?:"+be+"(?:d|ll|m|re|s|t|ve))?",Le="(?:"+be+"(?:D|LL|M|RE|S|T|VE))?",De=ke+"?",Pe="["+he+"]?",Fe="(?:"+Re+"(?:"+[Ae,Se,Te].join("|")+")"+Pe+De+")*",$e="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Me="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Ue=Pe+De+Fe,Be="(?:"+[we,Se,Te].join("|")+")"+Ue,Ge="(?:"+[Ae+ye+"?",ye,Se,Te,ge].join("|")+")",He=RegExp(be,"g"),Ve=RegExp(ye,"g"),Ke=RegExp(Ee+"(?="+Ee+")|"+Ge+Ue,"g"),qe=RegExp([Ce+"?"+xe+"+"+je+"(?="+[me,Ce,"$"].join("|")+")",Ne+"+"+Le+"(?="+[me,Ce+Ie,"$"].join("|")+")",Ce+"?"+Ie+"+"+je,Ce+"+"+Le,Me,$e,_e,Be].join("|"),"g"),We=RegExp("["+Re+ne+ae+he+"]"),ze=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Ye=["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"],Xe=-1,Je={};Je[ht]=Je[vt]=Je[bt]=Je[gt]=Je[mt]=Je[yt]=Je[_t]=Je[wt]=Je[xt]=!0,Je[V]=Je[K]=Je[pt]=Je[W]=Je[ft]=Je[z]=Je[X]=Je[J]=Je[Z]=Je[tt]=Je[nt]=Je[it]=Je[at]=Je[st]=Je[ut]=!1;var Qe={};Qe[V]=Qe[K]=Qe[pt]=Qe[ft]=Qe[W]=Qe[z]=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[_t]=Qe[wt]=Qe[xt]=!0,Qe[X]=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 _n(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 wn(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--&&$n(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 We.test(t)}function sr(t){return ze.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(!Eu(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 zi(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),Fu(t)?t.forEach((function(r){s.add(mo(r,e,n,r,t,a))})):Au(t)&&t.forEach((function(r,o){s.set(o,mo(r,e,n,o,t,a))}));var m=u?l?Ua:Ma: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 _o(n,t,e)}}function _o(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 wo(t,e,n){if("function"!=typeof t)throw new ie(l);return ks((function(){t.apply(i,n)}),e)}function xo(t,e,n,r){var o=-1,i=An,a=!0,c=t.length,l=[],u=e.length;if(!c)return l;n&&(e=Tn(e,Xn(n))),r?(i=Sn,a=!1):e.length>=s&&(i=Qn,a=!1,e=new Yr(e));t:while(++oo?0:o+n),r=r===i||r>o?o:zu(r),r<0&&(r+=o),r=n>r?0:Yu(r);while(n0&&n(s)?e>1?Co(s,e-1,n,r,o):Cn(o,s):r||(o[o.length]=s)}return o}var Ro=da(),Io=da(!0);function No(t,e){return t&&Ro(t,e,xd)}function jo(t,e){return t&&Io(t,e,xd)}function Lo(t,e){return kn(e,(function(e){return wu(t[e])}))}function Do(t,e){e=Vi(e,t);var n=0,r=e.length;while(null!=t&&ne}function Mo(t,e){return null!=t&&de.call(t,e)}function Uo(t,e){return null!=t&&e in ne(t)}function Bo(t,e,n){return t>=Be(e,n)&&t=120&&p.length>=120)?new Yr(c&&p):i}p=t[0];var f=-1,h=l[0];t:while(++f-1)s!==t&&ke.call(s,c,1),ke.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)?ke.call(t,o,1):Pi(t,o)}}return t}function mi(t,e){return t+Le(qe()*(e-t+1))}function yi(t,e,r,o){var i=-1,a=Ue(je((e-t)/(r||1)),0),s=n(a);while(a--)s[o?a:++i]=t,t+=r;return s}function _i(t,e){var n="";if(!t||e<1||e>F)return n;do{e%2&&(n+=t),e=Le(e/2),e&&(t+=t)}while(e);return n}function wi(t,e){return As(_s(t,e,Rp),t+"")}function xi(t){return io(Bd(t))}function Oi(t,e){var n=Bd(t);return Cs(n,go(e,0,n.length))}function Ei(t,e,n,r){if(!Eu(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&&!Mu(a)&&(n?a<=e:a=s){var u=e?null:Ca(t);if(u)return pr(u);a=!1,o=Qn,l=new Yr}else l=e?[]:c;t:while(++r=r?t:Ti(t,e,n)}var Wi=Re||function(t){return cn.clearTimeout(t)};function zi(t,e){if(e)return t.slice();var n=t.length,r=we?we(n):new t.constructor(n);return t.copy(r),r}function Yi(t){var e=new t.constructor(t.byteLength);return new _e(e).set(new _e(t)),e}function Xi(t,e){var n=e?Yi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Ji(t){var e=new t.constructor(t.source,Wt.exec(t));return e.lastIndex=t.lastIndex,e}function Qi(t){return hr?ne(hr.call(t)):{}}function Zi(t,e){var n=e?Yi(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=Mu(t),s=e!==i,c=null===e,l=e===e,u=Mu(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=Ue(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 $a((function(e){var n=e.length,r=n,o=Ar.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 Ar([],!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 Yr:i;a.set(t,e),a.set(e,t);while(++p1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Ut,"{\n/* [wrapped with "+e+"] */\n")}function is(t){return cu(t)||su(t)||!!(Ae&&t&&t[Ae])}function as(t,e){var n=typeof t;return e=null==e?F: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 Cs(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 Kc(t){var e=wr(t);return e.__chain__=!0,e}function qc(t,e){return e(t),t}function Wc(t,e){return e(t)}var zc=$a((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:Wc,args:[o],thisArg:i}),new Ar(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(i),t}))):this.thru(o)}));function Yc(){return Kc(this)}function Xc(){return new Ar(this.value(),this.__chain__)}function Jc(){this.__values__===i&&(this.__values__=qu(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 kr){var r=Ls(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:Wc,args:[hc],thisArg:i}),new Ar(e,this.__chain__)}return this.thru(hc)}function el(){return Mi(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)?En:ko;return n&&ss(t,e,n)&&(e=i),r(t,Va(e,3))}function ol(t,e){var n=cu(t)?kn:To;return n(t,Va(e,3))}var il=ga(qs),al=ga(Ws);function sl(t,e){return Co(bl(t,e),1)}function cl(t,e){return Co(bl(t,e),P)}function ll(t,e,n){return n=n===i?1:zu(n),Co(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:Eo;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:Bd(t),n=n&&!r?zu(n):0;var o=t.length;return n<0&&(n=Ue(o+n,0)),$u(t)?n<=o&&t.indexOf(e,n)>-1:!!o&&$n(t,e,n)>-1}var hl=wi((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?_n(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)?Tn: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 _l(t,e,n){var r=cu(t)?In:Vn,o=arguments.length<3;return r(t,Va(e,4),n,o,Eo)}function wl(t,e){var n=cu(t)?kn:To;return n(t,Bl(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:zu(e);var r=cu(t)?ao:Oi;return r(t,e)}function El(t){var e=cu(t)?so:Si;return e(t)}function kl(t){if(null==t)return 0;if(uu(t))return $u(t)?br(t):t.length;var e=Ja(t);return e==Z||e==at?t.size:ri(t).length}function Al(t,e,n){var r=cu(t)?Nn:Ci;return n&&ss(t,e,n)&&(e=i),r(t,Va(e,3))}var Sl=wi((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,Co(e,1),[])})),Tl=Ie||function(){return cn.Date.now()};function Cl(t,e){if("function"!=typeof e)throw new ie(l);return t=zu(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,A,i,i,i,i,e)}function Il(t,e){var n;if("function"!=typeof e)throw new ie(l);return t=zu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=i),n}}var Nl=wi((function(t,e,n){var r=y;if(n.length){var o=dr(n,Ha(Nl));r|=E}return Ia(t,r,e,n,o)})),jl=wi((function(t,e,n){var r=y|_;if(n.length){var o=dr(n,Ha(jl));r|=E}return Ia(e,r,t,n,o)}));function Ll(t,e,n){e=n?i:e;var r=Ia(t,x,i,i,i,i,i,e);return r.placeholder=Ll.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=ks(y,e),p?v(t):s}function g(t){var n=t-u,r=t-d,o=e-n;return f?Be(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=Tl();if(m(t))return _(t);c=ks(y,g(t))}function _(t){return c=i,h&&r?v(t):(r=o=i,s)}function w(){c!==i&&Wi(c),d=0,r=u=o=c=i}function x(){return c===i?s:_(Tl())}function O(){var t=Tl(),n=m(t);if(r=arguments,o=this,u=t,n){if(c===i)return b(u);if(f)return Wi(c),c=ks(y,e),v(u)}return c===i&&(c=ks(y,e)),s}return e=Xu(e)||0,Eu(n)&&(p=!!n.leading,f="maxWait"in n,a=f?Ue(Xu(n.maxWait)||0,e):a,h="trailing"in n?!!n.trailing:h),O.cancel=w,O.flush=x,O}var Fl=wi((function(t,e){return wo(t,1,e)})),$l=wi((function(t,e,n){return wo(t,Xu(e)||0,n)}));function Ml(t){return Ia(t,T)}function Ul(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(Ul.Cache||Hr),n}function Bl(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)}Ul.Cache=Hr;var Hl=Ki((function(t,e){e=1==e.length&&cu(e[0])?Tn(e[0],Xn(Va())):Tn(Co(e,1),Xn(Va()));var n=e.length;return wi((function(r){var o=-1,i=Be(r.length,n);while(++o=e})),su=Ko(function(){return arguments}())?Ko:function(t){return ku(t)&&de.call(t,"callee")&&!Ee.call(t,"callee")},cu=n.isArray,lu=hn?Xn(hn):qo;function uu(t){return null!=t&&Ou(t.length)&&!wu(t)}function du(t){return ku(t)&&uu(t)}function pu(t){return!0===t||!1===t||ku(t)&&Fo(t)==W}var fu=Pe||zp,hu=vn?Xn(vn):Wo;function vu(t){return ku(t)&&1===t.nodeType&&!Lu(t)}function bu(t){if(null==t)return!0;if(uu(t)&&(cu(t)||"string"==typeof t||"function"==typeof t.splice||fu(t)||Uu(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 zo(t,e)}function mu(t,e,n){n="function"==typeof n?n:i;var r=n?n(t,e):i;return r===i?zo(t,e,i,n):!!r}function yu(t){if(!ku(t))return!1;var e=Fo(t);return e==X||e==Y||"string"==typeof t.message&&"string"==typeof t.name&&!Lu(t)}function _u(t){return"number"==typeof t&&Fe(t)}function wu(t){if(!Eu(t))return!1;var e=Fo(t);return e==J||e==Q||e==q||e==ot}function xu(t){return"number"==typeof t&&t==zu(t)}function Ou(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=F}function Eu(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function ku(t){return null!=t&&"object"==typeof t}var Au=bn?Xn(bn):Xo;function Su(t,e){return t===e||Jo(t,e,qa(e))}function Tu(t,e,n){return n="function"==typeof n?n:i,Jo(t,e,qa(e),n)}function Cu(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 Nu(t){return null==t}function ju(t){return"number"==typeof t||ku(t)&&Fo(t)==tt}function Lu(t){if(!ku(t)||Fo(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?Xn(gn):Zo;function Pu(t){return xu(t)&&t>=-F&&t<=F}var Fu=mn?Xn(mn):ti;function $u(t){return"string"==typeof t||!cu(t)&&ku(t)&&Fo(t)==st}function Mu(t){return"symbol"==typeof t||ku(t)&&Fo(t)==ct}var Uu=yn?Xn(yn):ei;function Bu(t){return t===i}function Gu(t){return ku(t)&&Ja(t)==ut}function Hu(t){return ku(t)&&Fo(t)==dt}var Vu=Aa(ii),Ku=Aa((function(t,e){return t<=e}));function qu(t){if(!t)return[];if(uu(t))return $u(t)?gr(t):oa(t);if(Se&&t[Se])return cr(t[Se]());var e=Ja(t),n=e==Z?lr:e==at?pr:Bd;return n(t)}function Wu(t){if(!t)return 0===t?t:0;if(t=Xu(t),t===P||t===-P){var e=t<0?-1:1;return e*$}return t===t?t:0}function zu(t){var e=Wu(t),n=e%1;return e===e?n?e-n:e:0}function Yu(t){return t?go(zu(t),0,U):0}function Xu(t){if("number"==typeof t)return t;if(Mu(t))return M;if(Eu(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=Eu(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Yn(t);var n=Yt.test(t);return n||Jt.test(t)?on(t.slice(2),n?2:8):zt.test(t)?M:+t}function Ju(t){return ia(t,Od(t))}function Qu(t){return t?go(zu(t),-F,F):0===t?t:0}function Zu(t){return null==t?"":Li(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=$a(bo);function id(t,e){var n=Or(t);return null==e?n:fo(n,e)}var ad=wi((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,Ua(t),n),r&&(n=mo(n,h|v|b,La));var o=e.length;while(o--)Pi(n,e[o]);return n}));function Cd(t,e){return Id(t,Bl(Va(e)))}var Rd=$a((function(t,e){return null==t?{}:fi(t,e)}));function Id(t,e){if(null==t)return{};var n=Tn(Ua(t),(function(t){return[t]}));return e=Va(e),hi(t,n,(function(t,n){return e(t,n[0])}))}function Nd(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=qe();return Be(t+o*(e-t+rn("1e-"+((o+"").length-1))),e)}return mi(t,e)}var qd=ha((function(t,e,n){return e=e.toLowerCase(),t+(n?Wd(e):e)}));function Wd(t){return _p(Zu(t).toLowerCase())}function zd(t){return t=Zu(t),t&&t.replace(Zt,nr).replace(Ve,"")}function Yd(t,e,n){t=Zu(t),e=Li(e);var r=t.length;n=n===i?r:go(zu(n),0,r);var o=n;return n-=e.length,n>=0&&t.slice(n,o)==e}function Xd(t){return t=Zu(t),t&&Ct.test(t)?t.replace(St,rr):t}function Jd(t){return t=Zu(t),t&&Ft.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=zu(e);var r=e?br(t):0;if(!e||r>=e)return t;var o=(e-r)/2;return Oa(Le(o),n)+t+Oa(je(o),n)}function np(t,e,n){t=Zu(t),e=zu(e);var r=e?br(t):0;return e&&r>>0,n?(t=Zu(t),t&&("string"==typeof e||null!=e&&!Du(e))&&(e=Li(e),!e&&ar(t))?qi(gr(t),0,n):t.split(e,n)):[]}var lp=ha((function(t,e,n){return t+(n?" ":"")+_p(e)}));function up(t,e,n){return t=Zu(t),n=null==n?0:go(zu(n),0,t.length),e=Li(e),t.slice(n,n+e.length)==e}function dp(t,e,n){var r=wr.templateSettings;n&&ss(t,e,n)&&(e=i),t=Zu(t),e=nd({},e,r,Na);var a,s,c=nd({},e.imports,r.imports,Na),l=xd(c),d=Jn(c,l),p=0,f=e.interpolate||te,h="__p += '",v=re((e.escape||te).source+"|"+f.source+"|"+(f===Nt?qt:te).source+"|"+(e.evaluate||te).source+"|$","g"),b="//# sourceURL="+(de.call(e,"sourceURL")?(e.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Xe+"]")+"\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(Et,"$1").replace(kt,"$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 Mt(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 Yn(t);if(!t||!(e=Li(e)))return t;var r=gr(t),o=gr(e),a=Zn(r,o),s=tr(r,o)+1;return qi(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=Li(e)))return t;var r=gr(t),o=tr(r,gr(e))+1;return qi(r,0,o).join("")}function bp(t,e,n){if(t=Zu(t),t&&(n||e===i))return t.replace($t,"");if(!t||!(e=Li(e)))return t;var r=gr(t),o=Zn(r,gr(e));return qi(r,o).join("")}function gp(t,e){var n=C,r=R;if(Eu(e)){var o="separator"in e?e.separator:o;n="length"in e?zu(e.length):n,r="omission"in e?Li(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?qi(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(Wt.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(Li(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&&Tt.test(t)?t.replace(At,yr):t}var yp=ha((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),_p=fa("toUpperCase");function wp(t,e,n){return t=Zu(t),e=n?i:e,e===i?sr(t)?xr(t):Dn(t):t.match(e)||[]}var xp=wi((function(t,e){try{return _n(t,i,e)}catch(n){return yu(n)?n:new o(n)}})),Op=$a((function(t,e){return xn(e,(function(e){e=Is(e),vo(t,e,Nl(t[e],t))})),t}));function Ep(t){var e=null==t?0:t.length,n=Va();return t=e?Tn(t,(function(t){if("function"!=typeof t[1])throw new ie(l);return[n(t[0]),t[1]]})):[],wi((function(n){var r=-1;while(++rF)return[];var n=U,r=Be(t,U);e=Va(e),t-=U;var o=Wn(r,e);while(++n0||e<0)?new Sr(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==i&&(e=zu(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(U)},No(Sr.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),o=wr[r?"take"+("last"==e?"Right":""):e],a=r||/^find/.test(e);o&&(wr.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(wr,Cn([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:Wc,args:[d],thisArg:i}),new Ar(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);wr.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)}))}})),No(Sr.prototype,(function(t,e){var n=wr[e];if(n){var r=n.name+"";de.call(ln,r)||(ln[r]=[]),ln[r].push({name:e,func:n})}})),ln[ya(i,_).name]=[{name:"wrapper",func:i}],Sr.prototype.clone=Tr,Sr.prototype.reverse=Cr,Sr.prototype.value=Rr,wr.prototype.at=zc,wr.prototype.chain=Yc,wr.prototype.commit=Xc,wr.prototype.next=Jc,wr.prototype.plant=Zc,wr.prototype.reverse=tl,wr.prototype.toJSON=wr.prototype.valueOf=wr.prototype.value=el,wr.prototype.first=wr.prototype.head,Se&&(wr.prototype[Se]=Qc),wr},Er=Or();cn._=Er,o=function(){return Er}.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}}async function o(t,e){const n=Object.keys(t),r=Object.values(t),o=await Promise[e](r),i={};for(let a=0;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 i})),n.d(e,"b",(function(){return a}))},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["k"].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===t||void 0===t||null===(e=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-1&&t%1==0&&t<=n}t.exports=r},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,"i",(function(){return o})),n.d(e,"j",(function(){return i})),n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return s})),n.d(e,"f",(function(){return c})),n.d(e,"g",(function(){return l})),n.d(e,"h",(function(){return u})),n.d(e,"c",(function(){return d})),n.d(e,"d",(function(){return f})),n.d(e,"e",(function(){return h})),n.d(e,"k",(function(){return v}));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){t.splice(0,t.length)}function p(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 f(t,e,n){return p("filter",t,e,n)}function h(t,e,n){return p("find",t,e,n)}function v(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(++r=0;e--){let n=t[e].split(/\./);while(n.length)Object(o["a"])(t,n.join(".")),n=n.slice(0,-1)}for(const e of t){const t=e.split(/\./),n=t[t.length-1],r=t.slice(0,-1).join(".");r===p&&y.resourceFields&&y.resourceFields[n]&&Object(o["a"])(_,n)}}const O=Object.keys(y.resourceFields||{});O.forEach(t=>{("undefined"!==typeof n[t]||0===i&&"_type"===t)&&Object(o["a"])(_,t)});for(const a in n)"undefined"!==typeof n[a]&&Object(o["a"])(_,a);for(const a of d){const t=a.split(/\./),e=t[t.length-1],n=t.slice(0,-1).join(".");n===p&&Object(o["i"])(_,e)}for(const a of u){const t=a.split(/\./),e=t[t.length-1],n=t.slice(0,-1).join(".");n===p&&y.resourceFields&&y.resourceFields[e]&&Object(o["i"])(O,e)}Object(o["j"])(O,_);const k=_.map(t=>T(t)),A=O.map(e=>{if("metadata"===p&&"namespace"===e){var n;const e=Object(o["e"])(t,"id",f);if(e&&(null===(n=e.attributes)||void 0===n||!n.namespaced))return null}return v(T(e))}),S=[...k,...A].filter(t=>null!==t).join("\n").trim();return S;function T(e){var l;const u=null===(l=y.resourceFields)||void 0===l?void 0:l[e];let d=e+":";if("_type"===e&&(d="type:"),!u){if(n[e])try{const t=Object(s["d"])(n),r=a.a.dump(t[e]);return"object"===typeof n[e]||Array.isArray(n[e])?d+="\n"+b(r.trim()):d+=" "+r.trim(),d}catch(S){console.error("Error: Unable to parse map data for yaml key: "+e,S)}return null}const v=x(u.type),_=w("map",v),O=w("array",v),k=w("reference",v);if(_){if(n[e])try{const t=Object(s["d"])(n),r=E(t[e],m[e]);d+="\n"+b(r)}catch(S){console.error("Error: Unable to parse map data for yaml of type: "+v,S)}if(c.includes(_))d+="# key: "+_;else{const n=h(t,_,null,r,i+1,p?`${p}.${e}`:e,f,m);let o=b(n);o=o.replace(/^(#)?\s\s\s\s/,"$1"),d+=""+o}return d}if(O){if(n[e])try{const t=Object(s["d"])(n);if(null!==t&&void 0!==t&&t[e]){const n=a.a.dump(t[e]);d+="\n"+b(n.trim())}}catch(S){console.error("Error: Unale to parse array data for yaml of type: "+v,S)}if(c.includes(O))d+="\n# - "+O;else{const n=h(t,O,null,!1,i+1,p?`${p}.${e}`:e,f,m);let r=b(n,2);r=r.replace(/^(#)?\s*\s\s([^\s])/,"$1 - $2"),d+="\n"+r}return d}if(k)return d+=" #"+k,d;if(c.includes(v))return"_type"===e&&"undefined"===typeof n[e]&&"undefined"!==typeof n["type"]?d+=" "+g(n["type"]):"undefined"===typeof n[e]?d+=" #"+g(v):d+=" "+g(n[e]),d;if("json"===v||".spec"===v)try{const t=a.a.dump(n[e]);return d+=t?"\n"+b(t.trim()):" #"+v,d}catch(S){}const A=Object(o["e"])(t,"id",v);if(A){let o;if(null!==A&&void 0!==A&&A.resourceFields&&!Object(s["h"])(null===A||void 0===A?void 0:A.resourceFields))o=h(t,v,n[e],r,i+1,p?`${p}.${e}`:e,f,m);else if(n[e])try{const t=a.a.dump(n[e]);o=t.trim()}catch(S){console.error("Error: Unale to parse data for yaml of type: "+v,S)}d+="\n"+b(o)}else d+=" #"+v;return d}}function v(t){return(t||"").split("\n").map(t=>"#"+t.replace(/#/g,"")).join("\n")}function b(t,e=1){return Object(r["h"])(t,e*p," ",/^#/)}function g(t){return a.a.dump(t).trim()}function m(t,e){const n=y(t,e);return{header:n,indentation:_(n)}}function y(t,e){const n=`(${e})[\\:][\\s|\\t]+[\\|\\>][\\d]*[\\-\\+]?`,r=new RegExp(n,"gi"),o=t.match(r);return(null===o||void 0===o?void 0:o[0])||""}function _(t){const e=t.substr(t.indexOf(":")+1),n=e.match(/\d+/);return(null===n||void 0===n?void 0:n[0])||""}function w(t,e){const n=new RegExp(`^${t}\\[(.*)\\]$`),r=e.match(n);if(r)return x(r[1])}function x(t){return"integer"===t?"int":"io.k8s.apimachinery.pkg.api.resource.Quantity"===t?"string":t}function O(t){const e=a.a.dump(t||{});return"{}\n"===e?"":e}function E(t,e={}){const n=a.a.dump(t);let r=n;const o=Object.keys(t).filter(e=>t[e].includes("\n"));if(o.length)for(const a of o){var i,s,c,l;const{header:t,indentation:n}=m(r,a),o=null!==(i=null===(s=e[a])||void 0===s?void 0:s.scalarStyle)&&void 0!==i?i:"|",u=null!==(c=null===(l=e[a])||void 0===l?void 0:l.chomping)&&void 0!==c?c:"";r=r.replace(t,`${a}: ${o}${u}${n}`)}return r}},c68c:function(t,e,n){var r=n("c316"),o=n("8bb9"),i=n("4a83"),a=n("770e");function s(t,e){return r(t)?t:o(t,e)?[t]:i(a(t))}t.exports=s},c87d:function(t,e,n){"use strict";n.d(e,"a",(function(){return i})),n.d(e,"b",(function(){return a}));var r=n("5877"),o=n.n(r);async function i(t,e,r="text/plain;charset=utf-8"){const o=new Blob([e],{type:r}),{saveAs:i}=await n.e(6).then(n.t.bind(null,"7ada",7));return i(o,t)}function a(t){const e=new o.a;for(const n in t)e.file(n,t[n]);return e.generateAsync({type:"blob"}).then(t=>t)}},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 _(t){}function w(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 _})),n.d(e,"n",(function(){return w}))},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")},d709:function(t,e,n){"use strict";n.d(e,"a",(function(){return c}));var r=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()])},o=[],i=n("8bbf"),a=n.n(i),s={memberOfObject:(t,e)=>Object.entries(t||{}).find(([t])=>t===e),memberOfComponent:(t,e)=>t[e]};const c={ACTION:"action",WAITING:"waiting",SUCCESS:"success",ERROR:"error"},l="text",u="tooltip";var d=a.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:l},size:{type:String,default:""},currentPhase:{type:String,default:c.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=s.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=s.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===c.WAITING},isDisabled(){return this.disabled||this.phase===c.WAITING},tooltip(){return this.labelAs===u?{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=c.WAITING);const e=t=>{this.done(t)};this.$emit("click",e)},done(t){"cancelled"===t?this.phase=c.ACTION:(this.phase=t?c.SUCCESS:c.ERROR,this.timer=setTimeout(()=>{this.timerDone()},this.delay))},timerDone(){this.phase!==c.SUCCESS&&this.phase!==c.ERROR||(this.phase=c.ACTION)},focus(){this.$refs.btn.focus()}}}),p=d,f=n("d802"),h=Object(f["a"])(p,r,o,!1,null,null,null);e["b"]=h.exports},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 E=Object.prototype.hasOwnProperty;function k(t,e){return t=t.slice(),t.push(e),t}function A(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 T(t,e,n,r,o){if(!(this instanceof T))try{return new T(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=!E.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}}T.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(!E.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=E.call(t,"flatten")?t.flatten:c,this.currResultType=E.call(t,"resultType")?t.resultType:this.currResultType,this.currSandbox=E.call(t,"sandbox")?t.sandbox:this.currSandbox,l=E.call(t,"wrap")?t.wrap:l,this.currPreventEval=E.call(t,"preventEval")?t.preventEval:this.currPreventEval,n=E.call(t,"callback")?t.callback:n,this.currOtherTypeCallback=E.call(t,"otherTypeCallback")?t.otherTypeCallback:this.currOtherTypeCallback,a=E.call(t,"parent")?t.parent:a,s=E.call(t,"parentProperty")?t.parentProperty:s,t=t.path}if(a=a||null,s=s||null,Array.isArray(t)&&(t=T.toPathString(t)),(t||""===t)&&e){var d=T.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}},T.prototype._getPreferredOutput=function(t){var e=this.currResultType;switch(e){case"all":var n=Array.isArray(t.path)?t.path:T.toPathArray(t.path);return t.pointer=T.toPointer(n),t.path="string"===typeof t.path?t.path:T.toPathString(t.path),t;case"value":case"parent":case"parentProperty":return t[e];case"path":return T.toPathString(t[e]);case"pointer":return T.toPointer(t.path);default:throw new TypeError("Unknown result type")}},T.prototype._handleCallback=function(t,e,n){if(e){var r=this._getPreferredOutput(t);t.path="string"===typeof t.path?t.path:T.toPathString(t.path),e(r,n,t)}},T.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&&E.call(e,d))h(this._trace(p,e[d],k(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(A(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(A(e,n),r[t],k(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:k(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(A(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(A(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&&E.call(e,d.slice(1))){var g=d.slice(1);h(this._trace(p,e[g],k(n,g),e,g,a,s,!0))}else if(d.includes(",")){var m,y=d.split(","),_=O(y);try{for(_.s();!(m=_.n()).done;){var w=m.value;h(this._trace(A(w,p),e,n,r,o,a,!0))}}catch(I){_.e(I)}finally{_.f()}}else!c&&e&&E.call(e,d)&&h(this._trace(p,e[d],k(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),N=(n("7195"),n("b506")),j=n.n(N),L=n("c316"),D=n.n(L),P=n("9e74"),F=n.n(P),$=(n("94a3"),n("2cb5")),M=n("bddd");function U(t,e,n){let r=t;if(!r)return;const o=Object($["p"])(e);for(let i=0;i{r=r.map(e=>Array.isArray(e)?e.map(e=>e[t]).flat():e?e[t]:null).flat()}),r.filter(t=>null!==t)}function G(t,e){if(!e)throw new Error("Cannot translate an empty input. The t function requires a string.");if(e.startsWith("$"))try{return T({path:e,json:t,wrap:!1})}catch(o){return console.log("JSON Path error",o,e,t),"(JSON Path err)"}var n;if(!e.includes("."))return null===(n=t)||void 0===n?void 0:n[e];const r=Object($["p"])(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)&&(K(n)&&delete t[e],t[e]=q(n))}),t}function W(t,e){const n=Object.keys(t||{}),r=Object.keys(e||{});if(n.length!==r.length)return!1;for(let o=0;othis.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 o(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"}n.d(e,"b",(function(){return r})),n.d(e,"a",(function(){return o}))},e902:function(t,e,n){var r=n("a4fc");function o(t,e){var n=t.length;while(n--)if(r(t[n][0],e))return n;return-1}t.exports=o},e907:function(t,e,n){var r=n("3b1f");r.__esModule&&(r=r.default),"string"===typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);var o=n("0ed3").default;o("74742296",r,!0,{sourceMap:!1,shadowMode:!1})},e91b: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.length)}t.exports=o},e942:function(t,e){function n(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}t.exports=n},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},ea69:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));function r(t){const e=r.options,n=e.parser[e.strictMode?"strict":"loose"].exec(t);if(!n)throw new Error("Cannot parse as uri: "+t);const o={};let i=14;while(i--)o[e.key[i]]=n[i]||"";return o.query={},o.queryStr.replace(e.q.parser,(t,n,r)=>(n&&(o[e.q.name][n]=r),"")),o}r.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("da25"),n("907c"),n("a8b9");const o=(t,e)=>{const n=t.getters["currentStore"](e),r=t.getters[n+"/schemaFor"];if(!n||!r)return!1;const o=r(e)||t.getters["type-map/isVirtual"](e);return!!o}},eb32:function(t,e,n){"use strict";var r=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)])},o=[],i=n("8bbf"),a=n.n(i),s=n("2cb5"),c=n("3e9d"),l=a.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(c["c"])(this.label):void 0}},methods:{nlToBr:s["l"]}}),u=l,d=(n("0843"),n("d802")),p=Object(d["a"])(u,r,o,!1,null,"02d86e5d",null);e["a"]=p.exports},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]",_="[object Int8Array]",w="[object Int16Array]",x="[object Int32Array]",O="[object Uint8Array]",E="[object Uint8ClampedArray]",k="[object Uint16Array]",A="[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 _:case w:case x:case O:case E:case k:case A: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]",_="[object DataView]",w="[object Float32Array]",x="[object Float64Array]",O="[object Int8Array]",E="[object Int16Array]",k="[object Int32Array]",A="[object Uint8Array]",S="[object Uint8ClampedArray]",T="[object Uint16Array]",C="[object Uint32Array]",R={};function I(t){return i(t)&&o(t.length)&&!!R[r(t)]}R[w]=R[x]=R[O]=R[E]=R[k]=R[A]=R[S]=R[T]=R[C]=!0,R[a]=R[s]=R[y]=R[c]=R[_]=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["w"]),a=Object(i["e"])(n,"id",Object(o["b"])(r["l"].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=e?t:\"\"+Array(e+1-r.length).join(n)+t},d={s:c,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+c(r,2,\"0\")+\":\"+c(i,2,\"0\")},m:function(t,e){var n=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(n,u),i=e-r<0,s=t.clone().add(n+(i?-1:1),u);return Number(-(n+(e-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:\"date\",h:r,m:n,s:e,ms:t,Q:o}[h]||String(h||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},$={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(\"_\")},l=\"en\",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,e,n){var r;if(!t)return l;if(\"string\"==typeof t)m[t]&&(r=t),e&&(m[t]=e,r=t);else{var i=t.name;m[i]=t,r=i}return!n&&r&&(l=r),r||!n&&l},g=function(t,e){if(y(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new v(n)},D=d;D.l=M,D.i=y,D.w=function(t,e){return g(t,{locale:e.$L,utc:e.$u,$offset:e.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(D.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(h);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()},d.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()},d.$utils=function(){return D},d.isValid=function(){return!(\"Invalid Date\"===this.$d.toString())},d.isSame=function(t,e){var n=g(t);return this.startOf(e)<=n&&n<=this.endOf(e)},d.isAfter=function(t,e){return g(t) 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","import SteveModel from '@shell/plugins/steve/steve-class';\nimport {\n _YAML,\n AS,\n} from '@shell/config/query-params';\n\nexport default class CapiCluster extends SteveModel {\n get canEditYaml() {\n return false;\n }\n\n get canUpdate() {\n return false;\n }\n\n get detailLocation() {\n const location = super._detailLocation;\n\n return { ...location, query: { [AS]: _YAML } };\n }\n\n get _availableActions() {\n const out = super._availableActions;\n\n return out.filter(action => action.action !== 'goToEdit' && action.action !== 'goToViewConfig');\n }\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 \"-!../../../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=337ae8b8&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=337ae8b8&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 \"337ae8b8\",\n null\n \n)\n\nexport default component.exports","import Dashboard from '../pages/index.vue';\n\nconst routes = [\n {\n name: 'c-cluster-manager-capi',\n path: '/c/:cluster/manager/capi',\n component: Dashboard,\n },\n];\n\nexport default routes;\n","import { importTypes } from '@rancher/auto-import';\nimport {\n ActionLocation, IPlugin, PanelLocation, TableColumnLocation, TabLocation\n} from '@shell/core/types';\nimport { _CLONE, _CREATE, _EDIT } from '@shell/config/query-params';\nimport { LABELS } from './types/capi';\nimport capiRouting from './routes/capi-routing';\nimport toggleAutoImport from './util/auto-import';\n\n// Init the package\nexport default function(plugin: IPlugin): void {\n // Auto-import model, detail, edit from the folders\n importTypes(plugin);\n\n // Provide plugin metadata from package.json\n plugin.metadata = require('./package.json');\n\n plugin.addProduct(require('./config/capi'));\n\n // Add Vue Routes\n plugin.addRoutes(capiRouting);\n\n // add tab to namespace edit\n plugin.addTab(\n TabLocation.RESOURCE_DETAIL,\n {\n resource: ['namespace'],\n cluster: ['local'],\n mode: [_CREATE, _CLONE, _EDIT, 'config']\n },\n {\n name: 'capi-auto-import',\n labelKey: 'capi.autoImport.label',\n weight: -5,\n showHeader: true,\n component: () => import('./components/AutoImport.vue')\n }\n );\n\n // add enable auto-import action to namespace table\n // plugin.addAction(ActionLocation.TABLE,\n // { path: [{ urlPath: '/c/local/explorer/projectsnamespaces', exact: true }, { urlPath: 'cluster.x-k8s.io.cluster', endsWith: true }] },\n // {\n // labelKey: 'capi.autoImport.enableAction',\n // icon: 'icon-plus',\n // enabled(target: any) {\n // return target.metadata.labels[LABELS.AUTO_IMPORT] !== 'true';\n // },\n // invoke(opts, resources = []) {\n // resources.forEach((ns) => {\n // toggleAutoImport(ns);\n // });\n // }\n // });\n\n // add disable auto-import action to namespace table\n // plugin.addAction(ActionLocation.TABLE,\n // { path: [{ urlPath: '/c/local/explorer/projectsnamespaces', exact: true }, { urlPath: 'cluster.x-k8s.io.cluster', endsWith: true }] },\n // {\n // labelKey: 'capi.autoImport.disableAction',\n // icon: 'icon-minus',\n // enabled(target: any) {\n // return target.metadata.labels[LABELS.AUTO_IMPORT] === 'true';\n // },\n // invoke(opts, resources = []) {\n // resources.forEach((ns) => {\n // toggleAutoImport(ns);\n // });\n // }\n // });\n\n // add column to namespace table\n plugin.addTableColumn(\n TableColumnLocation.RESOURCE,\n { path: [{ urlPath: '/c/local/explorer/projectsnamespaces', exact: true }] },\n {\n name: 'capi-auto-import',\n labelKey: 'capi.autoImport.label',\n getValue: (row: any) => {\n return row.labels[LABELS.AUTO_IMPORT] === 'true';\n },\n width: 100,\n formatter: 'AutoImportState'\n }\n );\n\n // add warning to cluster mgmt resource list\n plugin.addPanel(PanelLocation.RESOURCE_LIST,\n { resource: ['provisioning.cattle.io.cluster'] },\n { component: () => import('./components/ClusterListBanner.vue') }\n );\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","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!./index.vue?vue&type=style&index=0&id=337ae8b8&prod&lang=scss&scoped=true&\"","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","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","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","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\nexport function sanitizeKey(k) {\n return (k || '').replace(/[^a-z0-9./_-]/ig, '');\n}\n\nexport function sanitizeValue(v) {\n return (v || '').replace(/[^a-z0-9._-]/ig, '');\n}\n\nexport function sanitizeIP(v) {\n return (v || '').replace(/[^a-z0-9.:_-]/ig, '');\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","// 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, \".delete-warning[data-v-11104fb6]{color:var(--error)}.remove-project-dialog[data-v-11104fb6]{border:1px solid var(--border);padding:10px;border-radius:5px}.remove-project-dialog .display-name[data-v-11104fb6]{font-weight:700}\", \"\"]);\n// Exports\nmodule.exports = exports;\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","// 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","\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 getPageByRow(rowId, getRowId = (x) => x) {\n const pos = this.filteredRows.map(getRowId).indexOf(rowId);\n\n if (pos === -1) {\n return null;\n }\n\n return Math.ceil(pos / this.perPage);\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","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 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 }","\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","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","/**\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","/** 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=11104fb6&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=11104fb6&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 \"11104fb6\",\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, \".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 }","\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}","/**\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","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","export { default as Banner } from './Banner.vue';\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","import SteveModel from '@shell/plugins/steve/steve-class';\nimport { CAPI } from '@shell/config/types';\nimport { BLANK_CLUSTER, QUERY_PARAMS } from '../types/capi';\n\nexport default class ClusterClass extends SteveModel {\n get _availableActions() {\n const out = super._availableActions;\n\n out.unshift({\n action: 'goToCreateCluster',\n label: this.t('action.createCluster'),\n icon: 'icon icon-plus',\n enabled: true\n });\n\n return out;\n }\n\n goToCreateCluster() {\n const escapedID = escape(this.id);\n const location = {\n name: 'c-cluster-product-resource-create',\n params: {\n cluster: BLANK_CLUSTER,\n product: 'manager',\n resource: CAPI.CAPI_CLUSTER\n },\n query: { [QUERY_PARAMS.CLASS]: escapedID }\n };\n\n this.currentRouter().push(location);\n }\n}\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","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or 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 a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol');\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 * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\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/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\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 an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","import isEmpty from 'lodash/isEmpty';\n\nexport function flowOutput(spec, getters, errors, validatorArgs) {\n const verifyLocal = validatorArgs.includes('verifyLocal');\n const localOutputRefs = spec.localOutputRefs || [];\n const globalOutputRefs = spec.globalOutputRefs || [];\n\n if (verifyLocal) {\n if (isEmpty(localOutputRefs) && isEmpty(globalOutputRefs)) {\n errors.push(getters['i18n/t']('validation.flowOutput.both'));\n }\n } else if (isEmpty(globalOutputRefs)) {\n errors.push(getters['i18n/t']('validation.flowOutput.global'));\n }\n}\n","import isEmpty from 'lodash/isEmpty';\r\n\r\nexport function logdna(value, getters, errors, validatorArgs) {\r\n if (isEmpty(value)) {\r\n return;\r\n }\r\n\r\n if (isEmpty(value.api_key)) {\r\n errors.push(getters['i18n/t']('validation.output.logdna.apiKey'));\r\n }\r\n}\r\n","import isEmpty from 'lodash/isEmpty';\nimport { validateDnsLabel, validateHostname } from '@shell/utils/validators';\n\nexport function servicePort(spec, getters, errors, validatorArgs) {\n const { ports, type: serviceType } = spec;\n\n if (serviceType === 'ExternalName') {\n return errors;\n }\n\n if (isEmpty(ports)) {\n errors.push(getters['i18n/t']('validation.required', { key: 'Port Rules' }));\n\n return errors;\n }\n\n ports.forEach((port, ind, ary) => {\n const {\n name,\n nodePort,\n port: pPort,\n targetPort,\n } = port;\n const idx = ind + 1;\n\n if (ary.length > 1 && isEmpty(name)) {\n errors.push(getters['i18n/t']('validation.service.ports.name.required', { position: idx }));\n }\n\n if (!isEmpty(name)) {\n const nameErrors = validateDnsLabel(name, 'name', getters, undefined, errors);\n\n if (!isEmpty(nameErrors)) {\n if (errors.length && errors.length > 0) {\n errors = [...errors, ...nameErrors];\n } else {\n errors = nameErrors;\n }\n }\n }\n\n if (nodePort) {\n const np = parseInt(nodePort, 10);\n\n if (isNaN(np)) {\n errors.push(getters['i18n/t']('validation.service.ports.nodePort.requiredInt', { position: idx }));\n }\n }\n\n if (pPort) {\n const p = parseInt(pPort, 10);\n\n if (isNaN(p)) {\n errors.push(getters['i18n/t']('validation.service.ports.port.requiredInt', { position: idx }));\n }\n } else {\n errors.push(getters['i18n/t']('validation.service.ports.port.required', { position: idx }));\n }\n\n if (targetPort) {\n const tpIanaDisplayKey = getters['i18n/t']('validation.service.ports.targetPort.ianaAt', { position: idx });\n const tp = parseInt(targetPort, 10);\n const tpTest = new RegExp('^\\\\d+$');\n const targetPortIsNumber = tpTest.test(targetPort);\n\n if (!targetPortIsNumber) { // not a number\n /* [rfc6335](https://tools.ietf.org/rfc/rfc6335.txt) port name (IANA_SVC_NAME)\n An alphanumeric (a-z, and 0-9) string, with a maximum length of 15 characters,\n with the '-' character allowed anywhere except the first or the last character or adjacent to another '-' character,\n it must contain at least a(a - z) character\n validateChars(str, { validChars: 'A-Za-z0-9_.-' }, displayKey, intl, errors); */\n const opts = {\n ianaServiceName: true,\n maxLength: 15,\n validChars: 'A-Za-z0-9-',\n };\n const isIanaServiceNameErrors = validateDnsLabel(targetPort, tpIanaDisplayKey, getters, opts, errors);\n\n if (!isEmpty(isIanaServiceNameErrors)) {\n errors.push(...isIanaServiceNameErrors);\n }\n } else if (tp < 1 || tp > 65535) {\n errors.push(getters['i18n/t']('validation.service.ports.targetPort.between', { position: idx }));\n }\n } else {\n errors.push(getters['i18n/t']('validation.service.ports.targetPort.required', { position: idx }));\n }\n });\n\n return errors;\n}\n\nexport function clusterIp(spec, getters, errors, validatorArgs) {\n /*\n clusterIP is the IP address of the service and is usually assigned randomly by the master.\n If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail.\n This field can not be changed through updates.\n Valid values are \\\"None\\\", empty string (\\\"\\\"), or a valid IP address. \\\"None\\\" can be specified for headless services when proxying is not required.\n Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName.\n More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n */\n const typesToCheck = ['ClusterIP', 'NodePort', 'LoadBalancer'];\n const serviceType = spec?.type;\n\n if (!typesToCheck.includes(serviceType)) {\n // validation only applies to services in the types to check\n return errors;\n }\n\n return errors;\n}\n\nexport function externalName(spec, getters, errors, validatorArgs) {\n /*\n externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service.\n No proxying will be involved.\n Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.\n */\n if (spec?.type === 'ExternalName') {\n if (isEmpty(spec?.externalName)) {\n errors.push(getters['i18n/t']('validation.service.externalName.none'));\n } else {\n const hostNameErrors = validateHostname(spec.externalName, 'ExternalName', getters, undefined, errors);\n\n if (!isEmpty(hostNameErrors)) {\n if (errors.length && errors.length > 0) {\n errors = [...errors, ...hostNameErrors];\n } else {\n errors = hostNameErrors;\n }\n }\n }\n }\n\n return errors;\n}\n","import has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\n\nexport function ruleGroups(spec, getters, errors, validatorArgs) {\n if (isEmpty(spec?.groups)) {\n errors.push(getters['i18n/t']('validation.prometheusRule.groups.required'));\n }\n\n return errors;\n}\n\nexport function groupsAreValid(groups = [], getters, errors, validatorArgs) {\n groups.forEach((group, groupIndex) => {\n const readableGroupIndex = groupIndex + 1; // oh that ol zero based array index....\n\n if (isEmpty(group?.name)) {\n errors.push(\n getters['i18n/t']('validation.prometheusRule.groups.valid.name', { index: readableGroupIndex })\n );\n }\n\n if (isEmpty(group?.rules)) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.singleEntry',\n { index: readableGroupIndex }\n )\n );\n } else {\n group.rules.forEach((rule, ruleIndex) => {\n const readableRuleIndex = ruleIndex + 1; // oh that ol zero based array index....\n\n if (has(rule, 'alert') && isEmpty(rule?.alert)) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.rule.alertName',\n { groupIndex: readableGroupIndex, ruleIndex: readableRuleIndex }\n )\n );\n } else if (has(rule, 'record') && isEmpty(rule?.record)) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.rule.recordName',\n { groupIndex: readableGroupIndex, ruleIndex: readableRuleIndex }\n )\n );\n }\n\n if ((has(rule, 'expr') && isEmpty(rule.expr)) || !has(rule, 'expr')) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.rule.expr',\n { groupIndex: readableGroupIndex, ruleIndex: readableRuleIndex }\n )\n );\n }\n\n if (has(rule, 'alert')) {\n if (\n (has(rule, 'labels') && isEmpty(rule.labels)) ||\n !has(rule, 'labels')\n ) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.rule.labels',\n { groupIndex: readableGroupIndex, ruleIndex: readableRuleIndex }\n )\n );\n }\n }\n });\n }\n });\n\n return errors;\n}\n","import isEmpty from 'lodash/isEmpty';\n\nexport function matching(spec, getters, errors, validatorArgs) {\n if (isEmpty(spec?.match) && isEmpty(spec?.['match_re'])) {\n errors.push(getters['i18n/t']('validation.monitoring.route.match'));\n }\n}\n\nexport function interval(value, getters, errors, validatorArgs, displayKey) {\n if (!/^\\d+[hms]$/.test(value)) {\n errors.push(getters['i18n/t']('validation.monitoring.route.interval', { key: displayKey }));\n }\n}\n","import { get } from '@shell/utils/object';\n\nexport function containerImages(spec, getters, errors) {\n let podSpec;\n\n if (spec.jobTemplate) {\n // cronjob pod template is nested slightly different than other types\n podSpec = get(spec, 'jobTemplate.spec.template.spec');\n } else {\n podSpec = get(spec, 'template.spec');\n }\n\n if (!podSpec.containers || !podSpec.containers.length) {\n errors.push(getters['i18n/t']('validation.required', { key: getters['i18n/t']('workload.container.titles.containers') }));\n\n return;\n }\n\n podSpec.containers.forEach((container) => {\n if (container && !container.image) {\n errors.push(getters['i18n/t']('workload.validation.containerImage', { name: container.name }));\n }\n });\n}\n","import cronstrue from 'cronstrue';\n\nexport function cronSchedule(schedule = '', getters, errors) {\n try {\n cronstrue.toString(schedule);\n } catch (e) {\n errors.push(getters['i18n/t']('validation.invalidCron'));\n }\n}\n","import { isEmpty } from '@shell/utils/object';\n\n// spec = podSpec.affinity\nexport function podAffinity(spec, getters, errors) {\n if (!spec) {\n return;\n }\n const { podAffinity, podAntiAffinity } = spec;\n\n // pod affinity\n if (podAffinity && !isEmpty(podAffinity)) {\n const { preferredDuringSchedulingIgnoredDuringExecution = [], requiredDuringSchedulingIgnoredDuringExecution = [] } = podAffinity;\n\n preferredDuringSchedulingIgnoredDuringExecution.forEach((term, i) => {\n const errorOpts = {\n index: i,\n group: getters['i18n/t']('validation.podAffinity.affinityTitle'),\n rules: getters['i18n/t']('validation.podAffinity.preferredDuringSchedulingIgnoredDuringExecution')\n };\n\n validateTermWeight(term, errorOpts, getters, errors);\n\n const { podAffinityTerm = {} } = term;\n\n validateTopologyKey(podAffinityTerm, errorOpts, getters, errors);\n validateLabelSelector(podAffinityTerm, errorOpts, getters, errors);\n });\n\n requiredDuringSchedulingIgnoredDuringExecution.forEach((term, i) => {\n const errorOpts = {\n index: i,\n group: getters['i18n/t']('validation.podAffinity.affinityTitle'),\n rules: getters['i18n/t']('validation.podAffinity.requiredDuringSchedulingIgnoredDuringExecution')\n };\n\n validateTopologyKey(term, errorOpts, getters, errors);\n validateLabelSelector(term, errorOpts, getters, errors);\n });\n }\n\n // pod antiaffinity\n if (podAntiAffinity && !isEmpty(podAntiAffinity)) {\n const { preferredDuringSchedulingIgnoredDuringExecution = [], requiredDuringSchedulingIgnoredDuringExecution = [] } = podAntiAffinity;\n\n preferredDuringSchedulingIgnoredDuringExecution.forEach((term, i) => {\n const errorOpts = {\n index: i,\n group: getters['i18n/t']('validation.podAffinity.antiAffinityTitle'),\n rules: getters['i18n/t']('validation.podAffinity.preferredDuringSchedulingIgnoredDuringExecution')\n };\n\n validateTermWeight(term, errorOpts, getters, errors);\n\n const { podAffinityTerm = {} } = term;\n\n validateTopologyKey(podAffinityTerm, errorOpts, getters, errors);\n\n validateLabelSelector(podAffinityTerm, errorOpts, getters, errors);\n });\n\n requiredDuringSchedulingIgnoredDuringExecution.forEach((term, i) => {\n const errorOpts = {\n index: i,\n group: getters['i18n/t']('validation.podAffinity.antiAffinityTitle'),\n rules: getters['i18n/t']('validation.podAffinity.requiredDuringSchedulingIgnoredDuringExecution')\n };\n\n validateTopologyKey(term, errorOpts, getters, errors);\n\n validateLabelSelector(term, errorOpts, getters, errors);\n });\n }\n}\n\n// verify weight (if present) is integer 1-100\nfunction validateTermWeight(affinityTerm, errorOpts, getters, errors) {\n const { weight = 1 } = affinityTerm;\n\n if (typeof weight !== 'number' || weight > 100 || weight < 1 ) {\n errors.push(getters['i18n/t']('validation.number.between', {\n key: getters['i18n/t']('workload.scheduling.matchExpressions.weight'),\n min: 1,\n max: 100,\n ...errorOpts\n }));\n }\n}\n\n// verify topology key is present and matches regexp for labels\nfunction validateTopologyKey(affinityTerm, errorOpts, getters, errors) {\n const { topologyKey } = affinityTerm;\n const regexp = RegExp('([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]');\n\n if (!topologyKey || !regexp.test(topologyKey)) {\n errors.push(getters['i18n/t']('validation.podAffinity.topologyKey', errorOpts));\n }\n}\n\n/*\n verify that each matchExpression in labelSelector:\n operator is one of ['In', 'NotIn', 'Exists', 'DoesNotExist']\n values is defined if operator is In or NotIn\n values is empty if operator is Exists or DoesNotExist\n */\nfunction validateLabelSelector(affinityTerm, errorOpts, getters, errors) {\n const validOperators = ['In', 'NotIn', 'Exists', 'DoesNotExist'];\n\n const { labelSelector } = affinityTerm;\n\n if (labelSelector && !isEmpty(labelSelector)) {\n const { matchExpressions = [] } = labelSelector;\n\n matchExpressions.forEach((rule, i) => {\n const { operator, values } = rule;\n\n if (!validOperators.includes(operator)) {\n errors.push(getters['i18n/t']('validation.podAffinity.matchExpressions.operator', errorOpts));\n }\n if (operator === 'In' || operator === 'NotIn') {\n if (!values || !values.length) {\n errors.push(getters['i18n/t']('validation.podAffinity.matchExpressions.valuesMustBeDefined', errorOpts));\n }\n } else if (values && values.length) {\n errors.push(getters['i18n/t']('validation.podAffinity.matchExpressions.valueMustBeEmpty', errorOpts));\n }\n });\n }\n}\n","import { RBAC } from '@shell/config/types';\r\nimport isEmpty from 'lodash/isEmpty';\r\n\r\nexport function roleTemplateRules(rules = [], getters, errors, validatorArgs = []) {\r\n if (rules.some((rule) => isEmpty(rule.verbs))) {\r\n errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingVerb'));\r\n }\r\n\r\n if (validatorArgs[0] === RBAC.ROLE) {\r\n if (rules.some((rule) => isEmpty(rule.resources))) {\r\n errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingResource'));\r\n }\r\n if (rules.some((rule) => isEmpty(rule.apiGroups))) {\r\n errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingApiGroup'));\r\n }\r\n } else if (rules.some((rule) => isEmpty(rule.resources) && isEmpty(rule.nonResourceURLs) && isEmpty(rule.apiGroups))) {\r\n errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingOneResource'));\r\n }\r\n}\r\n","export function clusterName(pathValue, getters, errors, validatorArgs, displayKey) {\n const isRke2 = validatorArgs[0] === 'true'\n;\n\n if (isRke2) {\n if ((pathValue || '').match(/^(c-.{5}|local)$/i)) {\n errors.push(getters['i18n/t']('validation.cluster.name'));\n }\n }\n\n return errors;\n}\n","const httpsKeys = [\n 'server-url'\n];\n\nexport function isHttps(value, getters, errors, validatorArgs, displayKey) {\n const key = validatorArgs[0];\n\n if (httpsKeys.includes(key) && !value.toLowerCase().startsWith('https://')) {\n errors.push(getters['i18n/t']('validation.setting.serverUrl.https'));\n }\n\n return errors;\n}\n","import { flowOutput } from '@shell/utils/validators/flow-output';\nimport { logdna } from '@shell/utils/validators/logging-outputs';\nimport { clusterIp, externalName, servicePort } from '@shell/utils/validators/service';\nimport { ruleGroups, groupsAreValid } from '@shell/utils/validators/prometheusrule';\nimport { interval, matching } from '@shell/utils/validators/monitoring-route';\nimport { containerImages } from '@shell/utils/validators/container-images';\nimport { cronSchedule } from '@shell/utils/validators/cron-schedule';\nimport { podAffinity } from '@shell/utils/validators/pod-affinity';\nimport { roleTemplateRules } from '@shell/utils/validators/role-template';\nimport { clusterName } from '@shell/utils/validators/cluster-name';\nimport { isHttps } from '@shell/utils/validators/setting';\n\n/**\n* Custom validation functions beyond normal scalr types\n* Validator must export a function name should match the validator name on the customValidationRules rule\n* Exported function is used as a lookup key in resource-class:validationErrors:customValidationRules loop\n*/\nexport default {\n clusterName,\n clusterIp,\n externalName,\n flowOutput,\n groupsAreValid,\n logdna,\n ruleGroups,\n interval,\n servicePort,\n matching,\n containerImages,\n cronSchedule,\n podAffinity,\n roleTemplateRules,\n isHttps,\n};\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","import { ProductFunction } from './plugin';\nimport { RouteConfig, Location } from 'vue-router';\n\n// Cluster Provisioning types\nexport * from './types-provisioning';\n\n// package.json metadata\nexport interface PackageMetadata {\n name: string;\n version: string;\n description: string;\n icon: string;\n}\n\n// export interface Route {\n// name: string;\n// path: string;\n// component: Object | Function,\n// children: Route[];\n// }\n\nexport type VuexStoreObject = { [key: string]: any }\nexport type CoreStoreSpecifics = { state: () => VuexStoreObject, getters: VuexStoreObject, mutations: VuexStoreObject, actions: VuexStoreObject }\nexport type CoreStoreConfig = { namespace: string, baseUrl?: string, modelBaseClass?: string, supportsStream?: boolean, isClusterStore?: boolean }\nexport type CoreStoreInit = (store: any, ctx: any) => void;\nexport type RegisterStore = () => (store: any) => void\nexport type UnregisterStore = (store: any) => void\n\nexport type PluginRouteConfig = {parent?: string, route: RouteConfig}\n\nexport type OnEnterLeavePackageConfig = {\n clusterId: string,\n product: string,\n oldProduct: string,\n isExt: string,\n oldIsExt: string\n}\n\nexport type OnNavToPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise;\nexport type OnNavAwayFromPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise;\nexport type OnLogOut = (store: any) => Promise;\n\n/** Enum regarding the extensionable areas/places of the UI */\nexport enum ExtensionPoint {\n ACTION = 'Action', // eslint-disable-line no-unused-vars\n TAB = 'Tab', // eslint-disable-line no-unused-vars\n PANEL = 'Panel', // eslint-disable-line no-unused-vars\n CARD = 'Card', // eslint-disable-line no-unused-vars\n TABLE_COL = 'TableColumn', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding action locations that are extensionable in the UI */\nexport enum ActionLocation {\n HEADER = 'header-action', // eslint-disable-line no-unused-vars\n TABLE = 'table-action', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding panel locations that are extensionable in the UI */\nexport enum PanelLocation {\n DETAILS_MASTHEAD = 'details-masthead', // eslint-disable-line no-unused-vars\n DETAIL_TOP = 'detail-top', // eslint-disable-line no-unused-vars\n RESOURCE_LIST = 'resource-list', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding tab locations that are extensionable in the UI */\nexport enum TabLocation {\n RESOURCE_DETAIL = 'tab', // eslint-disable-line no-unused-vars\n CLUSTER_CREATE_RKE2 = 'cluster-create-rke2', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding card locations that are extensionable in the UI */\nexport enum CardLocation {\n CLUSTER_DASHBOARD_CARD = 'cluster-dashboard-card', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding table col locations that are extensionable in the UI */\nexport enum TableColumnLocation {\n RESOURCE = 'resource-list', // eslint-disable-line no-unused-vars\n}\n\n/** Definition of the shortcut object (keyboard shortcuts) */\nexport type ShortCutKey = {\n windows?: string[];\n mac?: string[];\n};\n\n/** Definition of the action options (table actions) */\nexport type ActionOpts = {\n event: any;\n isAlt: boolean;\n action: any;\n};\n\n/** Definition of an extension action (options that can be passed when setting an extension action) */\nexport type Action = {\n label?: string;\n labelKey?: string;\n tooltipKey?: string;\n tooltip?: string;\n shortcut?: string | ShortCutKey;\n svg?: Function;\n icon?: string;\n multiple?: boolean;\n enabled?: Function | boolean;\n invoke: (opts: ActionOpts, resources: any[]) => void | boolean | Promise;\n};\n\n/** Definition of a panel (options that can be passed when defining an extension panel enhancement) */\nexport type Panel = {\n component: Function;\n};\n\n/** Definition of a card (options that can be passed when defining an extension card enhancement) */\nexport type Card = {\n label?: string;\n labelKey?: string;\n component: Function;\n};\n\nexport type TableColumn = any;\n\n/** Definition of a tab (options that can be passed when defining an extension tab enhancement) */\nexport type Tab = {\n name: string;\n label?: string;\n labelKey?: string;\n tooltipKey?: string;\n tooltip?: string;\n showHeader?: boolean;\n weight?: number;\n component: Function;\n};\n\n/** Definition of the locationConfig object (used in extensions) */\nexport type LocationConfig = {\n product?: string[],\n resource?: string[],\n namespace?: string[],\n cluster?: string[],\n id?: string[],\n mode?: string[],\n hash?: string[],\n /**\n * path match from URL (excludes host address)\n */\n path?: { [key: string]: string | boolean}[],\n /**\n * Query Params from URL\n */\n queryParam?: { [key: string]: string},\n /**\n * Context specific params.\n *\n * Components can provide additional context specific params that this value must match\n */\n context?: { [key: string]: string},\n};\n\nexport interface ProductOptions {\n /**\n * The category this product belongs under. i.e. 'config'\n */\n category?: string;\n\n /**\n * Hide the Copy KubeConfig button in the header\n */\n hideCopyConfig?: boolean;\n\n /**\n * Hide the Download KubeConfig button in the header\n */\n hideKubeConfig?: boolean;\n\n /**\n * Hide the Kubectl Shell button in the header\n */\n hideKubeShell?: boolean;\n\n /**\n * Hide the Namespace location\n */\n hideNamespaceLocation?: boolean;\n\n /**\n * Hide the system resources\n */\n\n hideSystemResources?: boolean;\n /**\n * The icon that should be displayed beside this item in the navigation.\n */\n icon?: string,\n\n /**\n * Only load the product if the feature is present\n */\n ifFeature?: string | RegExp;\n\n /**\n * Only load the product if the type is present\n */\n ifHave?: string;\n\n /**\n * Only load the product if the group is present\n */\n ifHaveGroup?: string | RegExp;\n\n /**\n * Only load the product if the type is present\n */\n ifHaveType?: string | RegExp;\n\n /**\n * The vuex store that this product should use by default i.e. 'management'\n */\n inStore?: string;\n\n /**\n * Show the cluster switcher in the navigation\n */\n showClusterSwitcher?: boolean;\n\n /**\n * Show the namespace filter in the header\n */\n showNamespaceFilter?: boolean;\n\n /**\n * A number used to determine where in navigation this item will be placed. The highest number will be at the top of the list.\n */\n weight?: number;\n\n /**\n * The route that the product will lead to if click on in navigation.\n */\n to?: Location;\n\n /**\n * Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.\n */\n // ifHaveVerb: string | RegExp;\n // removable: string;\n // showWorkspaceSwitcher: boolean;\n // supportRoute: string;\n // typeStoreMap: string;\n}\n\nexport interface HeaderOptions {\n /**\n * Name of the header. This should be unique.\n */\n name?: string;\n\n /**\n * A string that will show in the table column as a header\n */\n label?: string;\n\n /**\n * A translation key where the resulting string will show in the table column as a header\n */\n labelKey?: string;\n\n /**\n * A string which represents the path to access the value from the row object i.e. `row.meta.value`.\n */\n value?: string;\n\n /**\n * A string which represents the path to access the value from the row object which we'll use to sort i.e. `row.meta.value`\n */\n sort?: string | string[];\n\n /**\n * A string which represents the path to access the value from the row object which we'll use to search i.e. `row.meta.value`.\n * It can be false to disable searching on this field\n */\n search?: string | boolean;\n\n /**\n * Number of pixels the column should be in the table\n */\n width?: number;\n\n /**\n * The name of a custom formatter. The available formatters can bee seen in `@rancher/shell/components/formatter`\n */\n formatter?: string;\n\n /**\n * These options are dependent on the formatter that's chosen. Examples can be seen in `@rancher/shell/components/formatter` and `@rancher/shell/config/table-headers`\n */\n formatterOpts?: any;\n\n /**\n * Provide a function which accets a row and returns the value that should be displayed in the column\n * @param row This can be any value which represents the row\n * @returns Can return {@link string | number | null | undefined} to display in the column\n */\n getValue?: (row: any) => string | number | null | undefined;\n}\n\nexport interface ConfigureTypeOptions {\n /**\n * The resource can edit/show yaml\n */\n canYaml?: boolean;\n\n /**\n * Modify the way the name looks when displayed\n */\n displayName?: string;\n\n /**\n * New resources can be created of this type\n */\n isCreatable?: boolean;\n\n /**\n * Resources of this type can be deleted/removed\n */\n isRemovable?: boolean;\n\n /**\n * This type should be grouped by namespaces when displayed in a table\n */\n namespaced?: boolean;\n\n /**\n * Show the age column in when displaying this type in a table\n */\n showAge?: boolean;\n\n /**\n * Show the masthead at the top of the list view of this type\n */\n showListMasthead?: boolean;\n\n /**\n * Show the state column in when displaying this type in a table\n */\n showState?: boolean;\n\n /**\n * Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.\n */\n // alias\n // customRoute\n // customRoute\n // depaginate\n // graphConfig\n // hasGraph\n // isEditable\n // limit\n // listGroups\n // localOnly\n // location\n // match\n // realResource\n // resource\n // resourceDetail\n // resourceEdit\n // showConfigView\n}\n\nexport interface ConfigureVirtualTypeOptions extends ConfigureTypeOptions {\n /**\n * The translation key displayed anywhere this type is referenced\n */\n labelKey: string;\n\n /**\n * An identifier that should be unique across all types\n */\n name: string;\n\n /**\n * The route that this type should correspond to {@link PluginRouteConfig} {@link RouteConfig}\n */\n route: PluginRouteConfig | RouteConfig;\n}\n\nexport interface DSLReturnType {\n /**\n * Register multiple types by name and place them all in a group if desired. Primarily used for grouping things in the cluster explorer navigation.\n * @param types A list of types that are going to be registered\n * @param group Conditionally a group you want to places all the types in\n * @returns {@link void}\n */\n basicType: (types: string[], group?: string) => void;\n\n /**\n * Configure a myriad of options for the specified type\n * @param type The type to be configured\n * @param options {@link ConfigureTypeOptions}\n * @returns {@link void}\n */\n configureType: (type: string, options: ConfigureTypeOptions) => void;\n\n /**\n * Register the headers/columns that should be used when rendering a table for the specified type.\n * @param type The type you'd like to register headers/columns for.\n * @param headers {@link HeaderOptions[]}\n * @returns {@link void}\n */\n headers: (type: string, headers: HeaderOptions[]) => void;\n\n /**\n * Create and register a new product\n * @param options {@link ProductOptions}\n * @returns {@link void}\n */\n product: (options: ProductOptions) => void;\n\n /**\n * Create and label a group. The group will show up in navigation\n * @param groupNane Name of the group\n * @param label Label in navigation\n * @returns {@link void}\n */\n mapGroup: (groupName: string, label: string) => void;\n\n /**\n * Create and configure a myriad of options for a type\n * @param options {@link ConfigureVirtualTypeOptions}\n * @returns {@link void}\n */\n virtualType: (options: ConfigureVirtualTypeOptions) => void;\n\n /**\n * Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.\n */\n // componentForType: (type: string, replacementType: string)\n // groupBy: (type: string, field: string)\n // hideBulkActions: (type: string, field)\n // ignoreGroup: (regexOrString)\n // ignoreType: (regexOrString)\n //\n // mapType: (match, replace)\n // moveType: (match, group)\n // setGroupDefaultType: (input, defaultType)\n // spoofedType: (obj)\n // weightGroup: (input, weight, forBasic)\n // weightType: (input, weight, forBasic)\n}\n\n/**\n * Interface for a Dashboard plugin\n */\nexport interface IPlugin {\n /**\n * Add a product\n * @param importFn Function that will import the module containing a product definition\n */\n addProduct(importFn: ProductFunction): void;\n\n /**\n * Add a locale to the i18n store\n * @param locale Locale id (e.g. en-us)\n * @param label Label for the locale to be displayed in the i18n chooser\n */\n addLocale(locale: string, label: string): void;\n\n /**\n * Plugin metadata\n */\n metadata: PackageMetadata;\n\n /**\n * Validators used in the same manner as shell/utils/custom-validators\n */\n validators: {[key: string]: Function};\n\n /**\n * Add a module containing localisations for a specific locale\n */\n addL10n(locale: string, fn: Function): void;\n\n /**\n * Add a route to the Vue Router\n */\n addRoute(route: RouteConfig): void;\n addRoute(parent: string, route: RouteConfig): void;\n\n /**\n * Adds an action/button to the UI\n */\n addAction(where: ActionLocation | string, when: LocationConfig | string, action: Action): void;\n\n /**\n * Adds a tab to the UI (ResourceTabs component)\n */\n addTab(where: TabLocation | string, when: LocationConfig | string, action: Tab): void;\n\n /**\n * Adds a panel/component to the UI\n */\n addPanel(where: PanelLocation | string, when: LocationConfig | string, action: Panel): void;\n\n /**\n * Adds a card to the UI\n */\n addCard(where: CardLocation | string, when: LocationConfig | string, action: Card): void;\n\n /**\n * Adds a new column to the SortableTable component\n */\n addTableColumn(where: TableColumnLocation | string, when: LocationConfig | string, action: TableColumn): void;\n\n /**\n * Set the component to use for the landing home page\n * @param component Home page component\n */\n setHomePage(component: any): void;\n\n /**\n * Add routes to the Vue Router\n */\n addRoutes(routes: PluginRouteConfig[] | RouteConfig[]): void;\n\n /**\n * Add a hook to be called when the plugin is uninstalled\n * @param hook Function to call when the plugin is uninstalled\n */\n addUninstallHook(hook: Function): void;\n\n /**\n * Add a generic Vuex Store\n */\n addStore(storeName: string, register: RegisterStore, unregister: UnregisterStore): void;\n /**\n * Add a dashboard Vuex store.\n *\n * This will contain the toolset (getters/mutations/actions/etc) required by the dashboard to support Dashboard components. Most of these\n * will be automatically supplemented when the store is registered, others though will need to be provided to supply package specific\n * functionality (see storeSpecifics). For instance a component may request to fetch all of a resource type which, via a number of generic\n * actions, will eventually call a `request` action which will make the raw http request. This is a pkg specific feature so needs the\n * `request` action needs to be supplied in the `storeSpecifics`\n */\n addDashboardStore(storeName: string, storeSpecifics: CoreStoreSpecifics, config: CoreStoreConfig, init?: CoreStoreInit): void;\n\n /**\n * Add hooks that will execute when a user navigates\n * - to a route owned by this package\n * - from a route owned by this package\n */\n addNavHooks(\n onEnter?: OnNavToPackage,\n onLeave?: OnNavAwayFromPackage,\n onLogOut?: OnLogOut\n ): void;\n\n /**\n * Register 'something' that can be dynamically loaded - e.g. model, edit, create, list, i18n\n * @param {String} type type of thing to register, e.g. 'edit'\n * @param {String} name unique name of 'something'\n * @param {Function} fn function that dynamically loads the module for the thing being registered\n */\n register(type: string, name: string, fn: Function | Boolean): void;\n\n /**\n * Will return all of the configuration functions used for creating a new product.\n * @param store The store that was passed to the function that's passed to `plugin.addProduct(function)`\n * @param productName The name of the new product. This name is displayed in the navigation.\n */\n DSL(store: any, productName: string): DSLReturnType;\n}\n","var arrayEach = require('./_arrayEach'),\n baseCreate = require('./_baseCreate'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee'),\n getPrototype = require('./_getPrototype'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isTypedArray = require('./isTypedArray');\n\n/**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.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 * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\nfunction transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = baseIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n}\n\nmodule.exports = transform;\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var baseFlatten = require('./_baseFlatten');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n}\n\nmodule.exports = flattenDeep;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\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 * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\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 assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","import { RBAC } from '@shell/config/types';\nimport { HCI } from '@shell/config/labels-annotations';\nimport isEmpty from 'lodash/isEmpty';\nimport has from 'lodash/has';\n// import uniq from 'lodash/uniq';\nimport cronstrue from 'cronstrue';\nimport { Translation } from '@shell/types/t';\n\n// import uniq from 'lodash/uniq';\nexport type Validator = (val: any, arg?: any) => T;\n\nexport type ValidatorFactory = (arg1: any, arg2?: any) => Validator\n\ntype ServicePort = {\n name?: string,\n nodePort?: string | number,\n port?: string | number,\n targetPort?: string | number,\n idx: number\n}\n\nexport class Port {\n empty: boolean;\n int: number;\n string: string;\n isNumber: boolean;\n isInt: boolean;\n constructor(port: number | string | undefined) {\n this.string = String(port);\n this.int = parseInt(this.string, 10);\n this.empty = (!port && this.int !== 0);\n this.isNumber = !isNaN(this.int) && !this.string.includes('e'); // leaving out the exponent edge case to keep the logic simple and because port numbers aren't that big...\n this.isInt = this.isNumber && !this.string.includes('.');\n }\n}\n\nconst httpsKeys = [\n 'server-url'\n];\n\nconst runValidators = (val: any, validators: Validator[]) => {\n for (const validator of validators) {\n const message = validator(val);\n\n if (message) {\n return message;\n }\n }\n};\n\nexport interface ValidationOptions {\n key?: string,\n}\n\n// \"t\" is the function name we use for getting a translated string\nexport default function(t: Translation, { key = 'Value' }: ValidationOptions): { [key:string]: Validator | ValidatorFactory } {\n // utility validators these validators only get used by other validators\n const startDot: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1) === '.' ? t(`validation.dns.${ label }.startDot`, { key }) : undefined;\n\n const endDot = (label: string): Validator => (val: string) => val?.slice(-1) === '.' ? t(`validation.dns.${ label }.endDot`, { key }) : undefined;\n\n const startNumber: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1)?.match(/[0-9]/) ? t(`validation.dns.${ label }.startNumber`, { key }) : undefined;\n\n const startHyphen: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1) === '-' ? t(`validation.dns.${ label }.startHyphen`, { key }) : undefined;\n\n const endHyphen: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(-1) === '-' ? t(`validation.dns.${ label }.endHyphen`, { key }) : undefined;\n\n const minValue: ValidatorFactory = (min: string) => (val: string | number) => Number(val) < Number(min) ? t('validation.minValue', { key, min }) : undefined;\n\n const maxValue: ValidatorFactory = (max: string) => (val: string | number) => Number(val) > Number(max) ? t('validation.maxValue', { key, max }) : undefined;\n\n const betweenValues: ValidatorFactory = ([min, max]: string[]) => (val: string | number) => minValue(min)(val) || maxValue(max)(val) ? t('validation.betweenValues', {\n key, min, max\n }) : undefined;\n\n const minLength: ValidatorFactory = (min: string) => (val: string) => val.length < Number(min) ? t('validation.minLength', { key, min }) : undefined;\n\n const maxLength: ValidatorFactory = (max: string) => (val: string) => val.length > Number(max) ? t('validation.maxLength', { key, max }) : undefined;\n\n const betweenLengths: ValidatorFactory = ([min, max]: string[]) => (val: string) => minLength(min)(val) || maxLength(max)(val) ? t('validation.betweenLengths', {\n key, min, max\n }) : undefined;\n\n const requiredInt: Validator = (val: string) => isNaN(parseInt(val, 10)) ? t('validation.number.requiredInt', { key }) : undefined;\n\n const isInteger: Validator = (val: string | number) => !Number.isInteger(+val) || `${ val }`.match(/\\.+/g) ? t('validation.number.requiredInt', { key }) : undefined;\n\n const isPositive: Validator = (val: string | number) => +val < 0 ? t('validation.number.isPositive', { key }) : undefined;\n\n const isOctal: Validator = (val: string | number) => {\n const valueString = `${ val }`;\n const isValid = valueString.match(/(^0+)(.+)/);\n\n return isValid ? t('validation.number.isOctal', { key }) : undefined;\n };\n\n const portNumber: Validator = (val: string) => parseInt(val, 10) < 1 || parseInt(val, 10) > 65535 ? t('validation.number.between', {\n key, min: '1', max: '65535'\n }) : undefined;\n\n const dnsChars: Validator = (val: string) => {\n const matchedChars = val?.match(/[^${'A-Za-z0-9-'}]/g);\n\n if (matchedChars) {\n return t('validation.chars', {\n key, count: matchedChars.length, chars: matchedChars.map((char) => char === ' ' ? 'Space' : `\"${ char }\"`).join(', ')\n });\n }\n\n return undefined;\n };\n\n // the weird edge case here deals with internationalized domain names which are prepended with 'xn--'\n // https://datatracker.ietf.org/doc/html/rfc5891#section-4.2.3.1\n const dnsDoubleDash: Validator = (val: string) => (val?.substr(2, 2) === '--' && val?.substr(0, 2) !== 'xn') ? t(`validation.dns.doubleHyphen`, { key }) : undefined;\n\n const dnsIanaServiceNameDoubleDash: Validator = (val: string) => (val?.substr(2, 2) === '--' && val?.substr(0, 2) !== 'xn') ? t(`validation.dns.doubleHyphen`, { key }) : undefined;\n\n const dnsEmpty: ValidatorFactory = (label: string): Validator => (val = '') => val.length === 0 ? t(`validation.dns.${ label }.emptyLabel`, { key, min: 1 }) : undefined;\n\n const dnsTooLong: ValidatorFactory = (label: string, length = 63): Validator => (val = '') => val.length > length ? t(`validation.dns.${ label }.tooLongLabel`, { key, max: length }) : undefined;\n\n // eslint-disable-next-line no-unused-vars\n const hostnameEmpty: Validator = (val = '') => val.length === 0 ? t('validation.dns.hostname.empty', { key }) : undefined;\n\n const hostnameTooLong: Validator = (val = '') => val.length > 253 ? t('validation.dns.hostname.tooLong', { key, max: 253 }) : undefined;\n\n const absolutePath: Validator = (val = '') => val[0] !== '/' && val.length > 0 ? t('validation.path', { key }) : undefined;\n\n const required: Validator = (val: any) => !val && val !== false ? t('validation.required', { key }) : undefined;\n\n const noUpperCase: Validator = (val = '') => val.toLowerCase() !== val ? t('validation.noUpperCase', { key }) : undefined;\n\n const cronSchedule: Validator = (val: string) => {\n try {\n cronstrue.toString(val);\n } catch (e) {\n return t('validation.invalidCron');\n }\n };\n\n const isHttps: ValidatorFactory = (key: string) => {\n const isHttps: Validator = (val: string) => httpsKeys.includes(key) && !val.toLowerCase().startsWith('https://') ? t('validation.setting.serverUrl.https') : undefined;\n\n return isHttps;\n };\n\n const interval: Validator = (val: string) => !/^\\d+[hms]$/.test(val) ? t('validation.monitoring.route.interval', { key }) : undefined;\n\n const containerImage: Validator = (val: any) => !val?.image ? t('workload.validation.containerImage', { name: val.name }) : undefined;\n\n const containerImages: Validator = (val: any | [any]) => {\n const containers = val.jobTemplate ? val?.jobTemplate?.spec?.template?.spec?.containers : val?.template?.spec?.containers;\n\n if (!containers || !containers.length) {\n return t('validation.required', { key: t('workload.container.titles.containers') });\n }\n\n // making sure each container has an image name\n return containers.map((container: any) => containerImage(container)).find((containerError: string) => containerError);\n };\n\n const dnsLabel: Validator = (val: string) => {\n const validators = [\n dnsChars,\n startHyphen('label'),\n endHyphen('label'),\n dnsDoubleDash,\n // dnsEmpty('label'), // questionable as to if this is needed if the field is also required...\n dnsTooLong('label')\n ];\n\n return runValidators(val, validators);\n };\n\n const dnsLabelIanaServiceName: Validator = (val: string) => {\n const validators = [\n dnsChars,\n startHyphen('label'),\n endHyphen('label'),\n dnsIanaServiceNameDoubleDash,\n dnsEmpty('label'), // questionable as to if this is needed if the field is also required...\n dnsTooLong('label', 15)\n ];\n\n return runValidators(val, validators);\n };\n\n const dnsLabelRestricted: Validator = (val: string) => {\n const validators = [\n dnsChars,\n startNumber('label'),\n startHyphen('label'),\n endHyphen('label'),\n dnsDoubleDash,\n dnsEmpty('label'), // questionable as to if this is needed if the field is also required...\n dnsTooLong('label')\n ];\n\n return runValidators(val, validators);\n };\n\n const hostname: Validator = (val: string) => {\n if (val) {\n const validators = [\n startDot('hostname'),\n hostnameTooLong,\n endDot('hostname')\n ];\n\n const hostNameMessage = runValidators(val, validators);\n\n if (hostNameMessage) {\n return hostNameMessage;\n }\n\n const labels = val.split('.');\n const labelValidators = [\n dnsChars,\n startHyphen('hostname'),\n endHyphen('hostname'),\n dnsDoubleDash,\n dnsEmpty('hostname'),\n dnsTooLong('hostname')\n ];\n\n for ( let i = 0; i < labels.length; i++ ) {\n const labelMessage = runValidators(labels[i], labelValidators);\n\n if (labelMessage) {\n return labelMessage;\n }\n }\n }\n };\n\n const wildcardHostname: Validator = (val: string) => {\n // allow wildcard in first part of hostname\n val = val ? val.replace(/^\\*\\./, '') : val;\n\n return hostname(val);\n };\n\n const externalName: Validator = (val: string) => {\n if (isEmpty(val)) {\n return t('validation.service.externalName.none');\n } else {\n return hostname(val);\n }\n };\n\n const testRule = (val: string | undefined) => {\n return 'This is an error returned by the testRule validator';\n };\n\n const ruleGroups: Validator = (val: {groups?: any}) => isEmpty(val?.groups) ? t('validation.prometheusRule.groups.required') : undefined;\n\n const clusterName: ValidatorFactory = (isRke2: boolean): Validator => (val: string | undefined) => isRke2 && (val || '')?.match(/^(c-.{5}|local)$/i) ? t('validation.cluster.name') : undefined;\n\n const servicePort: Validator = (val: ServicePort) => {\n const {\n name,\n idx\n } = val;\n\n const nodePort = new Port(val.nodePort);\n const listeningPort = new Port(val.port);\n const targetPort = new Port(val.targetPort);\n\n if (isEmpty(name)) {\n return t('validation.service.ports.name.required', { position: idx + 1 });\n }\n\n if (!nodePort.empty) {\n if (!nodePort.isInt) {\n return t('validation.service.ports.nodePort.requiredInt', { position: idx + 1 });\n } else if (nodePort.int < 1 || nodePort.int > 65535) {\n return t('validation.service.ports.nodePort.between', { position: idx + 1 });\n }\n }\n\n if (!listeningPort.empty) {\n if (!listeningPort.isInt) {\n return t('validation.service.ports.port.requiredInt', { position: idx + 1 });\n } else if (listeningPort.int < 1 || listeningPort.int > 65535) {\n return t('validation.service.ports.port.between', { position: idx + 1 });\n } else if (listeningPort.string?.includes('.')) {\n return listeningPort;\n }\n } else {\n return t('validation.service.ports.port.required', { position: idx + 1 });\n }\n\n if (!targetPort.empty) {\n if (!targetPort.isInt) {\n const ianaServiceNameErrors = dnsLabelIanaServiceName(targetPort.string);\n\n if (ianaServiceNameErrors) {\n return ianaServiceNameErrors;\n }\n } else if (targetPort.int < 1 || targetPort.int > 65535) {\n return t('validation.service.ports.targetPort.between', { position: idx + 1 });\n }\n } else {\n return t('validation.service.ports.targetPort.required', { position: idx + 1 });\n }\n\n return undefined;\n };\n\n const groupIsValid: Validator = (val, readableIndex) => {\n let returnMessage: string | undefined;\n\n if (isEmpty(val?.name)) {\n return t('validation.prometheusRule.groups.valid.name', { index: readableIndex });\n }\n\n if (isEmpty(val.rules)) {\n return t('validation.prometheusRule.groups.valid.singleEntry', { index: readableIndex });\n } else {\n val.rules.forEach((rule: any, idx: number) => {\n const readableRuleIndex = idx + 1;\n\n if (has(rule, 'alert') && isEmpty(rule?.alert) && !returnMessage) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.alertName', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n } else if (has(rule, 'record') && isEmpty(rule?.record)) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.recordName', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n }\n\n if ((has(rule, 'expr') && isEmpty(rule.expr) && !returnMessage) || (!has(rule, 'expr') && !returnMessage)) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.expr', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n }\n\n if (has(rule, 'alert')) {\n if (\n (has(rule, 'labels') && isEmpty(rule.labels) && !returnMessage) ||\n (!has(rule, 'labels') && !returnMessage)\n ) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.labels', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n }\n }\n });\n }\n\n return returnMessage;\n };\n\n const groupsAreValid: Validator = (val) => {\n const groups = [...val]; // making a new array in the function because I'm gonna mutate it later...\n let message;\n\n groups.forEach((group, idx, arr) => {\n message = groupIsValid(group, idx + 1);\n if (!!message) {\n arr.length = idx + 1; // this is a tricksy way of breaking a forEach loop since we just want the first message\n }\n });\n\n return message;\n };\n\n const matching: Validator = (val) => {\n if (isEmpty(val?.match) && isEmpty(val?.['match_re'])) {\n return t('validation.monitoring.route.match');\n }\n };\n\n const roleTemplateRules: ValidatorFactory = (type): Validator => (val = []) => {\n if (val.some((rule: any) => isEmpty(rule.verbs))) {\n return t('validation.roleTemplate.roleTemplateRules.missingVerb');\n }\n\n if (type === RBAC.ROLE) {\n if (val.some((rule: any) => isEmpty(rule.resources))) {\n return t('validation.roleTemplate.roleTemplateRules.missingResource');\n }\n\n if (val.some((rule: any) => isEmpty(rule.apiGroups))) {\n return t('validation.roleTemplate.roleTemplateRules.missingApiGroup');\n }\n } else if (val.some((rule: any) => isEmpty(rule.resources) && isEmpty(rule.nonResourceURLs) && isEmpty(rule.apiGroups))) {\n return t('validation.roleTemplate.roleTemplateRules.missingOneResource');\n }\n\n return undefined;\n };\n\n // The existing validator for clusterIp never actually returns an error\n const clusterIp: Validator = (val) => undefined;\n\n const backupTarget: Validator = (val) => {\n const parseValue = JSON.parse(val);\n const type = parseValue.type;\n\n if (!type) {\n return t('validation.required', { key: 'Type' });\n }\n\n if (type === 's3') {\n if (!parseValue.accessKeyId) {\n return t('validation.required', { key: 'accessKeyId' });\n }\n\n if (!parseValue.secretAccessKey) {\n return t('validation.required', { key: 'secretAccessKey' });\n }\n\n if (!parseValue.bucketRegion) {\n return t('validation.required', { key: 'bucketRegion' });\n }\n\n if (!parseValue.bucketName) {\n return t('validation.required', { key: 'bucketName' });\n }\n }\n\n return undefined;\n };\n\n const imageUrl: Validator = (val) => {\n const VM_IMAGE_FILE_FORMAT = ['qcow', 'qcow2', 'raw', 'img', 'iso'];\n\n if (!val || val === '') {\n return undefined;\n }\n\n const urlSlug = val.split('/').pop();\n const fileExtension = urlSlug.split('.').pop().toLowerCase();\n\n if (!VM_IMAGE_FILE_FORMAT.includes(fileExtension)) {\n return t('harvester.validation.image.ruleTip');\n }\n\n return undefined;\n };\n\n const fileRequired: Validator = (val = {}) => {\n if (!val[HCI.IMAGE_NAME]) {\n return t('validation.required', { key: t('harvester.image.fileName') });\n }\n };\n\n const subDomain: Validator = (val) => {\n const matchedChars = val?.match(/[^a-z0-9.-]/g);\n\n if (matchedChars) {\n return t('validation.chars', {\n key, count: matchedChars.length, chars: matchedChars.map((char: string) => char === ' ' ? 'Space' : `\"${ char }\"`).join(', ')\n });\n }\n\n return runValidators(val, [startHyphen('label'), endHyphen('label'), startDot('label'), endDot('label'), required]);\n };\n\n return {\n absolutePath,\n backupTarget,\n betweenLengths,\n betweenValues,\n clusterIp,\n clusterName,\n containerImage,\n containerImages,\n cronSchedule,\n dnsLabel,\n dnsLabelIanaServiceName,\n dnsLabelRestricted,\n externalName,\n fileRequired,\n groupsAreValid,\n hostname,\n imageUrl,\n interval,\n isHttps,\n matching,\n maxLength,\n maxValue,\n minLength,\n minValue,\n noUpperCase,\n portNumber,\n required,\n requiredInt,\n isInteger,\n isPositive,\n isOctal,\n roleTemplateRules,\n ruleGroups,\n servicePort,\n subDomain,\n testRule,\n wildcardHostname,\n };\n}\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\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 mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__7838__;","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[[_vm._v(\" \"+_vm._s(_vm.t('promptRemove.attemptingToRemove', { type: _vm.type }))+\" \"),_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.resourceNames(_vm.names, _vm.plusMore, _vm.t)),expression:\"resourceNames(names, plusMore, t)\"}]})],(_vm.info)?_c('div',{staticClass:\"text info mb-10 mt-20\"},[_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.info),expression:\"info\"}]})]):_vm._e(),(_vm.warning)?_c('div',{staticClass:\"text-warning mb-10 mt-20\"},[_vm._v(\" \"+_vm._s(_vm.warning)+\" \")]):_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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!./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\n const labelDisplay = highlightLabel(label, 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, 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 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","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!./index.vue?vue&type=style&index=0&id=3b0138b8&prod&lang=scss&scoped=true&\"","export const CAPI_PRODUCT_NAME = 'capi-turtles';\n\nexport const QUERY_PARAMS = { CLASS: 'class' };\n\nexport const BLANK_CLUSTER = '_';\n\nexport const LABELS = { AUTO_IMPORT: 'cluster-api.cattle.io/rancher-auto-import' };\n\nexport const CAPI = {\n CLUSTER_CLASS: 'cluster.x-k8s.io.clusterclass',\n PROVIDER: 'operator.cluster.x-k8s.io.infrastructureprovider',\n};\n\nexport const CP_VERSIONS = {\n 'kubekey-k3s': ['k3s1', 'k3s2'],\n rke2: ['rke2r1', 'rke2r2']\n};\n\nexport const CREDENTIALS_UPDATE_REQUIRED = ['aks'];\nexport const CREDENTIALS_NOT_REQUIRED = ['docker'];\nexport interface Worker {\n name: String,\n class: String\n}\n\nexport interface CAPIClusterTopology {\n version: String,\n class: String,\n workers: {\n machineDeployments: Worker[],\n machinePools: Worker[]\n }\n}\nexport interface CAPIClusterCPEndpoint {\n host: String,\n port: Number\n}\n\nexport interface CAPIClusterNetwork {\n apiServerPort?: Number,\n pods?: {\n cidrBlocks: String[]\n },\n serviceDomain?: String,\n services?: {\n cidrBlocks: String[]\n },\n}\n\nexport interface ClusterClass {\n metadata: {\n name: string,\n namespace: string,\n annotations?: {[key: string]: string}\n },\n spec: {\n infrastructure: Object,\n workers: Object,\n controlPlane: Object\n }\n}\n","import SteveModel from '@shell/plugins/steve/steve-class';\nimport { CAPI } from '@shell/config/types';\nimport { BLANK_CLUSTER, QUERY_PARAMS } from '../types/capi';\n\nexport class infraProvider extends SteveModel {\n // get _availableActions() {\n // const out = super._availableActions;\n\n // out.unshift({\n // action: 'goToCreateCluster',\n // label: 'action.createCluster',\n // icon: 'icon icon-copy',\n // enabled: true\n // });\n\n // return out;\n // }\n\n canYaml() {\n return false;\n }\n\n // goToCreateCluster() {\n // const escapedID = escape(this.id);\n // const location = {\n // name: 'c-cluster-manager-resource-create',\n // params: {\n // cluster: BLANK_CLUSTER,\n // resource: CAPI.CAPI_CLUSTER\n // },\n // query: { [QUERY_PARAMS.CLASS]: escapedID }\n // };\n\n // this.currentRouter().push(location);\n // }\n}\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n basePickBy = require('./_basePickBy'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n}\n\nmodule.exports = pickBy;\n","var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseUniq = require('./_baseUniq');\n\n/**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\nfunction baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n}\n\nmodule.exports = baseXor;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\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 \"-!../../../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=337ae8b8&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=337ae8b8&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 \"337ae8b8\",\n null\n \n)\n\nexport default component.exports","import Dashboard from '../pages/index.vue';\n\nconst routes = [\n {\n name: 'c-cluster-manager-capi',\n path: '/c/:cluster/manager/capi',\n component: Dashboard,\n },\n];\n\nexport default routes;\n","import { LABELS } from '../types/capi';\n\nexport default function(resource: any) {\n if (resource?.metadata?.labels?.[LABELS.AUTO_IMPORT] === 'true') {\n delete resource.metadata.labels[LABELS.AUTO_IMPORT];\n } else {\n if (!resource.metadata.labels) {\n resource.metadata.labels = {};\n }\n resource.metadata.labels[LABELS.AUTO_IMPORT] = 'true';\n }\n try {\n resource.save();\n } catch (err) {\n const title = resource.t('resource.errors.update', { name: resource.name });\n\n resource.$dispatch('growl/error', {\n title, message: err, timeout: 5000\n }, { root: true });\n }\n}\n","import { importTypes } from '@rancher/auto-import';\nimport {\n ActionLocation, IPlugin, PanelLocation, TableColumnLocation, TabLocation\n} from '@shell/core/types';\nimport { _CLONE, _CREATE, _EDIT } from '@shell/config/query-params';\nimport { LABELS } from './types/capi';\nimport capiRouting from './routes/capi-routing';\nimport toggleAutoImport from './util/auto-import';\n\n// Init the package\nexport default function(plugin: IPlugin): void {\n // Auto-import model, detail, edit from the folders\n importTypes(plugin);\n\n // Provide plugin metadata from package.json\n plugin.metadata = require('./package.json');\n\n plugin.addProduct(require('./config/capi'));\n\n // Add Vue Routes\n plugin.addRoutes(capiRouting);\n\n // add tab to namespace edit\n plugin.addTab(\n TabLocation.RESOURCE_DETAIL,\n {\n resource: ['namespace'],\n cluster: ['local'],\n mode: [_CREATE, _CLONE, _EDIT, 'config']\n },\n {\n name: 'capi-auto-import',\n labelKey: 'capi.autoImport.label',\n weight: -5,\n showHeader: true,\n component: () => import('./components/AutoImport.vue')\n }\n );\n\n // add enable auto-import action to namespace table\n plugin.addAction(ActionLocation.TABLE,\n { path: [{ urlPath: '/c/local/explorer/projectsnamespaces', exact: true }, { urlPath: 'cluster.x-k8s.io.cluster', endsWith: true }] },\n {\n labelKey: 'capi.autoImport.enableAction',\n icon: 'icon-plus',\n enabled(target: any) {\n return target?.metadata?.labels?.[LABELS.AUTO_IMPORT] !== 'true';\n },\n invoke(opts, resources = []) {\n resources.forEach((ns) => {\n toggleAutoImport(ns);\n });\n }\n });\n\n // add disable auto-import action to namespace table\n plugin.addAction(ActionLocation.TABLE,\n { path: [{ urlPath: '/c/local/explorer/projectsnamespaces', exact: true }, { urlPath: 'cluster.x-k8s.io.cluster', endsWith: true }] },\n {\n labelKey: 'capi.autoImport.disableAction',\n icon: 'icon-minus',\n enabled(target: any) {\n return target?.metadata?.labels?.[LABELS.AUTO_IMPORT] === 'true';\n },\n invoke(opts, resources = []) {\n resources.forEach((ns) => {\n toggleAutoImport(ns);\n });\n }\n });\n\n // add column to namespace table\n plugin.addTableColumn(\n TableColumnLocation.RESOURCE,\n { path: [{ urlPath: '/c/local/explorer/projectsnamespaces', exact: true }] },\n {\n name: 'capi-auto-import',\n labelKey: 'capi.autoImport.label',\n getValue: (row: any) => {\n return row.labels[LABELS.AUTO_IMPORT] === 'true';\n },\n width: 100,\n formatter: 'AutoImportState'\n }\n );\n\n // add warning to cluster mgmt resource list\n plugin.addPanel(PanelLocation.RESOURCE_LIST,\n { resource: ['provisioning.cattle.io.cluster'] },\n { component: () => import('./components/ClusterListBanner.vue') }\n );\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","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!./index.vue?vue&type=style&index=0&id=337ae8b8&prod&lang=scss&scoped=true&\"","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","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","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","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\nexport function sanitizeKey(k) {\n return (k || '').replace(/[^a-z0-9./_-]/ig, '');\n}\n\nexport function sanitizeValue(v) {\n return (v || '').replace(/[^a-z0-9._-]/ig, '');\n}\n\nexport function sanitizeIP(v) {\n return (v || '').replace(/[^a-z0-9.:_-]/ig, '');\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","// 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, \".delete-warning[data-v-11104fb6]{color:var(--error)}.remove-project-dialog[data-v-11104fb6]{border:1px solid var(--border);padding:10px;border-radius:5px}.remove-project-dialog .display-name[data-v-11104fb6]{font-weight:700}\", \"\"]);\n// Exports\nmodule.exports = exports;\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","// 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","\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 getPageByRow(rowId, getRowId = (x) => x) {\n const pos = this.filteredRows.map(getRowId).indexOf(rowId);\n\n if (pos === -1) {\n return null;\n }\n\n return Math.ceil(pos / this.perPage);\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","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 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 }","\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","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","/**\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","/** 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=11104fb6&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=11104fb6&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 \"11104fb6\",\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, \".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 }","\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}","/**\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","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","export { default as Banner } from './Banner.vue';\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","import SteveModel from '@shell/plugins/steve/steve-class';\nimport { CAPI } from '@shell/config/types';\nimport { BLANK_CLUSTER, QUERY_PARAMS } from '../types/capi';\n\nexport default class ClusterClass extends SteveModel {\n get _availableActions() {\n const out = super._availableActions;\n\n out.unshift({\n action: 'goToCreateCluster',\n label: this.t('action.createCluster'),\n icon: 'icon icon-plus',\n enabled: true\n });\n\n return out;\n }\n\n goToCreateCluster() {\n const escapedID = escape(this.id);\n const location = {\n name: 'c-cluster-product-resource-create',\n params: {\n cluster: BLANK_CLUSTER,\n product: 'manager',\n resource: CAPI.CAPI_CLUSTER\n },\n query: { [QUERY_PARAMS.CLASS]: escapedID }\n };\n\n this.currentRouter().push(location);\n }\n}\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","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or 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 a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol');\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 * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\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/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\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 an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","import isEmpty from 'lodash/isEmpty';\n\nexport function flowOutput(spec, getters, errors, validatorArgs) {\n const verifyLocal = validatorArgs.includes('verifyLocal');\n const localOutputRefs = spec.localOutputRefs || [];\n const globalOutputRefs = spec.globalOutputRefs || [];\n\n if (verifyLocal) {\n if (isEmpty(localOutputRefs) && isEmpty(globalOutputRefs)) {\n errors.push(getters['i18n/t']('validation.flowOutput.both'));\n }\n } else if (isEmpty(globalOutputRefs)) {\n errors.push(getters['i18n/t']('validation.flowOutput.global'));\n }\n}\n","import isEmpty from 'lodash/isEmpty';\r\n\r\nexport function logdna(value, getters, errors, validatorArgs) {\r\n if (isEmpty(value)) {\r\n return;\r\n }\r\n\r\n if (isEmpty(value.api_key)) {\r\n errors.push(getters['i18n/t']('validation.output.logdna.apiKey'));\r\n }\r\n}\r\n","import isEmpty from 'lodash/isEmpty';\nimport { validateDnsLabel, validateHostname } from '@shell/utils/validators';\n\nexport function servicePort(spec, getters, errors, validatorArgs) {\n const { ports, type: serviceType } = spec;\n\n if (serviceType === 'ExternalName') {\n return errors;\n }\n\n if (isEmpty(ports)) {\n errors.push(getters['i18n/t']('validation.required', { key: 'Port Rules' }));\n\n return errors;\n }\n\n ports.forEach((port, ind, ary) => {\n const {\n name,\n nodePort,\n port: pPort,\n targetPort,\n } = port;\n const idx = ind + 1;\n\n if (ary.length > 1 && isEmpty(name)) {\n errors.push(getters['i18n/t']('validation.service.ports.name.required', { position: idx }));\n }\n\n if (!isEmpty(name)) {\n const nameErrors = validateDnsLabel(name, 'name', getters, undefined, errors);\n\n if (!isEmpty(nameErrors)) {\n if (errors.length && errors.length > 0) {\n errors = [...errors, ...nameErrors];\n } else {\n errors = nameErrors;\n }\n }\n }\n\n if (nodePort) {\n const np = parseInt(nodePort, 10);\n\n if (isNaN(np)) {\n errors.push(getters['i18n/t']('validation.service.ports.nodePort.requiredInt', { position: idx }));\n }\n }\n\n if (pPort) {\n const p = parseInt(pPort, 10);\n\n if (isNaN(p)) {\n errors.push(getters['i18n/t']('validation.service.ports.port.requiredInt', { position: idx }));\n }\n } else {\n errors.push(getters['i18n/t']('validation.service.ports.port.required', { position: idx }));\n }\n\n if (targetPort) {\n const tpIanaDisplayKey = getters['i18n/t']('validation.service.ports.targetPort.ianaAt', { position: idx });\n const tp = parseInt(targetPort, 10);\n const tpTest = new RegExp('^\\\\d+$');\n const targetPortIsNumber = tpTest.test(targetPort);\n\n if (!targetPortIsNumber) { // not a number\n /* [rfc6335](https://tools.ietf.org/rfc/rfc6335.txt) port name (IANA_SVC_NAME)\n An alphanumeric (a-z, and 0-9) string, with a maximum length of 15 characters,\n with the '-' character allowed anywhere except the first or the last character or adjacent to another '-' character,\n it must contain at least a(a - z) character\n validateChars(str, { validChars: 'A-Za-z0-9_.-' }, displayKey, intl, errors); */\n const opts = {\n ianaServiceName: true,\n maxLength: 15,\n validChars: 'A-Za-z0-9-',\n };\n const isIanaServiceNameErrors = validateDnsLabel(targetPort, tpIanaDisplayKey, getters, opts, errors);\n\n if (!isEmpty(isIanaServiceNameErrors)) {\n errors.push(...isIanaServiceNameErrors);\n }\n } else if (tp < 1 || tp > 65535) {\n errors.push(getters['i18n/t']('validation.service.ports.targetPort.between', { position: idx }));\n }\n } else {\n errors.push(getters['i18n/t']('validation.service.ports.targetPort.required', { position: idx }));\n }\n });\n\n return errors;\n}\n\nexport function clusterIp(spec, getters, errors, validatorArgs) {\n /*\n clusterIP is the IP address of the service and is usually assigned randomly by the master.\n If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail.\n This field can not be changed through updates.\n Valid values are \\\"None\\\", empty string (\\\"\\\"), or a valid IP address. \\\"None\\\" can be specified for headless services when proxying is not required.\n Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName.\n More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n */\n const typesToCheck = ['ClusterIP', 'NodePort', 'LoadBalancer'];\n const serviceType = spec?.type;\n\n if (!typesToCheck.includes(serviceType)) {\n // validation only applies to services in the types to check\n return errors;\n }\n\n return errors;\n}\n\nexport function externalName(spec, getters, errors, validatorArgs) {\n /*\n externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service.\n No proxying will be involved.\n Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.\n */\n if (spec?.type === 'ExternalName') {\n if (isEmpty(spec?.externalName)) {\n errors.push(getters['i18n/t']('validation.service.externalName.none'));\n } else {\n const hostNameErrors = validateHostname(spec.externalName, 'ExternalName', getters, undefined, errors);\n\n if (!isEmpty(hostNameErrors)) {\n if (errors.length && errors.length > 0) {\n errors = [...errors, ...hostNameErrors];\n } else {\n errors = hostNameErrors;\n }\n }\n }\n }\n\n return errors;\n}\n","import has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\n\nexport function ruleGroups(spec, getters, errors, validatorArgs) {\n if (isEmpty(spec?.groups)) {\n errors.push(getters['i18n/t']('validation.prometheusRule.groups.required'));\n }\n\n return errors;\n}\n\nexport function groupsAreValid(groups = [], getters, errors, validatorArgs) {\n groups.forEach((group, groupIndex) => {\n const readableGroupIndex = groupIndex + 1; // oh that ol zero based array index....\n\n if (isEmpty(group?.name)) {\n errors.push(\n getters['i18n/t']('validation.prometheusRule.groups.valid.name', { index: readableGroupIndex })\n );\n }\n\n if (isEmpty(group?.rules)) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.singleEntry',\n { index: readableGroupIndex }\n )\n );\n } else {\n group.rules.forEach((rule, ruleIndex) => {\n const readableRuleIndex = ruleIndex + 1; // oh that ol zero based array index....\n\n if (has(rule, 'alert') && isEmpty(rule?.alert)) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.rule.alertName',\n { groupIndex: readableGroupIndex, ruleIndex: readableRuleIndex }\n )\n );\n } else if (has(rule, 'record') && isEmpty(rule?.record)) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.rule.recordName',\n { groupIndex: readableGroupIndex, ruleIndex: readableRuleIndex }\n )\n );\n }\n\n if ((has(rule, 'expr') && isEmpty(rule.expr)) || !has(rule, 'expr')) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.rule.expr',\n { groupIndex: readableGroupIndex, ruleIndex: readableRuleIndex }\n )\n );\n }\n\n if (has(rule, 'alert')) {\n if (\n (has(rule, 'labels') && isEmpty(rule.labels)) ||\n !has(rule, 'labels')\n ) {\n errors.push(\n getters['i18n/t'](\n 'validation.prometheusRule.groups.valid.rule.labels',\n { groupIndex: readableGroupIndex, ruleIndex: readableRuleIndex }\n )\n );\n }\n }\n });\n }\n });\n\n return errors;\n}\n","import isEmpty from 'lodash/isEmpty';\n\nexport function matching(spec, getters, errors, validatorArgs) {\n if (isEmpty(spec?.match) && isEmpty(spec?.['match_re'])) {\n errors.push(getters['i18n/t']('validation.monitoring.route.match'));\n }\n}\n\nexport function interval(value, getters, errors, validatorArgs, displayKey) {\n if (!/^\\d+[hms]$/.test(value)) {\n errors.push(getters['i18n/t']('validation.monitoring.route.interval', { key: displayKey }));\n }\n}\n","import { get } from '@shell/utils/object';\n\nexport function containerImages(spec, getters, errors) {\n let podSpec;\n\n if (spec.jobTemplate) {\n // cronjob pod template is nested slightly different than other types\n podSpec = get(spec, 'jobTemplate.spec.template.spec');\n } else {\n podSpec = get(spec, 'template.spec');\n }\n\n if (!podSpec.containers || !podSpec.containers.length) {\n errors.push(getters['i18n/t']('validation.required', { key: getters['i18n/t']('workload.container.titles.containers') }));\n\n return;\n }\n\n podSpec.containers.forEach((container) => {\n if (container && !container.image) {\n errors.push(getters['i18n/t']('workload.validation.containerImage', { name: container.name }));\n }\n });\n}\n","import cronstrue from 'cronstrue';\n\nexport function cronSchedule(schedule = '', getters, errors) {\n try {\n cronstrue.toString(schedule);\n } catch (e) {\n errors.push(getters['i18n/t']('validation.invalidCron'));\n }\n}\n","import { isEmpty } from '@shell/utils/object';\n\n// spec = podSpec.affinity\nexport function podAffinity(spec, getters, errors) {\n if (!spec) {\n return;\n }\n const { podAffinity, podAntiAffinity } = spec;\n\n // pod affinity\n if (podAffinity && !isEmpty(podAffinity)) {\n const { preferredDuringSchedulingIgnoredDuringExecution = [], requiredDuringSchedulingIgnoredDuringExecution = [] } = podAffinity;\n\n preferredDuringSchedulingIgnoredDuringExecution.forEach((term, i) => {\n const errorOpts = {\n index: i,\n group: getters['i18n/t']('validation.podAffinity.affinityTitle'),\n rules: getters['i18n/t']('validation.podAffinity.preferredDuringSchedulingIgnoredDuringExecution')\n };\n\n validateTermWeight(term, errorOpts, getters, errors);\n\n const { podAffinityTerm = {} } = term;\n\n validateTopologyKey(podAffinityTerm, errorOpts, getters, errors);\n validateLabelSelector(podAffinityTerm, errorOpts, getters, errors);\n });\n\n requiredDuringSchedulingIgnoredDuringExecution.forEach((term, i) => {\n const errorOpts = {\n index: i,\n group: getters['i18n/t']('validation.podAffinity.affinityTitle'),\n rules: getters['i18n/t']('validation.podAffinity.requiredDuringSchedulingIgnoredDuringExecution')\n };\n\n validateTopologyKey(term, errorOpts, getters, errors);\n validateLabelSelector(term, errorOpts, getters, errors);\n });\n }\n\n // pod antiaffinity\n if (podAntiAffinity && !isEmpty(podAntiAffinity)) {\n const { preferredDuringSchedulingIgnoredDuringExecution = [], requiredDuringSchedulingIgnoredDuringExecution = [] } = podAntiAffinity;\n\n preferredDuringSchedulingIgnoredDuringExecution.forEach((term, i) => {\n const errorOpts = {\n index: i,\n group: getters['i18n/t']('validation.podAffinity.antiAffinityTitle'),\n rules: getters['i18n/t']('validation.podAffinity.preferredDuringSchedulingIgnoredDuringExecution')\n };\n\n validateTermWeight(term, errorOpts, getters, errors);\n\n const { podAffinityTerm = {} } = term;\n\n validateTopologyKey(podAffinityTerm, errorOpts, getters, errors);\n\n validateLabelSelector(podAffinityTerm, errorOpts, getters, errors);\n });\n\n requiredDuringSchedulingIgnoredDuringExecution.forEach((term, i) => {\n const errorOpts = {\n index: i,\n group: getters['i18n/t']('validation.podAffinity.antiAffinityTitle'),\n rules: getters['i18n/t']('validation.podAffinity.requiredDuringSchedulingIgnoredDuringExecution')\n };\n\n validateTopologyKey(term, errorOpts, getters, errors);\n\n validateLabelSelector(term, errorOpts, getters, errors);\n });\n }\n}\n\n// verify weight (if present) is integer 1-100\nfunction validateTermWeight(affinityTerm, errorOpts, getters, errors) {\n const { weight = 1 } = affinityTerm;\n\n if (typeof weight !== 'number' || weight > 100 || weight < 1 ) {\n errors.push(getters['i18n/t']('validation.number.between', {\n key: getters['i18n/t']('workload.scheduling.matchExpressions.weight'),\n min: 1,\n max: 100,\n ...errorOpts\n }));\n }\n}\n\n// verify topology key is present and matches regexp for labels\nfunction validateTopologyKey(affinityTerm, errorOpts, getters, errors) {\n const { topologyKey } = affinityTerm;\n const regexp = RegExp('([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]');\n\n if (!topologyKey || !regexp.test(topologyKey)) {\n errors.push(getters['i18n/t']('validation.podAffinity.topologyKey', errorOpts));\n }\n}\n\n/*\n verify that each matchExpression in labelSelector:\n operator is one of ['In', 'NotIn', 'Exists', 'DoesNotExist']\n values is defined if operator is In or NotIn\n values is empty if operator is Exists or DoesNotExist\n */\nfunction validateLabelSelector(affinityTerm, errorOpts, getters, errors) {\n const validOperators = ['In', 'NotIn', 'Exists', 'DoesNotExist'];\n\n const { labelSelector } = affinityTerm;\n\n if (labelSelector && !isEmpty(labelSelector)) {\n const { matchExpressions = [] } = labelSelector;\n\n matchExpressions.forEach((rule, i) => {\n const { operator, values } = rule;\n\n if (!validOperators.includes(operator)) {\n errors.push(getters['i18n/t']('validation.podAffinity.matchExpressions.operator', errorOpts));\n }\n if (operator === 'In' || operator === 'NotIn') {\n if (!values || !values.length) {\n errors.push(getters['i18n/t']('validation.podAffinity.matchExpressions.valuesMustBeDefined', errorOpts));\n }\n } else if (values && values.length) {\n errors.push(getters['i18n/t']('validation.podAffinity.matchExpressions.valueMustBeEmpty', errorOpts));\n }\n });\n }\n}\n","import { RBAC } from '@shell/config/types';\r\nimport isEmpty from 'lodash/isEmpty';\r\n\r\nexport function roleTemplateRules(rules = [], getters, errors, validatorArgs = []) {\r\n if (rules.some((rule) => isEmpty(rule.verbs))) {\r\n errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingVerb'));\r\n }\r\n\r\n if (validatorArgs[0] === RBAC.ROLE) {\r\n if (rules.some((rule) => isEmpty(rule.resources))) {\r\n errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingResource'));\r\n }\r\n if (rules.some((rule) => isEmpty(rule.apiGroups))) {\r\n errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingApiGroup'));\r\n }\r\n } else if (rules.some((rule) => isEmpty(rule.resources) && isEmpty(rule.nonResourceURLs) && isEmpty(rule.apiGroups))) {\r\n errors.push(getters['i18n/t']('validation.roleTemplate.roleTemplateRules.missingOneResource'));\r\n }\r\n}\r\n","export function clusterName(pathValue, getters, errors, validatorArgs, displayKey) {\n const isRke2 = validatorArgs[0] === 'true'\n;\n\n if (isRke2) {\n if ((pathValue || '').match(/^(c-.{5}|local)$/i)) {\n errors.push(getters['i18n/t']('validation.cluster.name'));\n }\n }\n\n return errors;\n}\n","const httpsKeys = [\n 'server-url'\n];\n\nexport function isHttps(value, getters, errors, validatorArgs, displayKey) {\n const key = validatorArgs[0];\n\n if (httpsKeys.includes(key) && !value.toLowerCase().startsWith('https://')) {\n errors.push(getters['i18n/t']('validation.setting.serverUrl.https'));\n }\n\n return errors;\n}\n","import { flowOutput } from '@shell/utils/validators/flow-output';\nimport { logdna } from '@shell/utils/validators/logging-outputs';\nimport { clusterIp, externalName, servicePort } from '@shell/utils/validators/service';\nimport { ruleGroups, groupsAreValid } from '@shell/utils/validators/prometheusrule';\nimport { interval, matching } from '@shell/utils/validators/monitoring-route';\nimport { containerImages } from '@shell/utils/validators/container-images';\nimport { cronSchedule } from '@shell/utils/validators/cron-schedule';\nimport { podAffinity } from '@shell/utils/validators/pod-affinity';\nimport { roleTemplateRules } from '@shell/utils/validators/role-template';\nimport { clusterName } from '@shell/utils/validators/cluster-name';\nimport { isHttps } from '@shell/utils/validators/setting';\n\n/**\n* Custom validation functions beyond normal scalr types\n* Validator must export a function name should match the validator name on the customValidationRules rule\n* Exported function is used as a lookup key in resource-class:validationErrors:customValidationRules loop\n*/\nexport default {\n clusterName,\n clusterIp,\n externalName,\n flowOutput,\n groupsAreValid,\n logdna,\n ruleGroups,\n interval,\n servicePort,\n matching,\n containerImages,\n cronSchedule,\n podAffinity,\n roleTemplateRules,\n isHttps,\n};\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","import { ProductFunction } from './plugin';\nimport { RouteConfig, Location } from 'vue-router';\n\n// Cluster Provisioning types\nexport * from './types-provisioning';\n\n// package.json metadata\nexport interface PackageMetadata {\n name: string;\n version: string;\n description: string;\n icon: string;\n}\n\n// export interface Route {\n// name: string;\n// path: string;\n// component: Object | Function,\n// children: Route[];\n// }\n\nexport type VuexStoreObject = { [key: string]: any }\nexport type CoreStoreSpecifics = { state: () => VuexStoreObject, getters: VuexStoreObject, mutations: VuexStoreObject, actions: VuexStoreObject }\nexport type CoreStoreConfig = { namespace: string, baseUrl?: string, modelBaseClass?: string, supportsStream?: boolean, isClusterStore?: boolean }\nexport type CoreStoreInit = (store: any, ctx: any) => void;\nexport type RegisterStore = () => (store: any) => void\nexport type UnregisterStore = (store: any) => void\n\nexport type PluginRouteConfig = {parent?: string, route: RouteConfig}\n\nexport type OnEnterLeavePackageConfig = {\n clusterId: string,\n product: string,\n oldProduct: string,\n isExt: string,\n oldIsExt: string\n}\n\nexport type OnNavToPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise;\nexport type OnNavAwayFromPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise;\nexport type OnLogOut = (store: any) => Promise;\n\n/** Enum regarding the extensionable areas/places of the UI */\nexport enum ExtensionPoint {\n ACTION = 'Action', // eslint-disable-line no-unused-vars\n TAB = 'Tab', // eslint-disable-line no-unused-vars\n PANEL = 'Panel', // eslint-disable-line no-unused-vars\n CARD = 'Card', // eslint-disable-line no-unused-vars\n TABLE_COL = 'TableColumn', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding action locations that are extensionable in the UI */\nexport enum ActionLocation {\n HEADER = 'header-action', // eslint-disable-line no-unused-vars\n TABLE = 'table-action', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding panel locations that are extensionable in the UI */\nexport enum PanelLocation {\n DETAILS_MASTHEAD = 'details-masthead', // eslint-disable-line no-unused-vars\n DETAIL_TOP = 'detail-top', // eslint-disable-line no-unused-vars\n RESOURCE_LIST = 'resource-list', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding tab locations that are extensionable in the UI */\nexport enum TabLocation {\n RESOURCE_DETAIL = 'tab', // eslint-disable-line no-unused-vars\n CLUSTER_CREATE_RKE2 = 'cluster-create-rke2', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding card locations that are extensionable in the UI */\nexport enum CardLocation {\n CLUSTER_DASHBOARD_CARD = 'cluster-dashboard-card', // eslint-disable-line no-unused-vars\n}\n\n/** Enum regarding table col locations that are extensionable in the UI */\nexport enum TableColumnLocation {\n RESOURCE = 'resource-list', // eslint-disable-line no-unused-vars\n}\n\n/** Definition of the shortcut object (keyboard shortcuts) */\nexport type ShortCutKey = {\n windows?: string[];\n mac?: string[];\n};\n\n/** Definition of the action options (table actions) */\nexport type ActionOpts = {\n event: any;\n isAlt: boolean;\n action: any;\n};\n\n/** Definition of an extension action (options that can be passed when setting an extension action) */\nexport type Action = {\n label?: string;\n labelKey?: string;\n tooltipKey?: string;\n tooltip?: string;\n shortcut?: string | ShortCutKey;\n svg?: Function;\n icon?: string;\n multiple?: boolean;\n enabled?: Function | boolean;\n invoke: (opts: ActionOpts, resources: any[]) => void | boolean | Promise;\n};\n\n/** Definition of a panel (options that can be passed when defining an extension panel enhancement) */\nexport type Panel = {\n component: Function;\n};\n\n/** Definition of a card (options that can be passed when defining an extension card enhancement) */\nexport type Card = {\n label?: string;\n labelKey?: string;\n component: Function;\n};\n\nexport type TableColumn = any;\n\n/** Definition of a tab (options that can be passed when defining an extension tab enhancement) */\nexport type Tab = {\n name: string;\n label?: string;\n labelKey?: string;\n tooltipKey?: string;\n tooltip?: string;\n showHeader?: boolean;\n weight?: number;\n component: Function;\n};\n\n/** Definition of the locationConfig object (used in extensions) */\nexport type LocationConfig = {\n product?: string[],\n resource?: string[],\n namespace?: string[],\n cluster?: string[],\n id?: string[],\n mode?: string[],\n hash?: string[],\n /**\n * path match from URL (excludes host address)\n */\n path?: { [key: string]: string | boolean}[],\n /**\n * Query Params from URL\n */\n queryParam?: { [key: string]: string},\n /**\n * Context specific params.\n *\n * Components can provide additional context specific params that this value must match\n */\n context?: { [key: string]: string},\n};\n\nexport interface ProductOptions {\n /**\n * The category this product belongs under. i.e. 'config'\n */\n category?: string;\n\n /**\n * Hide the Copy KubeConfig button in the header\n */\n hideCopyConfig?: boolean;\n\n /**\n * Hide the Download KubeConfig button in the header\n */\n hideKubeConfig?: boolean;\n\n /**\n * Hide the Kubectl Shell button in the header\n */\n hideKubeShell?: boolean;\n\n /**\n * Hide the Namespace location\n */\n hideNamespaceLocation?: boolean;\n\n /**\n * Hide the system resources\n */\n\n hideSystemResources?: boolean;\n /**\n * The icon that should be displayed beside this item in the navigation.\n */\n icon?: string,\n\n /**\n * Only load the product if the feature is present\n */\n ifFeature?: string | RegExp;\n\n /**\n * Only load the product if the type is present\n */\n ifHave?: string;\n\n /**\n * Only load the product if the group is present\n */\n ifHaveGroup?: string | RegExp;\n\n /**\n * Only load the product if the type is present\n */\n ifHaveType?: string | RegExp;\n\n /**\n * The vuex store that this product should use by default i.e. 'management'\n */\n inStore?: string;\n\n /**\n * Show the cluster switcher in the navigation\n */\n showClusterSwitcher?: boolean;\n\n /**\n * Show the namespace filter in the header\n */\n showNamespaceFilter?: boolean;\n\n /**\n * A number used to determine where in navigation this item will be placed. The highest number will be at the top of the list.\n */\n weight?: number;\n\n /**\n * The route that the product will lead to if click on in navigation.\n */\n to?: Location;\n\n /**\n * Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.\n */\n // ifHaveVerb: string | RegExp;\n // removable: string;\n // showWorkspaceSwitcher: boolean;\n // supportRoute: string;\n // typeStoreMap: string;\n}\n\nexport interface HeaderOptions {\n /**\n * Name of the header. This should be unique.\n */\n name?: string;\n\n /**\n * A string that will show in the table column as a header\n */\n label?: string;\n\n /**\n * A translation key where the resulting string will show in the table column as a header\n */\n labelKey?: string;\n\n /**\n * A string which represents the path to access the value from the row object i.e. `row.meta.value`.\n */\n value?: string;\n\n /**\n * A string which represents the path to access the value from the row object which we'll use to sort i.e. `row.meta.value`\n */\n sort?: string | string[];\n\n /**\n * A string which represents the path to access the value from the row object which we'll use to search i.e. `row.meta.value`.\n * It can be false to disable searching on this field\n */\n search?: string | boolean;\n\n /**\n * Number of pixels the column should be in the table\n */\n width?: number;\n\n /**\n * The name of a custom formatter. The available formatters can bee seen in `@rancher/shell/components/formatter`\n */\n formatter?: string;\n\n /**\n * These options are dependent on the formatter that's chosen. Examples can be seen in `@rancher/shell/components/formatter` and `@rancher/shell/config/table-headers`\n */\n formatterOpts?: any;\n\n /**\n * Provide a function which accets a row and returns the value that should be displayed in the column\n * @param row This can be any value which represents the row\n * @returns Can return {@link string | number | null | undefined} to display in the column\n */\n getValue?: (row: any) => string | number | null | undefined;\n}\n\nexport interface ConfigureTypeOptions {\n /**\n * The resource can edit/show yaml\n */\n canYaml?: boolean;\n\n /**\n * Modify the way the name looks when displayed\n */\n displayName?: string;\n\n /**\n * New resources can be created of this type\n */\n isCreatable?: boolean;\n\n /**\n * Resources of this type can be deleted/removed\n */\n isRemovable?: boolean;\n\n /**\n * This type should be grouped by namespaces when displayed in a table\n */\n namespaced?: boolean;\n\n /**\n * Show the age column in when displaying this type in a table\n */\n showAge?: boolean;\n\n /**\n * Show the masthead at the top of the list view of this type\n */\n showListMasthead?: boolean;\n\n /**\n * Show the state column in when displaying this type in a table\n */\n showState?: boolean;\n\n /**\n * Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.\n */\n // alias\n // customRoute\n // customRoute\n // depaginate\n // graphConfig\n // hasGraph\n // isEditable\n // limit\n // listGroups\n // localOnly\n // location\n // match\n // realResource\n // resource\n // resourceDetail\n // resourceEdit\n // showConfigView\n}\n\nexport interface ConfigureVirtualTypeOptions extends ConfigureTypeOptions {\n /**\n * The translation key displayed anywhere this type is referenced\n */\n labelKey: string;\n\n /**\n * An identifier that should be unique across all types\n */\n name: string;\n\n /**\n * The route that this type should correspond to {@link PluginRouteConfig} {@link RouteConfig}\n */\n route: PluginRouteConfig | RouteConfig;\n}\n\nexport interface DSLReturnType {\n /**\n * Register multiple types by name and place them all in a group if desired. Primarily used for grouping things in the cluster explorer navigation.\n * @param types A list of types that are going to be registered\n * @param group Conditionally a group you want to places all the types in\n * @returns {@link void}\n */\n basicType: (types: string[], group?: string) => void;\n\n /**\n * Configure a myriad of options for the specified type\n * @param type The type to be configured\n * @param options {@link ConfigureTypeOptions}\n * @returns {@link void}\n */\n configureType: (type: string, options: ConfigureTypeOptions) => void;\n\n /**\n * Register the headers/columns that should be used when rendering a table for the specified type.\n * @param type The type you'd like to register headers/columns for.\n * @param headers {@link HeaderOptions[]}\n * @returns {@link void}\n */\n headers: (type: string, headers: HeaderOptions[]) => void;\n\n /**\n * Create and register a new product\n * @param options {@link ProductOptions}\n * @returns {@link void}\n */\n product: (options: ProductOptions) => void;\n\n /**\n * Create and label a group. The group will show up in navigation\n * @param groupNane Name of the group\n * @param label Label in navigation\n * @returns {@link void}\n */\n mapGroup: (groupName: string, label: string) => void;\n\n /**\n * Create and configure a myriad of options for a type\n * @param options {@link ConfigureVirtualTypeOptions}\n * @returns {@link void}\n */\n virtualType: (options: ConfigureVirtualTypeOptions) => void;\n\n /**\n * Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.\n */\n // componentForType: (type: string, replacementType: string)\n // groupBy: (type: string, field: string)\n // hideBulkActions: (type: string, field)\n // ignoreGroup: (regexOrString)\n // ignoreType: (regexOrString)\n //\n // mapType: (match, replace)\n // moveType: (match, group)\n // setGroupDefaultType: (input, defaultType)\n // spoofedType: (obj)\n // weightGroup: (input, weight, forBasic)\n // weightType: (input, weight, forBasic)\n}\n\n/**\n * Interface for a Dashboard plugin\n */\nexport interface IPlugin {\n /**\n * Add a product\n * @param importFn Function that will import the module containing a product definition\n */\n addProduct(importFn: ProductFunction): void;\n\n /**\n * Add a locale to the i18n store\n * @param locale Locale id (e.g. en-us)\n * @param label Label for the locale to be displayed in the i18n chooser\n */\n addLocale(locale: string, label: string): void;\n\n /**\n * Plugin metadata\n */\n metadata: PackageMetadata;\n\n /**\n * Validators used in the same manner as shell/utils/custom-validators\n */\n validators: {[key: string]: Function};\n\n /**\n * Add a module containing localisations for a specific locale\n */\n addL10n(locale: string, fn: Function): void;\n\n /**\n * Add a route to the Vue Router\n */\n addRoute(route: RouteConfig): void;\n addRoute(parent: string, route: RouteConfig): void;\n\n /**\n * Adds an action/button to the UI\n */\n addAction(where: ActionLocation | string, when: LocationConfig | string, action: Action): void;\n\n /**\n * Adds a tab to the UI (ResourceTabs component)\n */\n addTab(where: TabLocation | string, when: LocationConfig | string, action: Tab): void;\n\n /**\n * Adds a panel/component to the UI\n */\n addPanel(where: PanelLocation | string, when: LocationConfig | string, action: Panel): void;\n\n /**\n * Adds a card to the UI\n */\n addCard(where: CardLocation | string, when: LocationConfig | string, action: Card): void;\n\n /**\n * Adds a new column to the SortableTable component\n */\n addTableColumn(where: TableColumnLocation | string, when: LocationConfig | string, action: TableColumn): void;\n\n /**\n * Set the component to use for the landing home page\n * @param component Home page component\n */\n setHomePage(component: any): void;\n\n /**\n * Add routes to the Vue Router\n */\n addRoutes(routes: PluginRouteConfig[] | RouteConfig[]): void;\n\n /**\n * Add a hook to be called when the plugin is uninstalled\n * @param hook Function to call when the plugin is uninstalled\n */\n addUninstallHook(hook: Function): void;\n\n /**\n * Add a generic Vuex Store\n */\n addStore(storeName: string, register: RegisterStore, unregister: UnregisterStore): void;\n /**\n * Add a dashboard Vuex store.\n *\n * This will contain the toolset (getters/mutations/actions/etc) required by the dashboard to support Dashboard components. Most of these\n * will be automatically supplemented when the store is registered, others though will need to be provided to supply package specific\n * functionality (see storeSpecifics). For instance a component may request to fetch all of a resource type which, via a number of generic\n * actions, will eventually call a `request` action which will make the raw http request. This is a pkg specific feature so needs the\n * `request` action needs to be supplied in the `storeSpecifics`\n */\n addDashboardStore(storeName: string, storeSpecifics: CoreStoreSpecifics, config: CoreStoreConfig, init?: CoreStoreInit): void;\n\n /**\n * Add hooks that will execute when a user navigates\n * - to a route owned by this package\n * - from a route owned by this package\n */\n addNavHooks(\n onEnter?: OnNavToPackage,\n onLeave?: OnNavAwayFromPackage,\n onLogOut?: OnLogOut\n ): void;\n\n /**\n * Register 'something' that can be dynamically loaded - e.g. model, edit, create, list, i18n\n * @param {String} type type of thing to register, e.g. 'edit'\n * @param {String} name unique name of 'something'\n * @param {Function} fn function that dynamically loads the module for the thing being registered\n */\n register(type: string, name: string, fn: Function | Boolean): void;\n\n /**\n * Will return all of the configuration functions used for creating a new product.\n * @param store The store that was passed to the function that's passed to `plugin.addProduct(function)`\n * @param productName The name of the new product. This name is displayed in the navigation.\n */\n DSL(store: any, productName: string): DSLReturnType;\n}\n","var arrayEach = require('./_arrayEach'),\n baseCreate = require('./_baseCreate'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee'),\n getPrototype = require('./_getPrototype'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isTypedArray = require('./isTypedArray');\n\n/**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.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 * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\nfunction transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = baseIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n}\n\nmodule.exports = transform;\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var baseFlatten = require('./_baseFlatten');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n}\n\nmodule.exports = flattenDeep;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\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 * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\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 assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","import { RBAC } from '@shell/config/types';\nimport { HCI } from '@shell/config/labels-annotations';\nimport isEmpty from 'lodash/isEmpty';\nimport has from 'lodash/has';\n// import uniq from 'lodash/uniq';\nimport cronstrue from 'cronstrue';\nimport { Translation } from '@shell/types/t';\n\n// import uniq from 'lodash/uniq';\nexport type Validator = (val: any, arg?: any) => T;\n\nexport type ValidatorFactory = (arg1: any, arg2?: any) => Validator\n\ntype ServicePort = {\n name?: string,\n nodePort?: string | number,\n port?: string | number,\n targetPort?: string | number,\n idx: number\n}\n\nexport class Port {\n empty: boolean;\n int: number;\n string: string;\n isNumber: boolean;\n isInt: boolean;\n constructor(port: number | string | undefined) {\n this.string = String(port);\n this.int = parseInt(this.string, 10);\n this.empty = (!port && this.int !== 0);\n this.isNumber = !isNaN(this.int) && !this.string.includes('e'); // leaving out the exponent edge case to keep the logic simple and because port numbers aren't that big...\n this.isInt = this.isNumber && !this.string.includes('.');\n }\n}\n\nconst httpsKeys = [\n 'server-url'\n];\n\nconst runValidators = (val: any, validators: Validator[]) => {\n for (const validator of validators) {\n const message = validator(val);\n\n if (message) {\n return message;\n }\n }\n};\n\nexport interface ValidationOptions {\n key?: string,\n}\n\n// \"t\" is the function name we use for getting a translated string\nexport default function(t: Translation, { key = 'Value' }: ValidationOptions): { [key:string]: Validator | ValidatorFactory } {\n // utility validators these validators only get used by other validators\n const startDot: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1) === '.' ? t(`validation.dns.${ label }.startDot`, { key }) : undefined;\n\n const endDot = (label: string): Validator => (val: string) => val?.slice(-1) === '.' ? t(`validation.dns.${ label }.endDot`, { key }) : undefined;\n\n const startNumber: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1)?.match(/[0-9]/) ? t(`validation.dns.${ label }.startNumber`, { key }) : undefined;\n\n const startHyphen: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(0, 1) === '-' ? t(`validation.dns.${ label }.startHyphen`, { key }) : undefined;\n\n const endHyphen: ValidatorFactory = (label: string): Validator => (val: string) => val?.slice(-1) === '-' ? t(`validation.dns.${ label }.endHyphen`, { key }) : undefined;\n\n const minValue: ValidatorFactory = (min: string) => (val: string | number) => Number(val) < Number(min) ? t('validation.minValue', { key, min }) : undefined;\n\n const maxValue: ValidatorFactory = (max: string) => (val: string | number) => Number(val) > Number(max) ? t('validation.maxValue', { key, max }) : undefined;\n\n const betweenValues: ValidatorFactory = ([min, max]: string[]) => (val: string | number) => minValue(min)(val) || maxValue(max)(val) ? t('validation.betweenValues', {\n key, min, max\n }) : undefined;\n\n const minLength: ValidatorFactory = (min: string) => (val: string) => val.length < Number(min) ? t('validation.minLength', { key, min }) : undefined;\n\n const maxLength: ValidatorFactory = (max: string) => (val: string) => val.length > Number(max) ? t('validation.maxLength', { key, max }) : undefined;\n\n const betweenLengths: ValidatorFactory = ([min, max]: string[]) => (val: string) => minLength(min)(val) || maxLength(max)(val) ? t('validation.betweenLengths', {\n key, min, max\n }) : undefined;\n\n const requiredInt: Validator = (val: string) => isNaN(parseInt(val, 10)) ? t('validation.number.requiredInt', { key }) : undefined;\n\n const isInteger: Validator = (val: string | number) => !Number.isInteger(+val) || `${ val }`.match(/\\.+/g) ? t('validation.number.requiredInt', { key }) : undefined;\n\n const isPositive: Validator = (val: string | number) => +val < 0 ? t('validation.number.isPositive', { key }) : undefined;\n\n const isOctal: Validator = (val: string | number) => {\n const valueString = `${ val }`;\n const isValid = valueString.match(/(^0+)(.+)/);\n\n return isValid ? t('validation.number.isOctal', { key }) : undefined;\n };\n\n const portNumber: Validator = (val: string) => parseInt(val, 10) < 1 || parseInt(val, 10) > 65535 ? t('validation.number.between', {\n key, min: '1', max: '65535'\n }) : undefined;\n\n const dnsChars: Validator = (val: string) => {\n const matchedChars = val?.match(/[^${'A-Za-z0-9-'}]/g);\n\n if (matchedChars) {\n return t('validation.chars', {\n key, count: matchedChars.length, chars: matchedChars.map((char) => char === ' ' ? 'Space' : `\"${ char }\"`).join(', ')\n });\n }\n\n return undefined;\n };\n\n // the weird edge case here deals with internationalized domain names which are prepended with 'xn--'\n // https://datatracker.ietf.org/doc/html/rfc5891#section-4.2.3.1\n const dnsDoubleDash: Validator = (val: string) => (val?.substr(2, 2) === '--' && val?.substr(0, 2) !== 'xn') ? t(`validation.dns.doubleHyphen`, { key }) : undefined;\n\n const dnsIanaServiceNameDoubleDash: Validator = (val: string) => (val?.substr(2, 2) === '--' && val?.substr(0, 2) !== 'xn') ? t(`validation.dns.doubleHyphen`, { key }) : undefined;\n\n const dnsEmpty: ValidatorFactory = (label: string): Validator => (val = '') => val.length === 0 ? t(`validation.dns.${ label }.emptyLabel`, { key, min: 1 }) : undefined;\n\n const dnsTooLong: ValidatorFactory = (label: string, length = 63): Validator => (val = '') => val.length > length ? t(`validation.dns.${ label }.tooLongLabel`, { key, max: length }) : undefined;\n\n // eslint-disable-next-line no-unused-vars\n const hostnameEmpty: Validator = (val = '') => val.length === 0 ? t('validation.dns.hostname.empty', { key }) : undefined;\n\n const hostnameTooLong: Validator = (val = '') => val.length > 253 ? t('validation.dns.hostname.tooLong', { key, max: 253 }) : undefined;\n\n const absolutePath: Validator = (val = '') => val[0] !== '/' && val.length > 0 ? t('validation.path', { key }) : undefined;\n\n const required: Validator = (val: any) => !val && val !== false ? t('validation.required', { key }) : undefined;\n\n const noUpperCase: Validator = (val = '') => val.toLowerCase() !== val ? t('validation.noUpperCase', { key }) : undefined;\n\n const cronSchedule: Validator = (val: string) => {\n try {\n cronstrue.toString(val);\n } catch (e) {\n return t('validation.invalidCron');\n }\n };\n\n const isHttps: ValidatorFactory = (key: string) => {\n const isHttps: Validator = (val: string) => httpsKeys.includes(key) && !val.toLowerCase().startsWith('https://') ? t('validation.setting.serverUrl.https') : undefined;\n\n return isHttps;\n };\n\n const interval: Validator = (val: string) => !/^\\d+[hms]$/.test(val) ? t('validation.monitoring.route.interval', { key }) : undefined;\n\n const containerImage: Validator = (val: any) => !val?.image ? t('workload.validation.containerImage', { name: val.name }) : undefined;\n\n const containerImages: Validator = (val: any | [any]) => {\n const containers = val.jobTemplate ? val?.jobTemplate?.spec?.template?.spec?.containers : val?.template?.spec?.containers;\n\n if (!containers || !containers.length) {\n return t('validation.required', { key: t('workload.container.titles.containers') });\n }\n\n // making sure each container has an image name\n return containers.map((container: any) => containerImage(container)).find((containerError: string) => containerError);\n };\n\n const dnsLabel: Validator = (val: string) => {\n const validators = [\n dnsChars,\n startHyphen('label'),\n endHyphen('label'),\n dnsDoubleDash,\n // dnsEmpty('label'), // questionable as to if this is needed if the field is also required...\n dnsTooLong('label')\n ];\n\n return runValidators(val, validators);\n };\n\n const dnsLabelIanaServiceName: Validator = (val: string) => {\n const validators = [\n dnsChars,\n startHyphen('label'),\n endHyphen('label'),\n dnsIanaServiceNameDoubleDash,\n dnsEmpty('label'), // questionable as to if this is needed if the field is also required...\n dnsTooLong('label', 15)\n ];\n\n return runValidators(val, validators);\n };\n\n const dnsLabelRestricted: Validator = (val: string) => {\n const validators = [\n dnsChars,\n startNumber('label'),\n startHyphen('label'),\n endHyphen('label'),\n dnsDoubleDash,\n dnsEmpty('label'), // questionable as to if this is needed if the field is also required...\n dnsTooLong('label')\n ];\n\n return runValidators(val, validators);\n };\n\n const hostname: Validator = (val: string) => {\n if (val) {\n const validators = [\n startDot('hostname'),\n hostnameTooLong,\n endDot('hostname')\n ];\n\n const hostNameMessage = runValidators(val, validators);\n\n if (hostNameMessage) {\n return hostNameMessage;\n }\n\n const labels = val.split('.');\n const labelValidators = [\n dnsChars,\n startHyphen('hostname'),\n endHyphen('hostname'),\n dnsDoubleDash,\n dnsEmpty('hostname'),\n dnsTooLong('hostname')\n ];\n\n for ( let i = 0; i < labels.length; i++ ) {\n const labelMessage = runValidators(labels[i], labelValidators);\n\n if (labelMessage) {\n return labelMessage;\n }\n }\n }\n };\n\n const wildcardHostname: Validator = (val: string) => {\n // allow wildcard in first part of hostname\n val = val ? val.replace(/^\\*\\./, '') : val;\n\n return hostname(val);\n };\n\n const externalName: Validator = (val: string) => {\n if (isEmpty(val)) {\n return t('validation.service.externalName.none');\n } else {\n return hostname(val);\n }\n };\n\n const testRule = (val: string | undefined) => {\n return 'This is an error returned by the testRule validator';\n };\n\n const ruleGroups: Validator = (val: {groups?: any}) => isEmpty(val?.groups) ? t('validation.prometheusRule.groups.required') : undefined;\n\n const clusterName: ValidatorFactory = (isRke2: boolean): Validator => (val: string | undefined) => isRke2 && (val || '')?.match(/^(c-.{5}|local)$/i) ? t('validation.cluster.name') : undefined;\n\n const servicePort: Validator = (val: ServicePort) => {\n const {\n name,\n idx\n } = val;\n\n const nodePort = new Port(val.nodePort);\n const listeningPort = new Port(val.port);\n const targetPort = new Port(val.targetPort);\n\n if (isEmpty(name)) {\n return t('validation.service.ports.name.required', { position: idx + 1 });\n }\n\n if (!nodePort.empty) {\n if (!nodePort.isInt) {\n return t('validation.service.ports.nodePort.requiredInt', { position: idx + 1 });\n } else if (nodePort.int < 1 || nodePort.int > 65535) {\n return t('validation.service.ports.nodePort.between', { position: idx + 1 });\n }\n }\n\n if (!listeningPort.empty) {\n if (!listeningPort.isInt) {\n return t('validation.service.ports.port.requiredInt', { position: idx + 1 });\n } else if (listeningPort.int < 1 || listeningPort.int > 65535) {\n return t('validation.service.ports.port.between', { position: idx + 1 });\n } else if (listeningPort.string?.includes('.')) {\n return listeningPort;\n }\n } else {\n return t('validation.service.ports.port.required', { position: idx + 1 });\n }\n\n if (!targetPort.empty) {\n if (!targetPort.isInt) {\n const ianaServiceNameErrors = dnsLabelIanaServiceName(targetPort.string);\n\n if (ianaServiceNameErrors) {\n return ianaServiceNameErrors;\n }\n } else if (targetPort.int < 1 || targetPort.int > 65535) {\n return t('validation.service.ports.targetPort.between', { position: idx + 1 });\n }\n } else {\n return t('validation.service.ports.targetPort.required', { position: idx + 1 });\n }\n\n return undefined;\n };\n\n const groupIsValid: Validator = (val, readableIndex) => {\n let returnMessage: string | undefined;\n\n if (isEmpty(val?.name)) {\n return t('validation.prometheusRule.groups.valid.name', { index: readableIndex });\n }\n\n if (isEmpty(val.rules)) {\n return t('validation.prometheusRule.groups.valid.singleEntry', { index: readableIndex });\n } else {\n val.rules.forEach((rule: any, idx: number) => {\n const readableRuleIndex = idx + 1;\n\n if (has(rule, 'alert') && isEmpty(rule?.alert) && !returnMessage) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.alertName', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n } else if (has(rule, 'record') && isEmpty(rule?.record)) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.recordName', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n }\n\n if ((has(rule, 'expr') && isEmpty(rule.expr) && !returnMessage) || (!has(rule, 'expr') && !returnMessage)) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.expr', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n }\n\n if (has(rule, 'alert')) {\n if (\n (has(rule, 'labels') && isEmpty(rule.labels) && !returnMessage) ||\n (!has(rule, 'labels') && !returnMessage)\n ) {\n returnMessage = t('validation.prometheusRule.groups.valid.rule.labels', { groupIndex: readableIndex, ruleIndex: readableRuleIndex });\n }\n }\n });\n }\n\n return returnMessage;\n };\n\n const groupsAreValid: Validator = (val) => {\n const groups = [...val]; // making a new array in the function because I'm gonna mutate it later...\n let message;\n\n groups.forEach((group, idx, arr) => {\n message = groupIsValid(group, idx + 1);\n if (!!message) {\n arr.length = idx + 1; // this is a tricksy way of breaking a forEach loop since we just want the first message\n }\n });\n\n return message;\n };\n\n const matching: Validator = (val) => {\n if (isEmpty(val?.match) && isEmpty(val?.['match_re'])) {\n return t('validation.monitoring.route.match');\n }\n };\n\n const roleTemplateRules: ValidatorFactory = (type): Validator => (val = []) => {\n if (val.some((rule: any) => isEmpty(rule.verbs))) {\n return t('validation.roleTemplate.roleTemplateRules.missingVerb');\n }\n\n if (type === RBAC.ROLE) {\n if (val.some((rule: any) => isEmpty(rule.resources))) {\n return t('validation.roleTemplate.roleTemplateRules.missingResource');\n }\n\n if (val.some((rule: any) => isEmpty(rule.apiGroups))) {\n return t('validation.roleTemplate.roleTemplateRules.missingApiGroup');\n }\n } else if (val.some((rule: any) => isEmpty(rule.resources) && isEmpty(rule.nonResourceURLs) && isEmpty(rule.apiGroups))) {\n return t('validation.roleTemplate.roleTemplateRules.missingOneResource');\n }\n\n return undefined;\n };\n\n // The existing validator for clusterIp never actually returns an error\n const clusterIp: Validator = (val) => undefined;\n\n const backupTarget: Validator = (val) => {\n const parseValue = JSON.parse(val);\n const type = parseValue.type;\n\n if (!type) {\n return t('validation.required', { key: 'Type' });\n }\n\n if (type === 's3') {\n if (!parseValue.accessKeyId) {\n return t('validation.required', { key: 'accessKeyId' });\n }\n\n if (!parseValue.secretAccessKey) {\n return t('validation.required', { key: 'secretAccessKey' });\n }\n\n if (!parseValue.bucketRegion) {\n return t('validation.required', { key: 'bucketRegion' });\n }\n\n if (!parseValue.bucketName) {\n return t('validation.required', { key: 'bucketName' });\n }\n }\n\n return undefined;\n };\n\n const imageUrl: Validator = (val) => {\n const VM_IMAGE_FILE_FORMAT = ['qcow', 'qcow2', 'raw', 'img', 'iso'];\n\n if (!val || val === '') {\n return undefined;\n }\n\n const urlSlug = val.split('/').pop();\n const fileExtension = urlSlug.split('.').pop().toLowerCase();\n\n if (!VM_IMAGE_FILE_FORMAT.includes(fileExtension)) {\n return t('harvester.validation.image.ruleTip');\n }\n\n return undefined;\n };\n\n const fileRequired: Validator = (val = {}) => {\n if (!val[HCI.IMAGE_NAME]) {\n return t('validation.required', { key: t('harvester.image.fileName') });\n }\n };\n\n const subDomain: Validator = (val) => {\n const matchedChars = val?.match(/[^a-z0-9.-]/g);\n\n if (matchedChars) {\n return t('validation.chars', {\n key, count: matchedChars.length, chars: matchedChars.map((char: string) => char === ' ' ? 'Space' : `\"${ char }\"`).join(', ')\n });\n }\n\n return runValidators(val, [startHyphen('label'), endHyphen('label'), startDot('label'), endDot('label'), required]);\n };\n\n return {\n absolutePath,\n backupTarget,\n betweenLengths,\n betweenValues,\n clusterIp,\n clusterName,\n containerImage,\n containerImages,\n cronSchedule,\n dnsLabel,\n dnsLabelIanaServiceName,\n dnsLabelRestricted,\n externalName,\n fileRequired,\n groupsAreValid,\n hostname,\n imageUrl,\n interval,\n isHttps,\n matching,\n maxLength,\n maxValue,\n minLength,\n minValue,\n noUpperCase,\n portNumber,\n required,\n requiredInt,\n isInteger,\n isPositive,\n isOctal,\n roleTemplateRules,\n ruleGroups,\n servicePort,\n subDomain,\n testRule,\n wildcardHostname,\n };\n}\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\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 mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__7838__;","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[[_vm._v(\" \"+_vm._s(_vm.t('promptRemove.attemptingToRemove', { type: _vm.type }))+\" \"),_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.resourceNames(_vm.names, _vm.plusMore, _vm.t)),expression:\"resourceNames(names, plusMore, t)\"}]})],(_vm.info)?_c('div',{staticClass:\"text info mb-10 mt-20\"},[_c('span',{directives:[{name:\"clean-html\",rawName:\"v-clean-html\",value:(_vm.info),expression:\"info\"}]})]):_vm._e(),(_vm.warning)?_c('div',{staticClass:\"text-warning mb-10 mt-20\"},[_vm._v(\" \"+_vm._s(_vm.warning)+\" \")]):_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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!./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\n const labelDisplay = highlightLabel(label, 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, 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 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","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!./index.vue?vue&type=style&index=0&id=3b0138b8&prod&lang=scss&scoped=true&\"","export const CAPI_PRODUCT_NAME = 'capi-turtles';\n\nexport const QUERY_PARAMS = { CLASS: 'class' };\n\nexport const BLANK_CLUSTER = '_';\n\nexport const LABELS = { AUTO_IMPORT: 'cluster-api.cattle.io/rancher-auto-import' };\n\nexport const CAPI = {\n CLUSTER_CLASS: 'cluster.x-k8s.io.clusterclass',\n PROVIDER: 'operator.cluster.x-k8s.io.infrastructureprovider',\n};\n\nexport const CP_VERSIONS = {\n 'kubekey-k3s': ['k3s1', 'k3s2'],\n rke2: ['rke2r1', 'rke2r2']\n};\n\nexport const CREDENTIALS_UPDATE_REQUIRED = ['aks'];\nexport const CREDENTIALS_NOT_REQUIRED = ['docker'];\nexport interface Worker {\n name: String,\n class: String\n}\n\nexport interface CAPIClusterTopology {\n version: String,\n class: String,\n workers: {\n machineDeployments: Worker[],\n machinePools: Worker[]\n }\n}\nexport interface CAPIClusterCPEndpoint {\n host: String,\n port: Number\n}\n\nexport interface CAPIClusterNetwork {\n apiServerPort?: Number,\n pods?: {\n cidrBlocks: String[]\n },\n serviceDomain?: String,\n services?: {\n cidrBlocks: String[]\n },\n}\n\nexport interface ClusterClass {\n metadata: {\n name: string,\n namespace: string,\n annotations?: {[key: string]: string}\n },\n spec: {\n infrastructure: Object,\n workers: Object,\n controlPlane: Object\n }\n}\n","import SteveModel from '@shell/plugins/steve/steve-class';\nimport { CAPI } from '@shell/config/types';\nimport { BLANK_CLUSTER, QUERY_PARAMS } from '../types/capi';\n\nexport class infraProvider extends SteveModel {\n // get _availableActions() {\n // const out = super._availableActions;\n\n // out.unshift({\n // action: 'goToCreateCluster',\n // label: 'action.createCluster',\n // icon: 'icon icon-copy',\n // enabled: true\n // });\n\n // return out;\n // }\n\n canYaml() {\n return false;\n }\n\n // goToCreateCluster() {\n // const escapedID = escape(this.id);\n // const location = {\n // name: 'c-cluster-manager-resource-create',\n // params: {\n // cluster: BLANK_CLUSTER,\n // resource: CAPI.CAPI_CLUSTER\n // },\n // query: { [QUERY_PARAMS.CLASS]: escapedID }\n // };\n\n // this.currentRouter().push(location);\n // }\n}\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n basePickBy = require('./_basePickBy'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n}\n\nmodule.exports = pickBy;\n","var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseUniq = require('./_baseUniq');\n\n/**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\nfunction baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n}\n\nmodule.exports = baseXor;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\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