@rancher/shell 3.0.7 → 3.0.8-rc.10

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 (375) hide show
  1. package/assets/brand/suse/banner.svg +1 -0
  2. package/assets/brand/suse/dark/banner.svg +1 -0
  3. package/assets/brand/suse/dark/login-landscape.svg +1 -0
  4. package/assets/brand/suse/dark/rancher-logo.svg +1 -1
  5. package/assets/brand/suse/favicon.png +0 -0
  6. package/assets/brand/suse/login-landscape.svg +1 -0
  7. package/assets/brand/suse/metadata.json +11 -1
  8. package/assets/brand/suse/rancher-logo.svg +1 -1
  9. package/assets/fonts/suse/suse-v2-latin-300.woff +0 -0
  10. package/assets/fonts/suse/suse-v2-latin-300.woff2 +0 -0
  11. package/assets/fonts/suse/suse-v2-latin-600.woff +0 -0
  12. package/assets/fonts/suse/suse-v2-latin-600.woff2 +0 -0
  13. package/assets/fonts/suse/suse-v2-latin-700.woff +0 -0
  14. package/assets/fonts/suse/suse-v2-latin-700.woff2 +0 -0
  15. package/assets/fonts/suse/suse-v2-latin-800.woff +0 -0
  16. package/assets/fonts/suse/suse-v2-latin-800.woff2 +0 -0
  17. package/assets/fonts/suse/suse-v2-latin-regular.woff +0 -0
  18. package/assets/fonts/suse/suse-v2-latin-regular.woff2 +0 -0
  19. package/assets/images/content/README.md +5 -0
  20. package/assets/images/content/cloud-native.svg +84 -0
  21. package/assets/images/content/dark/cloud-native.svg +21 -0
  22. package/assets/images/content/dark/shield.svg +59 -0
  23. package/assets/images/content/dark/suse.svg +10 -0
  24. package/assets/images/content/shield.svg +59 -0
  25. package/assets/images/content/suse.svg +10 -0
  26. package/assets/images/vendor/githubapp.svg +13 -0
  27. package/assets/styles/base/_typography.scss +2 -1
  28. package/assets/styles/fonts/_fontstack.scss +53 -1
  29. package/assets/styles/global/_cards.scss +0 -3
  30. package/assets/styles/global/_layout.scss +21 -35
  31. package/assets/styles/themes/_dark.scss +1 -1
  32. package/assets/styles/themes/_light.scss +1 -1
  33. package/assets/styles/themes/_modern.scss +16 -8
  34. package/assets/styles/themes/_suse.scss +116 -24
  35. package/assets/translations/en-us.yaml +185 -21
  36. package/assets/translations/zh-hans.yaml +0 -4
  37. package/components/AutoscalerCard.vue +113 -0
  38. package/components/AutoscalerTab.vue +94 -0
  39. package/components/BackLink.vue +8 -0
  40. package/components/BannerGraphic.vue +36 -21
  41. package/components/BrandImage.vue +17 -6
  42. package/components/ClusterIconMenu.vue +1 -1
  43. package/components/ClusterProviderIcon.vue +1 -1
  44. package/components/Cron/CronExpressionEditor.vue +1 -1
  45. package/components/Cron/CronExpressionEditorModal.vue +1 -1
  46. package/components/Drawer/Chrome.vue +2 -6
  47. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +4 -9
  48. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +3 -8
  49. package/components/Drawer/ResourceDetailDrawer/composables.ts +3 -4
  50. package/components/Drawer/ResourceDetailDrawer/index.vue +4 -9
  51. package/components/Drawer/ResourceDetailDrawer/types.ts +17 -0
  52. package/components/Drawer/types.ts +3 -0
  53. package/components/DynamicContent/DynamicContentBanner.vue +102 -0
  54. package/components/DynamicContent/DynamicContentCloseButton.vue +42 -0
  55. package/components/DynamicContent/DynamicContentIcon.vue +132 -0
  56. package/components/DynamicContent/DynamicContentPanel.vue +112 -0
  57. package/components/DynamicContent/content.ts +78 -0
  58. package/components/EmberPage.vue +1 -1
  59. package/components/IconOrSvg.vue +2 -2
  60. package/components/Inactivity.vue +222 -106
  61. package/components/InstallHelmCharts.vue +2 -2
  62. package/components/PaginatedResourceTable.vue +2 -6
  63. package/components/PopoverCard.vue +192 -0
  64. package/components/Questions/__tests__/index.test.ts +159 -0
  65. package/components/Resource/Detail/CopyToClipboard.vue +4 -1
  66. package/components/Resource/Detail/FetchLoader/composables.ts +18 -4
  67. package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
  68. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +1 -1
  69. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +4 -0
  70. package/components/Resource/Detail/Metadata/KeyValueRow.vue +1 -1
  71. package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
  72. package/components/Resource/Detail/Metadata/composables.ts +9 -9
  73. package/components/Resource/Detail/Metadata/index.vue +3 -3
  74. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -19
  75. package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +0 -29
  76. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +132 -150
  77. package/components/Resource/Detail/ResourcePopover/index.vue +54 -159
  78. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +0 -2
  79. package/components/Resource/Detail/TitleBar/composables.ts +2 -1
  80. package/components/Resource/Detail/TitleBar/index.vue +10 -6
  81. package/components/Resource/Detail/composables.ts +12 -0
  82. package/components/ResourceDetail/Masthead/latest.vue +29 -0
  83. package/components/ResourceDetail/index.vue +5 -2
  84. package/components/ResourceList/Masthead.vue +1 -1
  85. package/components/SortableTable/index.vue +18 -2
  86. package/components/Tabbed/__tests__/index.test.ts +86 -0
  87. package/components/{nav/WindowManager → Window}/ContainerLogs.vue +1 -1
  88. package/components/{nav/WindowManager → Window}/ContainerLogsActions.vue +1 -0
  89. package/components/{nav/WindowManager → Window}/__tests__/ContainerLogs.test.ts +1 -1
  90. package/components/{nav/WindowManager → Window}/__tests__/ContainerShell.test.ts +2 -2
  91. package/components/__tests__/AutoscalerCard.test.ts +154 -0
  92. package/components/__tests__/AutoscalerTab.test.ts +125 -0
  93. package/components/__tests__/PopoverCard.test.ts +204 -0
  94. package/components/auth/SelectPrincipal.vue +24 -6
  95. package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
  96. package/components/fleet/FleetConfigMapSelector.vue +117 -0
  97. package/components/fleet/FleetSecretSelector.vue +127 -0
  98. package/components/fleet/__tests__/FleetConfigMapSelector.test.ts +125 -0
  99. package/components/fleet/__tests__/FleetSecretSelector.test.ts +82 -0
  100. package/components/form/FileImageSelector.vue +13 -4
  101. package/components/form/FileSelector.vue +11 -2
  102. package/components/form/ResourceLabeledSelect.vue +1 -0
  103. package/components/form/__tests__/ResourceLabeledSelect.test.ts +90 -0
  104. package/components/formatter/Autoscaler.vue +97 -0
  105. package/components/formatter/InternalExternalIP.vue +198 -24
  106. package/components/formatter/__tests__/Autoscaler.test.ts +156 -0
  107. package/components/formatter/__tests__/InternalExternalIP.test.ts +133 -0
  108. package/components/google/util/__tests__/formatter.test.ts +47 -0
  109. package/components/google/util/formatter.ts +5 -2
  110. package/components/nav/Group.vue +12 -3
  111. package/components/nav/Header.vue +37 -16
  112. package/components/nav/NamespaceFilter.vue +13 -1
  113. package/components/nav/NotificationCenter/index.vue +2 -1
  114. package/components/nav/TopLevelMenu.helper.ts +16 -6
  115. package/components/nav/TopLevelMenu.vue +4 -2
  116. package/components/{DraggableZone.vue → nav/WindowManager/PinArea.vue} +47 -80
  117. package/components/nav/WindowManager/composables/useComponentsMount.ts +70 -0
  118. package/components/nav/WindowManager/composables/useDimensionsHandler.ts +105 -0
  119. package/components/nav/WindowManager/composables/useDragHandler.ts +99 -0
  120. package/components/nav/WindowManager/composables/usePanelHandler.ts +72 -0
  121. package/components/nav/WindowManager/composables/usePanelsHandler.ts +14 -0
  122. package/components/nav/WindowManager/composables/useResizeHandler.ts +167 -0
  123. package/components/nav/WindowManager/composables/useTabsHandler.ts +51 -0
  124. package/components/nav/WindowManager/constants.ts +23 -0
  125. package/components/nav/WindowManager/index.vue +61 -575
  126. package/components/nav/WindowManager/panels/HorizontalPanel.vue +265 -0
  127. package/components/nav/WindowManager/panels/TabBodyContainer.vue +39 -0
  128. package/components/nav/WindowManager/panels/VerticalPanel.vue +308 -0
  129. package/components/templates/default.vue +4 -40
  130. package/components/templates/home.vue +31 -5
  131. package/components/templates/plain.vue +30 -4
  132. package/components/templates/standalone.vue +1 -1
  133. package/composables/useI18n.ts +10 -1
  134. package/composables/useInterval.ts +15 -0
  135. package/config/__test__/uiplugins.test.ts +309 -0
  136. package/config/labels-annotations.js +9 -1
  137. package/config/product/auth.js +1 -0
  138. package/config/product/explorer.js +3 -1
  139. package/config/product/manager.js +20 -9
  140. package/config/query-params.js +1 -0
  141. package/config/router/routes.js +10 -2
  142. package/config/settings.ts +10 -2
  143. package/config/store.js +4 -2
  144. package/config/table-headers.js +8 -0
  145. package/config/types.js +11 -0
  146. package/config/uiplugins.js +46 -2
  147. package/config/version.js +1 -1
  148. package/core/__test__/extension-manager-impl.test.js +236 -0
  149. package/core/extension-manager-impl.js +23 -6
  150. package/core/plugin-helpers.ts +2 -0
  151. package/core/types-provisioning.ts +4 -1
  152. package/detail/pod.vue +1 -0
  153. package/detail/provisioning.cattle.io.cluster.vue +13 -1
  154. package/dialog/AddonConfigConfirmationDialog.vue +45 -1
  155. package/dialog/DeveloperLoadExtensionDialog.vue +12 -3
  156. package/dialog/RollbackWorkloadDialog.vue +2 -5
  157. package/directives/ui-context.ts +103 -0
  158. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +52 -11
  159. package/edit/auth/AuthProviderWarningBanners.vue +14 -1
  160. package/edit/auth/__tests__/oidc.test.ts +26 -0
  161. package/edit/auth/github-app-steps.vue +97 -0
  162. package/edit/auth/github-steps.vue +75 -0
  163. package/edit/auth/github.vue +99 -65
  164. package/edit/auth/oidc.vue +5 -1
  165. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
  166. package/edit/cloudcredential.vue +1 -1
  167. package/edit/configmap.vue +1 -0
  168. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  169. package/edit/fleet.cattle.io.gitrepo.vue +0 -10
  170. package/edit/fleet.cattle.io.helmop.vue +51 -2
  171. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  172. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  173. package/edit/logging-flow/index.vue +1 -0
  174. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  175. package/edit/management.cattle.io.fleetworkspace.vue +1 -1
  176. package/edit/management.cattle.io.project.vue +1 -0
  177. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -1
  178. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +2 -1
  179. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  180. package/edit/monitoring.coreos.com.receiver/index.vue +2 -1
  181. package/edit/monitoring.coreos.com.route.vue +1 -1
  182. package/edit/namespace.vue +1 -0
  183. package/edit/networking.istio.io.destinationrule/index.vue +1 -0
  184. package/edit/networking.k8s.io.ingress/index.vue +1 -0
  185. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +15 -5
  186. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -0
  187. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -0
  188. package/edit/node.vue +1 -0
  189. package/edit/persistentvolume/index.vue +27 -22
  190. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +13 -14
  191. package/edit/persistentvolume/plugins/azureDisk.vue +49 -48
  192. package/edit/persistentvolume/plugins/azureFile.vue +15 -14
  193. package/edit/persistentvolume/plugins/cephfs.vue +15 -14
  194. package/edit/persistentvolume/plugins/cinder.vue +15 -14
  195. package/edit/persistentvolume/plugins/csi.vue +18 -16
  196. package/edit/persistentvolume/plugins/fc.vue +13 -14
  197. package/edit/persistentvolume/plugins/flexVolume.vue +15 -14
  198. package/edit/persistentvolume/plugins/flocker.vue +1 -3
  199. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +13 -14
  200. package/edit/persistentvolume/plugins/glusterfs.vue +15 -14
  201. package/edit/persistentvolume/plugins/hostPath.vue +40 -39
  202. package/edit/persistentvolume/plugins/iscsi.vue +13 -14
  203. package/edit/persistentvolume/plugins/local.vue +1 -3
  204. package/edit/persistentvolume/plugins/longhorn.vue +23 -22
  205. package/edit/persistentvolume/plugins/nfs.vue +15 -14
  206. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -14
  207. package/edit/persistentvolume/plugins/portworxVolume.vue +15 -14
  208. package/edit/persistentvolume/plugins/quobyte.vue +15 -14
  209. package/edit/persistentvolume/plugins/rbd.vue +15 -14
  210. package/edit/persistentvolume/plugins/scaleIO.vue +15 -14
  211. package/edit/persistentvolume/plugins/storageos.vue +15 -14
  212. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -3
  213. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +32 -5
  214. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +35 -0
  215. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +155 -0
  216. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +11 -9
  217. package/edit/provisioning.cattle.io.cluster/index.vue +25 -15
  218. package/edit/provisioning.cattle.io.cluster/rke2.vue +98 -17
  219. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +28 -2
  220. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +107 -5
  221. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +92 -4
  222. package/edit/secret/index.vue +1 -1
  223. package/edit/service.vue +9 -4
  224. package/edit/serviceaccount.vue +1 -0
  225. package/edit/storage.k8s.io.storageclass/index.vue +1 -0
  226. package/edit/workload/index.vue +2 -1
  227. package/edit/workload/mixins/workload.js +1 -1
  228. package/initialize/App.vue +4 -4
  229. package/initialize/install-directives.js +2 -0
  230. package/initialize/install-plugins.js +19 -2
  231. package/list/projectsecret.vue +1 -1
  232. package/list/provisioning.cattle.io.cluster.vue +15 -2
  233. package/machine-config/amazonec2.vue +42 -135
  234. package/machine-config/azure.vue +1 -1
  235. package/machine-config/components/EC2Networking.vue +490 -0
  236. package/machine-config/components/__tests__/EC2Networking.test.ts +148 -0
  237. package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +294 -0
  238. package/machine-config/digitalocean.vue +11 -0
  239. package/machine-config/google.vue +1 -1
  240. package/mixins/__tests__/brand.spec.ts +2 -2
  241. package/mixins/__tests__/chart.test.ts +21 -0
  242. package/mixins/brand.js +1 -7
  243. package/mixins/chart.js +8 -2
  244. package/mixins/create-edit-view/index.js +5 -0
  245. package/models/__tests__/chart.test.ts +49 -12
  246. package/models/__tests__/compliance.cattle.io.clusterscanprofile.spec.js +30 -0
  247. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
  248. package/models/catalog.cattle.io.app.js +1 -1
  249. package/models/chart.js +28 -14
  250. package/models/cluster/node.js +13 -6
  251. package/models/cluster.x-k8s.io.machine.js +10 -20
  252. package/models/cluster.x-k8s.io.machinedeployment.js +5 -1
  253. package/models/compliance.cattle.io.clusterscanprofile.js +1 -1
  254. package/models/management.cattle.io.authconfig.js +1 -0
  255. package/models/management.cattle.io.cluster.js +21 -3
  256. package/models/management.cattle.io.kontainerdriver.js +1 -0
  257. package/models/provisioning.cattle.io.cluster.js +249 -33
  258. package/package.json +6 -5
  259. package/pages/auth/login.vue +43 -4
  260. package/pages/auth/verify.vue +1 -1
  261. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +3 -2
  262. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
  263. package/pages/c/_cluster/apps/charts/chart.vue +35 -17
  264. package/pages/c/_cluster/apps/charts/index.vue +11 -13
  265. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  266. package/pages/c/_cluster/explorer/EventsTable.vue +89 -3
  267. package/pages/c/_cluster/explorer/index.vue +8 -6
  268. package/pages/c/_cluster/explorer/tools/index.vue +3 -3
  269. package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
  270. package/pages/c/_cluster/settings/brand.vue +1 -1
  271. package/pages/c/_cluster/settings/performance.vue +12 -25
  272. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +7 -0
  273. package/pages/c/_cluster/uiplugins/catalogs.vue +147 -0
  274. package/pages/c/_cluster/uiplugins/index.vue +126 -184
  275. package/pages/home.vue +327 -16
  276. package/pkg/dynamic-importer.lib.js +4 -0
  277. package/plugins/axios.js +2 -1
  278. package/plugins/dashboard-client-init.js +3 -0
  279. package/plugins/dashboard-store/actions.js +1 -1
  280. package/plugins/dashboard-store/getters.js +18 -1
  281. package/plugins/dashboard-store/resource-class.js +21 -6
  282. package/plugins/dynamic-content.js +13 -0
  283. package/plugins/i18n.js +8 -0
  284. package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
  285. package/plugins/steve/steve-pagination-utils.ts +41 -22
  286. package/plugins/steve/subscribe.js +17 -9
  287. package/plugins/subscribe-events.ts +4 -2
  288. package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
  289. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -34
  290. package/rancher-components/Pill/RcStatusBadge/index.ts +0 -1
  291. package/rancher-components/Pill/RcStatusBadge/types.ts +1 -1
  292. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +5 -28
  293. package/rancher-components/Pill/RcStatusIndicator/types.ts +2 -1
  294. package/rancher-components/Pill/types.ts +0 -1
  295. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -0
  296. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +5 -1
  297. package/rancher-components/RcIcon/RcIcon.test.ts +51 -0
  298. package/rancher-components/RcIcon/RcIcon.vue +46 -0
  299. package/rancher-components/RcIcon/index.ts +1 -0
  300. package/rancher-components/RcIcon/types.ts +160 -0
  301. package/rancher-components/utils/status.test.ts +67 -0
  302. package/rancher-components/utils/status.ts +77 -0
  303. package/scripts/extension/publish +1 -1
  304. package/scripts/typegen.sh +1 -0
  305. package/store/action-menu.js +8 -0
  306. package/store/auth.js +11 -6
  307. package/store/aws.js +8 -6
  308. package/store/catalog.js +6 -0
  309. package/store/features.js +2 -0
  310. package/store/index.js +45 -20
  311. package/store/notifications.ts +51 -4
  312. package/store/plugins.js +7 -3
  313. package/store/prefs.js +12 -6
  314. package/store/type-map.js +3 -3
  315. package/store/ui-context.ts +86 -0
  316. package/store/wm.ts +244 -0
  317. package/types/kube/kube-api.ts +2 -1
  318. package/types/notifications/index.ts +27 -3
  319. package/types/rancher/index.d.ts +1 -0
  320. package/types/resources/settings.d.ts +29 -7
  321. package/types/shell/index.d.ts +138 -4
  322. package/types/store/__tests__/pagination.types.spec.ts +137 -0
  323. package/types/store/pagination.types.ts +157 -9
  324. package/types/store/subscribe-events.types.ts +8 -1
  325. package/types/store/subscribe.types.ts +1 -0
  326. package/types/window-manager.ts +24 -0
  327. package/utils/__tests__/cluster.test.ts +379 -1
  328. package/utils/__tests__/object.test.ts +19 -0
  329. package/utils/__tests__/provider.test.ts +98 -0
  330. package/utils/__tests__/selector-typed.test.ts +263 -0
  331. package/utils/__tests__/version.test.ts +19 -1
  332. package/utils/autoscaler-utils.ts +7 -0
  333. package/utils/back-off.ts +3 -3
  334. package/utils/brand.ts +29 -0
  335. package/utils/chart.js +18 -0
  336. package/utils/cluster.js +157 -3
  337. package/utils/color.js +1 -1
  338. package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
  339. package/utils/dynamic-content/__tests__/config.test.ts +187 -0
  340. package/utils/dynamic-content/__tests__/index.test.ts +390 -0
  341. package/utils/dynamic-content/__tests__/info.test.ts +275 -0
  342. package/utils/dynamic-content/__tests__/new-release.test.ts +216 -0
  343. package/utils/dynamic-content/__tests__/support-notice.test.ts +262 -0
  344. package/utils/dynamic-content/__tests__/util.test.ts +235 -0
  345. package/utils/dynamic-content/announcement.ts +142 -0
  346. package/utils/dynamic-content/config.ts +55 -0
  347. package/utils/dynamic-content/example.json +40 -0
  348. package/utils/dynamic-content/index.ts +277 -0
  349. package/utils/dynamic-content/info.ts +261 -0
  350. package/utils/dynamic-content/new-release.ts +126 -0
  351. package/utils/dynamic-content/notification-handler.ts +48 -0
  352. package/utils/dynamic-content/support-notice.ts +169 -0
  353. package/utils/dynamic-content/types.d.ts +153 -0
  354. package/utils/dynamic-content/util.ts +122 -0
  355. package/utils/dynamic-importer.js +2 -2
  356. package/utils/favicon.js +4 -4
  357. package/utils/inactivity.ts +104 -0
  358. package/utils/object.js +20 -2
  359. package/utils/pagination-utils.ts +19 -4
  360. package/utils/pagination-wrapper.ts +12 -8
  361. package/utils/provider.ts +14 -0
  362. package/utils/release-notes.ts +1 -1
  363. package/utils/scroll.js +7 -0
  364. package/utils/selector-typed.ts +6 -2
  365. package/utils/settings.ts +15 -0
  366. package/utils/validators/machine-pool.ts +13 -3
  367. package/utils/version.js +15 -0
  368. package/assets/images/icons/document.svg +0 -3
  369. package/plugins/nuxt-client-init.js +0 -3
  370. package/store/wm.js +0 -95
  371. /package/components/{nav/WindowManager → Window}/ChartReadme.vue +0 -0
  372. /package/components/{nav/WindowManager → Window}/ContainerShell.vue +0 -0
  373. /package/components/{nav/WindowManager → Window}/KubectlShell.vue +0 -0
  374. /package/components/{nav/WindowManager → Window}/MachineSsh.vue +0 -0
  375. /package/components/{nav/WindowManager → Window}/Window.vue +0 -0
@@ -12,6 +12,8 @@ import BrowserTabVisibility from '@shell/mixins/browser-tab-visibility';
12
12
  import Inactivity from '@shell/components/Inactivity';
13
13
  import { mapState, mapGetters } from 'vuex';
14
14
  import PromptModal from '@shell/components/PromptModal';
15
+ import WindowManager from '@shell/components/nav/WindowManager';
16
+ import { Layout } from '@shell/types/window-manager';
15
17
 
16
18
  export default {
17
19
 
@@ -24,16 +26,18 @@ export default {
24
26
  AzureWarning,
25
27
  AwsComplianceBanner,
26
28
  Inactivity,
27
- PromptModal
29
+ PromptModal,
30
+ WindowManager
28
31
  },
29
32
 
30
33
  mixins: [Brand, BrowserTabVisibility],
31
34
 
32
35
  data() {
33
36
  return {
37
+ layout: Layout.home,
34
38
  // Assume home pages have routes where the name is the key to use for string lookup
35
39
  name: this.$route.name,
36
- noLocaleShortcut: process.env.dev || false
40
+ noLocaleShortcut: process.env.dev || false,
37
41
  };
38
42
  },
39
43
 
@@ -81,6 +85,7 @@ export default {
81
85
  class="outlet"
82
86
  />
83
87
  </main>
88
+ <WindowManager :layout="layout" />
84
89
  </div>
85
90
  <FixedBanner :footer="true" />
86
91
  <GrowlManager />
@@ -112,10 +117,10 @@ export default {
112
117
  flex-grow:1;
113
118
 
114
119
  grid-template-areas:
115
- "header"
116
- "main";
120
+ "header header header"
121
+ "wm-vl main wm-vr";
117
122
 
118
- grid-template-columns: auto;
123
+ grid-template-columns: var(--wm-vl-width, 0px) auto var(--wm-vr-width, 0px);
119
124
  grid-template-rows: var(--header-height) auto;
120
125
 
121
126
  > HEADER {
@@ -123,6 +128,27 @@ export default {
123
128
  }
124
129
  }
125
130
 
131
+ .wm {
132
+ grid-area: wm;
133
+ overflow-y: hidden;
134
+ z-index: z-index('windowsManager');
135
+ position: relative;
136
+ }
137
+
138
+ .wm-vr {
139
+ grid-area: wm-vr;
140
+ overflow-y: hidden;
141
+ z-index: z-index('windowsManager');
142
+ position: relative;
143
+ }
144
+
145
+ .wm-vl {
146
+ grid-area: wm-vl;
147
+ overflow-y: hidden;
148
+ z-index: z-index('windowsManager');
149
+ position: relative;
150
+ }
151
+
126
152
  MAIN {
127
153
  grid-area: main;
128
154
  overflow: auto;
@@ -15,6 +15,8 @@ import BrowserTabVisibility from '@shell/mixins/browser-tab-visibility';
15
15
  import Inactivity from '@shell/components/Inactivity';
16
16
  import { mapGetters } from 'vuex';
17
17
  import PromptModal from '@shell/components/PromptModal';
18
+ import WindowManager from '@shell/components/nav/WindowManager';
19
+ import { Layout } from '@shell/types/window-manager';
18
20
 
19
21
  export default {
20
22
 
@@ -30,7 +32,8 @@ export default {
30
32
  SlideInPanelManager,
31
33
  AwsComplianceBanner,
32
34
  AzureWarning,
33
- Inactivity
35
+ Inactivity,
36
+ WindowManager
34
37
  },
35
38
 
36
39
  mixins: [Brand, BrowserTabVisibility],
@@ -40,6 +43,7 @@ export default {
40
43
  // Assume home pages have routes where the name is the key to use for string lookup
41
44
  name: this.$route.name,
42
45
  noLocaleShortcut: process.env.dev || false,
46
+ layout: Layout.plain,
43
47
  };
44
48
  },
45
49
 
@@ -97,6 +101,7 @@ export default {
97
101
  @shortkey="toggleNoneLocale()"
98
102
  />
99
103
  </main>
104
+ <WindowManager :layout="layout" />
100
105
  </div>
101
106
 
102
107
  <FixedBanner :footer="true" />
@@ -117,10 +122,10 @@ export default {
117
122
  flex-grow: 1;
118
123
 
119
124
  grid-template-areas:
120
- "header"
121
- "main";
125
+ "header header header"
126
+ "wm-vl main wm-vr";
122
127
 
123
- grid-template-columns: auto;
128
+ grid-template-columns: var(--wm-vl-width, 0px) auto var(--wm-vr-width, 0px);
124
129
  grid-template-rows: var(--header-height) auto;
125
130
 
126
131
  > HEADER {
@@ -128,6 +133,27 @@ export default {
128
133
  }
129
134
  }
130
135
 
136
+ .wm {
137
+ grid-area: wm;
138
+ overflow-y: hidden;
139
+ z-index: z-index('windowsManager');
140
+ position: relative;
141
+ }
142
+
143
+ .wm-vr {
144
+ grid-area: wm-vr;
145
+ overflow-y: hidden;
146
+ z-index: z-index('windowsManager');
147
+ position: relative;
148
+ }
149
+
150
+ .wm-vl {
151
+ grid-area: wm-vl;
152
+ overflow-y: hidden;
153
+ z-index: z-index('windowsManager');
154
+ position: relative;
155
+ }
156
+
131
157
  MAIN {
132
158
  grid-area: main;
133
159
  overflow: auto;
@@ -3,7 +3,7 @@
3
3
  </template>
4
4
 
5
5
  <style lang="scss">
6
- body, #__nuxt, #__layout {
6
+ body, #__root, #__layout {
7
7
  height: 100%;
8
8
  }
9
9
  </style>
@@ -11,7 +11,16 @@ let store: Store<any> | null = null;
11
11
  * @returns A translated string or the raw value if the raw parameter is set to true.
12
12
  */
13
13
  const t = (key: string, args?: unknown, raw?: boolean): string => {
14
- return stringFor(store, key, args, raw);
14
+ if (!store) {
15
+ if (!!process.env.dev) {
16
+ // eslint-disable-next-line no-console
17
+ console.warn('useI18n: store not available');
18
+ }
19
+
20
+ return key;
21
+ }
22
+
23
+ return stringFor(store, key, args as any, raw);
15
24
  };
16
25
 
17
26
  export type I18n = { t: typeof t };
@@ -0,0 +1,15 @@
1
+ import { onBeforeUnmount, onMounted, ref } from 'vue';
2
+
3
+ export const useInterval = (fn: Function, delay: number) => {
4
+ const interval = ref<any>(null);
5
+
6
+ onMounted(() => {
7
+ interval.value = setInterval(fn, delay);
8
+ });
9
+
10
+ onBeforeUnmount(() => {
11
+ if (interval.value) {
12
+ clearInterval(interval.value);
13
+ }
14
+ });
15
+ };
@@ -0,0 +1,309 @@
1
+ import {
2
+ UI_PLUGIN_ANNOTATION,
3
+ UI_PLUGIN_CHART_ANNOTATIONS,
4
+ EXTENSIONS_INCOMPATIBILITY_TYPES,
5
+ isUIPlugin,
6
+ uiPluginHasAnnotation,
7
+ parseRancherVersion,
8
+ // shouldNotLoadPlugin, this is required per test so that we can mock semver.coerce
9
+ isSupportedChartVersion,
10
+ isChartVersionHigher
11
+ } from '@shell/config/uiplugins';
12
+
13
+ import * as VersionModule from '@shell/config/version';
14
+
15
+ let semver;
16
+ let originalCoerce: any;
17
+ const MOCK_API_VERSION = '33.33.33';
18
+
19
+ describe('uiPlugins Config methods', () => {
20
+ describe('fx: isUIPlugin', () => {
21
+ const pluginChart = { versions: [{ annotations: { [UI_PLUGIN_ANNOTATION.NAME]: UI_PLUGIN_ANNOTATION.VALUE } }, { annotations: {} }] };
22
+
23
+ it('should return true if any version has the UI plugin annotation', () => {
24
+ expect(isUIPlugin(pluginChart)).toBe(true);
25
+ });
26
+ it('should return false if chart is null/undefined', () => {
27
+ expect(isUIPlugin(null)).toBe(false);
28
+ });
29
+ });
30
+
31
+ describe('fx: uiPluginHasAnnotation', () => {
32
+ const version1 = { annotations: { [UI_PLUGIN_ANNOTATION.NAME]: UI_PLUGIN_ANNOTATION.VALUE } };
33
+ const chart = { versions: [version1] };
34
+
35
+ it('should return true if it finds version with annotation and its corresponding value', () => {
36
+ expect(uiPluginHasAnnotation(chart, UI_PLUGIN_ANNOTATION.NAME, UI_PLUGIN_ANNOTATION.VALUE)).toBe(true);
37
+ });
38
+ it('should return false if chart has no version with a given pair of annotation/value', () => {
39
+ expect(uiPluginHasAnnotation(chart, 'bananas', UI_PLUGIN_ANNOTATION.VALUE)).toBe(false);
40
+ });
41
+ });
42
+
43
+ describe('fx: parseRancherVersion', () => {
44
+ it('should handle standard version strings', () => {
45
+ expect(parseRancherVersion('v2.8.1')).toBe('2.8.1');
46
+ });
47
+ it('should apply .999 patch for RC versions', () => {
48
+ expect(parseRancherVersion('v2.8.1-rc1')).toBe('2.8.999');
49
+ });
50
+ it('should apply .999 patch for "head" versions', () => {
51
+ expect(parseRancherVersion('2.8.0-head')).toBe('2.8.999');
52
+ });
53
+ });
54
+
55
+ const PLUGIN_NAME = 'test-plugin';
56
+
57
+ const basePluginResource = {
58
+ name: PLUGIN_NAME,
59
+ version: '1.0.0',
60
+ endpoint: '/some/path',
61
+ metadata: { [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=1.0.0' }
62
+ };
63
+ const compatibleEnv = {
64
+ rancherVersion: '2.7.5',
65
+ kubeVersion: 'v1.25.10',
66
+ };
67
+
68
+ describe('fx: shouldNotLoadPlugin', () => {
69
+ beforeEach(() => {
70
+ jest.resetModules();
71
+ process.env.UI_EXTENSIONS_API_VERSION = MOCK_API_VERSION;
72
+
73
+ semver = require('semver');
74
+ originalCoerce = semver.coerce;
75
+
76
+ jest.spyOn(semver, 'coerce').mockImplementation((v) => {
77
+ if (v === MOCK_API_VERSION) {
78
+ return { version: '3.0.0' };
79
+ }
80
+
81
+ // Use the original for all other inputs (Rancher, Kube)
82
+ return originalCoerce(v);
83
+ });
84
+ });
85
+
86
+ afterEach(() => {
87
+ jest.restoreAllMocks();
88
+ });
89
+
90
+ it('should return false when compatible', () => {
91
+ const { shouldNotLoadPlugin } = require('./../uiplugins');
92
+
93
+ expect(shouldNotLoadPlugin(basePluginResource, compatibleEnv, [])).toBe(false);
94
+ });
95
+
96
+ it('should return "plugins.error.api" if Extensions API version is incompatible', () => {
97
+ const { shouldNotLoadPlugin } = require('./../uiplugins');
98
+
99
+ const incompatibleApiPlugin = {
100
+ ...basePluginResource,
101
+ metadata: { [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=4.0.0' }
102
+ };
103
+
104
+ expect(shouldNotLoadPlugin(incompatibleApiPlugin, compatibleEnv, [])).toBe('plugins.error.api');
105
+ });
106
+
107
+ it('should return "plugins.error.primeOnly" if extension is Prime-only and Rancher is not Prime', () => {
108
+ const { shouldNotLoadPlugin } = require('./../uiplugins');
109
+
110
+ jest.spyOn(VersionModule, 'isRancherPrime').mockReturnValue(false);
111
+
112
+ const incompatibleApiPlugin = {
113
+ ...basePluginResource,
114
+ metadata: {
115
+ [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=1.0.0',
116
+ [UI_PLUGIN_CHART_ANNOTATIONS.PRIME_ONLY]: 'true'
117
+ }
118
+ };
119
+
120
+ expect(shouldNotLoadPlugin(incompatibleApiPlugin, compatibleEnv, [])).toBe('plugins.error.primeOnly');
121
+ });
122
+
123
+ it('should return "plugins.error.host" if HOST application value is incompatible', () => {
124
+ const { shouldNotLoadPlugin } = require('./../uiplugins');
125
+
126
+ const incompatibleApiPlugin = {
127
+ ...basePluginResource,
128
+ metadata: {
129
+ [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=1.0.0',
130
+ [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_HOST]: 'rancher-dummy-host'
131
+ }
132
+ };
133
+
134
+ expect(shouldNotLoadPlugin(incompatibleApiPlugin, compatibleEnv, [])).toBe('plugins.error.host');
135
+ });
136
+
137
+ it('should return "plugins.error.kubeVersion" if incompatible', () => {
138
+ const { shouldNotLoadPlugin } = require('./../uiplugins');
139
+
140
+ const incompatibleApiPlugin = {
141
+ ...basePluginResource,
142
+ metadata: {
143
+ [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=1.0.0',
144
+ [UI_PLUGIN_CHART_ANNOTATIONS.KUBE_VERSION]: '>= 2.0.0'
145
+ }
146
+ };
147
+
148
+ expect(shouldNotLoadPlugin(incompatibleApiPlugin, compatibleEnv, [])).toBe('plugins.error.kubeVersion');
149
+ });
150
+
151
+ it('should return "plugins.error.version" if incompatible', () => {
152
+ const { shouldNotLoadPlugin } = require('./../uiplugins');
153
+
154
+ const incompatibleApiPlugin = {
155
+ ...basePluginResource,
156
+ metadata: {
157
+ [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=1.0.0',
158
+ [UI_PLUGIN_CHART_ANNOTATIONS.RANCHER_VERSION]: '>= 3.0.0'
159
+ }
160
+ };
161
+
162
+ expect(shouldNotLoadPlugin(incompatibleApiPlugin, compatibleEnv, [])).toBe('plugins.error.version');
163
+ });
164
+
165
+ it('should return "plugins.error.developerPkg" if a builtin extension with the same name was loaded first', () => {
166
+ const { shouldNotLoadPlugin } = require('./../uiplugins');
167
+
168
+ const incompatibleApiPlugin = {
169
+ ...basePluginResource,
170
+ metadata: { [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=1.0.0' }
171
+ };
172
+
173
+ expect(shouldNotLoadPlugin(incompatibleApiPlugin, compatibleEnv, [{ name: PLUGIN_NAME, builtin: true }])).toBe('plugins.error.developerPkg');
174
+ });
175
+ });
176
+
177
+ describe('fx: isSupportedChartVersion', () => {
178
+ beforeEach(() => {
179
+ jest.resetModules();
180
+ process.env.UI_EXTENSIONS_API_VERSION = MOCK_API_VERSION;
181
+
182
+ semver = require('semver');
183
+ originalCoerce = semver.coerce;
184
+
185
+ jest.spyOn(semver, 'coerce').mockImplementation((v) => {
186
+ if (v === MOCK_API_VERSION) {
187
+ return { version: '3.0.0' };
188
+ }
189
+
190
+ // Use the original for all other inputs (Rancher, Kube)
191
+ return originalCoerce(v);
192
+ });
193
+ });
194
+
195
+ afterEach(() => {
196
+ jest.restoreAllMocks();
197
+ });
198
+
199
+ const versionData = {
200
+ rancherVersion: 'v2.7.5',
201
+ kubeVersion: 'v1.25.10',
202
+ version: '1.0.0'
203
+ };
204
+
205
+ it('should return "isVersionCompatible" true when compatible', () => {
206
+ const { isSupportedChartVersion } = require('./../uiplugins');
207
+
208
+ const annotations = {
209
+ [UI_PLUGIN_CHART_ANNOTATIONS.KUBE_VERSION]: '>=1.0.0',
210
+ [UI_PLUGIN_CHART_ANNOTATIONS.RANCHER_VERSION]: '>=2.0.0',
211
+ [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=2.0.0'
212
+ };
213
+ const data = { ...versionData, version: { annotations } };
214
+ const result = isSupportedChartVersion(data, true);
215
+
216
+ expect(result.isVersionCompatible).toBe(true);
217
+ expect(result.versionIncompatibilityData).toStrictEqual({});
218
+ });
219
+
220
+ it('should return incompatibility object for kube version mismatch', () => {
221
+ const annotations = { [UI_PLUGIN_CHART_ANNOTATIONS.KUBE_VERSION]: '>=2.0.0' };
222
+ const data = { ...versionData, version: { annotations } };
223
+ const result = isSupportedChartVersion(data, true);
224
+
225
+ expect(result.isVersionCompatible).toBe(false);
226
+ expect(result.versionIncompatibilityData.type).toBe(EXTENSIONS_INCOMPATIBILITY_TYPES.KUBE);
227
+ expect(result.versionIncompatibilityData.required).toBe('>=2.0.0');
228
+ });
229
+
230
+ it('should return incompatibility object for Rancher version mismatch', () => {
231
+ const annotations = { [UI_PLUGIN_CHART_ANNOTATIONS.RANCHER_VERSION]: '>=3.0.0' };
232
+ const data = { ...versionData, version: { annotations } };
233
+ const result = isSupportedChartVersion(data, true);
234
+
235
+ expect(result.isVersionCompatible).toBe(false);
236
+ expect(result.versionIncompatibilityData.type).toBe(EXTENSIONS_INCOMPATIBILITY_TYPES.UI);
237
+ expect(result.versionIncompatibilityData.required).toBe('>=3.0.0');
238
+ });
239
+
240
+ it('should return incompatibility object for UI version mismatch', () => {
241
+ const annotations = { [UI_PLUGIN_CHART_ANNOTATIONS.UI_VERSION]: '>=3.0.0' };
242
+ const data = { ...versionData, version: { annotations } };
243
+ const result = isSupportedChartVersion(data, true);
244
+
245
+ expect(result.isVersionCompatible).toBe(false);
246
+ expect(result.versionIncompatibilityData.type).toBe(EXTENSIONS_INCOMPATIBILITY_TYPES.UI);
247
+ expect(result.versionIncompatibilityData.required).toBe('>=3.0.0');
248
+ });
249
+
250
+ it('should return incompatibility object for extensions api missing', () => {
251
+ const annotations = {};
252
+ const data = { ...versionData, version: { annotations } };
253
+ const result = isSupportedChartVersion(data, true);
254
+
255
+ expect(result.isVersionCompatible).toBe(false);
256
+ expect(result.versionIncompatibilityData.type).toBe(EXTENSIONS_INCOMPATIBILITY_TYPES.EXTENSIONS_API_MISSING);
257
+ expect(result.versionIncompatibilityData.required).toBeUndefined();
258
+ });
259
+
260
+ it('should return incompatibility object for extensions API version mismatch', () => {
261
+ const { isSupportedChartVersion } = require('./../uiplugins');
262
+
263
+ const annotations = { [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=4.0.0' };
264
+ const data = { ...versionData, version: { annotations } };
265
+ const result = isSupportedChartVersion(data, true);
266
+
267
+ expect(result.isVersionCompatible).toBe(false);
268
+ expect(result.versionIncompatibilityData.type).toBe(EXTENSIONS_INCOMPATIBILITY_TYPES.EXTENSIONS_API);
269
+ expect(result.versionIncompatibilityData.required).toBe('>=4.0.0');
270
+ });
271
+
272
+ it('should return incompatibility object for HOST_APP mismatch', () => {
273
+ const { isSupportedChartVersion } = require('./../uiplugins');
274
+
275
+ const annotations = { [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=1.0.0 < 5.0.0', [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_HOST]: 'rancher-dummy-host' };
276
+ const data = { ...versionData, version: { annotations } };
277
+ const result = isSupportedChartVersion(data, true);
278
+
279
+ expect(result.isVersionCompatible).toBe(false);
280
+ expect(result.versionIncompatibilityData.type).toBe(EXTENSIONS_INCOMPATIBILITY_TYPES.HOST);
281
+ expect(result.versionIncompatibilityData.required).toBe('rancher-dummy-host');
282
+ });
283
+
284
+ it('should return incompatibility object for Prime only extension running in non-prime env', () => {
285
+ const { isSupportedChartVersion } = require('./../uiplugins');
286
+
287
+ jest.spyOn(VersionModule, 'isRancherPrime').mockReturnValue(false);
288
+
289
+ const annotations = { [UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION]: '>=1.0.0 < 5.0.0', [UI_PLUGIN_CHART_ANNOTATIONS.PRIME_ONLY]: 'true' };
290
+ const data = { ...versionData, version: { annotations } };
291
+ const result = isSupportedChartVersion(data, true);
292
+
293
+ expect(result.isVersionCompatible).toBe(false);
294
+ expect(result.versionIncompatibilityData.type).toBe(EXTENSIONS_INCOMPATIBILITY_TYPES.PRIME_ONLY);
295
+ expect(result.versionIncompatibilityData.required).toBe(true);
296
+ });
297
+ });
298
+
299
+ describe('fx: isChartVersionHigher', () => {
300
+ // Tests now rely on the actual semver.gt implementation
301
+ it('should return true when version A is higher', () => {
302
+ expect(isChartVersionHigher('2.1.0', '2.0.0')).toBe(true);
303
+ });
304
+ it('should return false when version A is lower or equal', () => {
305
+ expect(isChartVersionHigher('2.0.0', '2.1.0')).toBe(false);
306
+ expect(isChartVersionHigher('2.0.0', '2.0.0')).toBe(false);
307
+ });
308
+ });
309
+ });
@@ -69,7 +69,14 @@ export const CAPI = {
69
69
  /**
70
70
  * Annotation for overriding the cluster provider,
71
71
  */
72
- UI_CUSTOM_PROVIDER: 'ui.rancher/provider'
72
+ UI_CUSTOM_PROVIDER: 'ui.rancher/provider',
73
+
74
+ /**
75
+ * Annotations for autoscaler
76
+ */
77
+ AUTOSCALER_CLUSTER_PAUSE: 'provisioning.cattle.io/cluster-autoscaler-paused',
78
+ AUTOSCALER_MACHINE_POOL_MIN_SIZE: 'cluster.x-k8s.io/cluster-api-autoscaler-node-group-min-size',
79
+ AUTOSCALER_MACHINE_POOL_MAX_SIZE: 'cluster.x-k8s.io/cluster-api-autoscaler-node-group-max-size'
73
80
  };
74
81
 
75
82
  export const CATALOG = {
@@ -78,6 +85,7 @@ export const CATALOG = {
78
85
  _PARTNER: 'partner',
79
86
  _OTHER: 'other',
80
87
 
88
+ PRIME_ONLY: 'catalog.cattle.io/prime-only',
81
89
  EXPERIMENTAL: 'catalog.cattle.io/experimental',
82
90
  NAMESPACE: 'catalog.cattle.io/namespace',
83
91
  RELEASE_NAME: 'catalog.cattle.io/release-name',
@@ -177,6 +177,7 @@ export function init(store) {
177
177
  });
178
178
 
179
179
  componentForType(`${ MANAGEMENT.AUTH_CONFIG }/github`, 'auth/github');
180
+ componentForType(`${ MANAGEMENT.AUTH_CONFIG }/githubapp`, 'auth/github');
180
181
  componentForType(`${ MANAGEMENT.AUTH_CONFIG }/openldap`, 'auth/ldap/index');
181
182
  componentForType(`${ MANAGEMENT.AUTH_CONFIG }/freeipa`, 'auth/ldap/index');
182
183
  componentForType(`${ MANAGEMENT.AUTH_CONFIG }/activedirectory`, 'auth/ldap/index');
@@ -180,7 +180,8 @@ export function init(store) {
180
180
  mapGroup(/^(.*\.)?(scc)\.cattle\.io$/, 'SCC');
181
181
 
182
182
  const dePaginateBindings = configureConditionalDepaginate({ maxResourceCount: 5000 });
183
- const dePaginateNormanBindings = configureConditionalDepaginate({ maxResourceCount: 5000, isNorman: true }) ;
183
+ const dePaginateNormanBindings = configureConditionalDepaginate({ maxResourceCount: 5000, isNorman: true });
184
+ const dePaginateNormanUsers = configureConditionalDepaginate({ maxResourceCount: 5000, isNorman: true });
184
185
 
185
186
  configureType(NODE, { isCreatable: false, isEditable: true });
186
187
  configureType(WORKLOAD_TYPES.JOB, { isEditable: false, match: WORKLOAD_TYPES.JOB });
@@ -189,6 +190,7 @@ export function init(store) {
189
190
  configureType(MANAGEMENT.PROJECT, { displayName: store.getters['i18n/t']('namespace.project.label') });
190
191
  configureType(NORMAN.CLUSTER_ROLE_TEMPLATE_BINDING, { depaginate: dePaginateNormanBindings });
191
192
  configureType(NORMAN.PROJECT_ROLE_TEMPLATE_BINDING, { depaginate: dePaginateNormanBindings });
193
+ configureType(NORMAN.USER, { depaginate: dePaginateNormanUsers });
192
194
  configureType(SNAPSHOT, { depaginate: true });
193
195
 
194
196
  configureType(SECRET, { showListMasthead: false });
@@ -6,12 +6,12 @@ import {
6
6
  HCI,
7
7
  MANAGEMENT,
8
8
  SNAPSHOT,
9
- VIRTUAL_TYPES
9
+ VIRTUAL_TYPES,
10
+ HOSTED_PROVIDER
10
11
  } from '@shell/config/types';
11
12
  import { MULTI_CLUSTER } from '@shell/store/features';
12
13
  import { DSL } from '@shell/store/type-map';
13
14
  import { BLANK_CLUSTER } from '@shell/store/store-types.js';
14
-
15
15
  export const NAME = 'manager';
16
16
 
17
17
  export function init(store) {
@@ -63,7 +63,7 @@ export function init(store) {
63
63
  basicType([
64
64
  CAPI.RANCHER_CLUSTER,
65
65
  'cloud-credentials',
66
- 'drivers',
66
+ 'providers',
67
67
  ]);
68
68
 
69
69
  configureType(SNAPSHOT, { depaginate: true });
@@ -73,12 +73,22 @@ export function init(store) {
73
73
  });
74
74
  weightType(CAPI.RANCHER_CLUSTER, 100, true);
75
75
  weightType('cloud-credentials', 99, true);
76
- weightType('drivers', 98, true);
76
+ weightType('providers', 98, true);
77
77
  weightType(CATALOG.CLUSTER_REPO, 97, true);
78
+ virtualType({
79
+ labelKey: 'providers.hosted.title',
80
+ name: HOSTED_PROVIDER,
81
+ group: 'Root',
82
+ weight: 1,
83
+ namespaced: false,
84
+ icon: 'globe',
85
+ route: { name: 'c-cluster-manager-hostedprovider' },
86
+ exact: true
87
+ });
78
88
 
79
89
  virtualType({
80
90
  labelKey: 'drivers.kontainer.title',
81
- name: 'rke-kontainer-drivers',
91
+ name: 'rke-kontainer-providers',
82
92
  group: 'Root',
83
93
  namespaced: false,
84
94
  icon: 'globe',
@@ -87,7 +97,7 @@ export function init(store) {
87
97
  });
88
98
  virtualType({
89
99
  labelKey: 'drivers.node.title',
90
- name: 'rke-node-drivers',
100
+ name: 'rke-node-providers',
91
101
  group: 'Root',
92
102
  namespaced: false,
93
103
  icon: 'globe',
@@ -107,9 +117,10 @@ export function init(store) {
107
117
  });
108
118
 
109
119
  basicType([
110
- 'rke-kontainer-drivers',
111
- 'rke-node-drivers',
112
- ], 'drivers');
120
+ HOSTED_PROVIDER,
121
+ 'rke-kontainer-providers',
122
+ 'rke-node-providers',
123
+ ], 'providers');
113
124
 
114
125
  weightType(CAPI.MACHINE_DEPLOYMENT, 4, true);
115
126
  weightType(CAPI.MACHINE_SET, 3, true);
@@ -8,6 +8,7 @@ export const STEP = 'step';
8
8
  export const LOGGED_OUT = 'logged-out';
9
9
  export const IS_SSO = 'is-sso';
10
10
  export const IS_SLO = 'is-slo';
11
+ export const IS_SESSION_IDLE = 'is-session-idle';
11
12
  export const UPGRADED = 'upgraded';
12
13
  export const TIMED_OUT = 'timed-out';
13
14
  export const AUTH_TEST = 'test';
@@ -81,9 +81,13 @@ export default [
81
81
  {
82
82
  path: '/c/:cluster/uiplugins',
83
83
  name: 'c-cluster-uiplugins',
84
- component: () => interopDefault(import('@shell/pages/c/_cluster/uiplugins/index.vue')),
84
+ component: () => interopDefault(import('@shell/pages/c/_cluster/uiplugins/index.vue'))
85
+ },
86
+ {
87
+ path: '/c/:cluster/uiplugins/catalogs',
88
+ component: () => interopDefault(import('@shell/pages/c/_cluster/uiplugins/catalogs.vue')),
89
+ name: 'c-cluster-uiplugins-catalogs'
85
90
  },
86
-
87
91
  {
88
92
  path: '/diagnostic',
89
93
  component: () => interopDefault(import('@shell/pages/diagnostic.vue')),
@@ -363,6 +367,10 @@ export default [
363
367
  path: '/c/:cluster/manager/nodeDriver',
364
368
  component: () => interopDefault(import('@shell/pages/c/_cluster/manager/drivers/nodeDriver/index.vue')),
365
369
  name: 'c-cluster-manager-driver-nodedriver'
370
+ }, {
371
+ path: '/c/:cluster/manager/hostedprovider',
372
+ component: () => interopDefault(import('@shell/pages/c/_cluster/manager/hostedprovider/index.vue')),
373
+ name: 'c-cluster-manager-hostedprovider'
366
374
  }, {
367
375
  path: '/c/:cluster/monitoring/alertmanagerconfig',
368
376
  component: () => interopDefault(import('@shell/pages/c/_cluster/monitoring/alertmanagerconfig/index.vue')),