@rancher/shell 3.0.8-rc.1 → 3.0.8-rc.12

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 (345) 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/styles/base/_typography.scss +1 -0
  27. package/assets/styles/fonts/_fontstack.scss +53 -1
  28. package/assets/styles/global/_cards.scss +0 -3
  29. package/assets/styles/global/_layout.scss +21 -35
  30. package/assets/styles/themes/_dark.scss +1 -1
  31. package/assets/styles/themes/_light.scss +1 -1
  32. package/assets/styles/themes/_modern.scss +11 -3
  33. package/assets/styles/themes/_suse.scss +116 -24
  34. package/assets/translations/en-us.yaml +94 -10
  35. package/components/AutoscalerCard.vue +113 -0
  36. package/components/AutoscalerTab.vue +94 -0
  37. package/components/BackLink.vue +8 -0
  38. package/components/BannerGraphic.vue +36 -21
  39. package/components/BrandImage.vue +17 -6
  40. package/components/ClusterIconMenu.vue +1 -1
  41. package/components/ClusterProviderIcon.vue +1 -1
  42. package/components/Cron/CronExpressionEditor.vue +1 -1
  43. package/components/Cron/CronExpressionEditorModal.vue +1 -1
  44. package/components/Drawer/Chrome.vue +2 -6
  45. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +4 -9
  46. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +3 -8
  47. package/components/Drawer/ResourceDetailDrawer/composables.ts +3 -4
  48. package/components/Drawer/ResourceDetailDrawer/index.vue +4 -9
  49. package/components/Drawer/ResourceDetailDrawer/types.ts +17 -0
  50. package/components/Drawer/types.ts +3 -0
  51. package/components/DynamicContent/DynamicContentBanner.vue +102 -0
  52. package/components/DynamicContent/DynamicContentCloseButton.vue +42 -0
  53. package/components/DynamicContent/DynamicContentIcon.vue +132 -0
  54. package/components/DynamicContent/DynamicContentPanel.vue +112 -0
  55. package/components/DynamicContent/content.ts +78 -0
  56. package/components/EmberPage.vue +1 -1
  57. package/components/IconOrSvg.vue +2 -2
  58. package/components/PaginatedResourceTable.vue +2 -6
  59. package/components/PopoverCard.vue +192 -0
  60. package/components/Questions/__tests__/index.test.ts +159 -0
  61. package/components/Resource/Detail/CopyToClipboard.vue +4 -1
  62. package/components/Resource/Detail/FetchLoader/composables.ts +18 -4
  63. package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
  64. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +1 -1
  65. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +4 -0
  66. package/components/Resource/Detail/Metadata/KeyValueRow.vue +1 -1
  67. package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
  68. package/components/Resource/Detail/Metadata/composables.ts +9 -9
  69. package/components/Resource/Detail/Metadata/index.vue +3 -3
  70. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -19
  71. package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +0 -29
  72. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +132 -150
  73. package/components/Resource/Detail/ResourcePopover/index.vue +54 -159
  74. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +0 -2
  75. package/components/Resource/Detail/TitleBar/composables.ts +2 -1
  76. package/components/Resource/Detail/TitleBar/index.vue +10 -6
  77. package/components/Resource/Detail/composables.ts +12 -0
  78. package/components/ResourceDetail/Masthead/latest.vue +29 -0
  79. package/components/ResourceDetail/index.vue +4 -1
  80. package/components/ResourceList/Masthead.vue +1 -1
  81. package/components/ResourceTable.vue +1 -1
  82. package/components/SortableTable/index.vue +2 -1
  83. package/components/Tabbed/__tests__/index.test.ts +86 -0
  84. package/components/{nav/WindowManager → Window}/ContainerLogs.vue +1 -1
  85. package/components/{nav/WindowManager → Window}/ContainerLogsActions.vue +1 -0
  86. package/components/{nav/WindowManager → Window}/__tests__/ContainerLogs.test.ts +1 -1
  87. package/components/{nav/WindowManager → Window}/__tests__/ContainerShell.test.ts +2 -2
  88. package/components/__tests__/AutoscalerCard.test.ts +154 -0
  89. package/components/__tests__/AutoscalerTab.test.ts +125 -0
  90. package/components/__tests__/PopoverCard.test.ts +204 -0
  91. package/components/auth/SelectPrincipal.vue +24 -6
  92. package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
  93. package/components/auth/login/ldap.vue +3 -3
  94. package/components/form/NodeScheduling.vue +2 -2
  95. package/components/formatter/Autoscaler.vue +97 -0
  96. package/components/formatter/InternalExternalIP.vue +198 -24
  97. package/components/formatter/__tests__/Autoscaler.test.ts +156 -0
  98. package/components/formatter/__tests__/InternalExternalIP.test.ts +133 -0
  99. package/components/google/util/__tests__/formatter.test.ts +47 -0
  100. package/components/google/util/formatter.ts +5 -2
  101. package/components/nav/Group.vue +21 -5
  102. package/components/nav/Header.vue +37 -17
  103. package/components/nav/NamespaceFilter.vue +13 -1
  104. package/components/nav/NotificationCenter/index.vue +2 -1
  105. package/components/nav/TopLevelMenu.helper.ts +16 -6
  106. package/components/nav/TopLevelMenu.vue +4 -2
  107. package/components/nav/Type.vue +8 -3
  108. package/components/{DraggableZone.vue → nav/WindowManager/PinArea.vue} +47 -80
  109. package/components/nav/WindowManager/composables/useComponentsMount.ts +70 -0
  110. package/components/nav/WindowManager/composables/useDimensionsHandler.ts +105 -0
  111. package/components/nav/WindowManager/composables/useDragHandler.ts +99 -0
  112. package/components/nav/WindowManager/composables/usePanelHandler.ts +72 -0
  113. package/components/nav/WindowManager/composables/usePanelsHandler.ts +14 -0
  114. package/components/nav/WindowManager/composables/useResizeHandler.ts +167 -0
  115. package/components/nav/WindowManager/composables/useTabsHandler.ts +51 -0
  116. package/components/nav/WindowManager/constants.ts +23 -0
  117. package/components/nav/WindowManager/index.vue +61 -575
  118. package/components/nav/WindowManager/panels/HorizontalPanel.vue +265 -0
  119. package/components/nav/WindowManager/panels/TabBodyContainer.vue +39 -0
  120. package/components/nav/WindowManager/panels/VerticalPanel.vue +308 -0
  121. package/components/nav/__tests__/Type.test.ts +59 -0
  122. package/components/templates/default.vue +4 -40
  123. package/components/templates/home.vue +31 -5
  124. package/components/templates/plain.vue +30 -4
  125. package/components/templates/standalone.vue +1 -1
  126. package/composables/useI18n.ts +10 -1
  127. package/composables/useInterval.ts +15 -0
  128. package/config/__test__/uiplugins.test.ts +309 -0
  129. package/config/labels-annotations.js +9 -1
  130. package/config/product/explorer.js +3 -1
  131. package/config/product/manager.js +20 -9
  132. package/config/router/navigation-guards/clusters.js +3 -3
  133. package/config/router/navigation-guards/products.js +1 -1
  134. package/config/router/routes.js +10 -2
  135. package/config/settings.ts +2 -1
  136. package/config/store.js +4 -2
  137. package/config/table-headers.js +8 -0
  138. package/config/types.js +9 -0
  139. package/config/uiplugins.js +46 -2
  140. package/config/version.js +1 -1
  141. package/core/__test__/extension-manager-impl.test.js +236 -0
  142. package/core/extension-manager-impl.js +21 -4
  143. package/core/plugin-helpers.ts +4 -2
  144. package/core/plugins-loader.js +2 -2
  145. package/core/types-provisioning.ts +8 -1
  146. package/detail/pod.vue +1 -0
  147. package/detail/provisioning.cattle.io.cluster.vue +19 -7
  148. package/dialog/DeveloperLoadExtensionDialog.vue +13 -4
  149. package/dialog/RollbackWorkloadDialog.vue +2 -5
  150. package/dialog/SearchDialog.vue +1 -0
  151. package/directives/ui-context.ts +103 -0
  152. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +2 -2
  153. package/edit/auth/__tests__/oidc.test.ts +26 -0
  154. package/edit/auth/github.vue +5 -0
  155. package/edit/auth/oidc.vue +5 -1
  156. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
  157. package/edit/cloudcredential.vue +1 -1
  158. package/edit/configmap.vue +1 -0
  159. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  160. package/edit/fleet.cattle.io.gitrepo.vue +0 -10
  161. package/edit/fleet.cattle.io.helmop.vue +6 -6
  162. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  163. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  164. package/edit/logging-flow/index.vue +1 -0
  165. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  166. package/edit/management.cattle.io.fleetworkspace.vue +1 -1
  167. package/edit/management.cattle.io.project.vue +1 -0
  168. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -1
  169. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +2 -1
  170. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  171. package/edit/monitoring.coreos.com.receiver/index.vue +2 -1
  172. package/edit/monitoring.coreos.com.route.vue +1 -1
  173. package/edit/namespace.vue +1 -0
  174. package/edit/networking.istio.io.destinationrule/index.vue +1 -0
  175. package/edit/networking.k8s.io.ingress/index.vue +1 -0
  176. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -0
  177. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -0
  178. package/edit/node.vue +1 -0
  179. package/edit/persistentvolume/index.vue +27 -22
  180. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +13 -14
  181. package/edit/persistentvolume/plugins/azureDisk.vue +49 -48
  182. package/edit/persistentvolume/plugins/azureFile.vue +15 -14
  183. package/edit/persistentvolume/plugins/cephfs.vue +15 -14
  184. package/edit/persistentvolume/plugins/cinder.vue +15 -14
  185. package/edit/persistentvolume/plugins/csi.vue +18 -16
  186. package/edit/persistentvolume/plugins/fc.vue +13 -14
  187. package/edit/persistentvolume/plugins/flexVolume.vue +15 -14
  188. package/edit/persistentvolume/plugins/flocker.vue +1 -3
  189. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +13 -14
  190. package/edit/persistentvolume/plugins/glusterfs.vue +15 -14
  191. package/edit/persistentvolume/plugins/hostPath.vue +40 -39
  192. package/edit/persistentvolume/plugins/iscsi.vue +13 -14
  193. package/edit/persistentvolume/plugins/local.vue +1 -3
  194. package/edit/persistentvolume/plugins/longhorn.vue +23 -22
  195. package/edit/persistentvolume/plugins/nfs.vue +15 -14
  196. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -14
  197. package/edit/persistentvolume/plugins/portworxVolume.vue +15 -14
  198. package/edit/persistentvolume/plugins/quobyte.vue +15 -14
  199. package/edit/persistentvolume/plugins/rbd.vue +15 -14
  200. package/edit/persistentvolume/plugins/scaleIO.vue +15 -14
  201. package/edit/persistentvolume/plugins/storageos.vue +15 -14
  202. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -3
  203. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +32 -5
  204. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +35 -0
  205. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +155 -0
  206. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +21 -21
  207. package/edit/provisioning.cattle.io.cluster/index.vue +28 -18
  208. package/edit/provisioning.cattle.io.cluster/rke2.vue +50 -16
  209. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +107 -5
  210. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +92 -4
  211. package/edit/secret/index.vue +1 -1
  212. package/edit/service.vue +9 -4
  213. package/edit/serviceaccount.vue +1 -0
  214. package/edit/storage.k8s.io.storageclass/index.vue +1 -0
  215. package/edit/workload/index.vue +2 -1
  216. package/edit/workload/mixins/workload.js +1 -1
  217. package/initialize/App.vue +4 -4
  218. package/initialize/install-directives.js +2 -0
  219. package/initialize/install-plugins.js +19 -2
  220. package/list/provisioning.cattle.io.cluster.vue +15 -2
  221. package/machine-config/amazonec2.vue +42 -135
  222. package/machine-config/components/EC2Networking.vue +490 -0
  223. package/machine-config/components/__tests__/EC2Networking.test.ts +148 -0
  224. package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +294 -0
  225. package/machine-config/digitalocean.vue +11 -0
  226. package/machine-config/google.vue +1 -1
  227. package/mixins/__tests__/brand.spec.ts +2 -2
  228. package/mixins/__tests__/chart.test.ts +21 -0
  229. package/mixins/brand.js +1 -7
  230. package/mixins/chart.js +7 -1
  231. package/mixins/create-edit-view/index.js +5 -0
  232. package/models/__tests__/chart.test.ts +33 -4
  233. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
  234. package/models/chart.js +25 -13
  235. package/models/cluster/node.js +13 -6
  236. package/models/cluster.x-k8s.io.machine.js +10 -20
  237. package/models/cluster.x-k8s.io.machinedeployment.js +5 -1
  238. package/models/management.cattle.io.cluster.js +21 -3
  239. package/models/management.cattle.io.kontainerdriver.js +1 -0
  240. package/models/provisioning.cattle.io.cluster.js +249 -33
  241. package/package.json +8 -7
  242. package/pages/auth/login.vue +41 -5
  243. package/pages/auth/setup.vue +1 -1
  244. package/pages/auth/verify.vue +3 -3
  245. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
  246. package/pages/c/_cluster/apps/charts/chart.vue +33 -15
  247. package/pages/c/_cluster/apps/charts/index.vue +11 -13
  248. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  249. package/pages/c/_cluster/explorer/index.vue +8 -6
  250. package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
  251. package/pages/c/_cluster/settings/brand.vue +1 -1
  252. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +7 -0
  253. package/pages/c/_cluster/uiplugins/catalogs.vue +147 -0
  254. package/pages/c/_cluster/uiplugins/index.vue +126 -184
  255. package/pages/home.vue +14 -4
  256. package/pkg/auto-import.js +3 -3
  257. package/pkg/dynamic-importer.lib.js +5 -1
  258. package/pkg/import.js +1 -1
  259. package/plugins/dashboard-client-init.js +3 -0
  260. package/plugins/dashboard-store/getters.js +19 -2
  261. package/plugins/dashboard-store/model-loader.js +1 -1
  262. package/plugins/dashboard-store/resource-class.js +10 -6
  263. package/plugins/dynamic-content.js +13 -0
  264. package/plugins/i18n.js +8 -0
  265. package/plugins/plugin.js +2 -2
  266. package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
  267. package/plugins/steve/steve-class.js +1 -1
  268. package/plugins/steve/steve-pagination-utils.ts +39 -20
  269. package/plugins/steve/subscribe.js +17 -9
  270. package/plugins/subscribe-events.ts +4 -2
  271. package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
  272. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -34
  273. package/rancher-components/Pill/RcStatusBadge/index.ts +0 -1
  274. package/rancher-components/Pill/RcStatusBadge/types.ts +1 -1
  275. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +5 -28
  276. package/rancher-components/Pill/RcStatusIndicator/types.ts +2 -1
  277. package/rancher-components/Pill/types.ts +0 -1
  278. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -0
  279. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +5 -1
  280. package/rancher-components/RcIcon/RcIcon.test.ts +51 -0
  281. package/rancher-components/RcIcon/RcIcon.vue +46 -0
  282. package/rancher-components/RcIcon/index.ts +1 -0
  283. package/rancher-components/RcIcon/types.ts +160 -0
  284. package/rancher-components/utils/status.test.ts +67 -0
  285. package/rancher-components/utils/status.ts +77 -0
  286. package/scripts/typegen.sh +1 -0
  287. package/store/__tests__/catalog.test.ts +1 -1
  288. package/store/action-menu.js +8 -0
  289. package/store/auth.js +4 -4
  290. package/store/catalog.js +6 -0
  291. package/store/features.js +1 -0
  292. package/store/i18n.js +3 -3
  293. package/store/index.js +40 -19
  294. package/store/notifications.ts +51 -4
  295. package/store/plugins.js +7 -3
  296. package/store/prefs.js +6 -6
  297. package/store/type-map.js +7 -7
  298. package/store/ui-context.ts +86 -0
  299. package/store/wm.ts +244 -0
  300. package/types/notifications/index.ts +27 -3
  301. package/types/shell/index.d.ts +80 -4
  302. package/types/store/__tests__/pagination.types.spec.ts +137 -0
  303. package/types/store/pagination.types.ts +157 -9
  304. package/types/store/subscribe-events.types.ts +8 -1
  305. package/types/store/subscribe.types.ts +1 -0
  306. package/types/window-manager.ts +24 -0
  307. package/utils/__tests__/object.test.ts +19 -0
  308. package/utils/__tests__/provider.test.ts +98 -0
  309. package/utils/__tests__/selector-typed.test.ts +263 -0
  310. package/utils/__tests__/version.test.ts +19 -1
  311. package/utils/autoscaler-utils.ts +7 -0
  312. package/utils/back-off.ts +3 -3
  313. package/utils/brand.ts +29 -0
  314. package/utils/chart.js +18 -0
  315. package/utils/color.js +1 -1
  316. package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
  317. package/utils/dynamic-content/__tests__/info.test.ts +21 -9
  318. package/utils/dynamic-content/announcement.ts +142 -0
  319. package/utils/dynamic-content/example.json +40 -0
  320. package/utils/dynamic-content/index.ts +6 -2
  321. package/utils/dynamic-content/info.ts +44 -2
  322. package/utils/dynamic-content/new-release.ts +1 -1
  323. package/utils/dynamic-content/notification-handler.ts +48 -0
  324. package/utils/dynamic-content/types.d.ts +53 -1
  325. package/utils/dynamic-importer.js +2 -2
  326. package/utils/favicon.js +4 -4
  327. package/utils/object.js +20 -2
  328. package/utils/pagination-utils.ts +2 -2
  329. package/utils/pagination-wrapper.ts +13 -9
  330. package/utils/provider.ts +14 -0
  331. package/utils/scroll.js +7 -0
  332. package/utils/selector-typed.ts +6 -2
  333. package/utils/settings.ts +15 -0
  334. package/utils/unit-tests/pagination-utils.spec.ts +8 -8
  335. package/utils/validators/machine-pool.ts +13 -3
  336. package/utils/version.js +15 -0
  337. package/vue.config.js +3 -3
  338. package/assets/images/icons/document.svg +0 -3
  339. package/plugins/nuxt-client-init.js +0 -3
  340. package/store/wm.js +0 -95
  341. /package/components/{nav/WindowManager → Window}/ChartReadme.vue +0 -0
  342. /package/components/{nav/WindowManager → Window}/ContainerShell.vue +0 -0
  343. /package/components/{nav/WindowManager → Window}/KubectlShell.vue +0 -0
  344. /package/components/{nav/WindowManager → Window}/MachineSsh.vue +0 -0
  345. /package/components/{nav/WindowManager → Window}/Window.vue +0 -0
@@ -1,27 +1,119 @@
1
1
  .suse {
2
- $primary: hsl(225, 100%, 57%);
3
- $info: mix($primary, $secondary, 50%);
4
- $selected: rgba($primary, .5);
5
-
6
- --primary : #{$primary};
7
- --primary-text : #fff;
8
- --primary-hover-bg : #{darken($primary, 10%)};
9
- --primary-hover-text : #{saturate($lightest, 20%)};
10
- --primary-active-bg : #{darken($primary, 25%)};
11
- --primary-active-text : #{contrast-color(darken($primary, 25%))};
12
- --primary-border : #{$primary};
13
- --primary-banner-bg : #{rgba($primary, 0.15)};
14
- --primary-light-bg : #{rgba($primary, 0.05)};
15
- --primary-keyboard-focus : hsl(from var(--primary) h s calc(l - 10));
16
-
17
- --info : #{$info};
18
- --info-text : #{contrast-color($info)};
19
- --info-hover-bg : #{darken($info, 10%)};
20
- --info-hover-text : #{saturate($lightest, 20%)};
21
- --info-active-bg : #{darken($info, 25%)};
22
- --info-active-text : #{contrast-color(darken($info, 25%))};
23
- --info-border : #{$info};
24
- --info-banner-bg : #{rgba($info, 0.15)};
25
- --info-light-bg : #{rgba($info, 0.05)};
2
+ $green-jungle : #30BA78;
3
+ $light-green-jungle: #4DD192;
4
+ $lighter-green-jungle: #72EEB3;
26
5
 
6
+ $jungle-120: #008657;
7
+
8
+ --title-font-family : 'SUSE', 'Lato', sans-serif;
9
+
10
+ &.theme-light {
11
+ --primary: #{$jungle-120};
12
+ --primary-text: #FFFFFF;
13
+ --primary-hover: #006B46;
14
+ --primary-hover-bg: #006B46;
15
+ --primary-border: #{$green-120};
16
+
17
+ --link: #4871C7;
18
+ --active-nav: #{$green-140};
19
+
20
+ --non-primary-text: #{$green-120};
21
+ --non-primary-hover: #{$green-20};
22
+
23
+ --secondary: var(--body-bg);
24
+ --secondary-border: var(--primary);
25
+ --on-secondary: var(--non-primary-text);
26
+ --secondary-hover: var(--non-primary-hover);
27
+
28
+ --tertiary: transparent;
29
+ --on-tertiary: var(--non-primary-text);
30
+ --on-tertiary-hover: var(--non-primary-text);
31
+ --on-tertiary-header: var(--non-primary-text);
32
+ --on-tertiary-header-hover: var(--non-primary-text);
33
+ --tertiary-hover: var(--non-primary-hover);
34
+ --tertiary-hover-app-bar: var(--non-primary-text);
35
+
36
+ $super-light-green: #F4F6F5;
37
+ --active: #{$green-140};
38
+ --on-active: #{$grey-0};
39
+ --active-hover: #{lighten($green-140, 5%)};
40
+ --category-active: #{$super-light-green};
41
+ --category-active-hover: #e8eeeb;
42
+
43
+ --checkbox-tick : var(--on-active);
44
+ --checkbox-border : var(--body-border);
45
+ --checkbox-tick-disabled : #{darken($disabled, 40%)};
46
+ --checkbox-disabled-bg : #{$disabled};
47
+ --checkbox-ticked-bg : var(--active);
48
+ }
49
+
50
+ &.theme-dark {
51
+ --link: #9BBFFD;
52
+ --active-nav: #{$green-40};
53
+
54
+ --primary: #{$light-green-jungle};
55
+ --primary-text: #{$grey-90};
56
+ --primary-hover: #{$lighter-green-jungle};
57
+ --primary-hover-bg: #{$lighter-green-jungle};
58
+ --primary-border: #{$lighter-green-jungle};
59
+
60
+ --non-primary-text: #{$lighter-green-jungle};
61
+ --non-primary-hover: #1E372B;
62
+
63
+ --secondary: var(--body-bg);
64
+ --secondary-border: var(--non-primary-text);
65
+ --on-secondary: var(--non-primary-text);
66
+ --secondary-hover: var(--non-primary-hover);
67
+
68
+ --tertiary: transparent;
69
+ --on-tertiary: var(--non-primary-text);
70
+ --on-tertiary-hover: var(--non-primary-text);
71
+ --on-tertiary-header: var(--non-primary-text);
72
+ --on-tertiary-header-hover: var(--non-primary-text);
73
+ --tertiary-hover: var(--non-primary-hover);
74
+ --tertiary-hover-app-bar: var(--non-primary-text);
75
+
76
+ $category-active:#303633;
77
+ --active: #{$green-40};
78
+ --on-active: #{$grey-90};
79
+ --active-hover: #{$green-60};
80
+ --category-active: #{$category-active};
81
+ --category-active-hover: #{lighten($category-active, 10%)};
82
+
83
+ --toggle-off-bg: #{$grey-70};
84
+ --sortable-table-selected-bg: #3f4350;
85
+ }
86
+
87
+ // SUSE Theme uses a smaller banner graphic
88
+ --banner-graphic-height: 160px;
89
+
90
+ // SUSE Theme positions from right, so ship stays visible as browser width shrinks
91
+ .suse-banner-graphic {
92
+ > img {
93
+ object-position: right;
94
+ }
95
+ }
96
+
97
+ // SUSE Theme aligns graphic to left so that the container ship stays visible
98
+ .suse-login-banner-graphic {
99
+ object-position: left;
100
+ }
101
+
102
+ // Styling for logo image on the login screen
103
+ .suse-logo-login {
104
+ $suse-logo-width: 280px;
105
+
106
+ width: $suse-logo-width;
107
+ max-width: $suse-logo-width;
108
+ align-self: center;
109
+ margin-bottom: 30px;
110
+ }
111
+ }
112
+
113
+ // Ensure that with a small window size, the banner centers, so that the text does not overlay
114
+ // directly on the heavier part of the graphic
115
+ @media (max-width: 860px) {
116
+ .suse .suse-banner-graphic > img {
117
+ object-position: center;
118
+ }
27
119
  }
@@ -125,6 +125,7 @@ generic:
125
125
  enable: Enable
126
126
  disable: Disable
127
127
  experimental: Experimental
128
+ primeOnly: Prime Only
128
129
 
129
130
  deprecated: Deprecated
130
131
  upgradeable: Upgradeable
@@ -158,6 +159,8 @@ generic:
158
159
  genericRow: row {index}
159
160
  showLess: Show less
160
161
  showMore: Show more
162
+ externalIps: External IPs
163
+ internalIps: Internal IPs
161
164
  opensInNewTab: Opens in a new tab
162
165
 
163
166
  tabs:
@@ -233,7 +236,7 @@ nav:
233
236
  workload: Workloads
234
237
  monitoring: Monitoring
235
238
  advanced: Advanced
236
- drivers: Drivers
239
+ providers: Providers
237
240
  RKE1Configuration: RKE1 Configuration
238
241
  admission: Admission
239
242
  apps: Apps
@@ -370,9 +373,7 @@ layouts:
370
373
  unauthenticated: unauthenticated layout
371
374
  logout: logout layout
372
375
  verify: verify layout
373
-
374
- windowmanager:
375
- closeTab: Close tab {tabId}
376
+
376
377
  about:
377
378
  title: About
378
379
  versions:
@@ -1125,6 +1126,7 @@ catalog:
1125
1126
  home: Homepage
1126
1127
  repository: Repository Page
1127
1128
  maintainers: Maintainers
1129
+ maintainerContactTooltip: Contact {maintainer}
1128
1130
  related: Related
1129
1131
  chartUrls: Chart
1130
1132
  keywords: Keywords
@@ -1578,6 +1580,7 @@ cluster:
1578
1580
  nodeLabel:
1579
1581
  title: Node Labels
1580
1582
  label: Add Label
1583
+ ipv6: "It looks like this cluster uses IPv6 networking: <code>Node Private IP</code> should be set to the cluster's IPV6 address."
1581
1584
  registrationCommand:
1582
1585
  label: Registration Command
1583
1586
  linuxDetail: Run this command on each of the existing Linux machines you want to register.
@@ -2079,6 +2082,21 @@ cluster:
2079
2082
  httpEndpoint: Allow access to EC2 metadata
2080
2083
  httpTokens: Use tokens for metadata
2081
2084
  tagTitle: EC2 Tags
2085
+ enableIpv6:
2086
+ label: Enable IPv6
2087
+ description: "Checking this automatically sets your <a aria-label='scroll to the networking section in cluster configuration' href=\"#networking\">Network Stack Preference Order</a> to <b>DUAL</b> stack, enabling both IPv4 and IPv6. For an IPv6-only cluster, you can manually change that setting to <b>IPv6</b>."
2088
+ ipv6AddressCount:
2089
+ label: IPv6 Address Count
2090
+ tooltip: Specifies the number of IPv6 addresses to assign to the network interface
2091
+ error: IPv6 Address Count must be greater than 0 when using an IPv6 vpc or subnet.
2092
+ enablePrimaryIpv6:
2093
+ label: Enable Static Primary Ipv6
2094
+ description: This allows IPv6 communication for components and workloads.
2095
+ ipv6AddressOnly:
2096
+ label: Use IPv6 Only
2097
+ httpProtocolIpv6:
2098
+ label: Use IPv6 for instance metadata service
2099
+ ipv6ValidationWarning: When one pool uses an IPv6 or dual-stack subnet/vpc, all pools must use an IPv6 or dual-stack subnet/vpc.
2082
2100
  pnap:
2083
2101
  serverLocation:
2084
2102
  label: Location
@@ -2251,6 +2269,18 @@ cluster:
2251
2269
  rkeTemplate: RKE Template
2252
2270
 
2253
2271
  machinePool:
2272
+ automation:
2273
+ label: Automation
2274
+ autoscaler:
2275
+ heading: Autoscaler
2276
+ enable: Enable autoscaler and override "Machine Count" value
2277
+ machineCountValueOverride: Controlled by autoscaler
2278
+ baseUnit: Machines
2279
+ min: Min
2280
+ max: Max
2281
+ validation:
2282
+ isAutoscalerMaxGreaterThanMin: The max machines count must be equal or exceed the min machine count.
2283
+ etcdControlPlaneWarning: We don't recommend using Autoscaler with machine pools that have the etcd or Control Plane roles. You can modify the yaml if you want to override the current value.
2254
2284
  name:
2255
2285
  label: Pool Name
2256
2286
  placeholder: A random one will be generated by default
@@ -2315,6 +2345,7 @@ cluster:
2315
2345
  placeholder: Search for a member to provide cluster access
2316
2346
  searchPlaceholder: Start typing to search
2317
2347
  noResults: No results found
2348
+ minCharacters: Type at least {count} characters to search
2318
2349
  privateRegistry:
2319
2350
  header: Registry for Rancher System Container Images
2320
2351
  label: Enable cluster scoped container registry for Rancher system container images
@@ -2390,8 +2421,8 @@ cluster:
2390
2421
  providerGroup:
2391
2422
  create-custom1: Use existing nodes and create a cluster using RKE
2392
2423
  create-custom2: Use existing nodes and create a cluster using RKE2/K3s
2393
- create-kontainer: Create a cluster in a hosted Kubernetes provider
2394
- register-kontainer: Register an existing cluster in a hosted Kubernetes provider
2424
+ create-hosted: Create a cluster in a hosted Kubernetes provider
2425
+ register-hosted: Register an existing cluster in a hosted Kubernetes provider
2395
2426
  create-rke1: Provision new nodes and create a cluster using RKE
2396
2427
  create-rke2: Provision new nodes and create a cluster using RKE2/K3s
2397
2428
  create-template: Use a Catalog Template to create a cluster
@@ -2525,6 +2556,14 @@ cluster:
2525
2556
  label: Accept any certificate (insecure)
2526
2557
  endpointCA:
2527
2558
  label: Endpoint CA Cert
2559
+ stackPreference:
2560
+ label: Stack Preference
2561
+ description: "Stack preference determines the networking stack used by the cluster. The selected value configures the address used for health and readiness probes of calico, etcd, kube-apiserver, kube-scheduler, kube-controller-manager, and kubelet. It also defines the server URL in the <code>authentication-token-webhook-config-file</code> for the Authorized Cluster Endpoint and the advertise-client-urls for etcd during snapshot restore. When set to <code>dual</code>, the cluster uses <code>localhost</code>; when set to <code>ipv6</code>, it uses <code>[::1]</code>; and when set to <code>ipv4</code>, it uses <code>127.0.0.1</code>."
2562
+ options:
2563
+ ipv4: IPv4
2564
+ ipv6: IPv6
2565
+ dual: Dual-Stack
2566
+ errorNeedsIpv6: Stack preference must be set to dual-stack or ipv6 if using ipv6 networking in nodepools.
2528
2567
  k3s:
2529
2568
  systemService:
2530
2569
  coredns: 'CoreDNS'
@@ -2681,6 +2720,11 @@ cruResource:
2681
2720
  previewYaml: Edit as YAML
2682
2721
  showYaml: View as YAML
2683
2722
 
2723
+ providers:
2724
+ hosted:
2725
+ title: Hosted Providers
2726
+ prime: Prime only
2727
+ warning: Disabling providers will make any clusters that use them uneditable
2684
2728
  drivers:
2685
2729
  kontainer:
2686
2730
  title: Cluster Drivers
@@ -2764,6 +2808,10 @@ drainNode:
2764
2808
  custom: "Give up after:"
2765
2809
 
2766
2810
  dynamicContent:
2811
+ action:
2812
+ close: Hide and Mark Announcement as read
2813
+ openPrimary: Open announcement's primary action
2814
+ openSecondary: Open announcement's secondary action
2767
2815
  newRelease:
2768
2816
  title: A new Rancher release is available!
2769
2817
  message: Rancher {version} has been released!
@@ -3621,6 +3669,7 @@ internalExternalIP:
3621
3669
  none: None
3622
3670
  copyInternalIp: Copy internal IP address to clipboard
3623
3671
  copyExternalIp: Copy external IP address to clipboard
3672
+ clickToShowMoreIps: "Click to show {count} more {count, plural, one {IP} other {IPs}}"
3624
3673
 
3625
3674
  istio:
3626
3675
  links:
@@ -4627,6 +4676,7 @@ namespaceFilter:
4627
4676
  button:
4628
4677
  clear: Remove applied namespace filters
4629
4678
  clearFilter: Clear namespace options filter
4679
+ removeNamespace: 'Remove {name} from filter'
4630
4680
 
4631
4681
  namespaceList:
4632
4682
  selectLabel: Namespace
@@ -5201,6 +5251,7 @@ inactivity:
5201
5251
  # Rancher Extensions
5202
5252
  plugins:
5203
5253
  altIcon: Icon for {extension} extension card
5254
+ incompatiblePrimeOnly: "The latest version of this extension ({ version }) needs Rancher Prime in order to be installed."
5204
5255
  incompatibleRancherVersion: "The latest version of this extension ({ version }) is not compatible with the current Rancher version ({ required })."
5205
5256
  incompatibleKubeVersion: "The latest version of this extension ({ version }) is not compatible with the current Kube version ({ required })."
5206
5257
  incompatibleUiExtensionsApiVersionMissing: 'The latest version of this extension ({ version }) is missing the mandatory annotation catalog.cattle.io/ui-extensions-version from Rancher 2.10 and onwards.'
@@ -5210,6 +5261,8 @@ plugins:
5210
5261
  closePluginPanel: Close plugin description panel
5211
5262
  viewVersionDetails: View extension {name} version {version} details/Readme
5212
5263
  labels:
5264
+ isDeveloper: Developer Load
5265
+ primeOnly: Prime only
5213
5266
  builtin: Built-In
5214
5267
  experimental: Experimental
5215
5268
  third-party: Third-Party
@@ -5226,10 +5279,13 @@ plugins:
5226
5279
  third-party: This Extension is provided by a Third-Party
5227
5280
  built-in: This Extension is built-in
5228
5281
  image: This Extension Image has been loaded manually
5282
+ tooltips:
5283
+ installing: Installing...
5229
5284
  error:
5230
5285
  title: Error loading extension
5231
5286
  message: Could not load extension code
5232
5287
  generic: Extension error
5288
+ primeOnly: Unable to load Rancher Prime Extension in Rancher Community
5233
5289
  apiAnnotationMissing: 'Unable to load Extension. The version installed is not compatible with the current Extensions API Version (Extension is missing the annotation catalog.cattle.io/ui-extensions-version which implies incompatibility with Rancher 2.10 and onwards)'
5234
5290
  api: Unable to load Extension. The version installed is not compatible with the current Extensions API version
5235
5291
  host: Unable to load Extension. The version installed is not compatible with this application host
@@ -5254,6 +5310,7 @@ plugins:
5254
5310
  detail: Detail
5255
5311
  versions: Versions
5256
5312
  versionError: Could not load version information
5313
+ requiresRancherPrime: "Requires Rancher Prime"
5257
5314
  requiresRancherVersion: "Requires Rancher {required}"
5258
5315
  requiresKubeVersion: "Requires Kube version {required}"
5259
5316
  requiresExtensionApiVersionMissing: 'Missing the annotation catalog.cattle.io/ui-extensions-version which implies incompatibility with Rancher 2.10 and onwards'
@@ -5273,7 +5330,7 @@ plugins:
5273
5330
  warnNoAuth: This version of the extension will be loaded before authentication and will have access to the login process.
5274
5331
  manageCatalog:
5275
5332
  label: Manage Extension Catalogs
5276
- title: Extension
5333
+ title: Extensions
5277
5334
  subtitle: Catalogs
5278
5335
  imageLoad:
5279
5336
  load: Import Extension Catalog
@@ -6589,6 +6646,7 @@ storageClass:
6589
6646
 
6590
6647
  tableHeaders:
6591
6648
  assuredConcurrencyShares: Assured Concurrency Shares
6649
+ autoscaler: Autoscaler
6592
6650
  accessKey: Access Key
6593
6651
  addressType: Address Type
6594
6652
  accessModes: Access Modes
@@ -7078,7 +7136,15 @@ wizard:
7078
7136
  install: Install
7079
7137
  upgrade: Upgrade
7080
7138
  downgrade: Downgrade
7139
+
7140
+ sideWindow:
7141
+ secondary:
7142
+ resize: Resize secondary window
7143
+
7081
7144
  wm:
7145
+ resize: Resize Window - use arrow keys {arrow1} and {arrow2} to resize with keyboard
7146
+ tabIcon: Window tab icon
7147
+ closeTab: Close tab - {tabId}
7082
7148
  connection:
7083
7149
  connected: Connected
7084
7150
  connecting: Connecting&hellip;
@@ -7115,9 +7181,6 @@ wm:
7115
7181
  timestamps: Show Timestamps
7116
7182
  wrap: Wrap Lines
7117
7183
  containerShell:
7118
- resizeShellWindow: Resize Shell window - use arrow keys {arrow1} and {arrow2} to resize with keyboard
7119
- tabIcon: Shell tab icon
7120
- closeShellTab: Close Shell tab - {tab}
7121
7184
  escapeText: Press Shift+Escape to blur from terminal
7122
7185
  clear: Clear
7123
7186
  containerName: "Container: {label}"
@@ -9148,3 +9211,24 @@ component:
9148
9211
  marchToMayHourly: "Every hour, only in March, April, and May"
9149
9212
  every4Hours9to17: "At 0 minutes past the hour, every 4 hours, between 09:00 AM and 05:00 PM"
9150
9213
 
9214
+ autoscaler:
9215
+ card:
9216
+ title: Autoscaler
9217
+ pause: Pause
9218
+ resume: Resume
9219
+ loadingError: There was a problem loading details
9220
+ loadingAlt: Details Loading
9221
+ details:
9222
+ status: Status
9223
+ health: Health
9224
+ scaleDown: Scale Down
9225
+ scaleUp: Scale Up
9226
+ nodes: Nodes
9227
+ ready: Ready
9228
+ notStarted: Not Started
9229
+ inTotal: In Total
9230
+ provisioning: Provisioning
9231
+ paused: Paused
9232
+ unavailable: Unavailable
9233
+ tab:
9234
+ title: Autoscaler
@@ -0,0 +1,113 @@
1
+ <script setup lang="ts">
2
+ import { computed, ComputedRef } from 'vue';
3
+ import { useFetch } from '@shell/components/Resource/Detail/FetchLoader/composables';
4
+ import { useInterval } from '@shell/composables/useInterval';
5
+ import { useI18n } from '@shell/composables/useI18n';
6
+ import { useStore } from 'vuex';
7
+
8
+ export interface Props {
9
+ value: any;
10
+ }
11
+
12
+ export interface Detail {
13
+ label: string;
14
+ value?: string | { component: any; props: any };
15
+ }
16
+
17
+ const props = defineProps<Props>();
18
+
19
+ const store = useStore();
20
+ const i18n = useI18n(store);
21
+
22
+ const fetch = useFetch(async() => {
23
+ return await props.value.loadAutoscalerDetails();
24
+ });
25
+
26
+ // The backend only updates the configmap every 10 seconds and we don't cache the configmap in the stores
27
+ useInterval(() => fetch.value.refresh(), 10000);
28
+
29
+ const details: ComputedRef<Detail[]> = computed(() => fetch.value.data);
30
+ </script>
31
+
32
+ <template>
33
+ <div class="autoscaler-card">
34
+ <div
35
+ v-if="fetch.loading && !fetch.refreshing"
36
+ class="loading"
37
+ >
38
+ <i
39
+ class="icon icon-lg icon-spinner icon-spin"
40
+ :alt="i18n.t('autoscaler.card.loadingAlt')"
41
+ />
42
+ </div>
43
+
44
+ <div
45
+ v-else-if="fetch.data"
46
+ class="details"
47
+ >
48
+ <div
49
+ v-for="(detail) in details"
50
+ :key="detail.label"
51
+ class="detail"
52
+ >
53
+ <label
54
+ v-if="detail.value"
55
+ class="label text-deemphasized"
56
+ >
57
+ {{ detail.label }}
58
+ </label>
59
+ <h5 v-else-if="detail.label">
60
+ {{ detail.label }}
61
+ </h5>
62
+ <div
63
+ v-if="detail.value"
64
+ class="value"
65
+ >
66
+ <component
67
+ :is="detail.value.component"
68
+ v-if="typeof detail.value === 'object'"
69
+ v-bind="detail.value.props"
70
+ />
71
+ <span v-else>{{ detail.value }}</span>
72
+ </div>
73
+ </div>
74
+ </div>
75
+ <div
76
+ v-else
77
+ class="text-warning"
78
+ >
79
+ {{ i18n.t('autoscaler.card.loadingError') }}
80
+ </div>
81
+ </div>
82
+ </template>
83
+
84
+ <style lang="scss" scoped>
85
+ .autoscaler-card {
86
+ width: 240px;
87
+
88
+ .loading {
89
+ display: flex;
90
+ justify-content: center;
91
+ }
92
+ .detail {
93
+ display: flex;
94
+ white-space: nowrap;
95
+ width: 244px;
96
+
97
+ &:not(:last-of-type) {
98
+ margin-bottom: 8px;
99
+ }
100
+
101
+ label, .value {
102
+ width: 50%;
103
+ }
104
+ }
105
+
106
+ h5 {
107
+ margin-bottom: 0;
108
+ margin-top: 12px;
109
+ font-size: 14px;
110
+ font-weight: 600;
111
+ }
112
+ }
113
+ </style>
@@ -0,0 +1,94 @@
1
+ <script setup lang="ts">
2
+ import { useFetch } from '@shell/components/Resource/Detail/FetchLoader/composables';
3
+ import Tab from '@shell/components/Tabbed/Tab.vue';
4
+ import { useI18n } from '@shell/composables/useI18n';
5
+ import { computed, onMounted, ref } from 'vue';
6
+ import { useStore } from 'vuex';
7
+ import SortableTable from '@shell/components/SortableTable/index.vue';
8
+ import { useInterval } from '@shell/composables/useInterval';
9
+
10
+ export interface Props {
11
+ value: any;
12
+ }
13
+
14
+ export interface Detail {
15
+ label: string;
16
+ values: (string | { component: any; props: any })[];
17
+ }
18
+
19
+ const props = withDefaults(defineProps<Props>(), { value: true });
20
+
21
+ const store = useStore();
22
+ const i18n = useI18n(store);
23
+
24
+ const table = ref<any>(null);
25
+
26
+ const eventHeaders = [
27
+ {
28
+ name: 'type',
29
+ label: i18n.t('tableHeaders.type'),
30
+ value: '_type',
31
+ sort: '_type',
32
+ },
33
+ {
34
+ name: 'reason',
35
+ label: i18n.t('tableHeaders.reason'),
36
+ value: 'reason',
37
+ sort: 'reason',
38
+ },
39
+ {
40
+ name: 'date',
41
+ label: i18n.t('tableHeaders.updated'),
42
+ value: 'firstTimestamp',
43
+ sort: 'date:desc',
44
+ formatter: 'LiveDate',
45
+ formatterOpts: { addSuffix: true },
46
+ width: 125
47
+ },
48
+ {
49
+ name: 'message',
50
+ label: i18n.t('tableHeaders.message'),
51
+ value: 'message',
52
+ sort: 'message',
53
+ },
54
+ ];
55
+
56
+ const fetch = useFetch(async() => {
57
+ return await props.value.loadAutoscalerEvents();
58
+ });
59
+
60
+ // From the FAQ there appears to be a 20 second target between detecting scaling needs to happen to scaling beginning
61
+ // so I don't see a reason to poll quicker than 20 seconds.
62
+ // https://github.com/kubernetes/autoscaler/blob/9befb31fd94d73ae0b888bd9536ae085cd9304e1/cluster-autoscaler/FAQ.md#what-are-the-service-level-objectives-for-cluster-autoscaler
63
+ useInterval(() => {
64
+ fetch.value.refresh();
65
+ }, 20000);
66
+
67
+ const rows = computed(() => {
68
+ return fetch.value.data || [];
69
+ });
70
+
71
+ onMounted(() => {
72
+ table.value?.changeSort('date', true);
73
+ });
74
+
75
+ </script>
76
+
77
+ <template>
78
+ <Tab
79
+ name="autoscaler"
80
+ :label="i18n.t('autoscaler.tab.title')"
81
+ >
82
+ <SortableTable
83
+ ref="table"
84
+ :headers="eventHeaders"
85
+ :namespaced="false"
86
+ :row-actions="false"
87
+ default-sort-by="date"
88
+ :rows="rows"
89
+ />
90
+ </Tab>
91
+ </template>
92
+
93
+ <style lang="scss" scoped>
94
+ </style>
@@ -34,8 +34,16 @@ export default {
34
34
  display: flex;
35
35
  font-size: 16px;
36
36
  margin: 10px 0 20px 0;
37
+ padding: 0 4px 2px 0;
37
38
  outline: 0;
38
39
  width: fit-content;
40
+ border-bottom: 2px solid transparent;
41
+
42
+ &:hover {
43
+ text-decoration: none;
44
+ border-bottom: 2px solid;
45
+ border-bottom-color: inherit;
46
+ }
39
47
 
40
48
  &:focus-visible {
41
49
  @include focus-outline;