dashboard-shell-shell 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1644) hide show
  1. package/.DS_Store +0 -0
  2. package/assets/brand/csp/dark/rancher-logo.svg +148 -0
  3. package/assets/brand/csp/favicon.png +0 -0
  4. package/assets/brand/csp/metadata.json +3 -0
  5. package/assets/brand/csp/rancher-logo.svg +130 -0
  6. package/assets/brand/federal/dark/rancher-logo.svg +104 -0
  7. package/assets/brand/federal/metadata.json +3 -0
  8. package/assets/brand/federal/rancher-logo.svg +1 -0
  9. package/assets/brand/harvester/favicon.png +0 -0
  10. package/assets/brand/harvester/metadata.json +3 -0
  11. package/assets/brand/rgs/dark/rancher-logo.svg +1 -0
  12. package/assets/brand/rgs/metadata.json +3 -0
  13. package/assets/brand/rgs/rancher-logo.svg +1 -0
  14. package/assets/brand/suse/dark/rancher-logo.svg +1 -0
  15. package/assets/brand/suse/favicon.png +0 -0
  16. package/assets/brand/suse/metadata.json +3 -0
  17. package/assets/brand/suse/rancher-logo.svg +1 -0
  18. package/assets/data/aws-regions.json +39 -0
  19. package/assets/data/ec2-instance-groups.json +85 -0
  20. package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
  21. package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
  22. package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
  23. package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
  24. package/assets/fonts/poppins/poppins-v15-latin-300.woff +0 -0
  25. package/assets/fonts/poppins/poppins-v15-latin-300.woff2 +0 -0
  26. package/assets/fonts/poppins/poppins-v15-latin-500.woff +0 -0
  27. package/assets/fonts/poppins/poppins-v15-latin-500.woff2 +0 -0
  28. package/assets/fonts/roboto-mono/roboto-mono-v13-latin-regular.woff +0 -0
  29. package/assets/fonts/roboto-mono/roboto-mono-v13-latin-regular.woff2 +0 -0
  30. package/assets/icons/demo.css +539 -0
  31. package/assets/icons/demo_index.html +1131 -0
  32. package/assets/icons/iconfont.css +216 -0
  33. package/assets/icons/iconfont.js +1 -0
  34. package/assets/icons/iconfont.json +324 -0
  35. package/assets/icons/iconfont.ttf +0 -0
  36. package/assets/icons/iconfont.woff +0 -0
  37. package/assets/icons/iconfont.woff2 +0 -0
  38. package/assets/images/API.svg +3 -0
  39. package/assets/images/featured/img1.jpg +0 -0
  40. package/assets/images/featured.jpg +0 -0
  41. package/assets/images/field-valid.svg +16 -0
  42. package/assets/images/generic-catalog.svg +15 -0
  43. package/assets/images/generic-driver.svg +17 -0
  44. package/assets/images/generic-plugin.svg +1 -0
  45. package/assets/images/login/password.svg +20 -0
  46. package/assets/images/login/user.svg +6 -0
  47. package/assets/images/login-bg.png +0 -0
  48. package/assets/images/login-left.png +0 -0
  49. package/assets/images/login-logo.svg +19 -0
  50. package/assets/images/logo.png +0 -0
  51. package/assets/images/pl/README.md +13 -0
  52. package/assets/images/pl/banner.svg +241 -0
  53. package/assets/images/pl/dark/banner.svg +242 -0
  54. package/assets/images/pl/dark/login-landscape.svg +291 -0
  55. package/assets/images/pl/dark/rancher-logo.svg +51 -0
  56. package/assets/images/pl/decoration-cloud-big-white.svg +1 -0
  57. package/assets/images/pl/decoration-ground.svg +1 -0
  58. package/assets/images/pl/error-desert-landscape.svg +217 -0
  59. package/assets/images/pl/half-logo.svg +2 -0
  60. package/assets/images/pl/harvester.png +0 -0
  61. package/assets/images/pl/harvester.svg +1 -0
  62. package/assets/images/pl/login-landscape.svg +496 -0
  63. package/assets/images/pl/rancher-logo.svg +51 -0
  64. package/assets/images/pl/setup-step-one.svg +612 -0
  65. package/assets/images/pl/sunglasses.svg +20 -0
  66. package/assets/images/promp-yellow.svg +5 -0
  67. package/assets/images/providers/aliyun-black.svg +14 -0
  68. package/assets/images/providers/aliyun.svg +17 -0
  69. package/assets/images/providers/aliyunecs-black.svg +13 -0
  70. package/assets/images/providers/aliyunecs.svg +21 -0
  71. package/assets/images/providers/amazonec2-black.svg +8 -0
  72. package/assets/images/providers/amazonec2.svg +19 -0
  73. package/assets/images/providers/amazoneks-black.svg +10 -0
  74. package/assets/images/providers/amazoneks.svg +14 -0
  75. package/assets/images/providers/aws.svg +38 -0
  76. package/assets/images/providers/azure-black.svg +29 -0
  77. package/assets/images/providers/azure.svg +32 -0
  78. package/assets/images/providers/azuread-black.svg +22 -0
  79. package/assets/images/providers/azuread.svg +25 -0
  80. package/assets/images/providers/azureaks-black.svg +28 -0
  81. package/assets/images/providers/azureaks.svg +31 -0
  82. package/assets/images/providers/baidu-black.svg +19 -0
  83. package/assets/images/providers/baidu.svg +25 -0
  84. package/assets/images/providers/cloudca-black.svg +45 -0
  85. package/assets/images/providers/cloudca.svg +49 -0
  86. package/assets/images/providers/cloudscale-black.svg +24 -0
  87. package/assets/images/providers/cloudscale.svg +28 -0
  88. package/assets/images/providers/custom.svg +85 -0
  89. package/assets/images/providers/digitalocean-black.svg +21 -0
  90. package/assets/images/providers/digitalocean.svg +24 -0
  91. package/assets/images/providers/equinix-black.svg +13 -0
  92. package/assets/images/providers/equinix.svg +13 -0
  93. package/assets/images/providers/exoscale.svg +1 -0
  94. package/assets/images/providers/gcp.svg +6 -0
  95. package/assets/images/providers/gke-black.svg +10 -0
  96. package/assets/images/providers/gke.svg +28 -0
  97. package/assets/images/providers/google.svg +29 -0
  98. package/assets/images/providers/googlegke-black.svg +10 -0
  99. package/assets/images/providers/googlegke.svg +28 -0
  100. package/assets/images/providers/harvester.svg +1 -0
  101. package/assets/images/providers/huaweicce-black.svg +109 -0
  102. package/assets/images/providers/huaweicce.svg +184 -0
  103. package/assets/images/providers/import.svg +99 -0
  104. package/assets/images/providers/k3s-black.svg +10 -0
  105. package/assets/images/providers/k3s.svg +15 -0
  106. package/assets/images/providers/kubernetes-black.svg +37 -0
  107. package/assets/images/providers/kubernetes.svg +99 -0
  108. package/assets/images/providers/linode.svg +54 -0
  109. package/assets/images/providers/linodelke-black.svg +40 -0
  110. package/assets/images/providers/linodelke.svg +54 -0
  111. package/assets/images/providers/local-cluster.svg +20 -0
  112. package/assets/images/providers/minikube-black.svg +25 -0
  113. package/assets/images/providers/minikube.svg +36 -0
  114. package/assets/images/providers/nutanix.svg +12 -0
  115. package/assets/images/providers/oci-black.svg +41 -0
  116. package/assets/images/providers/oci.svg +44 -0
  117. package/assets/images/providers/openstack-black.svg +16 -0
  118. package/assets/images/providers/openstack.svg +20 -0
  119. package/assets/images/providers/oracle.svg +66 -0
  120. package/assets/images/providers/oracleoke-black.svg +51 -0
  121. package/assets/images/providers/oracleoke.svg +55 -0
  122. package/assets/images/providers/otc-black.svg +15 -0
  123. package/assets/images/providers/otc.svg +33 -0
  124. package/assets/images/providers/otccce.svg +33 -0
  125. package/assets/images/providers/outscale.svg +19 -0
  126. package/assets/images/providers/ovhcloudmks.svg +122 -0
  127. package/assets/images/providers/ovhcloudpubliccloud.svg +122 -0
  128. package/assets/images/providers/packet-black.svg +15 -0
  129. package/assets/images/providers/packet.svg +16 -0
  130. package/assets/images/providers/pinganyunecs-black.svg +26 -0
  131. package/assets/images/providers/pinganyunecs.svg +26 -0
  132. package/assets/images/providers/pnap-black.svg +43 -0
  133. package/assets/images/providers/pnap.svg +48 -0
  134. package/assets/images/providers/rackspace-black.svg +14 -0
  135. package/assets/images/providers/rackspace.svg +18 -0
  136. package/assets/images/providers/rke.svg +26 -0
  137. package/assets/images/providers/rke2.svg +26 -0
  138. package/assets/images/providers/softlayer.svg +27 -0
  139. package/assets/images/providers/tencenttke-black.svg +22 -0
  140. package/assets/images/providers/tencenttke.svg +39 -0
  141. package/assets/images/providers/vmwarevsphere-black.svg +60 -0
  142. package/assets/images/providers/vmwarevsphere.svg +51 -0
  143. package/assets/images/user.png +0 -0
  144. package/assets/images/vendor/activedirectory.svg +20 -0
  145. package/assets/images/vendor/adfs.svg +19 -0
  146. package/assets/images/vendor/azuread.svg +18 -0
  147. package/assets/images/vendor/custom.svg +42 -0
  148. package/assets/images/vendor/email.svg +22 -0
  149. package/assets/images/vendor/freeipa.svg +26 -0
  150. package/assets/images/vendor/github.svg +13 -0
  151. package/assets/images/vendor/googleoauth.svg +9 -0
  152. package/assets/images/vendor/grafana.svg +48 -0
  153. package/assets/images/vendor/jaeger.svg +1 -0
  154. package/assets/images/vendor/keycloak.svg +30 -0
  155. package/assets/images/vendor/kiali.svg +23 -0
  156. package/assets/images/vendor/linux.svg +23 -0
  157. package/assets/images/vendor/longhorn.svg +25 -0
  158. package/assets/images/vendor/neuvector.svg +1 -0
  159. package/assets/images/vendor/okta.svg +31 -0
  160. package/assets/images/vendor/openid.svg +18 -0
  161. package/assets/images/vendor/openldap.svg +34 -0
  162. package/assets/images/vendor/pagerduty.svg +26 -0
  163. package/assets/images/vendor/ping.svg +58 -0
  164. package/assets/images/vendor/prometheus.svg +14 -0
  165. package/assets/images/vendor/shibboleth.svg +481 -0
  166. package/assets/images/vendor/slack.svg +38 -0
  167. package/assets/images/vendor/webhook.svg +23 -0
  168. package/assets/images/vendor/windows.svg +13 -0
  169. package/assets/images/wechat-qr-code.jpg +0 -0
  170. package/assets/styles/all.scss +63 -0
  171. package/assets/styles/app.scss +36 -0
  172. package/assets/styles/base/_basic.scss +152 -0
  173. package/assets/styles/base/_color.scss +11 -0
  174. package/assets/styles/base/_functions.scss +134 -0
  175. package/assets/styles/base/_helpers.scss +271 -0
  176. package/assets/styles/base/_mixins.scss +163 -0
  177. package/assets/styles/base/_typography.scss +70 -0
  178. package/assets/styles/base/_variables.scss +78 -0
  179. package/assets/styles/fonts/_dots.scss +18 -0
  180. package/assets/styles/fonts/_fontstack.scss +49 -0
  181. package/assets/styles/fonts/_icons.scss +101 -0
  182. package/assets/styles/fonts/_zerowidthspace.scss +8 -0
  183. package/assets/styles/global/_button.scss +234 -0
  184. package/assets/styles/global/_cards.scss +94 -0
  185. package/assets/styles/global/_columns.scss +128 -0
  186. package/assets/styles/global/_form.scss +178 -0
  187. package/assets/styles/global/_gauges.scss +55 -0
  188. package/assets/styles/global/_labeled-input.scss +165 -0
  189. package/assets/styles/global/_layout.scss +171 -0
  190. package/assets/styles/global/_resource.scss +89 -0
  191. package/assets/styles/global/_select.scss +202 -0
  192. package/assets/styles/global/_table.scss +106 -0
  193. package/assets/styles/global/_tooltip.scss +206 -0
  194. package/assets/styles/themes/_csp.scss +25 -0
  195. package/assets/styles/themes/_dark.scss +233 -0
  196. package/assets/styles/themes/_light.scss +569 -0
  197. package/assets/styles/themes/_suse.scss +27 -0
  198. package/assets/styles/vendor/_code-mirror.scss +3 -0
  199. package/assets/styles/vendor/normalize.scss +349 -0
  200. package/assets/styles/vendor/vue-select.scss +403 -0
  201. package/assets/translations/en-us.yaml +8184 -0
  202. package/assets/translations/zh-hans.yaml +7825 -0
  203. package/babel.config.js +35 -0
  204. package/chart/__tests__/S3.test.ts +64 -0
  205. package/chart/example.vue +18 -0
  206. package/chart/gatekeeper.vue +69 -0
  207. package/chart/istio.vue +284 -0
  208. package/chart/logging/index.vue +84 -0
  209. package/chart/monitoring/ClusterSelector.vue +215 -0
  210. package/chart/monitoring/StorageClassSelector.vue +49 -0
  211. package/chart/monitoring/alerting/index.vue +188 -0
  212. package/chart/monitoring/grafana/index.vue +378 -0
  213. package/chart/monitoring/index.vue +366 -0
  214. package/chart/monitoring/prometheus/index.vue +376 -0
  215. package/chart/rancher-backup/S3.vue +190 -0
  216. package/chart/rancher-backup/index.vue +260 -0
  217. package/cloud-credential/__tests__/azure.test.ts +43 -0
  218. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  219. package/cloud-credential/aws.vue +111 -0
  220. package/cloud-credential/azure.vue +132 -0
  221. package/cloud-credential/digitalocean.vue +55 -0
  222. package/cloud-credential/gcp.vue +82 -0
  223. package/cloud-credential/generic.vue +100 -0
  224. package/cloud-credential/harvester.vue +125 -0
  225. package/cloud-credential/linode.vue +58 -0
  226. package/cloud-credential/pnap.vue +92 -0
  227. package/cloud-credential/s3.vue +143 -0
  228. package/cloud-credential/vmwarevsphere.vue +109 -0
  229. package/components/ActionDropdown.vue +248 -0
  230. package/components/ActionDropdownShell.vue +71 -0
  231. package/components/ActionMenu.vue +366 -0
  232. package/components/ActionMenuShell.vue +106 -0
  233. package/components/AdvancedSection.vue +40 -0
  234. package/components/Alert.vue +55 -0
  235. package/components/AlertTable.vue +123 -0
  236. package/components/AppModal.vue +307 -0
  237. package/components/AssignTo.vue +199 -0
  238. package/components/AsyncButton.vue +332 -0
  239. package/components/AwsComplianceBanner.vue +47 -0
  240. package/components/BackLink.vue +44 -0
  241. package/components/BannerGraphic.vue +95 -0
  242. package/components/BrandImage.vue +135 -0
  243. package/components/ButtonDropdown.vue +340 -0
  244. package/components/ButtonGroup.vue +124 -0
  245. package/components/ButtonMultiAction.vue +52 -0
  246. package/components/Carousel.vue +397 -0
  247. package/components/Certificates.vue +161 -0
  248. package/components/ChartHeading.vue +25 -0
  249. package/components/ChartReadme.vue +100 -0
  250. package/components/ClusterBadge.vue +48 -0
  251. package/components/ClusterIconMenu.vue +189 -0
  252. package/components/ClusterProviderIcon.vue +131 -0
  253. package/components/CodeMirror.vue +501 -0
  254. package/components/Collapse.vue +87 -0
  255. package/components/CollapsibleCard.vue +121 -0
  256. package/components/CommunityLinks.vue +216 -0
  257. package/components/CompoundStatusBadge.vue +53 -0
  258. package/components/ConsumptionGauge.vue +167 -0
  259. package/components/ContainerResourceLimit.vue +254 -0
  260. package/components/CopyCode.vue +74 -0
  261. package/components/CopyToClipboard.vue +44 -0
  262. package/components/CopyToClipboardText.vue +83 -0
  263. package/components/CountBox.vue +114 -0
  264. package/components/CountGauge.vue +180 -0
  265. package/components/CreateDriver.vue +81 -0
  266. package/components/CruResource.vue +936 -0
  267. package/components/CruResourceFooter.vue +127 -0
  268. package/components/DashboardMetrics.vue +125 -0
  269. package/components/DashboardOptions.vue +159 -0
  270. package/components/DetailText.vue +220 -0
  271. package/components/DetailTop.vue +374 -0
  272. package/components/Dialog.vue +136 -0
  273. package/components/DisableAuthProviderModal.vue +115 -0
  274. package/components/DotState.vue +84 -0
  275. package/components/DraggableZone.vue +181 -0
  276. package/components/EmberPage.vue +622 -0
  277. package/components/EmberPageView.vue +39 -0
  278. package/components/EtcdInfoBanner.vue +76 -0
  279. package/components/ExplorerMembers.vue +453 -0
  280. package/components/ExplorerProjectsNamespaces.vue +654 -0
  281. package/components/ExtensionPanel.vue +42 -0
  282. package/components/FileDiff.vue +184 -0
  283. package/components/FixedBanner.vue +284 -0
  284. package/components/Flag.vue +83 -0
  285. package/components/Glance.vue +79 -0
  286. package/components/GlobalRoleBindings.vue +429 -0
  287. package/components/GradientBox.vue +82 -0
  288. package/components/GrafanaDashboard.vue +321 -0
  289. package/components/GroupPanel.vue +57 -0
  290. package/components/GrowlManager.vue +215 -0
  291. package/components/HardwareResourceGauge.vue +206 -0
  292. package/components/HarvesterServiceAddOnConfig.vue +207 -0
  293. package/components/IconMessage.vue +101 -0
  294. package/components/IconOrSvg.vue +184 -0
  295. package/components/Import.vue +260 -0
  296. package/components/Inactivity.vue +236 -0
  297. package/components/IndentedPanel.vue +26 -0
  298. package/components/InfoBox.vue +84 -0
  299. package/components/InputOrDisplay.vue +91 -0
  300. package/components/KeyValueView.vue +283 -0
  301. package/components/LabelValue.vue +61 -0
  302. package/components/LandingPagePreference.vue +154 -0
  303. package/components/LazyImage.vue +70 -0
  304. package/components/Loading.vue +85 -0
  305. package/components/LocaleSelector.vue +121 -0
  306. package/components/LogItem.vue +69 -0
  307. package/components/Markdown.vue +138 -0
  308. package/components/MessageLink.vue +79 -0
  309. package/components/ModalManager.vue +55 -0
  310. package/components/ModalWithCard.vue +147 -0
  311. package/components/MoveModal.vue +167 -0
  312. package/components/PaginatedResourceTable.vue +133 -0
  313. package/components/PercentageBar.vue +127 -0
  314. package/components/PodSecurityAdmission.vue +306 -0
  315. package/components/ProgressBarMulti.vue +173 -0
  316. package/components/PromptChangePassword.vue +123 -0
  317. package/components/PromptModal.vue +122 -0
  318. package/components/PromptRemove.vue +491 -0
  319. package/components/PromptRestore.vue +328 -0
  320. package/components/Questions/Array.vue +38 -0
  321. package/components/Questions/Boolean.vue +37 -0
  322. package/components/Questions/CloudCredential.vue +54 -0
  323. package/components/Questions/Enum.vue +53 -0
  324. package/components/Questions/Float.vue +41 -0
  325. package/components/Questions/Int.vue +41 -0
  326. package/components/Questions/Question.js +145 -0
  327. package/components/Questions/QuestionMap.vue +45 -0
  328. package/components/Questions/Radio.vue +35 -0
  329. package/components/Questions/Reference.vue +167 -0
  330. package/components/Questions/String.vue +51 -0
  331. package/components/Questions/Yaml.vue +48 -0
  332. package/components/Questions/__tests__/Boolean.test.ts +125 -0
  333. package/components/Questions/__tests__/Float.test.ts +125 -0
  334. package/components/Questions/__tests__/Int.test.ts +125 -0
  335. package/components/Questions/__tests__/String.test.ts +125 -0
  336. package/components/Questions/__tests__/Yaml.test.ts +125 -0
  337. package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
  338. package/components/Questions/index.vue +522 -0
  339. package/components/Random.vue +100 -0
  340. package/components/RelatedResources.vue +187 -0
  341. package/components/ResourceCancelModal.vue +128 -0
  342. package/components/ResourceDetail/Masthead.vue +838 -0
  343. package/components/ResourceDetail/__tests__/Masthead.test.ts +65 -0
  344. package/components/ResourceDetail/index.vue +572 -0
  345. package/components/ResourceList/Masthead.vue +311 -0
  346. package/components/ResourceList/ResourceLoadingIndicator.vue +137 -0
  347. package/components/ResourceList/index.vue +307 -0
  348. package/components/ResourceList/resource-list.config.js +7 -0
  349. package/components/ResourceSummary.vue +173 -0
  350. package/components/ResourceTable.vue +708 -0
  351. package/components/ResourceYaml.vue +403 -0
  352. package/components/RoleBindings.vue +470 -0
  353. package/components/SelectIconGrid.vue +414 -0
  354. package/components/Setting.vue +115 -0
  355. package/components/SideNav.vue +589 -0
  356. package/components/SimpleBox.vue +121 -0
  357. package/components/SingleClusterInfo.vue +199 -0
  358. package/components/SlideInPanelManager.vue +126 -0
  359. package/components/SortableTable/THead.vue +555 -0
  360. package/components/SortableTable/actions.js +153 -0
  361. package/components/SortableTable/advanced-filtering.js +272 -0
  362. package/components/SortableTable/debug.js +117 -0
  363. package/components/SortableTable/filtering.js +290 -0
  364. package/components/SortableTable/grouping.js +48 -0
  365. package/components/SortableTable/index.vue +2604 -0
  366. package/components/SortableTable/paging.js +155 -0
  367. package/components/SortableTable/selection.js +629 -0
  368. package/components/SortableTable/sortable-config.ts +4 -0
  369. package/components/SortableTable/sorting.js +129 -0
  370. package/components/StatusBadge.vue +77 -0
  371. package/components/StatusTable.vue +61 -0
  372. package/components/TabTitle.vue +78 -0
  373. package/components/Tabbed/Tab.vue +129 -0
  374. package/components/Tabbed/index.vue +587 -0
  375. package/components/TableDataUserIcon.vue +47 -0
  376. package/components/TableSparkLine.vue +108 -0
  377. package/components/Tag.vue +19 -0
  378. package/components/Tip.vue +43 -0
  379. package/components/TypeDescription.vue +65 -0
  380. package/components/Wizard.vue +704 -0
  381. package/components/YamlEditor.vue +296 -0
  382. package/components/__tests__/AppModal.test.ts +106 -0
  383. package/components/__tests__/ApplicationCard.test.ts +27 -0
  384. package/components/__tests__/AsyncButton.test.ts +148 -0
  385. package/components/__tests__/BackLink.test.ts +33 -0
  386. package/components/__tests__/ButtonGroup.test.ts +121 -0
  387. package/components/__tests__/ButtonMultiAction.test.ts +31 -0
  388. package/components/__tests__/Carousel.test.ts +72 -0
  389. package/components/__tests__/Certificates.test.ts +31 -0
  390. package/components/__tests__/ClusterBadge.test.ts +32 -0
  391. package/components/__tests__/CodeMirror.test.ts +93 -0
  392. package/components/__tests__/Collapse.test.ts +44 -0
  393. package/components/__tests__/CollapsibleCard.test.ts +64 -0
  394. package/components/__tests__/ConsumptionGauge.test.ts +88 -0
  395. package/components/__tests__/ContainerResourceLimit.test.ts +35 -0
  396. package/components/__tests__/CopyCode.test.ts +16 -0
  397. package/components/__tests__/CruResource.test.ts +155 -0
  398. package/components/__tests__/EtcdInfoBanner.test.ts +39 -0
  399. package/components/__tests__/FixedBanner.test.ts +114 -0
  400. package/components/__tests__/GrowlManager.test.ts +146 -0
  401. package/components/__tests__/ModalManager.spec.ts +176 -0
  402. package/components/__tests__/NamespaceFilter.test.ts +247 -0
  403. package/components/__tests__/PercentageBar.test.ts +32 -0
  404. package/components/__tests__/PodSecurityAdmission.test.ts +440 -0
  405. package/components/__tests__/ProjectRow.test.ts +59 -0
  406. package/components/__tests__/PromptRestore.test.ts +139 -0
  407. package/components/__tests__/SimpleBox.spec.ts +28 -0
  408. package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
  409. package/components/__tests__/TabTitle.test.ts +136 -0
  410. package/components/auth/AllowedPrincipals.vue +122 -0
  411. package/components/auth/AuthBanner.vue +104 -0
  412. package/components/auth/AzureWarning.vue +77 -0
  413. package/components/auth/Principal.vue +219 -0
  414. package/components/auth/RoleDetailEdit.vue +808 -0
  415. package/components/auth/SelectPrincipal.vue +260 -0
  416. package/components/auth/__tests__/Principal.test.ts +40 -0
  417. package/components/auth/__tests__/RoleDetailEdit.test.ts +84 -0
  418. package/components/auth/login/github.vue +23 -0
  419. package/components/auth/login/ldap.vue +106 -0
  420. package/components/auth/login/oauth.vue +26 -0
  421. package/components/auth/login/oidc.vue +32 -0
  422. package/components/auth/login/saml.vue +39 -0
  423. package/components/cards/ApplicationCard.vue +145 -0
  424. package/components/fleet/FleetBundleResources.vue +86 -0
  425. package/components/fleet/FleetBundles.vue +136 -0
  426. package/components/fleet/FleetClusters.vue +208 -0
  427. package/components/fleet/FleetIntro.vue +65 -0
  428. package/components/fleet/FleetNoWorkspaces.vue +62 -0
  429. package/components/fleet/FleetRepos.vue +184 -0
  430. package/components/fleet/FleetResources.vue +83 -0
  431. package/components/fleet/FleetStatus.vue +301 -0
  432. package/components/fleet/FleetSummary.vue +210 -0
  433. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +17 -0
  434. package/components/fleet/ForceDirectedTreeChart/index.vue +565 -0
  435. package/components/fleet/ResourcesSummary.vue +93 -0
  436. package/components/fleet/__tests__/FleetSummary.test.ts +362 -0
  437. package/components/form/ArrayList.vue +456 -0
  438. package/components/form/ArrayListGrouped.vue +149 -0
  439. package/components/form/ArrayListSelect.vue +103 -0
  440. package/components/form/BannerSettings.vue +220 -0
  441. package/components/form/ChangePassword.vue +461 -0
  442. package/components/form/ClusterAppearance.vue +132 -0
  443. package/components/form/ColorInput.vue +200 -0
  444. package/components/form/Command.vue +204 -0
  445. package/components/form/Conditions.vue +93 -0
  446. package/components/form/EnvVars.vue +162 -0
  447. package/components/form/Error.vue +66 -0
  448. package/components/form/FileImageSelector.vue +140 -0
  449. package/components/form/FileSelector.vue +169 -0
  450. package/components/form/Footer.vue +119 -0
  451. package/components/form/GitPicker.vue +590 -0
  452. package/components/form/HealthCheck.vue +86 -0
  453. package/components/form/HookOption.vue +253 -0
  454. package/components/form/InputWithSelect.vue +330 -0
  455. package/components/form/KeyValue.vue +991 -0
  456. package/components/form/LabeledSelect.vue +719 -0
  457. package/components/form/Labels.vue +154 -0
  458. package/components/form/LifecycleHooks.vue +87 -0
  459. package/components/form/MatchExpressions.vue +471 -0
  460. package/components/form/Members/ClusterMembershipEditor.vue +61 -0
  461. package/components/form/Members/ClusterPermissionsEditor.vue +314 -0
  462. package/components/form/Members/MembershipEditor.vue +230 -0
  463. package/components/form/Members/ProjectMembershipEditor.vue +63 -0
  464. package/components/form/Members/__tests__/MembershipEditor.test.ts +62 -0
  465. package/components/form/NameNsDescription.vue +601 -0
  466. package/components/form/Networking.vue +281 -0
  467. package/components/form/NodeAffinity.vue +258 -0
  468. package/components/form/NodeScheduling.vue +212 -0
  469. package/components/form/NotificationSettings.vue +71 -0
  470. package/components/form/Password.vue +191 -0
  471. package/components/form/PlusMinus.vue +109 -0
  472. package/components/form/PodAffinity.vue +496 -0
  473. package/components/form/Ports.vue +310 -0
  474. package/components/form/Probe.vue +376 -0
  475. package/components/form/ProjectMemberEditor.vue +342 -0
  476. package/components/form/ResourceLabeledSelect.vue +154 -0
  477. package/components/form/ResourceQuota/Namespace.vue +117 -0
  478. package/components/form/ResourceQuota/NamespaceRow.vue +220 -0
  479. package/components/form/ResourceQuota/Project.vue +107 -0
  480. package/components/form/ResourceQuota/ProjectRow.vue +115 -0
  481. package/components/form/ResourceQuota/shared.js +147 -0
  482. package/components/form/ResourceSelector.vue +144 -0
  483. package/components/form/ResourceTabs/index.vue +292 -0
  484. package/components/form/RuleSelector.vue +184 -0
  485. package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +196 -0
  486. package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +115 -0
  487. package/components/form/SSHKnownHosts/index.vue +115 -0
  488. package/components/form/SchedulingCustomization.vue +85 -0
  489. package/components/form/SecretSelector.vue +269 -0
  490. package/components/form/Security.vue +245 -0
  491. package/components/form/Select.vue +407 -0
  492. package/components/form/SelectOrCreateAuthSecret.vue +693 -0
  493. package/components/form/ServiceNameSelect.vue +168 -0
  494. package/components/form/ServicePorts.vue +340 -0
  495. package/components/form/ShellInput.vue +95 -0
  496. package/components/form/SimpleSecretSelector.vue +278 -0
  497. package/components/form/Taints.vue +98 -0
  498. package/components/form/Tolerations.vue +319 -0
  499. package/components/form/UnitInput.vue +257 -0
  500. package/components/form/ValueFromResource.vue +407 -0
  501. package/components/form/WorkloadPorts.vue +514 -0
  502. package/components/form/__tests__/ArrayList.test.ts +127 -0
  503. package/components/form/__tests__/ArrayListGrouped.test.ts +41 -0
  504. package/components/form/__tests__/BannerSettings.test.ts +54 -0
  505. package/components/form/__tests__/ColorInput.test.ts +27 -0
  506. package/components/form/__tests__/Command.test.ts +64 -0
  507. package/components/form/__tests__/Error.test.ts +56 -0
  508. package/components/form/__tests__/FileImageSelector.test.ts +42 -0
  509. package/components/form/__tests__/FileSelector.test.ts +76 -0
  510. package/components/form/__tests__/HookOption.test.ts +28 -0
  511. package/components/form/__tests__/InputWithSelect.test.ts +42 -0
  512. package/components/form/__tests__/KeyValue.test.ts +179 -0
  513. package/components/form/__tests__/LabeledSelect.test.ts +217 -0
  514. package/components/form/__tests__/MatchExpressions.test.ts +78 -0
  515. package/components/form/__tests__/NameNsDescription.test.ts +173 -0
  516. package/components/form/__tests__/NodeAffinity.test.ts +39 -0
  517. package/components/form/__tests__/NodeScheduling.test.ts +44 -0
  518. package/components/form/__tests__/PodAffinity.test.ts +47 -0
  519. package/components/form/__tests__/Probe.test.ts +78 -0
  520. package/components/form/__tests__/SSHKnownHosts.test.ts +70 -0
  521. package/components/form/__tests__/Security.test.ts +55 -0
  522. package/components/form/__tests__/Select.test.ts +67 -0
  523. package/components/form/__tests__/SelectOrCreateAuthSecret.test.ts +34 -0
  524. package/components/form/__tests__/ServiceNameSelect.test.ts +42 -0
  525. package/components/form/__tests__/Taints.test.ts +71 -0
  526. package/components/form/__tests__/UnitInput.test.ts +255 -0
  527. package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
  528. package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
  529. package/components/formatter/AppSummaryGraph.vue +154 -0
  530. package/components/formatter/BadgeStateFormatter.vue +66 -0
  531. package/components/formatter/Capitalize.vue +28 -0
  532. package/components/formatter/Checked.vue +31 -0
  533. package/components/formatter/CloudCredExpired.vue +69 -0
  534. package/components/formatter/CloudCredPublicData.vue +30 -0
  535. package/components/formatter/ClusterLink.vue +117 -0
  536. package/components/formatter/ClusterProvider.vue +38 -0
  537. package/components/formatter/CopyToClipboard.vue +18 -0
  538. package/components/formatter/Date.vue +74 -0
  539. package/components/formatter/DelayedValue.vue +46 -0
  540. package/components/formatter/Endpoints.vue +106 -0
  541. package/components/formatter/ExternalLink.vue +11 -0
  542. package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
  543. package/components/formatter/FleetSummaryGraph.vue +122 -0
  544. package/components/formatter/IconIsDefault.vue +34 -0
  545. package/components/formatter/IconText.vue +49 -0
  546. package/components/formatter/ImageName.vue +23 -0
  547. package/components/formatter/ImagePercentageBar.vue +86 -0
  548. package/components/formatter/IngressFullPath.vue +22 -0
  549. package/components/formatter/IngressTarget.vue +96 -0
  550. package/components/formatter/InternalExternalIP.vue +64 -0
  551. package/components/formatter/InvolvedObjectLink.vue +54 -0
  552. package/components/formatter/KeyValue.vue +78 -0
  553. package/components/formatter/Link.vue +189 -0
  554. package/components/formatter/LinkDetail.vue +58 -0
  555. package/components/formatter/LinkDetailImage.vue +31 -0
  556. package/components/formatter/LinkName.vue +66 -0
  557. package/components/formatter/List.vue +22 -0
  558. package/components/formatter/ListLink.vue +37 -0
  559. package/components/formatter/ListLinkDetail.vue +30 -0
  560. package/components/formatter/LiveDate.vue +167 -0
  561. package/components/formatter/LiveDuration.vue +78 -0
  562. package/components/formatter/LiveExpiryBadgeState.vue +79 -0
  563. package/components/formatter/LiveExpiryDate.vue +87 -0
  564. package/components/formatter/LivePodRestarts.vue +50 -0
  565. package/components/formatter/MachineSummaryGraph.vue +108 -0
  566. package/components/formatter/Number.vue +34 -0
  567. package/components/formatter/Percentage.vue +25 -0
  568. package/components/formatter/PercentageBar.vue +41 -0
  569. package/components/formatter/PodImages.vue +72 -0
  570. package/components/formatter/PodsUsage.vue +29 -0
  571. package/components/formatter/Principal.vue +22 -0
  572. package/components/formatter/PrincipalGroupBindings.vue +59 -0
  573. package/components/formatter/QualityText.vue +21 -0
  574. package/components/formatter/RKETemplateName.vue +37 -0
  575. package/components/formatter/ReceiverIcons.vue +132 -0
  576. package/components/formatter/RunBookLink.vue +20 -0
  577. package/components/formatter/Scale.vue +143 -0
  578. package/components/formatter/ScanResult.vue +33 -0
  579. package/components/formatter/SecretData.vue +68 -0
  580. package/components/formatter/ServiceTargets.vue +121 -0
  581. package/components/formatter/ServiceType.vue +54 -0
  582. package/components/formatter/Shortened.vue +55 -0
  583. package/components/formatter/Si.vue +46 -0
  584. package/components/formatter/Translate.vue +32 -0
  585. package/components/formatter/VerticalScroll.vue +17 -0
  586. package/components/formatter/VirtualServiceGateways.vue +111 -0
  587. package/components/formatter/WorkloadDetailEndpoints.vue +107 -0
  588. package/components/formatter/WorkloadHealthScale.vue +339 -0
  589. package/components/formatter/__tests__/Checked.test.ts +19 -0
  590. package/components/formatter/__tests__/ClusterLink.test.ts +101 -0
  591. package/components/formatter/__tests__/Date.test.ts +60 -0
  592. package/components/formatter/__tests__/LinkDetail.test.ts +72 -0
  593. package/components/formatter/__tests__/LiveDate.test.ts +90 -0
  594. package/components/formatter/__tests__/PodsUsage.test.ts +55 -0
  595. package/components/formatter/__tests__/Si.test.ts +35 -0
  596. package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
  597. package/components/graph/AspectPreserver.vue +79 -0
  598. package/components/graph/Bar.vue +81 -0
  599. package/components/graph/Circle.vue +164 -0
  600. package/components/graph/HalfCircle.vue +46 -0
  601. package/components/graph/LinePlot.vue +189 -0
  602. package/components/graph/ProgressArc.vue +94 -0
  603. package/components/nav/Favorite.vue +60 -0
  604. package/components/nav/GlobalLoading.vue +25 -0
  605. package/components/nav/Group.vue +496 -0
  606. package/components/nav/Header.vue +1182 -0
  607. package/components/nav/HeaderPageActionMenu.vue +22 -0
  608. package/components/nav/Jump.vue +135 -0
  609. package/components/nav/NamespaceFilter.vue +1165 -0
  610. package/components/nav/Pinned.vue +52 -0
  611. package/components/nav/TopLevelMenu.helper.ts +562 -0
  612. package/components/nav/TopLevelMenu.vue +1590 -0
  613. package/components/nav/Type.vue +289 -0
  614. package/components/nav/WindowManager/ChartReadme.vue +48 -0
  615. package/components/nav/WindowManager/ContainerLogs.vue +877 -0
  616. package/components/nav/WindowManager/ContainerShell.vue +585 -0
  617. package/components/nav/WindowManager/KubectlShell.vue +42 -0
  618. package/components/nav/WindowManager/MachineSsh.vue +21 -0
  619. package/components/nav/WindowManager/Window.vue +105 -0
  620. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +197 -0
  621. package/components/nav/WindowManager/__tests__/ContainerShell.test.ts +571 -0
  622. package/components/nav/WindowManager/index.vue +587 -0
  623. package/components/nav/WorkspaceSwitcher.vue +190 -0
  624. package/components/nav/__tests__/TopLevelMenu.test.ts +558 -0
  625. package/components/nav/__tests__/Type.test.ts +491 -0
  626. package/components/templates/blank.vue +23 -0
  627. package/components/templates/default.vue +271 -0
  628. package/components/templates/home.vue +135 -0
  629. package/components/templates/plain.vue +143 -0
  630. package/components/templates/standalone.vue +9 -0
  631. package/components/templates/unauthenticated.vue +26 -0
  632. package/components/user.retention/user-retention-header.vue +34 -0
  633. package/composables/focusTrap.ts +76 -0
  634. package/composables/useClickOutside.ts +81 -0
  635. package/composables/useCompactInput.test.ts +36 -0
  636. package/composables/useCompactInput.ts +20 -0
  637. package/composables/useI18n.ts +26 -0
  638. package/composables/useLabeledFormElement.test.ts +135 -0
  639. package/composables/useLabeledFormElement.ts +153 -0
  640. package/composables/useRuntimeFlag.ts +29 -0
  641. package/composables/useUserRetentionValidation.test.ts +178 -0
  642. package/composables/useUserRetentionValidation.ts +201 -0
  643. package/config/__test__/home-links.test.ts +57 -0
  644. package/config/cookies.js +4 -0
  645. package/config/elemental-types.js +9 -0
  646. package/config/features.js +6 -0
  647. package/config/harvester-manager-types.js +3 -0
  648. package/config/home-links.js +209 -0
  649. package/config/labels-annotations.js +192 -0
  650. package/config/local-storage.js +6 -0
  651. package/config/page-actions.js +4 -0
  652. package/config/pagination-table-headers.js +80 -0
  653. package/config/persistentVolume.ts +108 -0
  654. package/config/pod-security-admission.ts +82 -0
  655. package/config/private-label.js +99 -0
  656. package/config/product/apps.js +148 -0
  657. package/config/product/auth.js +218 -0
  658. package/config/product/backup.js +61 -0
  659. package/config/product/cis.js +158 -0
  660. package/config/product/explorer.js +632 -0
  661. package/config/product/fleet.js +100 -0
  662. package/config/product/gatekeeper.js +119 -0
  663. package/config/product/istio.js +89 -0
  664. package/config/product/legacy.js +62 -0
  665. package/config/product/logging.js +377 -0
  666. package/config/product/longhorn.js +49 -0
  667. package/config/product/manager.js +217 -0
  668. package/config/product/monitoring.js +287 -0
  669. package/config/product/navlinks.js +32 -0
  670. package/config/product/neuvector.js +30 -0
  671. package/config/product/settings.js +161 -0
  672. package/config/product/uiplugins.js +18 -0
  673. package/config/query-params.js +79 -0
  674. package/config/roles.ts +409 -0
  675. package/config/router/index.js +26 -0
  676. package/config/router/navigation-guards/attempt-first-login.js +73 -0
  677. package/config/router/navigation-guards/authentication.js +64 -0
  678. package/config/router/navigation-guards/clusters.js +132 -0
  679. package/config/router/navigation-guards/i18n.js +13 -0
  680. package/config/router/navigation-guards/index.js +23 -0
  681. package/config/router/navigation-guards/install-redirect.js +95 -0
  682. package/config/router/navigation-guards/load-initial-settings.js +15 -0
  683. package/config/router/navigation-guards/page-title.js +12 -0
  684. package/config/router/navigation-guards/products.js +15 -0
  685. package/config/router/navigation-guards/record-last-route.js +24 -0
  686. package/config/router/navigation-guards/runtime-extension-route.js +31 -0
  687. package/config/router/navigation-guards/server-upgrade-growl.js +19 -0
  688. package/config/router/routes.js +496 -0
  689. package/config/schema.js +32 -0
  690. package/config/secret.js +14 -0
  691. package/config/settings.ts +258 -0
  692. package/config/store.js +188 -0
  693. package/config/system-namespaces.js +18 -0
  694. package/config/table-headers.js +1116 -0
  695. package/config/types.js +353 -0
  696. package/config/uiplugins.js +276 -0
  697. package/config/version.js +33 -0
  698. package/config/workload.ts +1 -0
  699. package/core/plugin-helpers.ts +220 -0
  700. package/core/plugin-routes.ts +34 -0
  701. package/core/plugin.ts +367 -0
  702. package/core/plugins-loader.js +31 -0
  703. package/core/plugins.js +471 -0
  704. package/core/types-provisioning.ts +361 -0
  705. package/core/types.ts +682 -0
  706. package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +196 -0
  707. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +119 -0
  708. package/detail/__tests__/service.test.ts +62 -0
  709. package/detail/autoscaling.horizontalpodautoscaler/index.vue +264 -0
  710. package/detail/catalog.cattle.io.app.vue +181 -0
  711. package/detail/catalog.cattle.io.clusterrepo.vue +35 -0
  712. package/detail/cis.cattle.io.clusterscan.vue +372 -0
  713. package/detail/configmap.vue +81 -0
  714. package/detail/constraints.gatekeeper.sh.constraint.vue +66 -0
  715. package/detail/fleet.cattle.io.bundle.vue +63 -0
  716. package/detail/fleet.cattle.io.cluster.vue +99 -0
  717. package/detail/fleet.cattle.io.clustergroup.vue +76 -0
  718. package/detail/fleet.cattle.io.gitrepo.vue +148 -0
  719. package/detail/harvesterhci.io.management.cluster.vue +104 -0
  720. package/detail/helm.cattle.io.projecthelmchart.vue +249 -0
  721. package/detail/management.cattle.io.fleetworkspace.vue +100 -0
  722. package/detail/management.cattle.io.globalrole.vue +8 -0
  723. package/detail/management.cattle.io.roletemplate.vue +11 -0
  724. package/detail/management.cattle.io.user.vue +312 -0
  725. package/detail/namespace.vue +269 -0
  726. package/detail/networking.k8s.io.ingress.vue +74 -0
  727. package/detail/node.vue +330 -0
  728. package/detail/pod.vue +255 -0
  729. package/detail/provisioning.cattle.io.cluster.vue +1200 -0
  730. package/detail/rbac.authorization.k8s.io.clusterrole.vue +8 -0
  731. package/detail/rbac.authorization.k8s.io.role.vue +8 -0
  732. package/detail/secret.vue +313 -0
  733. package/detail/service.vue +202 -0
  734. package/detail/workload/index.vue +541 -0
  735. package/dialog/AddClusterMemberDialog.vue +86 -0
  736. package/dialog/AddCustomBadgeDialog.vue +466 -0
  737. package/dialog/AddProjectMemberDialog.vue +181 -0
  738. package/dialog/AddonConfigConfirmationDialog.vue +101 -0
  739. package/dialog/DeactivateDriverDialog.vue +139 -0
  740. package/dialog/DiagnosticTimingsDialog.vue +141 -0
  741. package/dialog/DrainNode.vue +247 -0
  742. package/dialog/ForceMachineRemoveDialog.vue +134 -0
  743. package/dialog/GenericPrompt.vue +135 -0
  744. package/dialog/GitRepoForceUpdateDialog.vue +132 -0
  745. package/dialog/RollbackWorkloadDialog.vue +308 -0
  746. package/dialog/RotateCertificatesDialog.vue +205 -0
  747. package/dialog/RotateEncryptionKeyDialog.vue +191 -0
  748. package/dialog/SaveAsRKETemplateDialog.vue +139 -0
  749. package/dialog/ScaleMachineDownDialog.vue +156 -0
  750. package/dialog/ScalePoolDownDialog.vue +121 -0
  751. package/dialog/SloDialog.vue +97 -0
  752. package/directives/clean-html.js +15 -0
  753. package/directives/clean-tooltip.js +32 -0
  754. package/directives/focus.js +47 -0
  755. package/directives/int-number.js +21 -0
  756. package/directives/positive-int-number.js +19 -0
  757. package/directives/strip-html-aria-label.js +19 -0
  758. package/directives/trim-whitespace.js +19 -0
  759. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +87 -0
  760. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +246 -0
  761. package/edit/__tests__/kontainerDriver.test.ts +110 -0
  762. package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +71 -0
  763. package/edit/__tests__/management.cattle.io.setting.test.ts +109 -0
  764. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +70 -0
  765. package/edit/__tests__/namespace.test.ts +49 -0
  766. package/edit/__tests__/nodeDriver.test.ts +89 -0
  767. package/edit/__tests__/service.test.ts +100 -0
  768. package/edit/__tests__/ui.cattle.io.navlink.test.ts +114 -0
  769. package/edit/auth/AuthProviderWarningBanners.vue +34 -0
  770. package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
  771. package/edit/auth/__tests__/azuread.test.ts +238 -0
  772. package/edit/auth/__tests__/oidc.test.ts +225 -0
  773. package/edit/auth/azuread.vue +538 -0
  774. package/edit/auth/github.vue +269 -0
  775. package/edit/auth/googleoauth.vue +260 -0
  776. package/edit/auth/ldap/__tests__/config.test.ts +44 -0
  777. package/edit/auth/ldap/config.vue +379 -0
  778. package/edit/auth/ldap/index.vue +156 -0
  779. package/edit/auth/oidc.vue +445 -0
  780. package/edit/auth/saml.vue +432 -0
  781. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +58 -0
  782. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +130 -0
  783. package/edit/autoscaling.horizontalpodautoscaler/index.vue +343 -0
  784. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +82 -0
  785. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +60 -0
  786. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +220 -0
  787. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +198 -0
  788. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +71 -0
  789. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +58 -0
  790. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +65 -0
  791. package/edit/catalog.cattle.io.clusterrepo.vue +336 -0
  792. package/edit/cis.cattle.io.clusterscan.vue +377 -0
  793. package/edit/cis.cattle.io.clusterscanbenchmark.vue +153 -0
  794. package/edit/cis.cattle.io.clusterscanprofile.vue +150 -0
  795. package/edit/cloudcredential.vue +334 -0
  796. package/edit/configmap.vue +163 -0
  797. package/edit/constraints.gatekeeper.sh.constraint/MatchKinds.vue +72 -0
  798. package/edit/constraints.gatekeeper.sh.constraint/NamespaceList.vue +78 -0
  799. package/edit/constraints.gatekeeper.sh.constraint/Scope.vue +52 -0
  800. package/edit/constraints.gatekeeper.sh.constraint/index.vue +368 -0
  801. package/edit/fleet.cattle.io.cluster.vue +105 -0
  802. package/edit/fleet.cattle.io.clustergroup.vue +189 -0
  803. package/edit/fleet.cattle.io.gitrepo.vue +912 -0
  804. package/edit/group.principal.vue +65 -0
  805. package/edit/helm.cattle.io.projecthelmchart.vue +163 -0
  806. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +94 -0
  807. package/edit/kontainerDriver.vue +67 -0
  808. package/edit/logging-flow/Match.vue +142 -0
  809. package/edit/logging-flow/index.vue +549 -0
  810. package/edit/logging.banzaicloud.io.clusterflow.vue +7 -0
  811. package/edit/logging.banzaicloud.io.clusteroutput.vue +12 -0
  812. package/edit/logging.banzaicloud.io.flow.vue +7 -0
  813. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +310 -0
  814. package/edit/logging.banzaicloud.io.output/index.vue +386 -0
  815. package/edit/logging.banzaicloud.io.output/providers/__tests__/loki.test.ts +13 -0
  816. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +77 -0
  817. package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +94 -0
  818. package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +112 -0
  819. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +95 -0
  820. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +234 -0
  821. package/edit/logging.banzaicloud.io.output/providers/file.vue +47 -0
  822. package/edit/logging.banzaicloud.io.output/providers/forward.vue +152 -0
  823. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +102 -0
  824. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +167 -0
  825. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +166 -0
  826. package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +76 -0
  827. package/edit/logging.banzaicloud.io.output/providers/logdna.vue +72 -0
  828. package/edit/logging.banzaicloud.io.output/providers/logz.vue +107 -0
  829. package/edit/logging.banzaicloud.io.output/providers/loki.vue +172 -0
  830. package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +71 -0
  831. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +225 -0
  832. package/edit/logging.banzaicloud.io.output/providers/redis.vue +142 -0
  833. package/edit/logging.banzaicloud.io.output/providers/s3.vue +122 -0
  834. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +180 -0
  835. package/edit/logging.banzaicloud.io.output/providers/sumologic.vue +59 -0
  836. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +234 -0
  837. package/edit/logging.banzaicloud.io.output/providers/utils.js +27 -0
  838. package/edit/management.cattle.io.clusterroletemplatebinding.vue +71 -0
  839. package/edit/management.cattle.io.fleetworkspace.vue +245 -0
  840. package/edit/management.cattle.io.globalrole.vue +8 -0
  841. package/edit/management.cattle.io.node.vue +72 -0
  842. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +111 -0
  843. package/edit/management.cattle.io.project.vue +255 -0
  844. package/edit/management.cattle.io.projectroletemplatebinding.vue +96 -0
  845. package/edit/management.cattle.io.roletemplate.vue +11 -0
  846. package/edit/management.cattle.io.setting.vue +264 -0
  847. package/edit/management.cattle.io.user.vue +289 -0
  848. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +324 -0
  849. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +287 -0
  850. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +423 -0
  851. package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +176 -0
  852. package/edit/monitoring.coreos.com.alertmanagerconfig/tls.vue +272 -0
  853. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +175 -0
  854. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +282 -0
  855. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +203 -0
  856. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +140 -0
  857. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +230 -0
  858. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +534 -0
  859. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +229 -0
  860. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +112 -0
  861. package/edit/monitoring.coreos.com.prometheusrule/index.vue +223 -0
  862. package/edit/monitoring.coreos.com.receiver/auth.vue +142 -0
  863. package/edit/monitoring.coreos.com.receiver/index.vue +357 -0
  864. package/edit/monitoring.coreos.com.receiver/tls.vue +72 -0
  865. package/edit/monitoring.coreos.com.receiver/types/__tests__/email.test.ts +57 -0
  866. package/edit/monitoring.coreos.com.receiver/types/email.vue +130 -0
  867. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +237 -0
  868. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +97 -0
  869. package/edit/monitoring.coreos.com.receiver/types/slack.vue +88 -0
  870. package/edit/monitoring.coreos.com.receiver/types/webhook.add.vue +65 -0
  871. package/edit/monitoring.coreos.com.receiver/types/webhook.banner.vue +28 -0
  872. package/edit/monitoring.coreos.com.receiver/types/webhook.vue +93 -0
  873. package/edit/monitoring.coreos.com.route.vue +237 -0
  874. package/edit/namespace.vue +281 -0
  875. package/edit/networking.istio.io.destinationrule/LoadBalancer.vue +194 -0
  876. package/edit/networking.istio.io.destinationrule/index.vue +237 -0
  877. package/edit/networking.k8s.io.ingress/Certificate.vue +134 -0
  878. package/edit/networking.k8s.io.ingress/Certificates.vue +111 -0
  879. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +145 -0
  880. package/edit/networking.k8s.io.ingress/IngressClass.vue +69 -0
  881. package/edit/networking.k8s.io.ingress/Rule.vue +188 -0
  882. package/edit/networking.k8s.io.ingress/RulePath.vue +224 -0
  883. package/edit/networking.k8s.io.ingress/Rules.vue +155 -0
  884. package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
  885. package/edit/networking.k8s.io.ingress/index.vue +300 -0
  886. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +108 -0
  887. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +50 -0
  888. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +401 -0
  889. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +93 -0
  890. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.test.ts +180 -0
  891. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/mock.json +158 -0
  892. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/selectors.test.ts +45 -0
  893. package/edit/networking.k8s.io.networkpolicy/index.vue +299 -0
  894. package/edit/node.vue +82 -0
  895. package/edit/nodeDriver.vue +72 -0
  896. package/edit/persistentvolume/__tests__/persistentvolume.test.ts +105 -0
  897. package/edit/persistentvolume/index.vue +380 -0
  898. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +90 -0
  899. package/edit/persistentvolume/plugins/azureDisk.vue +136 -0
  900. package/edit/persistentvolume/plugins/azureFile.vue +78 -0
  901. package/edit/persistentvolume/plugins/cephfs.vue +109 -0
  902. package/edit/persistentvolume/plugins/cinder.vue +89 -0
  903. package/edit/persistentvolume/plugins/csi.vue +209 -0
  904. package/edit/persistentvolume/plugins/fc.vue +101 -0
  905. package/edit/persistentvolume/plugins/flexVolume.vue +102 -0
  906. package/edit/persistentvolume/plugins/flocker.vue +45 -0
  907. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +90 -0
  908. package/edit/persistentvolume/plugins/glusterfs.vue +70 -0
  909. package/edit/persistentvolume/plugins/hostPath.vue +82 -0
  910. package/edit/persistentvolume/plugins/iscsi.vue +170 -0
  911. package/edit/persistentvolume/plugins/local.vue +37 -0
  912. package/edit/persistentvolume/plugins/longhorn.vue +99 -0
  913. package/edit/persistentvolume/plugins/nfs.vue +70 -0
  914. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +58 -0
  915. package/edit/persistentvolume/plugins/portworxVolume.vue +71 -0
  916. package/edit/persistentvolume/plugins/quobyte.vue +88 -0
  917. package/edit/persistentvolume/plugins/rbd.vue +127 -0
  918. package/edit/persistentvolume/plugins/scaleIO.vue +146 -0
  919. package/edit/persistentvolume/plugins/storageos.vue +98 -0
  920. package/edit/persistentvolume/plugins/vsphereVolume.vue +63 -0
  921. package/edit/persistentvolumeclaim.vue +395 -0
  922. package/edit/pod.vue +27 -0
  923. package/edit/policy.poddisruptionbudget.vue +152 -0
  924. package/edit/provisioning.cattle.io.cluster/AgentEnv.vue +40 -0
  925. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +306 -0
  926. package/edit/provisioning.cattle.io.cluster/Labels.vue +46 -0
  927. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +341 -0
  928. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +304 -0
  929. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +564 -0
  930. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +129 -0
  931. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +182 -0
  932. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +54 -0
  933. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +72 -0
  934. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +546 -0
  935. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
  936. package/edit/provisioning.cattle.io.cluster/index.vue +733 -0
  937. package/edit/provisioning.cattle.io.cluster/rke2.vue +2538 -0
  938. package/edit/provisioning.cattle.io.cluster/tabs/AddOnAdditionalManifest.vue +49 -0
  939. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +112 -0
  940. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +224 -0
  941. package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +340 -0
  942. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +700 -0
  943. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +219 -0
  944. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +405 -0
  945. package/edit/provisioning.cattle.io.cluster/tabs/MemberRoles.vue +40 -0
  946. package/edit/provisioning.cattle.io.cluster/tabs/etcd/S3Config.vue +153 -0
  947. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +138 -0
  948. package/edit/provisioning.cattle.io.cluster/tabs/networking/ACE.vue +73 -0
  949. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +214 -0
  950. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +211 -0
  951. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryMirrors.vue +138 -0
  952. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +66 -0
  953. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +149 -0
  954. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/DrainOptions.vue +155 -0
  955. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
  956. package/edit/rbac.authorization.k8s.io.clusterrole.vue +8 -0
  957. package/edit/rbac.authorization.k8s.io.role.vue +8 -0
  958. package/edit/resources.cattle.io.backup.vue +454 -0
  959. package/edit/resources.cattle.io.restore.vue +326 -0
  960. package/edit/secret/__tests__/ssh.test.ts +79 -0
  961. package/edit/secret/basic.vue +64 -0
  962. package/edit/secret/generic.vue +64 -0
  963. package/edit/secret/index.vue +407 -0
  964. package/edit/secret/registry.vue +145 -0
  965. package/edit/secret/ssh.vue +106 -0
  966. package/edit/secret/tls.vue +94 -0
  967. package/edit/service.vue +546 -0
  968. package/edit/serviceaccount.vue +193 -0
  969. package/edit/storage.k8s.io.storageclass/index.vue +307 -0
  970. package/edit/storage.k8s.io.storageclass/provisioners/custom.vue +25 -0
  971. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +114 -0
  972. package/edit/storage.k8s.io.storageclass/provisioners/driver.longhorn.io.vue +40 -0
  973. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +180 -0
  974. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-disk.vue +75 -0
  975. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/azure-file.vue +47 -0
  976. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/cinder.vue +69 -0
  977. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +117 -0
  978. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/glusterfs.vue +99 -0
  979. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/no-provisioner.vue +21 -0
  980. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/portworx-volume.vue +83 -0
  981. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/quobyte.vue +91 -0
  982. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/rbd.vue +117 -0
  983. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/scaleio.vue +116 -0
  984. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/storageos.vue +65 -0
  985. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +97 -0
  986. package/edit/token.vue +337 -0
  987. package/edit/ui.cattle.io.navlink.vue +461 -0
  988. package/edit/workload/Job.vue +339 -0
  989. package/edit/workload/Upgrading.vue +372 -0
  990. package/edit/workload/VolumeClaimTemplate.vue +136 -0
  991. package/edit/workload/__tests__/Job.test.ts +71 -0
  992. package/edit/workload/__tests__/Upgrading.test.ts +61 -0
  993. package/edit/workload/__tests__/index.test.ts +103 -0
  994. package/edit/workload/index.vue +677 -0
  995. package/edit/workload/mixins/workload.js +1067 -0
  996. package/edit/workload/storage/ContainerMountPaths.vue +171 -0
  997. package/edit/workload/storage/Mount.vue +157 -0
  998. package/edit/workload/storage/__tests__/Mount.test.ts +102 -0
  999. package/edit/workload/storage/__tests__/Storage.test.ts +106 -0
  1000. package/edit/workload/storage/awsElasticBlockStore.vue +73 -0
  1001. package/edit/workload/storage/azureDisk.vue +104 -0
  1002. package/edit/workload/storage/azureFile.vue +74 -0
  1003. package/edit/workload/storage/csi/driver.longhorn.io.vue +48 -0
  1004. package/edit/workload/storage/csi/index.vue +122 -0
  1005. package/edit/workload/storage/emptyDir.vue +88 -0
  1006. package/edit/workload/storage/ephemeralVolume/index.vue +108 -0
  1007. package/edit/workload/storage/gcePersistentDisk.vue +73 -0
  1008. package/edit/workload/storage/hostPath.vue +115 -0
  1009. package/edit/workload/storage/index.vue +339 -0
  1010. package/edit/workload/storage/nfs.vue +78 -0
  1011. package/edit/workload/storage/persistentVolumeClaim/__tests__/persistentvolumeclaim.test.ts +38 -0
  1012. package/edit/workload/storage/persistentVolumeClaim/index.vue +154 -0
  1013. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +256 -0
  1014. package/edit/workload/storage/secret.vue +186 -0
  1015. package/edit/workload/storage/vsphereVolume.vue +73 -0
  1016. package/initialize/App.vue +70 -0
  1017. package/initialize/app-extended.js +112 -0
  1018. package/initialize/entry-helpers.js +147 -0
  1019. package/initialize/entry.js +33 -0
  1020. package/initialize/install-components.js +11 -0
  1021. package/initialize/install-directives.js +61 -0
  1022. package/initialize/install-plugins.js +129 -0
  1023. package/list/__tests__/workload.test.ts +55 -0
  1024. package/list/catalog.cattle.io.app.vue +76 -0
  1025. package/list/catalog.cattle.io.clusterrepo.vue +83 -0
  1026. package/list/cis.cattle.io.clusterscan.vue +76 -0
  1027. package/list/fleet.cattle.io.bundle.vue +127 -0
  1028. package/list/fleet.cattle.io.cluster.vue +95 -0
  1029. package/list/fleet.cattle.io.clustergroup.vue +88 -0
  1030. package/list/fleet.cattle.io.clusterregistrationtoken.vue +94 -0
  1031. package/list/fleet.cattle.io.gitrepo.vue +108 -0
  1032. package/list/group.principal.vue +153 -0
  1033. package/list/harvesterhci.io.management.cluster.vue +247 -0
  1034. package/list/helm.cattle.io.projecthelmchart.vue +157 -0
  1035. package/list/logging.banzaicloud.io.clusterflow.vue +44 -0
  1036. package/list/logging.banzaicloud.io.flow.vue +45 -0
  1037. package/list/management.cattle.io.cluster.vue +54 -0
  1038. package/list/management.cattle.io.feature.vue +368 -0
  1039. package/list/management.cattle.io.fleetworkspace.vue +44 -0
  1040. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +51 -0
  1041. package/list/management.cattle.io.setting.vue +117 -0
  1042. package/list/management.cattle.io.user.vue +178 -0
  1043. package/list/monitoring.coreos.com.alertmanagerconfig.vue +83 -0
  1044. package/list/namespace.vue +81 -0
  1045. package/list/networking.k8s.io.ingress.vue +39 -0
  1046. package/list/node.vue +418 -0
  1047. package/list/persistentvolume.vue +89 -0
  1048. package/list/persistentvolumeclaim.vue +32 -0
  1049. package/list/provisioning.cattle.io.cluster.vue +326 -0
  1050. package/list/rbac.authorization.k8s.io.clusterrolebinding.vue +47 -0
  1051. package/list/service.vue +48 -0
  1052. package/list/ui.cattle.io.navlink.vue +72 -0
  1053. package/list/workload.vue +188 -0
  1054. package/machine-config/__tests__/vmwarevsphere.test.ts +302 -0
  1055. package/machine-config/amazonec2.vue +702 -0
  1056. package/machine-config/azure.vue +913 -0
  1057. package/machine-config/digitalocean.vue +231 -0
  1058. package/machine-config/generic.vue +103 -0
  1059. package/machine-config/linode.vue +189 -0
  1060. package/machine-config/pnap.vue +288 -0
  1061. package/machine-config/vmwarevsphere-config.ts +17 -0
  1062. package/machine-config/vmwarevsphere.vue +1268 -0
  1063. package/mixins/__tests__/auth-config.test.ts +74 -0
  1064. package/mixins/__tests__/chart.test.ts +104 -0
  1065. package/mixins/__tests__/create-edit-view.test.ts +56 -0
  1066. package/mixins/auth-config.js +332 -0
  1067. package/mixins/back-link.js +15 -0
  1068. package/mixins/brand.js +211 -0
  1069. package/mixins/browser-tab-visibility.js +31 -0
  1070. package/mixins/chart.js +557 -0
  1071. package/mixins/child-hook.js +82 -0
  1072. package/mixins/closeable.js +47 -0
  1073. package/mixins/compact-input.ts +25 -0
  1074. package/mixins/create-edit-view/impl.js +201 -0
  1075. package/mixins/create-edit-view/index.js +48 -0
  1076. package/mixins/fetch.client.js +90 -0
  1077. package/mixins/form-validation.js +197 -0
  1078. package/mixins/labeled-form-element.ts +225 -0
  1079. package/mixins/login.js +31 -0
  1080. package/mixins/metric-poller.js +19 -0
  1081. package/mixins/page-actions.js +36 -0
  1082. package/mixins/resource-fetch-api-pagination.js +339 -0
  1083. package/mixins/resource-fetch-namespaced.js +90 -0
  1084. package/mixins/resource-fetch.js +291 -0
  1085. package/mixins/resource-manager.js +109 -0
  1086. package/mixins/vue-select-overrides.js +102 -0
  1087. package/models/__tests__/apps.deployment.test.ts +93 -0
  1088. package/models/__tests__/batch.cronjob.test.ts +88 -0
  1089. package/models/__tests__/catalog.cattle.io.app.test.ts +148 -0
  1090. package/models/__tests__/cluster.test.ts +44 -0
  1091. package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
  1092. package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +157 -0
  1093. package/models/__tests__/logging.banzaicloud.io.flow.test.ts +88 -0
  1094. package/models/__tests__/management.cattle.io.cluster.test.ts +23 -0
  1095. package/models/__tests__/management.cattle.io.node.ts +181 -0
  1096. package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
  1097. package/models/__tests__/namespace.test.ts +189 -0
  1098. package/models/__tests__/node.test.ts +74 -0
  1099. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +155 -0
  1100. package/models/__tests__/schema.tests.ts +24 -0
  1101. package/models/__tests__/secret.test.ts +80 -0
  1102. package/models/__tests__/steve-schema.test.ts +73 -0
  1103. package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
  1104. package/models/__tests__/workload.test.ts +91 -0
  1105. package/models/app.js +25 -0
  1106. package/models/apps.controllerrevision.js +7 -0
  1107. package/models/apps.daemonset.js +22 -0
  1108. package/models/apps.deployment.js +71 -0
  1109. package/models/apps.replicaset.js +11 -0
  1110. package/models/apps.statefulset.js +49 -0
  1111. package/models/autoscaling.horizontalpodautoscaler.js +44 -0
  1112. package/models/batch.cronjob.js +85 -0
  1113. package/models/batch.job.js +19 -0
  1114. package/models/catalog.cattle.io.app.js +488 -0
  1115. package/models/catalog.cattle.io.clusterrepo.js +223 -0
  1116. package/models/catalog.cattle.io.operation.js +43 -0
  1117. package/models/catalog.cattle.io.repo.js +4 -0
  1118. package/models/catalog.cattle.io.uiplugin.js +37 -0
  1119. package/models/chart.js +50 -0
  1120. package/models/chartinstallaction.js +17 -0
  1121. package/models/chartupgradeaction.js +12 -0
  1122. package/models/cis.cattle.io.clusterscan.js +179 -0
  1123. package/models/cis.cattle.io.clusterscanbenchmark.js +18 -0
  1124. package/models/cis.cattle.io.clusterscanprofile.js +31 -0
  1125. package/models/cis.cattle.io.clusterscanreport.js +62 -0
  1126. package/models/cloudcredential.js +341 -0
  1127. package/models/cluster/node.js +487 -0
  1128. package/models/cluster/schema.js +6 -0
  1129. package/models/cluster.js +44 -0
  1130. package/models/cluster.x-k8s.io.machine.js +272 -0
  1131. package/models/cluster.x-k8s.io.machinedeployment.js +228 -0
  1132. package/models/cluster.x-k8s.io.machineset.js +23 -0
  1133. package/models/clusterroletemplatebinding.js +31 -0
  1134. package/models/configmap.js +20 -0
  1135. package/models/constraints.gatekeeper.sh.constraint.js +121 -0
  1136. package/models/driver.js +63 -0
  1137. package/models/etcdbackup.js +45 -0
  1138. package/models/event.js +34 -0
  1139. package/models/fleet.cattle.io.bundle.js +168 -0
  1140. package/models/fleet.cattle.io.cluster.js +221 -0
  1141. package/models/fleet.cattle.io.clustergroup.js +62 -0
  1142. package/models/fleet.cattle.io.clusterregistrationtoken.js +14 -0
  1143. package/models/fleet.cattle.io.gitrepo.js +548 -0
  1144. package/models/group.principal.js +71 -0
  1145. package/models/helm.cattle.io.projecthelmchart.js +38 -0
  1146. package/models/k8s.cni.cncf.io.networkattachmentdefinition.js +88 -0
  1147. package/models/kontainerdriver.js +88 -0
  1148. package/models/logging.banzaicloud.io.clusterflow.js +36 -0
  1149. package/models/logging.banzaicloud.io.clusteroutput.js +4 -0
  1150. package/models/logging.banzaicloud.io.flow.js +115 -0
  1151. package/models/logging.banzaicloud.io.output.js +173 -0
  1152. package/models/management/schema.js +6 -0
  1153. package/models/management.cattle.io.authconfig.js +70 -0
  1154. package/models/management.cattle.io.cluster.js +501 -0
  1155. package/models/management.cattle.io.clusterroletemplatebinding.js +143 -0
  1156. package/models/management.cattle.io.feature.js +56 -0
  1157. package/models/management.cattle.io.fleetworkspace.js +90 -0
  1158. package/models/management.cattle.io.gitreporestriction.js +5 -0
  1159. package/models/management.cattle.io.globalrole.js +172 -0
  1160. package/models/management.cattle.io.globalrolebinding.js +59 -0
  1161. package/models/management.cattle.io.kontainerdriver.js +90 -0
  1162. package/models/management.cattle.io.node.js +179 -0
  1163. package/models/management.cattle.io.nodepool.js +185 -0
  1164. package/models/management.cattle.io.nodetemplate.js +139 -0
  1165. package/models/management.cattle.io.podsecurityadmissionconfigurationtemplate.js +3 -0
  1166. package/models/management.cattle.io.project.js +182 -0
  1167. package/models/management.cattle.io.projectroletemplatebinding.js +150 -0
  1168. package/models/management.cattle.io.roletemplate.js +216 -0
  1169. package/models/management.cattle.io.setting.js +72 -0
  1170. package/models/management.cattle.io.user.js +302 -0
  1171. package/models/metrics.k8s.io.nodemetrics.js +41 -0
  1172. package/models/monitoring.coreos.com.alertmanagerconfig.js +126 -0
  1173. package/models/monitoring.coreos.com.podmonitor.js +23 -0
  1174. package/models/monitoring.coreos.com.prometheusrule.js +38 -0
  1175. package/models/monitoring.coreos.com.receiver.js +197 -0
  1176. package/models/monitoring.coreos.com.route.js +162 -0
  1177. package/models/monitoring.coreos.com.servicemonitor.js +23 -0
  1178. package/models/namespace.js +261 -0
  1179. package/models/networking.istio.io.destinationrule.js +19 -0
  1180. package/models/networking.k8s.io.ingress.js +209 -0
  1181. package/models/nodedriver.js +96 -0
  1182. package/models/persistentvolume.js +43 -0
  1183. package/models/persistentvolumeclaim.js +63 -0
  1184. package/models/pod.js +279 -0
  1185. package/models/principal.js +42 -0
  1186. package/models/projectroletemplatebinding.js +35 -0
  1187. package/models/provisioning.cattle.io.cluster.js +1091 -0
  1188. package/models/rbac.authorization.k8s.io.clusterrole.js +17 -0
  1189. package/models/rbac.authorization.k8s.io.clusterrolebinding.js +16 -0
  1190. package/models/rbac.authorization.k8s.io.role.js +52 -0
  1191. package/models/rbac.authorization.k8s.io.rolebinding.js +16 -0
  1192. package/models/replicationcontroller.js +4 -0
  1193. package/models/resources.cattle.io.backup.js +29 -0
  1194. package/models/resources.cattle.io.restore.js +33 -0
  1195. package/models/rke-machine-config.cattle.io.harvesterconfig.js +19 -0
  1196. package/models/rke-machine.cattle.io.amazonec2machinetemplate.js +15 -0
  1197. package/models/rke-machine.cattle.io.azuremachinetemplate.js +15 -0
  1198. package/models/rke-machine.cattle.io.digitaloceanmachinetemplate.js +15 -0
  1199. package/models/rke-machine.cattle.io.linodemachinetemplate.js +15 -0
  1200. package/models/rke-machine.cattle.io.machinetemplate.js +22 -0
  1201. package/models/rke-machine.cattle.io.pnapmachinetemplate.js +15 -0
  1202. package/models/rke-machine.cattle.io.vmwarevspheremachinetemplate.js +14 -0
  1203. package/models/rke.cattle.io.etcdsnapshot.js +76 -0
  1204. package/models/schema.js +38 -0
  1205. package/models/secret.js +473 -0
  1206. package/models/service.js +193 -0
  1207. package/models/steve-schema.ts +254 -0
  1208. package/models/storage.k8s.io.storageclass.js +164 -0
  1209. package/models/templates.gatekeeper.sh.constrainttemplate.js +23 -0
  1210. package/models/token.js +19 -0
  1211. package/models/ui.cattle.io.navlink.js +38 -0
  1212. package/models/workload.js +691 -0
  1213. package/models/workload.service.js +341 -0
  1214. package/package.json +173 -0
  1215. package/pages/404.vue +15 -0
  1216. package/pages/__tests__/prefs.test.ts +96 -0
  1217. package/pages/about.vue +311 -0
  1218. package/pages/account/create-key.vue +16 -0
  1219. package/pages/account/index.vue +308 -0
  1220. package/pages/account/pri.vue +229 -0
  1221. package/pages/auth/login.vue +742 -0
  1222. package/pages/auth/logout.vue +47 -0
  1223. package/pages/auth/setup.vue +646 -0
  1224. package/pages/auth/verify.vue +203 -0
  1225. package/pages/auth copy/login.vue +595 -0
  1226. package/pages/auth copy/logout.vue +47 -0
  1227. package/pages/auth copy/setup.vue +523 -0
  1228. package/pages/auth copy/verify.vue +203 -0
  1229. package/pages/c/_cluster/_product/_resource/_id.vue +12 -0
  1230. package/pages/c/_cluster/_product/_resource/_namespace/_id.vue +12 -0
  1231. package/pages/c/_cluster/_product/_resource/create.vue +12 -0
  1232. package/pages/c/_cluster/_product/_resource/index.vue +12 -0
  1233. package/pages/c/_cluster/_product/index.vue +15 -0
  1234. package/pages/c/_cluster/_product/members/index.vue +8 -0
  1235. package/pages/c/_cluster/_product/namespaces.vue +77 -0
  1236. package/pages/c/_cluster/_product/projectsnamespaces.vue +6 -0
  1237. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +18 -0
  1238. package/pages/c/_cluster/apps/charts/chart.vue +452 -0
  1239. package/pages/c/_cluster/apps/charts/index.vue +718 -0
  1240. package/pages/c/_cluster/apps/charts/install.helpers.js +15 -0
  1241. package/pages/c/_cluster/apps/charts/install.vue +2050 -0
  1242. package/pages/c/_cluster/auth/config/_id.vue +35 -0
  1243. package/pages/c/_cluster/auth/config/index.vue +114 -0
  1244. package/pages/c/_cluster/auth/group.principal/assign-edit.vue +138 -0
  1245. package/pages/c/_cluster/auth/roles/_resource/_id.vue +12 -0
  1246. package/pages/c/_cluster/auth/roles/_resource/create.vue +12 -0
  1247. package/pages/c/_cluster/auth/roles/index.vue +215 -0
  1248. package/pages/c/_cluster/auth/user.retention/index.vue +323 -0
  1249. package/pages/c/_cluster/ecm/index.vue +14 -0
  1250. package/pages/c/_cluster/explorer/ConfigBadge.vue +64 -0
  1251. package/pages/c/_cluster/explorer/EventsTable.vue +126 -0
  1252. package/pages/c/_cluster/explorer/__tests__/index.test.ts +264 -0
  1253. package/pages/c/_cluster/explorer/explorer-utils.js +17 -0
  1254. package/pages/c/_cluster/explorer/index.vue +1004 -0
  1255. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +71 -0
  1256. package/pages/c/_cluster/explorer/tools/index.vue +397 -0
  1257. package/pages/c/_cluster/explorer/tools/pages/_page.vue +29 -0
  1258. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +249 -0
  1259. package/pages/c/_cluster/fleet/index.vue +506 -0
  1260. package/pages/c/_cluster/gatekeeper/constraints/index.vue +90 -0
  1261. package/pages/c/_cluster/gatekeeper/index.vue +78 -0
  1262. package/pages/c/_cluster/istio/index.vue +149 -0
  1263. package/pages/c/_cluster/legacy/pages/_page.vue +29 -0
  1264. package/pages/c/_cluster/legacy/project/_page.vue +57 -0
  1265. package/pages/c/_cluster/legacy/project/index.vue +32 -0
  1266. package/pages/c/_cluster/legacy/project/pipelines.vue +96 -0
  1267. package/pages/c/_cluster/logging/index.vue +94 -0
  1268. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +92 -0
  1269. package/pages/c/_cluster/longhorn/index.vue +107 -0
  1270. package/pages/c/_cluster/manager/cloudCredential/_id.vue +15 -0
  1271. package/pages/c/_cluster/manager/cloudCredential/create.vue +15 -0
  1272. package/pages/c/_cluster/manager/cloudCredential/index.vue +158 -0
  1273. package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
  1274. package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
  1275. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +91 -0
  1276. package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
  1277. package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
  1278. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +60 -0
  1279. package/pages/c/_cluster/manager/jwt.authentication/index.vue +244 -0
  1280. package/pages/c/_cluster/manager/pages/_page.vue +22 -0
  1281. package/pages/c/_cluster/mcapps/pages/_page.vue +22 -0
  1282. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/index.vue +12 -0
  1283. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +320 -0
  1284. package/pages/c/_cluster/monitoring/alertmanagerconfig/index.vue +24 -0
  1285. package/pages/c/_cluster/monitoring/index.vue +202 -0
  1286. package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +21 -0
  1287. package/pages/c/_cluster/monitoring/monitor/create.vue +29 -0
  1288. package/pages/c/_cluster/monitoring/monitor/index.vue +99 -0
  1289. package/pages/c/_cluster/monitoring/route-receiver/_id.vue +29 -0
  1290. package/pages/c/_cluster/monitoring/route-receiver/create.vue +22 -0
  1291. package/pages/c/_cluster/monitoring/route-receiver/index.vue +133 -0
  1292. package/pages/c/_cluster/navlinks/_group.vue +42 -0
  1293. package/pages/c/_cluster/neuvector/index.vue +75 -0
  1294. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +128 -0
  1295. package/pages/c/_cluster/settings/banners.vue +361 -0
  1296. package/pages/c/_cluster/settings/brand.vue +648 -0
  1297. package/pages/c/_cluster/settings/index.vue +20 -0
  1298. package/pages/c/_cluster/settings/links.vue +167 -0
  1299. package/pages/c/_cluster/settings/performance.vue +515 -0
  1300. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +175 -0
  1301. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +551 -0
  1302. package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +193 -0
  1303. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +132 -0
  1304. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +261 -0
  1305. package/pages/c/_cluster/uiplugins/InstallDialog.vue +366 -0
  1306. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +503 -0
  1307. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +83 -0
  1308. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +152 -0
  1309. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +76 -0
  1310. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +77 -0
  1311. package/pages/c/_cluster/uiplugins/index.vue +1288 -0
  1312. package/pages/clusters/index.vue +21 -0
  1313. package/pages/diagnostic.vue +580 -0
  1314. package/pages/fail-whale.vue +203 -0
  1315. package/pages/home.vue +854 -0
  1316. package/pages/index.vue +54 -0
  1317. package/pages/prefs.vue +369 -0
  1318. package/pages/support/index.vue +266 -0
  1319. package/pkg/auto-import.js +118 -0
  1320. package/pkg/babel.config.js +8 -0
  1321. package/pkg/dynamic-importer.lib.js +82 -0
  1322. package/pkg/dynamic-plugin-loader.js +28 -0
  1323. package/pkg/import.js +10 -0
  1324. package/pkg/model-loader-require.lib.js +3 -0
  1325. package/pkg/tsconfig.json +65 -0
  1326. package/pkg/vue.config.js +146 -0
  1327. package/plugins/axios.js +31 -0
  1328. package/plugins/clean-html.js +103 -0
  1329. package/plugins/codemirror-loader.js +5 -0
  1330. package/plugins/codemirror.js +359 -0
  1331. package/plugins/dashboard-store/__tests__/actions.test.ts +250 -0
  1332. package/plugins/dashboard-store/__tests__/getters.test.ts +100 -0
  1333. package/plugins/dashboard-store/__tests__/mutations.test.ts +391 -0
  1334. package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
  1335. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
  1336. package/plugins/dashboard-store/actions.js +784 -0
  1337. package/plugins/dashboard-store/classify.js +18 -0
  1338. package/plugins/dashboard-store/getters.js +457 -0
  1339. package/plugins/dashboard-store/index.js +53 -0
  1340. package/plugins/dashboard-store/model-loader-require.js +12 -0
  1341. package/plugins/dashboard-store/model-loader.js +76 -0
  1342. package/plugins/dashboard-store/mutations.js +548 -0
  1343. package/plugins/dashboard-store/normalize.js +50 -0
  1344. package/plugins/dashboard-store/resource-class.js +1904 -0
  1345. package/plugins/ember-cookie.js +13 -0
  1346. package/plugins/extend-router.js +80 -0
  1347. package/plugins/floating-vue.js +1 -0
  1348. package/plugins/formatters.js +15 -0
  1349. package/plugins/global-formatters.js +20 -0
  1350. package/plugins/i18n.js +136 -0
  1351. package/plugins/internal-api/index.ts +37 -0
  1352. package/plugins/internal-api/shared/base-api.ts +13 -0
  1353. package/plugins/internal-api/shell/shell.api.ts +108 -0
  1354. package/plugins/js-yaml.js +4 -0
  1355. package/plugins/nuxt-client-init.js +3 -0
  1356. package/plugins/plugin.js +93 -0
  1357. package/plugins/replaceall.js +19 -0
  1358. package/plugins/shortkey.js +282 -0
  1359. package/plugins/steve/__tests__/getters.test.ts +214 -0
  1360. package/plugins/steve/__tests__/header-warnings.test.ts +238 -0
  1361. package/plugins/steve/__tests__/mutations.test.ts +50 -0
  1362. package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
  1363. package/plugins/steve/__tests__/steve-class.test.ts +59 -0
  1364. package/plugins/steve/__tests__/subscribe.spec.ts +109 -0
  1365. package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
  1366. package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
  1367. package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
  1368. package/plugins/steve/actions.js +386 -0
  1369. package/plugins/steve/caches/resourceCache.js +60 -0
  1370. package/plugins/steve/getters.js +342 -0
  1371. package/plugins/steve/header-warnings.ts +91 -0
  1372. package/plugins/steve/hybrid-class.js +102 -0
  1373. package/plugins/steve/index.js +76 -0
  1374. package/plugins/steve/mutations.js +210 -0
  1375. package/plugins/steve/norman-class.js +198 -0
  1376. package/plugins/steve/performanceTesting.js +128 -0
  1377. package/plugins/steve/projectAndNamespaceFiltering.utils.ts +80 -0
  1378. package/plugins/steve/resource-utils.ts +38 -0
  1379. package/plugins/steve/resourceWatcher.js +251 -0
  1380. package/plugins/steve/schema.d.ts +22 -0
  1381. package/plugins/steve/schema.utils.js +25 -0
  1382. package/plugins/steve/steve-class.js +61 -0
  1383. package/plugins/steve/steve-description-class.js +36 -0
  1384. package/plugins/steve/steve-pagination-utils.ts +513 -0
  1385. package/plugins/steve/subscribe.js +1092 -0
  1386. package/plugins/steve/worker/index.js +24 -0
  1387. package/plugins/steve/worker/web-worker.advanced.js +320 -0
  1388. package/plugins/steve/worker/web-worker.basic.js +116 -0
  1389. package/plugins/steve-create-worker.js +14 -0
  1390. package/plugins/version.js +11 -0
  1391. package/promptRemove/management.cattle.io.fleetworkspace.vue +98 -0
  1392. package/promptRemove/management.cattle.io.globalrole.vue +49 -0
  1393. package/promptRemove/management.cattle.io.project.vue +131 -0
  1394. package/promptRemove/management.cattle.io.roletemplate.vue +51 -0
  1395. package/promptRemove/mixin/roleDeletionCheck.js +105 -0
  1396. package/promptRemove/pod.vue +132 -0
  1397. package/public/index.html +75 -0
  1398. package/rancher-components/Accordion/Accordion.test.ts +45 -0
  1399. package/rancher-components/Accordion/Accordion.vue +86 -0
  1400. package/rancher-components/Accordion/index.ts +1 -0
  1401. package/rancher-components/BadgeState/BadgeState.test.ts +12 -0
  1402. package/rancher-components/BadgeState/BadgeState.vue +122 -0
  1403. package/rancher-components/BadgeState/index.ts +1 -0
  1404. package/rancher-components/Banner/Banner.test.ts +59 -0
  1405. package/rancher-components/Banner/Banner.vue +261 -0
  1406. package/rancher-components/Banner/index.ts +1 -0
  1407. package/rancher-components/Card/Card.test.ts +37 -0
  1408. package/rancher-components/Card/Card.vue +189 -0
  1409. package/rancher-components/Card/index.ts +1 -0
  1410. package/rancher-components/Form/Checkbox/Checkbox.test.ts +68 -0
  1411. package/rancher-components/Form/Checkbox/Checkbox.vue +507 -0
  1412. package/rancher-components/Form/Checkbox/index.ts +1 -0
  1413. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +57 -0
  1414. package/rancher-components/Form/LabeledInput/LabeledInput.vue +512 -0
  1415. package/rancher-components/Form/LabeledInput/index.ts +1 -0
  1416. package/rancher-components/Form/Radio/RadioButton.test.ts +33 -0
  1417. package/rancher-components/Form/Radio/RadioButton.vue +328 -0
  1418. package/rancher-components/Form/Radio/RadioGroup.test.ts +27 -0
  1419. package/rancher-components/Form/Radio/RadioGroup.vue +305 -0
  1420. package/rancher-components/Form/Radio/index.ts +2 -0
  1421. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +199 -0
  1422. package/rancher-components/Form/TextArea/index.ts +1 -0
  1423. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +111 -0
  1424. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +197 -0
  1425. package/rancher-components/Form/ToggleSwitch/index.ts +1 -0
  1426. package/rancher-components/Form/index.ts +5 -0
  1427. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +152 -0
  1428. package/rancher-components/LabeledTooltip/index.ts +1 -0
  1429. package/rancher-components/RcButton/RcButton.test.ts +97 -0
  1430. package/rancher-components/RcButton/RcButton.vue +96 -0
  1431. package/rancher-components/RcButton/index.ts +2 -0
  1432. package/rancher-components/RcButton/types.ts +18 -0
  1433. package/rancher-components/RcDropdown/RcDropdown.vue +163 -0
  1434. package/rancher-components/RcDropdown/RcDropdownItem.vue +122 -0
  1435. package/rancher-components/RcDropdown/RcDropdownMenu.vue +71 -0
  1436. package/rancher-components/RcDropdown/RcDropdownSeparator.vue +6 -0
  1437. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +52 -0
  1438. package/rancher-components/RcDropdown/index.ts +5 -0
  1439. package/rancher-components/RcDropdown/types.ts +49 -0
  1440. package/rancher-components/RcDropdown/useDropdownCollection.ts +54 -0
  1441. package/rancher-components/RcDropdown/useDropdownContext.ts +119 -0
  1442. package/rancher-components/StringList/StringList.test.ts +754 -0
  1443. package/rancher-components/StringList/StringList.vue +645 -0
  1444. package/rancher-components/StringList/index.ts +1 -0
  1445. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
  1446. package/scripts/build-pkg.sh +102 -0
  1447. package/scripts/clean +6 -0
  1448. package/scripts/drone-build-pkg.sh +31 -0
  1449. package/scripts/extension/bundle +106 -0
  1450. package/scripts/extension/helm/charts/ui-plugin-server/.helmignore +23 -0
  1451. package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +18 -0
  1452. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +63 -0
  1453. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +15 -0
  1454. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +10 -0
  1455. package/scripts/extension/helm/package/Dockerfile +27 -0
  1456. package/scripts/extension/helm/package/nginx.conf +17 -0
  1457. package/scripts/extension/helm/scripts/package +31 -0
  1458. package/scripts/extension/helm/scripts/patch +128 -0
  1459. package/scripts/extension/helm/scripts/version +31 -0
  1460. package/scripts/extension/helmpatch +80 -0
  1461. package/scripts/extension/parse-tag-name +39 -0
  1462. package/scripts/extension/publish +476 -0
  1463. package/scripts/pkgfile.js +23 -0
  1464. package/scripts/publish-pkg.sh +18 -0
  1465. package/scripts/publish-shell.sh +119 -0
  1466. package/scripts/record-deps.js +37 -0
  1467. package/scripts/serve-pkgs +71 -0
  1468. package/scripts/sync-shell-deps +37 -0
  1469. package/scripts/test-plugins-build.sh +246 -0
  1470. package/scripts/typegen.sh +101 -0
  1471. package/scripts/vue-migrate.js +686 -0
  1472. package/server/har-file.js +205 -0
  1473. package/server/server-middleware.js +11 -0
  1474. package/server/server.crt +22 -0
  1475. package/server/server.csr +16 -0
  1476. package/server/server.key +27 -0
  1477. package/server/v3.ext +8 -0
  1478. package/static/favicon.ico +0 -0
  1479. package/static/favicon.png +0 -0
  1480. package/static/loading-indicator.html +39 -0
  1481. package/store/__tests__/auth.test.ts +120 -0
  1482. package/store/__tests__/catalog.test.ts +207 -0
  1483. package/store/__tests__/index.test.ts +110 -0
  1484. package/store/__tests__/type-map.test.ts +1122 -0
  1485. package/store/action-menu.js +240 -0
  1486. package/store/auth.js +409 -0
  1487. package/store/aws.js +263 -0
  1488. package/store/catalog.js +666 -0
  1489. package/store/cru-resource.ts +26 -0
  1490. package/store/customisation.js +35 -0
  1491. package/store/digitalocean.js +198 -0
  1492. package/store/features.js +74 -0
  1493. package/store/github.js +109 -0
  1494. package/store/gitlab.js +159 -0
  1495. package/store/growl.js +98 -0
  1496. package/store/i18n.js +356 -0
  1497. package/store/index.js +1290 -0
  1498. package/store/linode.js +142 -0
  1499. package/store/modal.ts +71 -0
  1500. package/store/plugins.js +210 -0
  1501. package/store/pnap.js +128 -0
  1502. package/store/prefs.js +531 -0
  1503. package/store/resource-fetch.js +44 -0
  1504. package/store/slideInPanel.ts +47 -0
  1505. package/store/store-types.js +7 -0
  1506. package/store/type-map.js +2085 -0
  1507. package/store/type-map.utils.ts +243 -0
  1508. package/store/uiplugins.ts +67 -0
  1509. package/store/wm.js +95 -0
  1510. package/tsconfig.json +48 -0
  1511. package/tsconfig.paths.json +21 -0
  1512. package/types/api.d.ts +1 -0
  1513. package/types/components/labeledSelect.ts +50 -0
  1514. package/types/components/paginatedResourceTable.ts +25 -0
  1515. package/types/components/resourceLabeledSelect.ts +48 -0
  1516. package/types/fleet.d.ts +1 -0
  1517. package/types/form.ts +1 -0
  1518. package/types/generic.ts +2 -0
  1519. package/types/global-vue.d.ts +5 -0
  1520. package/types/internal-api/shell/growl.d.ts +25 -0
  1521. package/types/internal-api/shell/modal.d.ts +77 -0
  1522. package/types/internal-api/shell/slideIn.d.ts +15 -0
  1523. package/types/rancher/index.d.ts +9 -0
  1524. package/types/resources/fleet.d.ts +57 -0
  1525. package/types/resources/pod-security-admission.ts +36 -0
  1526. package/types/resources/settings.d.ts +93 -0
  1527. package/types/resources/userPreferences.d.ts +13 -0
  1528. package/types/shell/index.d.ts +4694 -0
  1529. package/types/store/dashboard-store.types.ts +46 -0
  1530. package/types/store/pagination.types.ts +470 -0
  1531. package/types/store/type-map.ts +30 -0
  1532. package/types/store/vuex.d.ts +17 -0
  1533. package/types/t.ts +1 -0
  1534. package/types/vue-shim.d.ts +23 -0
  1535. package/utils/__mocks__/socket.js +21 -0
  1536. package/utils/__tests__/array.test.ts +514 -0
  1537. package/utils/__tests__/cluster.test.ts +57 -0
  1538. package/utils/__tests__/create-yaml.test.ts +490 -0
  1539. package/utils/__tests__/formatter.test.ts +77 -0
  1540. package/utils/__tests__/grafana.test.ts +44 -0
  1541. package/utils/__tests__/kontainer.test.ts +180 -0
  1542. package/utils/__tests__/object.test.ts +443 -0
  1543. package/utils/__tests__/pod-security-admission.test.ts +61 -0
  1544. package/utils/__tests__/selector.test.ts +444 -0
  1545. package/utils/__tests__/sort.test.ts +61 -0
  1546. package/utils/__tests__/string.test.ts +91 -0
  1547. package/utils/__tests__/version.test.ts +18 -0
  1548. package/utils/alertmanagerconfig.js +181 -0
  1549. package/utils/array.ts +256 -0
  1550. package/utils/async.ts +38 -0
  1551. package/utils/auth.js +335 -0
  1552. package/utils/aws.js +0 -0
  1553. package/utils/axios.js +171 -0
  1554. package/utils/azure.js +24 -0
  1555. package/utils/banners.js +58 -0
  1556. package/utils/clipboard.js +5 -0
  1557. package/utils/cluster.js +333 -0
  1558. package/utils/color.js +148 -0
  1559. package/utils/computed.js +45 -0
  1560. package/utils/config.js +4 -0
  1561. package/utils/cookie-universal.js +10 -0
  1562. package/utils/create-yaml.js +518 -0
  1563. package/utils/crypto/LICENSE.txt +15 -0
  1564. package/utils/crypto/browserHashUtils.js +51 -0
  1565. package/utils/crypto/browserMd5.js +183 -0
  1566. package/utils/crypto/browserSha1.js +149 -0
  1567. package/utils/crypto/browserSha256.js +237 -0
  1568. package/utils/crypto/index.js +181 -0
  1569. package/utils/custom-validators.js +32 -0
  1570. package/utils/dom.js +15 -0
  1571. package/utils/download.js +35 -0
  1572. package/utils/duration.js +43 -0
  1573. package/utils/dynamic-importer.js +134 -0
  1574. package/utils/ember-page.js +30 -0
  1575. package/utils/error.js +211 -0
  1576. package/utils/errorTranslate.json +1336 -0
  1577. package/utils/favicon.js +49 -0
  1578. package/utils/fleet.ts +191 -0
  1579. package/utils/formatter.js +13 -0
  1580. package/utils/gatekeeper/util.js +35 -0
  1581. package/utils/gc/gc-interval.ts +40 -0
  1582. package/utils/gc/gc-root-store.js +76 -0
  1583. package/utils/gc/gc-route-changed.ts +44 -0
  1584. package/utils/gc/gc-types.ts +21 -0
  1585. package/utils/gc/gc.ts +282 -0
  1586. package/utils/git.ts +92 -0
  1587. package/utils/grafana.js +114 -0
  1588. package/utils/ingress.ts +64 -0
  1589. package/utils/kontainer.ts +190 -0
  1590. package/utils/kube.js +9 -0
  1591. package/utils/monitoring.js +63 -0
  1592. package/utils/namespace-filter.js +43 -0
  1593. package/utils/object.js +541 -0
  1594. package/utils/pagination-utils.ts +176 -0
  1595. package/utils/pagination-wrapper.ts +70 -0
  1596. package/utils/parse-externalid.js +139 -0
  1597. package/utils/platform.js +64 -0
  1598. package/utils/pod-security-admission.ts +39 -0
  1599. package/utils/poller-sequential.js +53 -0
  1600. package/utils/poller.js +39 -0
  1601. package/utils/position.js +172 -0
  1602. package/utils/promise.js +115 -0
  1603. package/utils/queue.js +70 -0
  1604. package/utils/router.js +140 -0
  1605. package/utils/select.js +88 -0
  1606. package/utils/selector.js +229 -0
  1607. package/utils/settings.ts +108 -0
  1608. package/utils/socket.js +409 -0
  1609. package/utils/sort.js +225 -0
  1610. package/utils/stream.js +49 -0
  1611. package/utils/string.js +363 -0
  1612. package/utils/svg-filter.js +301 -0
  1613. package/utils/time.js +121 -0
  1614. package/utils/title.ts +3 -0
  1615. package/utils/type-helpers.ts +9 -0
  1616. package/utils/uiplugins.ts +319 -0
  1617. package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
  1618. package/utils/units.js +184 -0
  1619. package/utils/url.ts +171 -0
  1620. package/utils/v-sphere.ts +285 -0
  1621. package/utils/validators/__tests__/cidr.test.ts +33 -0
  1622. package/utils/validators/cidr.js +14 -0
  1623. package/utils/validators/cluster-name.js +12 -0
  1624. package/utils/validators/container-images.js +24 -0
  1625. package/utils/validators/cron-schedule.js +14 -0
  1626. package/utils/validators/flow-output.js +15 -0
  1627. package/utils/validators/formRules/__tests__/index.test.ts +1218 -0
  1628. package/utils/validators/formRules/index.ts +535 -0
  1629. package/utils/validators/index.js +244 -0
  1630. package/utils/validators/kubernetes-name.js +39 -0
  1631. package/utils/validators/logging-outputs.js +11 -0
  1632. package/utils/validators/machine-pool.ts +20 -0
  1633. package/utils/validators/monitoring-route.js +13 -0
  1634. package/utils/validators/pod-affinity.js +128 -0
  1635. package/utils/validators/prometheusrule.js +76 -0
  1636. package/utils/validators/role-template.js +27 -0
  1637. package/utils/validators/service.js +136 -0
  1638. package/utils/validators/setting.js +9 -0
  1639. package/utils/version.js +128 -0
  1640. package/utils/versions.ts +39 -0
  1641. package/utils/width.js +39 -0
  1642. package/utils/window.js +46 -0
  1643. package/vue-config-helper.js +135 -0
  1644. package/vue.config.js +645 -0
@@ -0,0 +1,2085 @@
1
+ // This file has 2 sections that control getting and using specializations of particular types
2
+ // over the generic info that is specified or generated from schemas.
3
+ //
4
+ // 1) Getting info about types
5
+ //
6
+ // labelFor(schema, count) Get the display label for a schema. Count is (in English) 1 or not-1 for pluralizing
7
+ // groupLabelFor(schema) Get the label for the API group of this schema's type
8
+ // isIgnored(schema) Returns true if this type should be hidden from the tree
9
+ // groupForBasicType(schema) Returns the group a type should be shown in basic view, or false-y if it shouldn't be shown.
10
+ // typeWeightFor(type, forBasic) Get the weight value for a particular type label
11
+ // groupWeightFor(group, forBasic) Get the weight value for a particular group
12
+ // headersFor(schema) Returns the column definitions for a type to give to SortableTable
13
+ // activeProducts() Returns the list of products that are installed and should be shown
14
+ //
15
+ // 2) Detecting and using custom list/detail/edit/header components
16
+ //
17
+ // hasCustomList(type) Does type have a custom list implementation?
18
+ // hasCustomDetail(type[,subType]) Does type have a custom detail implementation?
19
+ // hasCustomEdit(type[,subType]) Does type have a custom edit implementation?
20
+ // importList(type) Returns a promise that resolves to the list component for type
21
+ // importDetail(type[,subType]) Returns a promise that resolves to the detail component for type
22
+ // importEdit(type[,subType]) Returns a promise that resolves to the edit component for type
23
+ // optionsFor(schemaOrType) Return the configured options for a type (from configureType)
24
+ //
25
+ // 3) Changing specialization info about a type
26
+ // For all:
27
+ // let { thingYouWant } = DSL(instanceOfTheStore, 'product');
28
+ //
29
+ // product( Add a product into the nav
30
+ // removable, -- Is the product removable (true) or built-in (false).
31
+ // weight, -- Sort order and divider sections in the product menu. 3=global (fleet, ecm), 2=always on (apps, explorer) 1=other
32
+ // showClusterSwitcher, -- Show the cluster switcher in the header (default true)
33
+ // showNamespaceFilter, -- Show the namespace filter in the header (default false)
34
+ // showWorkspaceSwitcher, -- Show the workspace switcher in the header (conflicts with namespace) (default false)
35
+ // ifHave, -- Show this product only if the given capability is available
36
+ // ifHaveGroup, -- Show this product only if the given group exists in the store [inStore]
37
+ // 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]
38
+ // ifHaveVerb, -- In combination with ifHaveTYpe, show it only if the type also has this collectionMethod
39
+ // inStore, -- Which store to look at for if* above and the left-nav, defaults to "cluster"
40
+ // rootProduct, -- Optional root (parent) product - if set, used to optimize navigation when product changes stays within root product
41
+ // inExplorer, -- Determines if the product is to be scoped to the explorer
42
+ // public, -- If true, show to all users. If false, only show when the Developer Tools pref is on (default true)
43
+ // category, -- Group to show the product in for the nav hamburger menu
44
+ // typeStoreMap, -- An object mapping types to the store that should be used to retrieve information about the type
45
+ // 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)
46
+ // hideNamespaceLocation -- Hide the namespace link in the ResourceDetail masthead of namespaced resources and hide the ExplorerProjectsNamespaces namespace link (default false)
47
+ // })
48
+ //
49
+ // externalLink(stringOrFn) The product has an external page (function gets context object
50
+ //
51
+ // virtualType(obj) Add an item to the tree that goes to a route instead of an actual type.
52
+ // -- obj can contain anything in the objects getTree returns.
53
+ // -- obj must have a `name` that is unique among all virtual types.
54
+ // -- `cluster` is automatically added to route.params if it exists.
55
+ //
56
+ // spoofedType(obj) Create a fake type that can be treated like a normal type
57
+ //
58
+ // basicType( Mark type(s) as always shown in the top of the nav
59
+ // type(s), -- Type name or array of type names
60
+ // group -- Group to show the type(s) under; false-y for top-level.
61
+ // )
62
+ // basicType( Mark all types in group as always shown in the top of the nav
63
+ // group, -- Group to show
64
+ // asLabel -- Label to display the group as; false-y for top-level.
65
+ // )
66
+ // ignoreType(type) Never show type
67
+ // weightType( Set the weight (sorting) order of one or more types
68
+ // typeOrArrayOfTypes,
69
+ // weight, -- Higher numbers are shown first/higher up on the nav tree
70
+ // forBasic -- Apply to basic type instead of regular type tree
71
+ // )
72
+ // mapType( Remap a type id to a display name
73
+ // matchRegexOrString, -- Type to match, or regex that matches types
74
+ // replacementStringOrFn, -- String to replace the type with, or
75
+ // -- sync function: (type, capturedString, schemaObj => { return 'new-type'; }
76
+ // mapWeight, -- Priority for apply this mapping (higher numbers applied first)
77
+ // continueOnMatch -- If true, continue applying to hit other rules that might match the new type.
78
+ // )
79
+ // moveType( Change the group a type is in
80
+ // matchRegexOrString, -- Type to match, or regex that matches types
81
+ // newGroup, -- Group to move the type into
82
+ // mapWeight, -- Priority for apply this mapping (higher numbers applied first)
83
+ // )
84
+ // componentForType( Map matching types to a single component name
85
+ // ( (this is helpful if multiple types should be rendered by a single component)
86
+ // matchRegexOrString, -- Type to match, or regex that matches types
87
+ // replacementString -- String to replace the type with
88
+ // )
89
+ // configureType( Display options for a particular type
90
+ // type, -- Type to apply to
91
+ // options -- Object of options. Defaults/Supported: {
92
+ // isCreatable: true, -- If false, disable create even if schema says it's allowed
93
+ // isEditable: true, -- Ditto, for edit
94
+ // isRemovable: true, -- Ditto, for remove/delete
95
+ // showState: true, -- If false, hide state in columns and masthead
96
+ // showAge: true, -- If false, hide age in columns and masthead
97
+ // showConfigView: true -- If false, hide masthead config button in view mode
98
+ // showListMasthead: true, -- If false, hide masthead in list view
99
+ // canYaml: true,
100
+ // resource: undefined -- Use this resource in ResourceDetails instead
101
+ // resourceDetail: undefined -- Use this resource specifically for ResourceDetail's detail component
102
+ // resourceEdit: undefined -- Use this resource specifically for ResourceDetail's edit component
103
+ // depaginate: undefined -- Use this to depaginate requests for this type
104
+ // resourceEditMasthead: true -- Show the Masthead in the edit resource component
105
+ // customRoute: undefined,
106
+ // hasGraph: undefined -- If true, render ForceDirectedTreeChart graph (ATTENTION: option graphConfig is needed also!!!)
107
+ // graphConfig: undefined -- Use this to pass along the graph configuration
108
+ // notFilterNamespace: undefined -- Define namespaces that do not need to be filtered
109
+ // localOnly: False -- Hide this type from the nav/search bar on downstream clusters
110
+ // custom: any - Custom options for a given type
111
+ // }
112
+ // )
113
+ // ignoreGroup(group): Never show group or any types in it
114
+ // weightGroup( Set the weight (sorting) of one or more groups
115
+ // groupOrArrayOfGroups, -- see weightType...
116
+ // weight
117
+ // )
118
+ // setGroupDefaultType( Set the default child type to show when the group is expanded
119
+ // groupOrArrayOfGroups, -- see setGroupDefaultType...
120
+ // defaultType
121
+ // )
122
+ // mapGroup( Remap a group name to a display name
123
+ // matchRegexOrString, -- see mapType...
124
+ // replacementString,
125
+ // mapWeight,
126
+ // continueOnMatch
127
+ // )
128
+ import { AGE, NAME, NAMESPACE as NAMESPACE_COL, STATE } from '@shell/config/table-headers';
129
+ import {
130
+ CATALOG,
131
+ COUNT,
132
+ SCHEMA,
133
+ MANAGEMENT,
134
+ NAMESPACE
135
+ } from '@shell/config/types';
136
+ import { VIEW_IN_API, EXPANDED_GROUPS, FAVORITE_TYPES } from '@shell/store/prefs';
137
+ import {
138
+ addObject, findBy, isArray, removeObject, filterBy
139
+ } from '@shell/utils/array';
140
+ import { clone, get } from '@shell/utils/object';
141
+ import {
142
+ ensureRegex, escapeHtml, escapeRegex, ucFirst, pluralize
143
+ } from '@shell/utils/string';
144
+ import {
145
+ importChart, importList, importDetail, importEdit, listProducts, loadProduct, importCustomPromptRemove, resolveList, resolveEdit, resolveWindowComponent, importWindowComponent, importLogin, resolveChart, resolveDetail, importDialog, importMachineConfig, resolveMachineConfigComponent, resolveCloudCredentialComponent, importCloudCredential
146
+ } from '@shell/utils/dynamic-importer';
147
+
148
+ import { NAME as EXPLORER } from '@shell/config/product/explorer';
149
+ import isObject from 'lodash/isObject';
150
+ import { normalizeType } from '@shell/plugins/dashboard-store/normalize';
151
+ import { sortBy } from '@shell/utils/sort';
152
+
153
+ import { haveV2Monitoring } from '@shell/utils/monitoring';
154
+ import { NEU_VECTOR_NAMESPACE } from '@shell/config/product/neuvector';
155
+ import { createHeaders, rowValueGetter } from '@shell/store/type-map.utils';
156
+ import { defineAsyncComponent } from 'vue';
157
+ import { cloud2harvesterhci } from '@shell/utils/router';
158
+
159
+ export const NAMESPACED = 'namespaced';
160
+ export const CLUSTER_LEVEL = 'cluster';
161
+ export const BOTH = 'both';
162
+
163
+ export const TYPE_MODES = {
164
+ /**
165
+ * allTypes usage: All resource types
166
+ *
167
+ * getTree usage: Remove ignored schemas, resources not applicable to ns, etc
168
+ */
169
+ ALL: 'all',
170
+ /**
171
+ * Represents resource types that should be shown at the top of the side nav.
172
+ *
173
+ * For example all fixed resource types above `More Resources` in the cluster explorer
174
+ *
175
+ * These will always be shown in the side nav
176
+ *
177
+ * allTypes usage: Resources that are in a group
178
+ *
179
+ * getTree usage: Remove ignored schemas, resources not applicable to ns, etc
180
+ */
181
+ BASIC: 'basic',
182
+ /**
183
+ * Represents any type of resource type that has been favourited
184
+ *
185
+ * These will always be shown in the side nav.
186
+ *
187
+ * allTypes usage: Resource types that have been favorited
188
+ *
189
+ * getTree usage: Remove ignored schemas, resources not applicable to ns, etc
190
+ */
191
+ FAVORITE: 'favorite',
192
+ /**
193
+ * Represents no virtual or spoofed types that have a count.
194
+ *
195
+ * For example the `More Resource` in the cluster explorer
196
+ *
197
+ * These will be shown in the side nav if there are resources in the ns filter OR the resource is not namespaces
198
+ *
199
+ * allTypes usage: All resource types that are not virtual or spoofed
200
+ *
201
+ * getTree usage: Remove types with no counts. Remove ignored schemas, resources not applicable to ns, etc
202
+ */
203
+ USED: 'used',
204
+ };
205
+
206
+ export const ROOT = 'root';
207
+
208
+ export const SPOOFED_PREFIX = '__[[spoofed]]__';
209
+ export const SPOOFED_API_PREFIX = '__[[spoofedapi]]__';
210
+
211
+ const instanceMethods = {};
212
+ const graphConfigMap = {};
213
+
214
+ export const IF_HAVE = {
215
+ V2_MONITORING: 'v2-monitoring',
216
+ PROJECT: 'project',
217
+ NO_PROJECT: 'no-project',
218
+ NOT_V1_ISTIO: 'not-v1-istio',
219
+ MULTI_CLUSTER: 'multi-cluster',
220
+ NEUVECTOR_NAMESPACE: 'neuvector-namespace',
221
+ ADMIN: 'admin-user',
222
+ MCM_DISABLED: 'mcm-disabled',
223
+ NOT_STANDALONE_HARVESTER: 'not-standalone-harvester',
224
+ };
225
+
226
+ export function DSL(store, product, module = 'type-map') {
227
+ // store.commit(`${ module }/product`, { name: product });
228
+
229
+ return {
230
+ product(inOpt) {
231
+ const opt = {
232
+ name: product,
233
+ weight: 1,
234
+ inStore: 'cluster',
235
+ inExplorer: false,
236
+ removable: true,
237
+ showClusterSwitcher: true,
238
+ showNamespaceFilter: false,
239
+ public: true,
240
+ filterMode: 'namespaces',
241
+ ...inOpt
242
+ };
243
+
244
+ // Convert strings to regex's - we do this once here for efficiency
245
+ for ( const k of ['ifHaveGroup', 'ifHaveType'] ) {
246
+ if ( opt[k] ) {
247
+ if (Array.isArray(opt[k])) {
248
+ opt[k] = opt[k].map((r) => regexToString(ensureRegex(r)));
249
+ } else {
250
+ opt[k] = regexToString(ensureRegex(opt[k]));
251
+ }
252
+ }
253
+ }
254
+
255
+ store.commit(`${ module }/product`, opt);
256
+ },
257
+
258
+ basicType(types, group) {
259
+ // Support passing in a map of types and using just the values
260
+ if ( !isArray(types) && types && isObject(types) ) {
261
+ types = Object.values(types);
262
+ }
263
+
264
+ store.commit(`${ module }/basicType`, {
265
+ product, types, group
266
+ });
267
+ },
268
+
269
+ // Type- and Group-dependent
270
+ groupBy(type, field) {
271
+ store.commit(`${ module }/groupBy`, { type, field });
272
+ },
273
+
274
+ headers(type, headers, paginationHeaders = []) {
275
+ headers.forEach((header) => {
276
+ // If on the client, then use the value getter if there is one
277
+ if (header.getValue) {
278
+ // we need to store the .value prop for the advanced filtering
279
+ header.valueProp = header.value;
280
+ header.value = header.getValue;
281
+ }
282
+
283
+ delete header.getValue;
284
+ });
285
+
286
+ store.commit(`${ module }/headers`, { type, headers });
287
+ store.commit(`${ module }/paginationHeaders`, { type, paginationHeaders });
288
+ },
289
+
290
+ hideBulkActions(type, field) {
291
+ store.commit(`${ module }/hideBulkActions`, { type, field });
292
+ },
293
+
294
+ configureType(match, options) {
295
+ if (options.graphConfig) {
296
+ graphConfigMap[match] = options.graphConfig;
297
+ delete options.graphConfig;
298
+ }
299
+ store.commit(`${ module }/configureType`, { ...options, match });
300
+ },
301
+
302
+ componentForType(match, replace) {
303
+ store.commit(`${ module }/componentForType`, { match, replace });
304
+ },
305
+
306
+ ignoreType(regexOrString) {
307
+ store.commit(`${ module }/ignoreType`, regexOrString);
308
+ },
309
+
310
+ ignoreGroup(regexOrString, cb) {
311
+ store.commit(`${ module }/ignoreGroup`, { regexOrString, cb });
312
+ },
313
+
314
+ weightGroup(input, weight, forBasic) {
315
+ if ( isArray(input) ) {
316
+ store.commit(`${ module }/weightGroup`, {
317
+ groups: input, weight, forBasic
318
+ });
319
+ } else {
320
+ store.commit(`${ module }/weightGroup`, {
321
+ group: input, weight, forBasic
322
+ });
323
+ }
324
+ },
325
+
326
+ setGroupDefaultType(input, defaultType) {
327
+ if ( isArray(input) ) {
328
+ store.commit(`${ module }/setGroupDefaultType`, { groups: input, defaultType });
329
+ } else {
330
+ store.commit(`${ module }/setGroupDefaultType`, { group: input, defaultType });
331
+ }
332
+ },
333
+
334
+ weightType(input, weight, forBasic) {
335
+ if ( isArray(input) ) {
336
+ store.commit(`${ module }/weightType`, {
337
+ types: input, weight, forBasic
338
+ });
339
+ } else {
340
+ store.commit(`${ module }/weightType`, {
341
+ type: input, weight, forBasic
342
+ });
343
+ }
344
+ },
345
+
346
+ mapGroup(match, replace, weight = 5, continueOnMatch = false) {
347
+ store.commit(`${ module }/mapGroup`, {
348
+ match, replace, weight, continueOnMatch
349
+ });
350
+ },
351
+
352
+ mapType(match, replace, weight = 5, continueOnMatch = false) {
353
+ store.commit(`${ module }/mapType`, {
354
+ match, replace, weight, continueOnMatch
355
+ });
356
+ },
357
+
358
+ moveType(match, group, weight = 5, continueOnMatch = false) {
359
+ store.commit(`${ module }/moveType`, {
360
+ match, group, weight,
361
+ });
362
+ },
363
+
364
+ virtualType(obj) {
365
+ store.commit(`${ module }/virtualType`, { product, obj });
366
+ },
367
+
368
+ spoofedType(obj) {
369
+ store.commit(`${ module }/spoofedType`, { product, obj });
370
+ }
371
+ };
372
+ }
373
+
374
+ let called = false;
375
+
376
+ export async function applyProducts(store, $plugin) {
377
+ if (called) {
378
+ return;
379
+ }
380
+
381
+ called = true;
382
+ for ( const product of listProducts() ) {
383
+ const impl = await loadProduct(product);
384
+
385
+ if ( impl?.init ) {
386
+ impl.init(store);
387
+ }
388
+ }
389
+ // Load the products from all plugins
390
+ $plugin.loadProducts();
391
+ }
392
+
393
+ export function productsLoaded() {
394
+ return called;
395
+ }
396
+
397
+ export const state = function() {
398
+ return {
399
+ products: [],
400
+ virtualTypes: {},
401
+ spoofedTypes: {},
402
+ basicTypes: {},
403
+ groupIgnore: [],
404
+ groupWeights: {},
405
+ groupDefaultTypes: {},
406
+ basicGroupWeights: { [ROOT]: 1000 },
407
+ groupMappings: [],
408
+ typeIgnore: [],
409
+ basicTypeWeights: {},
410
+ typeWeights: {},
411
+ typeMappings: [],
412
+ typeMoveMappings: [],
413
+ typeToComponentMappings: [],
414
+ typeOptions: [],
415
+ groupBy: {},
416
+ headers: {},
417
+ paginationHeaders: {},
418
+ hideBulkActions: {},
419
+ schemaGeneration: 1,
420
+ cache: {
421
+ typeMove: {},
422
+ groupLabel: {},
423
+ ignore: {},
424
+ list: {},
425
+ chart: {},
426
+ detail: {},
427
+ edit: {},
428
+ componentFor: {},
429
+ promptRemove: {},
430
+ windowComponents: {},
431
+ 'machine-config': {},
432
+ 'cloud-credential': {}
433
+
434
+ },
435
+ };
436
+ };
437
+
438
+ export const getters = {
439
+ // ----------------------------------------------------------------------------
440
+ // 1 ) Getting info
441
+ // ----------------------------------------------------------------------------
442
+ // Turns a type name into a display label (e.g. management.cattle.io.cluster -> Cluster)
443
+ labelFor(state, getters, rootState, rootGetters) {
444
+ return (schema, count = 1, language = null) => {
445
+ return _applyMapping(schema, state.typeMappings, 'id', false, () => {
446
+ // i18n-uses typeLabel.*
447
+ const key = `typeLabel."${ schema.id.toLowerCase() }"`;
448
+
449
+ if ( rootGetters['i18n/exists'](key, language) ) {
450
+ return rootGetters['i18n/t'](key, { count }, language).trim();
451
+ }
452
+
453
+ const out = schema?.attributes?.kind || schema.id || '?';
454
+
455
+ // Add spaces, but breaks typing names into jump menu naturally
456
+ // out = ucFirst(out.replace(/([a-z])([A-Z])/g,'$1 $2'));
457
+
458
+ if ( count === 1 ) {
459
+ return out;
460
+ }
461
+
462
+ // This works for most things... if you don't like it, put in a typeLabel translation for above.
463
+ return pluralize(out);
464
+ });
465
+ };
466
+ },
467
+
468
+ // Turns a group name into a display label (e.g. management.cattle.io.v3.cluster -> Cluster)
469
+ groupLabelFor(state) {
470
+ return (schemaOrName) => {
471
+ let group = schemaOrName;
472
+
473
+ if ( typeof schemaOrName === 'object' ) {
474
+ let moved = false;
475
+
476
+ for ( const rule of state.typeMoveMappings ) {
477
+ const re = stringToRegex(rule.match);
478
+
479
+ if ( schemaOrName.id.match(re) ) {
480
+ moved = true;
481
+ group = rule.replace;
482
+ }
483
+ }
484
+
485
+ if ( !moved ) {
486
+ group = group.attributes.group;
487
+ }
488
+ }
489
+
490
+ if ( typeof group !== 'string' ) {
491
+ return null;
492
+ }
493
+
494
+ const out = _applyMapping(group, state.groupMappings, null, state.cache.groupLabel, (group) => {
495
+ const match = group.match(/^(.*)\.k8s\.io$/);
496
+
497
+ if ( match ) {
498
+ return match[1].split(/\./).map((x) => ucFirst(x)).join('.');
499
+ }
500
+
501
+ return group;
502
+ });
503
+
504
+ return out;
505
+ };
506
+ },
507
+
508
+ groupForBasicType(state) {
509
+ return (product, schemaId) => {
510
+ return state.basicTypes?.[product]?.[cloud2harvesterhci(schemaId)];
511
+ };
512
+ },
513
+
514
+ groupsForVirTypes(state) {
515
+ return (product, name) => {
516
+ return state.virtualTypes?.[product].find(item => item.name === name)?.icon;
517
+ };
518
+ },
519
+
520
+ optionsFor(state, getters, rootState, rootGetters) {
521
+ const def = {
522
+ isCreatable: true,
523
+ isEditable: true,
524
+ isRemovable: true,
525
+ showState: true,
526
+ showAge: true,
527
+ canYaml: true,
528
+ namespaced: null,
529
+ listGroups: [],
530
+ listGroupsWillOverride: false,
531
+ listMandatorySort: null,
532
+ depaginate: false,
533
+ customRoute: undefined,
534
+ resourceEditMasthead: true,
535
+ custom: {},
536
+ };
537
+
538
+ return (schemaOrType, pagination) => {
539
+ // Note - This can run a LOT so needs to be performant
540
+
541
+ if (!schemaOrType) {
542
+ return {};
543
+ }
544
+
545
+ const type = (typeof schemaOrType === 'object' ? schemaOrType.id : schemaOrType);
546
+ const found = state.typeOptions.find((entry) => {
547
+ const re = stringToRegex(entry.match);
548
+
549
+ return re.test(type);
550
+ });
551
+
552
+ const opts = Object.assign({}, def, found || {});
553
+
554
+ // As this runs a lot, avoid anything we don't strictly need (like going out to another store)
555
+ if (!pagination) {
556
+ return opts;
557
+ }
558
+
559
+ const storeOptionsFor = schemaOrType?.$ctx?.getters?.['optionsFor'];
560
+ const storeOpts = storeOptionsFor ? storeOptionsFor({ getters, state }, {
561
+ schema: schemaOrType, pagination, opts
562
+ }) : {};
563
+
564
+ return {
565
+ ...opts,
566
+ ...storeOpts,
567
+ };
568
+ };
569
+ },
570
+
571
+ isFavorite(state, getters, rootState, rootGetters) {
572
+ return (schemaId) => {
573
+ return rootGetters['prefs/get'](FAVORITE_TYPES).includes(schemaId) || false;
574
+ };
575
+ },
576
+
577
+ typeWeightFor(state) {
578
+ return (type, forBasic) => {
579
+ type = type?.toLowerCase();
580
+
581
+ if ( forBasic ) {
582
+ return state.basicTypeWeights[type] || 0;
583
+ } else {
584
+ return state.typeWeights[type] || 0;
585
+ }
586
+ };
587
+ },
588
+
589
+ groupWeightFor(state) {
590
+ return (group, forBasic) => {
591
+ group = group.toLowerCase();
592
+
593
+ if ( forBasic ) {
594
+ return state.basicGroupWeights[group] || 0;
595
+ } else {
596
+ return state.groupWeights[group] || 0;
597
+ }
598
+ };
599
+ },
600
+
601
+ groupDefaultTypeFor(state) {
602
+ return (group) => {
603
+ group = group.toLowerCase();
604
+
605
+ return state.groupDefaultTypes[group];
606
+ };
607
+ },
608
+
609
+ getTree(state, getters, rootState, rootGetters) {
610
+ // Name the function so it's easily identifiable when performance tracing
611
+ return function getTree(productId, mode, allTypes, clusterId, namespaceMode, currentType, search) {
612
+ // getTree has four modes:
613
+ // - `basic` matches data types that should always be shown (even if there are 0 of them).
614
+ // - `used` matches the data types where there are more than 0 of them in the current set of namespaces.
615
+ // - `all` matches all types.
616
+ // - `favorite` matches starred types.
617
+ // namespaceMode: 'namespaced', 'cluster', or 'both'
618
+ // namespaces: null means all, otherwise it will be an array of specific namespaces to include
619
+ const isBasic = mode === TYPE_MODES.BASIC;
620
+
621
+ let searchRegex;
622
+
623
+ if ( search ) {
624
+ searchRegex = new RegExp(`^(.*)(${ escapeRegex(search) })(.*)$`, 'i');
625
+ }
626
+
627
+ const root = { children: [] };
628
+
629
+ // Add types from shortest to longest so that parents
630
+ // get added before children
631
+ const keys = Object.keys(allTypes).sort((a, b) => a.length - b.length);
632
+
633
+ // Set these for later
634
+ const currentLocal = rootGetters['i18n/current']();
635
+ const defaultLocal = rootGetters['i18n/default']();
636
+
637
+ for ( const type of keys ) {
638
+ const typeObj = allTypes[type];
639
+
640
+ if ( typeObj.schema && getters.isIgnored(typeObj.schema) ) {
641
+ // Skip ignored groups & types
642
+ continue;
643
+ }
644
+
645
+ const namespaced = typeObj.namespaced;
646
+
647
+ if ( (namespaceMode === NAMESPACED && !namespaced ) || (namespaceMode === CLUSTER_LEVEL && namespaced) ) {
648
+ // Skip types that are not the right namespace mode
649
+ continue;
650
+ }
651
+
652
+ const inStore = rootGetters.currentStore(typeObj.name);
653
+ const count = rootGetters[`${ inStore }/count`](typeObj);
654
+ const groupForBasicType = getters.groupForBasicType(productId, typeObj.name);
655
+
656
+ if ( typeObj.id === currentType ) {
657
+ // If this is the type currently being shown, always show it
658
+ } else if ( isBasic && !groupForBasicType ) {
659
+ // If we want the basic tree only return basic types;
660
+ continue;
661
+ } else if ( mode === TYPE_MODES.USED && count <= 0 ) {
662
+ // If there's none of this type, ignore this entry when viewing only in-use types
663
+ // Note: count is sometimes null, in js `null <= 0` is `true`.
664
+ continue;
665
+ }
666
+
667
+ const label = typeObj.labelKey ? rootGetters['i18n/t'](typeObj.labelKey) || typeObj.label : typeObj.label;
668
+
669
+ const virtual = !!typeObj.virtual;
670
+ let icon = typeObj.icon;
671
+
672
+ if ( (!virtual || typeObj.isSpoofed ) && !icon ) {
673
+ if ( namespaced ) {
674
+ icon = 'folder';
675
+ } else {
676
+ icon = 'globe';
677
+ }
678
+ }
679
+
680
+ const labelDisplay = highlightLabel(label,icon, count, typeObj.schema);
681
+
682
+ if ( !labelDisplay ) {
683
+ // Search happens in highlight and returns null if not found
684
+ continue;
685
+ }
686
+
687
+ let group;
688
+
689
+ if ( isBasic ) {
690
+ group = _ensureGroup(root, groupForBasicType, true);
691
+ } else if ( mode === TYPE_MODES.FAVORITE ) {
692
+ group = _ensureGroup(root, 'starred');
693
+ group.weight = 1000;
694
+ } else if ( mode === TYPE_MODES.USED ) {
695
+ group = _ensureGroup(root, `inUse::${ getters.groupLabelFor(typeObj.schema) }`);
696
+ } else {
697
+ group = _ensureGroup(root, typeObj.schema || typeObj.group || ROOT);
698
+ }
699
+
700
+ let route = typeObj.route;
701
+
702
+ // Make the default route if one isn't set
703
+ if (!route ) {
704
+ route = {
705
+ name: 'c-cluster-product-resource',
706
+ params: {
707
+ product: productId,
708
+ cluster: clusterId,
709
+ resource: typeObj.name,
710
+ }
711
+ };
712
+
713
+ typeObj.route = route;
714
+ }
715
+
716
+ // Cluster ID and Product should always be set
717
+ if ( route && typeof route === 'object' ) {
718
+ route.params = route.params || {};
719
+ route.params.cluster = clusterId;
720
+ route.params.product = productId;
721
+ }
722
+
723
+ group.children.push({
724
+ label,
725
+ labelDisplay,
726
+ mode: typeObj.mode,
727
+ exact: typeObj.exact || false,
728
+ 'exact-path': typeObj['exact-path'] || false,
729
+ namespaced,
730
+ route,
731
+ name: typeObj.name,
732
+ weight: typeObj.weight || getters.typeWeightFor(typeObj.schema?.id || label, isBasic),
733
+ overview: !!typeObj.overview,
734
+ });
735
+ }
736
+
737
+ // Recursively sort the groups
738
+ _sortGroup(root, mode);
739
+
740
+ return root.children;
741
+
742
+ // ----------------------
743
+
744
+ function _ensureGroup(tree, schemaOrName, forBasic = false) {
745
+ let name = getters.groupLabelFor(schemaOrName);
746
+ const isRoot = ( name === ROOT || name.startsWith(`${ ROOT }::`) );
747
+
748
+ if ( name && name.includes('::') ) {
749
+ let parent;
750
+
751
+ [parent, name] = name.split('::', 2);
752
+ tree = _ensureGroup(tree, parent);
753
+ }
754
+
755
+ // Translate if an entry exists
756
+ let label = name;
757
+ // i18n-uses nav.group.*
758
+ const key = `nav.group."${ name }"`;
759
+
760
+ if ( rootGetters['i18n/exists'](key) ) {
761
+ label = rootGetters['i18n/t'](key);
762
+ }
763
+
764
+ let group = findBy(tree.children, 'name', name);
765
+
766
+ if ( !group ) {
767
+ group = {
768
+ name,
769
+ label,
770
+ weight: getters.groupWeightFor(name, forBasic),
771
+ defaultType: getters.groupDefaultTypeFor(name),
772
+ };
773
+
774
+ tree.children.push(group);
775
+ }
776
+
777
+ if ( isRoot ) {
778
+ group.isRoot = true;
779
+ }
780
+
781
+ if ( !group.children ) {
782
+ group.children = [];
783
+ }
784
+
785
+ return group;
786
+ }
787
+
788
+ function highlightLabel(original, icon, count, schema) {
789
+ let label = escapeHtml(original);
790
+
791
+ if ( searchRegex ) {
792
+ let match = label.match(searchRegex);
793
+
794
+ if (!match) {
795
+ if ( currentLocal !== defaultLocal && schema ) {
796
+ const defaultLabel = getters.labelFor(schema, count, defaultLocal);
797
+
798
+ if (defaultLabel && defaultLabel !== label ) {
799
+ label += ` (${ defaultLabel })`;
800
+ match = label.match(searchRegex);
801
+ }
802
+ }
803
+ }
804
+
805
+ if ( match ) {
806
+ label = `${ escapeHtml(match[1]) }<span class="highlight">${ escapeHtml(match[2]) }</span>${ escapeHtml(match[3]) }`;
807
+ } else {
808
+ return null;
809
+ }
810
+ }
811
+
812
+ if ( icon ) {
813
+ console.log(icon)
814
+ label = `<i class="icon icon-fw icon-${ icon }"></i>${ label }`;
815
+ console.log(label)
816
+ }
817
+
818
+ return label;
819
+ }
820
+ };
821
+ },
822
+
823
+ isSpoofed(state, getters, rootState, rootGetters) {
824
+ return (type, product) => {
825
+ product = product || rootGetters['productId'];
826
+ const productSpoofedTypes = state.spoofedTypes[product] || [];
827
+
828
+ return productSpoofedTypes.some((st) => st.type === type);
829
+ };
830
+ },
831
+
832
+ isVirtual(state, getters, rootState, rootGetters) {
833
+ return (name, product) => {
834
+ product = product || rootGetters['productId'];
835
+ const productVirtualTypes = state.virtualTypes[product] || [];
836
+
837
+ return productVirtualTypes.some((st) => st.name === name);
838
+ };
839
+ },
840
+
841
+ getSpoofedInstances(state, getters, rootState, rootGetters) {
842
+ return async(type, product) => {
843
+ product = product || rootGetters['productId'];
844
+ const getInstances = instanceMethods[product]?.[type] || (() => []);
845
+ const instances = await getInstances();
846
+
847
+ instances.forEach((instance) => {
848
+ const type = instance.type;
849
+ const id = instance.id;
850
+ const link = `/${ SPOOFED_PREFIX }/${ type }/${ id }`;
851
+ const apiLink = `/${ SPOOFED_API_PREFIX }/${ type }/${ id }`;
852
+
853
+ instance.links = {
854
+ remove: instance.links?.remove || link,
855
+ self: instance.links?.self || link,
856
+ update: instance.links?.update || link,
857
+ view: instance.links?.view || apiLink,
858
+ };
859
+ instance.isSpoofed = true;
860
+ });
861
+
862
+ return instances;
863
+ };
864
+ },
865
+
866
+ getSpoofedInstance(state, getters, rootState, rootGetters) {
867
+ return async(type, product, id) => {
868
+ const productInstances = await getters.getSpoofedInstances(type, product);
869
+
870
+ return productInstances.find( (instance) => instance.id === id);
871
+ };
872
+ },
873
+
874
+ allSpoofedTypes(state, getters, rootState, rootGetters) {
875
+ return Object.values(state.spoofedTypes).flat();
876
+ },
877
+
878
+ spoofedSchemas(state, getters, rootState, rootGetters) {
879
+ return (product) => {
880
+ const types = state.spoofedTypes[product] || [];
881
+
882
+ return types.flatMap((type) => {
883
+ const schemas = type.schemas || [];
884
+
885
+ return schemas.map((schema) => ({
886
+ ...schema,
887
+ isSpoofed: true
888
+ }));
889
+ });
890
+ };
891
+ },
892
+
893
+ allSpoofedSchemas(state, getters, rootState, rootGetters) {
894
+ return getters.allSpoofedTypes.flatMap((type) => {
895
+ const schemas = type.schemas || [];
896
+
897
+ return schemas.map((schema) => ({
898
+ ...schema,
899
+ isSpoofed: true
900
+ }));
901
+ });
902
+ },
903
+
904
+ /**
905
+ * Given many things, create a list of menu items per schema given the mode
906
+ */
907
+ allTypes(state, getters, rootState, rootGetters) {
908
+ // Name the function so it's easily identifiable when performance tracing
909
+ return function allTypes(product, modes = [TYPE_MODES.ALL]) {
910
+ const module = state.products.find((p) => p.name === product)?.inStore;
911
+ const schemas = rootGetters[`${ module }/all`](SCHEMA);
912
+ const isLocal = !rootGetters.currentCluster?.isLocal;
913
+ const isRancher = rootGetters.isRancher;
914
+ const counts = rootGetters[`${ module }/all`](COUNT)?.[0]?.counts || {};
915
+
916
+ const out = {};
917
+
918
+ // For performance reasons this must be super quick to iterate over.
919
+ // For each schema...
920
+ // 1) Determine if it's applicable given the mode
921
+ // 2) For each applicable mode create a `Type` entry
922
+ for ( const schema of schemas ) {
923
+ let schemaModes = { };
924
+
925
+ modes.forEach((m) => {
926
+ schemaModes[m] = true;
927
+ });
928
+
929
+ const attrs = schema.attributes || {};
930
+ const typeOptions = getters['optionsFor'](schema);
931
+
932
+ schemaModes[TYPE_MODES.BASIC] = schemaModes[TYPE_MODES.BASIC] && getters.groupForBasicType(product, schema.id);
933
+
934
+ if (Object.values(schemaModes).every((s) => !s)) {
935
+ continue;
936
+ }
937
+
938
+ schemaModes[TYPE_MODES.FAVORITE] = schemaModes[TYPE_MODES.FAVORITE] && getters.isFavorite(schema.id);
939
+
940
+ if (Object.values(schemaModes).every((s) => !s)) {
941
+ continue;
942
+ }
943
+
944
+ const onlyBasic = schemaModes[TYPE_MODES.BASIC] && modes.length === 1;
945
+
946
+ // This clause is only valid for non-basic modes. So if we have only basic... skip it
947
+ if (!onlyBasic) {
948
+ const invalidType = !attrs.kind ||
949
+ (typeof typeOptions.ifRancherCluster !== 'undefined' && typeOptions.ifRancherCluster !== isRancher) ||
950
+ (typeOptions.localOnly && isLocal);
951
+
952
+ if (invalidType) {
953
+ // Remove anything not basic
954
+ schemaModes = { [TYPE_MODES.BASIC]: schemaModes[TYPE_MODES.BASIC] };
955
+ }
956
+ }
957
+
958
+ // This is an expensive request to make, so only do it if we really need to
959
+ let label;
960
+
961
+ Object.entries(schemaModes).forEach(([mode, enabled]) => {
962
+ if (!enabled) {
963
+ return;
964
+ }
965
+
966
+ if (!out[mode]) {
967
+ out[mode] = {};
968
+ }
969
+
970
+ if (!label) {
971
+ label = getters.labelFor(schema, counts[schema.id]);
972
+ }
973
+
974
+ out[mode][schema.id] = {
975
+ label,
976
+ mode,
977
+ weight: getters.typeWeightFor(schema?.id || label, mode === TYPE_MODES.BASIC),
978
+ schema,
979
+ name: schema.id,
980
+ namespaced: typeOptions.namespaced === null ? attrs.namespaced : typeOptions.namespaced,
981
+ route: typeOptions.customRoute
982
+ };
983
+ });
984
+ }
985
+
986
+ const nonUsedModes = modes.filter((m) => m !== TYPE_MODES.USED);
987
+ const isDev = rootGetters['prefs/get'](VIEW_IN_API);
988
+
989
+ // Add virtual and spoofed types
990
+ if ( nonUsedModes.length ) {
991
+ const virtualTypes = state.virtualTypes[product] || [];
992
+ const spoofedTypes = state.spoofedTypes[product] || [];
993
+ const allTypes = [...virtualTypes, ...spoofedTypes];
994
+
995
+ for ( const type of allTypes ) {
996
+ const item = clone(type);
997
+ const id = item.name;
998
+ const virtSpoofedModes = [...nonUsedModes];
999
+
1000
+ // Is there a virtual/spoofed type override for schema type?
1001
+ // Currently used by harvester, this should be investigated and removed if possible
1002
+ virtSpoofedModes.forEach((mode) => {
1003
+ if (out[mode]?.[id]) {
1004
+ delete out[mode][id];
1005
+ }
1006
+ });
1007
+
1008
+ if ( item['public'] === false && !isDev ) {
1009
+ continue;
1010
+ }
1011
+
1012
+ if (item.ifHave && !ifHave(rootGetters, item.ifHave)) {
1013
+ continue;
1014
+ }
1015
+
1016
+ if ( item.ifHaveType ) {
1017
+ const ifHaveTypeArray = Array.isArray(item.ifHaveType) ? item.ifHaveType : [item.ifHaveType];
1018
+ let satisfiesIfHave = true;
1019
+
1020
+ // Support an array of required types that the user must have access to
1021
+ for (let i = 0; i < ifHaveTypeArray.length; i++) {
1022
+ const ifHaveType = ifHaveTypeArray[i];
1023
+ const targetedSchemas = typeof ifHaveType === 'string' ? schemas : rootGetters[`${ ifHaveType.store }/all`](SCHEMA);
1024
+ const type = typeof ifHaveType === 'string' ? ifHaveType : ifHaveType?.type;
1025
+
1026
+ const haveIds = filterBy(targetedSchemas, 'id', normalizeType(type)).map((s) => s.id);
1027
+
1028
+ if (!haveIds.length) {
1029
+ satisfiesIfHave = false;
1030
+ break;
1031
+ }
1032
+
1033
+ if (item.ifHaveVerb && !ifHaveVerb(rootGetters, module, item.ifHaveVerb, haveIds)) {
1034
+ satisfiesIfHave = false;
1035
+ break;
1036
+ }
1037
+ }
1038
+
1039
+ if (!satisfiesIfHave) {
1040
+ continue;
1041
+ }
1042
+ }
1043
+
1044
+ if ( item.ifHaveSubTypes ) {
1045
+ const hasSome = (item.ifHaveSubTypes || []).some((type) => {
1046
+ return !!findBy(schemas, 'id', normalizeType(type));
1047
+ });
1048
+
1049
+ if (!hasSome) {
1050
+ continue;
1051
+ }
1052
+ }
1053
+
1054
+ if ( typeof item.ifRancherCluster !== 'undefined' && item.ifRancherCluster !== rootGetters.isRancher ) {
1055
+ continue;
1056
+ }
1057
+
1058
+ if (item.ifFeature) {
1059
+ if (item.ifFeature[0] === '!') {
1060
+ const feature = item.ifFeature.replace('!', '');
1061
+
1062
+ if (rootGetters['features/get'](feature)) {
1063
+ continue;
1064
+ }
1065
+ } else {
1066
+ if (!rootGetters['features/get'](item.ifFeature)) {
1067
+ continue;
1068
+ }
1069
+ }
1070
+ }
1071
+
1072
+ if (virtSpoofedModes.includes(TYPE_MODES.BASIC) && !getters.groupForBasicType(product, id) ) {
1073
+ virtSpoofedModes.splice(virtSpoofedModes.indexOf(TYPE_MODES.BASIC), 1);
1074
+ }
1075
+
1076
+ if (virtSpoofedModes.includes(TYPE_MODES.FAVORITE) && !getters.isFavorite(id) ) { // mode === TYPE_MODES.FAVORITE &&
1077
+ virtSpoofedModes.splice(virtSpoofedModes.indexOf(TYPE_MODES.FAVORITE), 1);
1078
+ }
1079
+
1080
+ // Ensure labelKey is taken into account... with a mock count
1081
+ // This is harmless if the translation doesn't require count
1082
+ if (item.labelKey && rootGetters['i18n/exists'](item.labelKey)) {
1083
+ item.label = rootGetters['i18n/t'](item.labelKey, { count: 2 }).trim();
1084
+ delete item.labelKey; // Label should really take precedence over labelKey, but it doesn't, so remove it
1085
+ } else {
1086
+ item.label = item.label || item.name;
1087
+ }
1088
+
1089
+ virtSpoofedModes.forEach((mode) => {
1090
+ const isBasic = mode === TYPE_MODES.BASIC;
1091
+ const weight = type.weight || getters.typeWeightFor(item.label, isBasic);
1092
+
1093
+ item.mode = mode;
1094
+ item.weight = weight;
1095
+ if (!out[mode]) {
1096
+ out[mode] = {};
1097
+ }
1098
+ out[mode][id] = item;
1099
+ });
1100
+ }
1101
+ }
1102
+
1103
+ return out;
1104
+ };
1105
+ },
1106
+
1107
+ groupByFor(state) {
1108
+ return (schema) => {
1109
+ return state.groupBy[schema?.id];
1110
+ };
1111
+ },
1112
+
1113
+ hideBulkActionsFor(state) {
1114
+ return (schema) => {
1115
+ return state.hideBulkActions[schema.id];
1116
+ };
1117
+ },
1118
+
1119
+ headersFor(state, getters, rootState, rootGetters) {
1120
+ return (schema, pagination) => {
1121
+ if (pagination) {
1122
+ const storeHeadersFor = schema?.$ctx?.getters?.['headersFor'];
1123
+
1124
+ if (storeHeadersFor) {
1125
+ const res = storeHeadersFor({ getters, state }, { schema, pagination });
1126
+
1127
+ if (res) {
1128
+ return res;
1129
+ }
1130
+ }
1131
+ }
1132
+
1133
+ return createHeaders({ rootGetters }, {
1134
+ headers: state.headers,
1135
+ typeOptions: getters['optionsFor'](schema, false),
1136
+ schema,
1137
+ columns: {
1138
+ state: STATE,
1139
+ name: NAME,
1140
+ namespace: NAMESPACE_COL,
1141
+ age: AGE,
1142
+ },
1143
+ pagination
1144
+ });
1145
+ };
1146
+ },
1147
+
1148
+ /**
1149
+ * Simple getter to fetch pre-configured headers used in pagination
1150
+ */
1151
+ configuredPaginationHeaders(state) {
1152
+ return (schemaOrType) => state.paginationHeaders?.[schemaOrType.id || schemaOrType];
1153
+ },
1154
+
1155
+ /**
1156
+ * Simple getter to fetch pre-configured headers (not used in paginated lists)
1157
+ */
1158
+ configuredHeaders(state) {
1159
+ return (schemaOrType) => state.headers?.[schemaOrType.id || schemaOrType];
1160
+ },
1161
+
1162
+ // ------------------------------------
1163
+ // Custom list/detail/edit/header component detection
1164
+ //
1165
+ // Note: you can't refactor these into one function that does `@/${kind}/${type}`,
1166
+ // because babel needs some hardcoded idea where to look for the dependency.
1167
+ //
1168
+ // Note 2: Yes these are editing state in a getter for caching... it's ok, probably.
1169
+ // ------------------------------------
1170
+ hasCustomList(state, getters, rootState) {
1171
+ return (rawType) => {
1172
+ const key = getters.componentFor(rawType);
1173
+
1174
+ return hasCustom(state, rootState, 'list', key, (key) => resolveList(key));
1175
+ };
1176
+ },
1177
+
1178
+ hasCustomChart(state, getters, rootState) {
1179
+ return (rawType) => {
1180
+ const key = getters.componentFor(rawType);
1181
+
1182
+ return hasCustom(state, rootState, 'chart', key, (key) => resolveChart(key));
1183
+ };
1184
+ },
1185
+
1186
+ hasCustomDetail(state, getters, rootState) {
1187
+ return (rawType, subType) => {
1188
+ const key = getters.componentFor(rawType, subType);
1189
+
1190
+ return hasCustom(state, rootState, 'detail', key, (key) => resolveDetail(key));
1191
+ };
1192
+ },
1193
+
1194
+ hasGraph(state, getters) {
1195
+ return (resource) => {
1196
+ const typeOptions = getters['optionsFor'](resource);
1197
+
1198
+ if (typeOptions && typeOptions.hasGraph) {
1199
+ return graphConfigMap[resource];
1200
+ }
1201
+
1202
+ return null;
1203
+ };
1204
+ },
1205
+
1206
+ hasCustomEdit(state, getters, rootState) {
1207
+ return (rawType, subType) => {
1208
+ const key = getters.componentFor(rawType, subType);
1209
+
1210
+ return hasCustom(state, rootState, 'edit', key, (key) => resolveEdit(key));
1211
+ };
1212
+ },
1213
+
1214
+ hasComponent(state, getters, rootState) {
1215
+ return (path) => {
1216
+ return hasCustom(state, rootState, 'edit', path, (path) => resolveEdit(path));
1217
+ };
1218
+ },
1219
+
1220
+ hasCustomPromptRemove(state, getters, rootState) {
1221
+ return (rawType, subType) => {
1222
+ const key = getters.componentFor(rawType, subType);
1223
+
1224
+ return hasCustom(state, rootState, 'promptRemove', key, () => require.resolve(`@shell/promptRemove/${ key }`));
1225
+ };
1226
+ },
1227
+
1228
+ hasCustomWindowComponent(state, getters, rootState) {
1229
+ return (rawType, subType) => {
1230
+ const key = getters.componentFor(rawType, subType);
1231
+
1232
+ return hasCustom(state, rootState, 'windowComponents', key, (key) => resolveWindowComponent(key));
1233
+ };
1234
+ },
1235
+
1236
+ hasCustomMachineConfigComponent(state, getters, rootState) {
1237
+ return (rawType, subType) => {
1238
+ const key = getters.componentFor(rawType, subType);
1239
+
1240
+ return hasCustom(state, rootState, 'machine-config', key, (key) => resolveMachineConfigComponent(key));
1241
+ };
1242
+ },
1243
+
1244
+ hasCustomCloudCredentialComponent(state, getters, rootState) {
1245
+ return (rawType, subType) => {
1246
+ const key = getters.componentFor(rawType, subType);
1247
+
1248
+ return hasCustom(state, rootState, 'cloud-credential', key, (key) => resolveCloudCredentialComponent(key));
1249
+ };
1250
+ },
1251
+
1252
+ importComponent(state, getters) {
1253
+ return (path) => {
1254
+ return importEdit(path);
1255
+ };
1256
+ },
1257
+
1258
+ importDialog(state, getters, rootState) {
1259
+ return (rawType, subType) => {
1260
+ return loadExtension(rootState, 'dialog', getters.componentFor(rawType, subType), importDialog);
1261
+ };
1262
+ },
1263
+
1264
+ importList(state, getters, rootState) {
1265
+ return (rawType) => {
1266
+ return loadExtension(rootState, 'list', getters.componentFor(rawType), importList);
1267
+ };
1268
+ },
1269
+
1270
+ importChart(state, getters, rootState) {
1271
+ return (rawType) => {
1272
+ return loadExtension(rootState, 'chart', getters.componentFor(rawType), importChart);
1273
+ };
1274
+ },
1275
+
1276
+ importDetail(state, getters, rootState) {
1277
+ return (rawType, subType) => {
1278
+ return loadExtension(rootState, 'detail', getters.componentFor(rawType, subType), importDetail);
1279
+ };
1280
+ },
1281
+
1282
+ importEdit(state, getters, rootState) {
1283
+ return (rawType, subType) => {
1284
+ return loadExtension(rootState, 'edit', getters.componentFor(rawType, subType), importEdit);
1285
+ };
1286
+ },
1287
+
1288
+ importCustomPromptRemove(state, getters, rootState) {
1289
+ return (rawType, subType) => {
1290
+ return loadExtension(rootState, 'promptRemove', getters.componentFor(rawType, subType), importCustomPromptRemove);
1291
+ };
1292
+ },
1293
+
1294
+ importWindowComponent(state, getters, rootState) {
1295
+ return (rawType, subType) => {
1296
+ return loadExtension(rootState, 'windowComponents', getters.componentFor(rawType, subType), importWindowComponent);
1297
+ };
1298
+ },
1299
+
1300
+ importLogin(state, getters, rootState) {
1301
+ return (authType) => {
1302
+ return loadExtension(rootState, 'login', authType, importLogin);
1303
+ };
1304
+ },
1305
+
1306
+ importMachineConfig(state, getters, rootState) {
1307
+ return (rawType, subType) => {
1308
+ return loadExtension(rootState, 'machine-config', getters.componentFor(rawType, subType), importMachineConfig);
1309
+ };
1310
+ },
1311
+
1312
+ importCloudCredential(state, getters, rootState) {
1313
+ return (rawType, subType) => {
1314
+ return loadExtension(rootState, 'cloud-credential', getters.componentFor(rawType, subType), importCloudCredential);
1315
+ };
1316
+ },
1317
+
1318
+ componentFor(state, getters) {
1319
+ return (type, subType) => {
1320
+ let key = type;
1321
+
1322
+ if ( subType ) {
1323
+ key = `${ type }/${ subType }`;
1324
+ }
1325
+
1326
+ if ( state.cache.componentFor[key] !== undefined ) {
1327
+ return state.cache.componentFor[key];
1328
+ }
1329
+
1330
+ let out = type;
1331
+
1332
+ const mapping = state.typeToComponentMappings.find((mapping) => {
1333
+ const re = stringToRegex(mapping.match);
1334
+
1335
+ return re.test(key);
1336
+ });
1337
+
1338
+ if ( mapping ) {
1339
+ out = mapping.replace;
1340
+ } else if ( subType ) {
1341
+ // Try again without the subType
1342
+ out = getters.componentFor(type);
1343
+ }
1344
+
1345
+ state.cache.componentFor[key] = out;
1346
+
1347
+ return out;
1348
+ };
1349
+ },
1350
+
1351
+ isIgnored(state, getters, rootState, rootGetters) {
1352
+ return (schema) => {
1353
+ let out = false;
1354
+
1355
+ for ( const rule of state.groupIgnore ) {
1356
+ const group = schema?.attributes?.group;
1357
+
1358
+ if (group && group.match(stringToRegex(rule.type) && isObject(rule) && rule.type)) {
1359
+ out = rule.cb(rootGetters);
1360
+ break;
1361
+ }
1362
+
1363
+ if ( group && typeof rule === 'string' && group.match(stringToRegex(rule)) ) {
1364
+ out = true;
1365
+ break;
1366
+ }
1367
+ }
1368
+
1369
+ if ( !out ) {
1370
+ for ( const rule of state.typeIgnore ) {
1371
+ if ( schema.id.match(stringToRegex(rule)) ) {
1372
+ out = true;
1373
+ break;
1374
+ }
1375
+ }
1376
+ }
1377
+
1378
+ state.cache.ignore[schema.id] = out;
1379
+
1380
+ return out;
1381
+ };
1382
+ },
1383
+
1384
+ activeProducts(state, getters, rootState, rootGetters) {
1385
+ const knownTypes = {};
1386
+ const knownGroups = {};
1387
+ const isDev = rootGetters['prefs/get'](VIEW_IN_API);
1388
+
1389
+ if ( state.schemaGeneration < 0 ) {
1390
+ // This does nothing, but makes activeProducts depend on schemaGeneration
1391
+ // so that it can be used to update the product list on schema change.
1392
+ return;
1393
+ }
1394
+
1395
+ return state.products.filter((p) => {
1396
+ const module = p.inStore;
1397
+
1398
+ if ( p['public'] === false && !isDev ) {
1399
+ return false;
1400
+ }
1401
+
1402
+ if ( p.ifGetter && !rootGetters[p.ifGetter] ) {
1403
+ return false;
1404
+ }
1405
+
1406
+ if ( !knownTypes[module] ) {
1407
+ const schemas = rootGetters[`${ module }/all`](SCHEMA);
1408
+
1409
+ knownTypes[module] = [];
1410
+ knownGroups[module] = [];
1411
+
1412
+ for ( const s of schemas ) {
1413
+ knownTypes[module].push(s._id);
1414
+
1415
+ if ( s._group ) {
1416
+ addObject(knownGroups[module], s._group);
1417
+ }
1418
+ }
1419
+ }
1420
+
1421
+ if ( p.ifFeature) {
1422
+ const features = Array.isArray(p.ifFeature) ? p.ifFeature : [p.ifFeature];
1423
+
1424
+ for (const f of features) {
1425
+ if (!rootGetters['features/get'](f)) {
1426
+ return false;
1427
+ }
1428
+ }
1429
+ }
1430
+
1431
+ if ( p.ifHave && !ifHave(rootGetters, p.ifHave)) {
1432
+ return false;
1433
+ }
1434
+
1435
+ if ( p.ifHaveType ) {
1436
+ const haveIds = knownTypes[module].filter((t) => t.match(stringToRegex(p.ifHaveType)) );
1437
+
1438
+ if ( !haveIds.length ) {
1439
+ return false;
1440
+ }
1441
+
1442
+ if ( p.ifHaveVerb && !ifHaveVerb(rootGetters, module, p.ifHaveVerb, haveIds)) {
1443
+ return false;
1444
+ }
1445
+ }
1446
+
1447
+ if ( p.ifHaveGroup && !knownGroups[module].find((t) => t.match(stringToRegex(p.ifHaveGroup)) ) ) {
1448
+ return false;
1449
+ }
1450
+
1451
+ return true;
1452
+ });
1453
+ },
1454
+
1455
+ isProductActive(state, getters) {
1456
+ return (name) => {
1457
+ if ( findBy(getters['activeProducts'], 'name', name) ) {
1458
+ return true;
1459
+ }
1460
+
1461
+ return false;
1462
+ };
1463
+ },
1464
+
1465
+ rowValueGetter(state) {
1466
+ return (schema, colName) => {
1467
+ const col = _findColumnByName(schema, colName);
1468
+
1469
+ return rowValueGetter(col);
1470
+ };
1471
+ },
1472
+
1473
+ isProductRegistered(state) {
1474
+ return (productName) => {
1475
+ const prod = state.products.find((p) => p.name === productName);
1476
+
1477
+ return !!prod;
1478
+ };
1479
+ },
1480
+
1481
+ productByName(state) {
1482
+ return (productName) => state.products.find((p) => p.name === productName);
1483
+ }
1484
+ };
1485
+
1486
+ export const mutations = {
1487
+ schemaChanged(state) {
1488
+ state.schemaGeneration = state.schemaGeneration + 1;
1489
+ },
1490
+
1491
+ // Remove the specified product
1492
+ remove(state, { product, plugin }) {
1493
+ const existing = state.products.findIndex((p) => p.name === product);
1494
+
1495
+ // Remove the product
1496
+ if (existing !== -1) {
1497
+ state.products.splice(existing, 1);
1498
+ }
1499
+
1500
+ // Go through the basic types and remove the headers
1501
+ if (state.virtualTypes[product]) {
1502
+ delete state.virtualTypes[product];
1503
+ }
1504
+
1505
+ if (state.basicTypes[product]) {
1506
+ // Remove table header configuration
1507
+ Object.keys(state.basicTypes[product]).forEach((type) => {
1508
+ delete state.headers[type];
1509
+ delete state.basicTypeWeights[type];
1510
+ delete state.cache.ignore[type];
1511
+ // These track whether the type has a custom component
1512
+ delete state.cache.detail[type];
1513
+ delete state.cache.edit[type];
1514
+ delete state.cache.list[type];
1515
+
1516
+ // Delete all of the entries from the componentFor cache where the valye is the type
1517
+ // Can do this more efficiently
1518
+ Object.keys(state.cache.componentFor).forEach((k) => {
1519
+ const v = state.cache.componentFor[k];
1520
+
1521
+ if (v === type) {
1522
+ delete state.cache.componentFor[k];
1523
+ }
1524
+ });
1525
+ });
1526
+
1527
+ delete state.basicTypes[product];
1528
+ }
1529
+
1530
+ if (plugin) {
1531
+ // kind is list, edit, detail etc
1532
+ Object.keys(plugin.types).forEach((kind) => {
1533
+ if (state.cache[kind]) {
1534
+ Object.keys(plugin.types[kind]).forEach((type) => {
1535
+ delete state.cache[kind][type];
1536
+ });
1537
+ }
1538
+ });
1539
+ }
1540
+ },
1541
+
1542
+ product(state, obj) {
1543
+ let existing = state.products.find((p) => p.name === obj.name);
1544
+
1545
+ if ( existing ) {
1546
+ Object.assign(existing, obj);
1547
+ } else {
1548
+ addObject(state.products, obj);
1549
+ existing = state.products.find((p) => p.name === obj.name);
1550
+ }
1551
+
1552
+ // Make sure deprecated `inExplorer` is synchronized with `rootProduct` (and vice-versa)
1553
+ if (existing?.inExplorer) {
1554
+ existing.rootProduct = EXPLORER;
1555
+ } else if (existing?.rootProduct === EXPLORER) {
1556
+ existing.inExplorer = true;
1557
+ }
1558
+
1559
+ // We make an assumption that if the store for a product is 'cluster' it will be displayed within cluster explorer
1560
+ // Detect that here and set rootProduct and inExporer in this case
1561
+ if (!existing?.rootProduct && existing?.inStore === 'cluster') {
1562
+ existing.rootProduct = EXPLORER;
1563
+ existing.inExplorer = (existing.rootProduct === EXPLORER);
1564
+ }
1565
+ },
1566
+
1567
+ virtualType(state, { product, obj }) {
1568
+ if ( !state.virtualTypes[product] ) {
1569
+ state.virtualTypes[product] = [];
1570
+ }
1571
+
1572
+ const copy = clone(obj);
1573
+
1574
+ copy.virtual = true;
1575
+
1576
+ const existing = findBy(state.virtualTypes[product], 'name', copy.name);
1577
+
1578
+ if ( existing ) {
1579
+ Object.assign(existing, copy);
1580
+ } else {
1581
+ addObject(state.virtualTypes[product], copy);
1582
+ }
1583
+ },
1584
+
1585
+ spoofedType(state, { product, obj }) {
1586
+ if ( !state.spoofedTypes[product] ) {
1587
+ state.spoofedTypes[product] = [];
1588
+ }
1589
+
1590
+ const copy = clone(obj);
1591
+
1592
+ instanceMethods[product] = instanceMethods[product] || {};
1593
+ instanceMethods[product][copy.type] = copy.getInstances;
1594
+ delete copy.getInstances;
1595
+
1596
+ copy.name = copy.type;
1597
+ copy.isSpoofed = true;
1598
+ copy.virtual = true;
1599
+ copy.schemas.forEach((schema) => {
1600
+ schema.links = {
1601
+ collection: `/${ SPOOFED_PREFIX }/${ schema.id }`,
1602
+ ...(schema.links || {})
1603
+ };
1604
+ });
1605
+
1606
+ const existing = findBy(state.spoofedTypes[product], 'type', copy.type);
1607
+
1608
+ if ( existing ) {
1609
+ Object.assign(existing, copy);
1610
+ } else {
1611
+ addObject(state.spoofedTypes[product], copy);
1612
+ }
1613
+ },
1614
+
1615
+ basicType(state, { product, group, types }) {
1616
+ if ( !product ) {
1617
+ product = EXPLORER;
1618
+ }
1619
+
1620
+ if ( !group ) {
1621
+ group = ROOT;
1622
+ }
1623
+
1624
+ if ( !isArray(types) ) {
1625
+ types = [types];
1626
+ }
1627
+
1628
+ if ( !state.basicTypes[product] ) {
1629
+ state.basicTypes[product] = {};
1630
+ }
1631
+
1632
+ for ( const t of types ) {
1633
+ state.basicTypes[product][t] = group;
1634
+ }
1635
+ },
1636
+
1637
+ ignoreGroup(state, { regexOrString: match, cb }) {
1638
+ match = ensureRegex(match);
1639
+ // State shouldn't contain actual RegExp objects, because they don't serialize
1640
+ cb ? state.groupIgnore.push({
1641
+ type: regexToString(match),
1642
+ cb
1643
+ }) : state.groupIgnore.push(regexToString(match));
1644
+ },
1645
+
1646
+ ignoreType(state, match) {
1647
+ match = ensureRegex(match);
1648
+ state.typeIgnore.push(regexToString(match));
1649
+ },
1650
+
1651
+ groupBy(state, { type, field }) {
1652
+ state.groupBy[type] = field;
1653
+ },
1654
+
1655
+ headers(state, { type, headers }) {
1656
+ state.headers[type] = headers;
1657
+ },
1658
+
1659
+ paginationHeaders(state, { type, paginationHeaders }) {
1660
+ state.paginationHeaders[type] = paginationHeaders;
1661
+ },
1662
+
1663
+ hideBulkActions(state, { type, field }) {
1664
+ state.hideBulkActions[type] = field;
1665
+ },
1666
+
1667
+ // weightGroup({group: 'core', weight: 99}); -- higher groups are shown first
1668
+ // These operate on group names *after* mapping but *before* translation
1669
+ weightGroup(state, {
1670
+ group, groups, weight, forBasic
1671
+ }) {
1672
+ if ( !groups ) {
1673
+ groups = [];
1674
+ }
1675
+
1676
+ if ( group ) {
1677
+ groups.push(group);
1678
+ }
1679
+
1680
+ const map = forBasic ? state.basicGroupWeights : state.groupWeights;
1681
+
1682
+ for ( const g of groups ) {
1683
+ map[g.toLowerCase()] = weight;
1684
+ }
1685
+ },
1686
+
1687
+ // setGroupDefaultType({group: 'core', defaultType: 'name'});
1688
+ // By default when a group is clicked, the first item is selected - this allows
1689
+ // this behaviour to be changed and a named child type can be chosen
1690
+ // These operate on group names *after* mapping but *before* translation
1691
+ setGroupDefaultType(state, { group, groups, defaultType }) {
1692
+ if ( !groups ) {
1693
+ groups = [];
1694
+ }
1695
+
1696
+ if ( group ) {
1697
+ groups.push(group);
1698
+ }
1699
+
1700
+ for ( const g of groups ) {
1701
+ state.groupDefaultTypes[g.toLowerCase()] = defaultType;
1702
+ }
1703
+ },
1704
+
1705
+ // weightType('Cluster' 99); -- higher groups are shown first
1706
+ // These operate on *schema* type names, before mapping
1707
+ weightType(state, {
1708
+ type, types, weight, forBasic
1709
+ }) {
1710
+ if ( !types ) {
1711
+ types = [];
1712
+ }
1713
+
1714
+ if ( type ) {
1715
+ types.push(type);
1716
+ }
1717
+
1718
+ const map = forBasic ? state.basicTypeWeights : state.typeWeights;
1719
+
1720
+ for ( const t of types ) {
1721
+ map[t.toLowerCase()] = weight;
1722
+ }
1723
+ },
1724
+
1725
+ // mapGroup('ugly.thing', 'Nice Thing', 1);
1726
+ // mapGroup(/ugly.thing.(stuff)', '$1', 2);
1727
+ // mapGroup(/ugly.thing.(stuff)', function(groupStr, ruleObj, regexMatch, typeObj) { return ucFirst(group.id) } , 2);
1728
+ mapGroup(state, {
1729
+ match, replace, weight = 5, continueOnMatch = false
1730
+ }) {
1731
+ _addMapping(state.groupMappings, match, replace, weight, continueOnMatch);
1732
+ },
1733
+
1734
+ mapType(state, {
1735
+ match, replace, weight = 5, continueOnMatch = false
1736
+ }) {
1737
+ _addMapping(state.typeMappings, match, replace, weight, continueOnMatch);
1738
+ },
1739
+
1740
+ // moveType('apps.deployment', 'Core');
1741
+ moveType(state, { match, group, weight = 5 }) {
1742
+ _addMapping(state.typeMoveMappings, match, group, weight);
1743
+ },
1744
+
1745
+ componentForType(state, { match, replace }) {
1746
+ match = ensureRegex(match);
1747
+ match = regexToString(match);
1748
+ state.typeToComponentMappings.push({ match, replace });
1749
+ },
1750
+
1751
+ configureType(state, options) {
1752
+ const match = regexToString(ensureRegex(options.match));
1753
+
1754
+ const idx = state.typeOptions.findIndex((obj) => obj.match === match);
1755
+ let obj = { ...options, match };
1756
+
1757
+ if ( idx >= 0 ) {
1758
+ // Merge the custom data object - multiple configures will update existing rather than overwrite
1759
+ obj.custom = Object.assign(state.typeOptions[idx].custom || {}, obj.custom || {});
1760
+ obj = Object.assign(state.typeOptions[idx], obj);
1761
+ state.typeOptions.splice(idx, 1, obj);
1762
+ } else {
1763
+ const obj = Object.assign({}, options, { match });
1764
+
1765
+ state.typeOptions.push(obj);
1766
+ }
1767
+ },
1768
+
1769
+ };
1770
+
1771
+ export const actions = {
1772
+ removeProduct({ commit }, metadata) {
1773
+ commit('remove', metadata);
1774
+ },
1775
+
1776
+ addFavorite({ dispatch, rootGetters }, type) {
1777
+ const types = rootGetters['prefs/get'](FAVORITE_TYPES) || [];
1778
+
1779
+ addObject(types, type);
1780
+
1781
+ dispatch('prefs/set', { key: FAVORITE_TYPES, value: types }, { root: true });
1782
+ },
1783
+
1784
+ removeFavorite({ dispatch, rootGetters }, type) {
1785
+ const types = rootGetters['prefs/get'](FAVORITE_TYPES) || [];
1786
+
1787
+ removeObject(types, type);
1788
+
1789
+ dispatch('prefs/set', { key: FAVORITE_TYPES, value: types }, { root: true });
1790
+ },
1791
+
1792
+ toggleGroup({ dispatch, rootGetters }, { group, expanded }) {
1793
+ const groups = rootGetters['prefs/get'](EXPANDED_GROUPS);
1794
+
1795
+ if ( expanded ) {
1796
+ addObject(groups, group);
1797
+ } else {
1798
+ removeObject(groups, group);
1799
+ }
1800
+
1801
+ dispatch('prefs/set', { key: EXPANDED_GROUPS, value: groups }, { root: true });
1802
+ },
1803
+
1804
+ configureType({ commit }, options) {
1805
+ commit('configureType', options);
1806
+ }
1807
+ };
1808
+
1809
+ function _sortGroup(tree, mode) {
1810
+ const by = ['weight:desc', 'namespaced', 'label'];
1811
+
1812
+ tree.children = sortBy(tree.children, by);
1813
+
1814
+ for (const entry of tree.children ) {
1815
+ if ( entry.children ) {
1816
+ _sortGroup(entry, mode);
1817
+ }
1818
+ }
1819
+ }
1820
+
1821
+ function _applyMapping(objOrValue, mappings, keyField, cache, defaultFn) {
1822
+ let key = objOrValue;
1823
+ let found = false;
1824
+
1825
+ if ( keyField ) {
1826
+ if ( typeof objOrValue !== 'object' ) {
1827
+ return objOrValue;
1828
+ }
1829
+
1830
+ key = get(objOrValue, keyField);
1831
+
1832
+ if ( typeof key !== 'string' ) {
1833
+ return null;
1834
+ }
1835
+ }
1836
+
1837
+ if ( key && cache && cache[key] ) {
1838
+ return cache[key];
1839
+ }
1840
+
1841
+ let out = `${ key }`;
1842
+
1843
+ for ( const rule of mappings ) {
1844
+ const re = stringToRegex(rule.match);
1845
+ const captured = out.match(re);
1846
+
1847
+ if ( captured && rule.replace ) {
1848
+ out = out.replace(re, rule.replace);
1849
+
1850
+ found = true;
1851
+ if ( !rule.continueOnMatch ) {
1852
+ break;
1853
+ }
1854
+ }
1855
+ }
1856
+
1857
+ if ( !found && defaultFn ) {
1858
+ out = defaultFn(out, objOrValue);
1859
+ }
1860
+
1861
+ if ( cache ) {
1862
+ cache[key] = out;
1863
+ }
1864
+
1865
+ return out;
1866
+ }
1867
+
1868
+ function _addMapping(mappings, match, replace, weight, continueOnMatch) {
1869
+ match = regexToString(ensureRegex(match));
1870
+
1871
+ mappings.push({
1872
+ match,
1873
+ replace,
1874
+ weight,
1875
+ continueOnMatch,
1876
+ insertIndex: mappings.length,
1877
+ });
1878
+
1879
+ // Re-sort the list by weight (highest first) and insert time (oldest first)
1880
+ mappings.sort((a, b) => {
1881
+ const pri = b.weight - a.weight;
1882
+
1883
+ if ( pri ) {
1884
+ return pri;
1885
+ }
1886
+
1887
+ return a.insertIndex - b.insertIndex;
1888
+ });
1889
+ }
1890
+
1891
+ // Regexes can't be represented in state because they don't serialize to JSON..
1892
+ const regexCache = {};
1893
+
1894
+ function regexToString(regex) {
1895
+ return regex.source;
1896
+ }
1897
+
1898
+ function stringToRegex(str) {
1899
+ let out = regexCache[str];
1900
+
1901
+ if ( !out ) {
1902
+ out = new RegExp(str);
1903
+ regexCache[str] = out;
1904
+ }
1905
+
1906
+ return out;
1907
+ }
1908
+
1909
+ function ifHave(getters, option) {
1910
+ switch (option) {
1911
+ case IF_HAVE.V2_MONITORING: {
1912
+ return haveV2Monitoring(getters);
1913
+ }
1914
+ case IF_HAVE.PROJECT: {
1915
+ return !!project(getters);
1916
+ }
1917
+ case IF_HAVE.NO_PROJECT: {
1918
+ return !project(getters);
1919
+ }
1920
+ case IF_HAVE.NOT_V1_ISTIO: {
1921
+ return !isV1Istio(getters);
1922
+ }
1923
+ case IF_HAVE.MULTI_CLUSTER: {
1924
+ return getters.isMultiCluster;
1925
+ }
1926
+ case IF_HAVE.NEUVECTOR_NAMESPACE: {
1927
+ return getters[`cluster/all`](NAMESPACE).find((n) => n.metadata.name === NEU_VECTOR_NAMESPACE);
1928
+ }
1929
+ case IF_HAVE.ADMIN: {
1930
+ return isAdminUser(getters);
1931
+ }
1932
+ case IF_HAVE.MCM_DISABLED: {
1933
+ return !getters['isRancherInHarvester'];
1934
+ }
1935
+ case IF_HAVE.NOT_STANDALONE_HARVESTER: {
1936
+ return !getters['isStandaloneHarvester'];
1937
+ }
1938
+ default:
1939
+ return false;
1940
+ }
1941
+ }
1942
+
1943
+ // Could list a larger set of resources that typically only an admin user would have
1944
+ export function isAdminUser(getters) {
1945
+ const canEditSettings = (getters['management/schemaFor'](MANAGEMENT.SETTING)?.resourceMethods || []).includes('PUT');
1946
+ const canEditFeatureFlags = (getters['management/schemaFor'](MANAGEMENT.FEATURE)?.resourceMethods || []).includes('PUT');
1947
+ const canInstallApps = (getters['management/schemaFor'](CATALOG.APP)?.resourceMethods || []).includes('PUT');
1948
+ const canAddRepos = (getters['management/schemaFor'](CATALOG.CLUSTER_REPO)?.resourceMethods || []).includes('PUT');
1949
+ const canPutHelmOperations = (getters['management/schemaFor'](CATALOG.OPERATION)?.resourceMethods || []).includes('PUT');
1950
+
1951
+ return canEditSettings && canEditFeatureFlags && canInstallApps && canAddRepos && canPutHelmOperations;
1952
+ }
1953
+
1954
+ function _findColumnByName(schema, colName) {
1955
+ const attributes = schema.attributes || {};
1956
+ const columns = attributes.columns || [];
1957
+
1958
+ return findBy(columns, 'name', colName);
1959
+ }
1960
+
1961
+ // Is V1 Istio installed?
1962
+ function isV1Istio(getters) {
1963
+ const cluster = getters['currentCluster'];
1964
+
1965
+ return !!cluster?.status?.istioEnabled;
1966
+ }
1967
+
1968
+ function ifHaveVerb(rootGetters, module, verb, haveIds) {
1969
+ for ( const haveId of haveIds ) {
1970
+ const schema = rootGetters[`${ module }/schemaFor`](haveId);
1971
+ const want = verb.toLowerCase();
1972
+ const collectionMethods = schema.collectionMethods || [];
1973
+ const resourceMethods = schema.resourceMethods || [];
1974
+ const have = [...collectionMethods, ...resourceMethods].map((x) => x.toLowerCase());
1975
+
1976
+ if ( !have.includes(want) && !have.includes(`blocked-${ want }`) ) {
1977
+ return false;
1978
+ }
1979
+ }
1980
+
1981
+ return true;
1982
+ }
1983
+
1984
+ // Look at the namespace filters to determine if a project is selected
1985
+ export function project(getters) {
1986
+ const clusterId = getters['currentCluster']?.id;
1987
+
1988
+ if ( !clusterId ) {
1989
+ return null;
1990
+ }
1991
+
1992
+ const filters = getters['namespaceFilters'];
1993
+ const namespaces = [];
1994
+ let projectName = null;
1995
+
1996
+ for (const filter of filters) {
1997
+ const [type, id] = filter.split('://', 2);
1998
+
1999
+ if (type === 'project') {
2000
+ if (projectName !== null) {
2001
+ // More than one project selected
2002
+ return null;
2003
+ }
2004
+ projectName = id;
2005
+ } else if (type === 'ns') {
2006
+ namespaces.push(id);
2007
+ } else {
2008
+ // Something other than project or namespace
2009
+ return null;
2010
+ }
2011
+ }
2012
+
2013
+ // No project found?
2014
+ if (!projectName) {
2015
+ return null;
2016
+ }
2017
+
2018
+ // We have one project and a set of namespaces
2019
+ // Check that all of the namespaces belong to the project
2020
+ const project = getters['management/byId'](MANAGEMENT.PROJECT, `${ clusterId }/${ projectName }`);
2021
+
2022
+ // No additional namespaces means just the project is selected
2023
+ if (namespaces.length === 0) {
2024
+ return project;
2025
+ }
2026
+
2027
+ // Convert the project namespaces into a map so we can check existence easily
2028
+ const prjNamespaceMap = project.namespaces.reduce((m, ns) => {
2029
+ m[ns.metadata.name] = true;
2030
+
2031
+ return m;
2032
+ }, {});
2033
+
2034
+ // All of the namespace filters must belong to the project
2035
+ const found = namespaces.reduce((total, ns) => {
2036
+ return prjNamespaceMap[ns] ? total + 1 : 0;
2037
+ }, 0);
2038
+
2039
+ if (found !== namespaces.length) {
2040
+ return null;
2041
+ }
2042
+
2043
+ return project;
2044
+ }
2045
+
2046
+ function hasCustom(state, rootState, kind, key, fallback) {
2047
+ const cache = state.cache[kind];
2048
+
2049
+ if ( cache[key] !== undefined ) {
2050
+ return cache[key];
2051
+ }
2052
+
2053
+ // Check to see if the custom kind is provided by a plugin (ignore booleans)
2054
+ const pluginComponent = rootState.$plugin.getDynamic(kind, key);
2055
+
2056
+ if (typeof pluginComponent !== 'boolean' && !!pluginComponent) {
2057
+ cache[key] = true;
2058
+
2059
+ return cache[key];
2060
+ }
2061
+
2062
+ // Fallback
2063
+ try {
2064
+ fallback(key);
2065
+ cache[key] = true;
2066
+ } catch (e) {
2067
+ cache[key] = false;
2068
+ }
2069
+
2070
+ return cache[key];
2071
+ }
2072
+
2073
+ function loadExtension(rootState, kind, key, fallback) {
2074
+ const ext = rootState.$plugin.getDynamic(kind, key);
2075
+
2076
+ if (ext) {
2077
+ if (typeof ext === 'function') {
2078
+ return defineAsyncComponent(ext);
2079
+ }
2080
+
2081
+ return () => defineAsyncComponent(ext);
2082
+ }
2083
+
2084
+ return fallback(key);
2085
+ }