dashboard-shell-shell 1.0.122 → 1.0.1000000082

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 (372) hide show
  1. package/.DS_Store +0 -0
  2. package/assets/brand/harvester/favicon.png +0 -0
  3. package/assets/brand/suse/favicon.png +0 -0
  4. package/assets/icons/iconfont.css +19 -3
  5. package/assets/icons/iconfont.js +1 -1
  6. package/assets/icons/iconfont.json +28 -0
  7. package/assets/icons/iconfont.ttf +0 -0
  8. package/assets/icons/iconfont.woff +0 -0
  9. package/assets/icons/iconfont.woff2 +0 -0
  10. package/assets/images/pl/half-logo.svg +2 -23
  11. package/assets/styles/base/_functions.scss +0 -0
  12. package/assets/styles/base/_mixins.scss +0 -0
  13. package/assets/styles/base/_variables.scss +1 -1
  14. package/assets/styles/global/_labeled-input.scss +0 -1
  15. package/assets/styles/global/_layout.scss +1 -1
  16. package/assets/styles/global/_select.scss +4 -2
  17. package/assets/styles/global/_table.scss +5 -0
  18. package/assets/styles/vendor/vue-select.scss +2 -1
  19. package/assets/translations/en-us.yaml +1 -1
  20. package/assets/translations/zh-hans.yaml +25 -15
  21. package/chart/monitoring/index.vue +3 -1
  22. package/chart/monitoring/prometheus/index.vue +13 -10
  23. package/cloud-credential/aws.vue +2 -0
  24. package/components/ActionDropdown.vue +1 -1
  25. package/components/ActionDropdownShell.vue +71 -0
  26. package/components/ActionMenu.vue +2 -2
  27. package/components/ActionMenuShell.vue +3 -0
  28. package/components/AppModal.vue +84 -8
  29. package/components/AssignTo.vue +25 -11
  30. package/components/AsyncButton.vue +24 -7
  31. package/components/BannerGraphic.vue +1 -0
  32. package/components/ButtonDropdown.vue +26 -4
  33. package/components/ButtonGroup.vue +4 -0
  34. package/components/ButtonMultiAction.vue +1 -0
  35. package/components/CodeMirror.vue +19 -6
  36. package/components/CommunityLinks.vue +3 -3
  37. package/components/ConsumptionGauge.vue +24 -5
  38. package/components/CopyToClipboardText.vue +2 -1
  39. package/components/CruResource.vue +13 -7
  40. package/components/CruResourceFooter.vue +2 -2
  41. package/components/DashboardOptions.vue +29 -17
  42. package/components/DetailText.vue +5 -0
  43. package/components/DisableAuthProviderModal.vue +1 -0
  44. package/components/DotState.vue +84 -0
  45. package/components/ExplorerMembers.vue +1 -1
  46. package/components/ExplorerProjectsNamespaces.vue +88 -16
  47. package/components/FixedBanner.vue +19 -12
  48. package/components/GlobalRoleBindings.vue +5 -1
  49. package/components/GrafanaDashboard.vue +4 -4
  50. package/components/GrowlManager.vue +4 -1
  51. package/components/HardwareResourceGauge.vue +39 -3
  52. package/components/InfoBox.vue +3 -3
  53. package/components/InputOrDisplay.vue +28 -2
  54. package/components/LabelValue.vue +20 -1
  55. package/components/LandingPagePreference.vue +5 -3
  56. package/components/LocaleSelector.vue +39 -93
  57. package/components/ModalManager.vue +55 -0
  58. package/components/ModalWithCard.vue +13 -3
  59. package/components/MoveModal.vue +1 -0
  60. package/components/PodSecurityAdmission.vue +1 -1
  61. package/components/PromptChangePassword.vue +1 -1
  62. package/components/PromptModal.vue +16 -3
  63. package/components/PromptRemove.vue +29 -9
  64. package/components/PromptRestore.vue +1 -0
  65. package/components/ResourceCancelModal.vue +1 -0
  66. package/components/ResourceDetail/Masthead.vue +52 -17
  67. package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
  68. package/components/ResourceDetail/index.vue +54 -16
  69. package/components/ResourceList/Masthead.vue +26 -4
  70. package/components/ResourceList/index.vue +4 -3
  71. package/components/ResourceTable.vue +1 -0
  72. package/components/SideNav.vue +20 -15
  73. package/components/SlideInPanelManager.vue +126 -0
  74. package/components/SortableTable/THead.vue +10 -4
  75. package/components/SortableTable/actions.js +1 -1
  76. package/components/SortableTable/index.vue +542 -553
  77. package/components/SortableTable/selection.js +2 -13
  78. package/components/StatusBadge.vue +77 -0
  79. package/components/Tabbed/Tab.vue +3 -3
  80. package/components/Tabbed/index.vue +47 -29
  81. package/components/Wizard.vue +2 -2
  82. package/components/YamlEditor.vue +1 -1
  83. package/components/__tests__/AsyncButton.test.ts +2 -2
  84. package/components/__tests__/FixedBanner.test.ts +3 -3
  85. package/components/__tests__/ModalManager.spec.ts +176 -0
  86. package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
  87. package/components/auth/Principal.vue +10 -3
  88. package/components/auth/RoleDetailEdit.vue +1 -1
  89. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  90. package/components/form/ArrayList.vue +123 -85
  91. package/components/form/ArrayListGrouped.vue +10 -2
  92. package/components/form/ArrayListSelect.vue +1 -1
  93. package/components/form/Command.vue +6 -15
  94. package/components/form/EnvVars.vue +16 -8
  95. package/components/form/Footer.vue +10 -7
  96. package/components/form/HealthCheck.vue +3 -3
  97. package/components/form/HookOption.vue +11 -16
  98. package/components/form/InputWithSelect.vue +6 -5
  99. package/components/form/KeyValue.vue +39 -10
  100. package/components/form/LabeledSelect.vue +73 -77
  101. package/components/form/Labels.vue +6 -3
  102. package/components/form/LifecycleHooks.vue +3 -3
  103. package/components/form/MatchExpressions.vue +42 -17
  104. package/components/form/NameNsDescription.vue +163 -116
  105. package/components/form/Networking.vue +20 -12
  106. package/components/form/NodeAffinity.vue +31 -23
  107. package/components/form/NodeScheduling.vue +13 -3
  108. package/components/form/Password.vue +11 -5
  109. package/components/form/PodAffinity.vue +47 -48
  110. package/components/form/Probe.vue +68 -66
  111. package/components/form/ResourceQuota/Namespace.vue +4 -4
  112. package/components/form/ResourceQuota/NamespaceRow.vue +5 -7
  113. package/components/form/ResourceQuota/Project.vue +9 -5
  114. package/components/form/ResourceQuota/ProjectRow.vue +4 -6
  115. package/components/form/ResourceSelector.vue +7 -9
  116. package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +6 -3
  117. package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +12 -1
  118. package/components/form/SSHKnownHosts/index.vue +16 -2
  119. package/components/form/Security.vue +54 -56
  120. package/components/form/Select.vue +44 -7
  121. package/components/form/ShellInput.vue +5 -1
  122. package/components/form/SimpleSecretSelector.vue +29 -9
  123. package/components/form/Tolerations.vue +5 -1
  124. package/components/form/UnitInput.vue +10 -5
  125. package/components/form/ValueFromResource.vue +134 -121
  126. package/components/form/WorkloadPorts.vue +18 -18
  127. package/components/form/__tests__/ArrayList.test.ts +5 -2
  128. package/components/form/__tests__/MatchExpressions.test.ts +12 -12
  129. package/components/form/__tests__/NameNsDescription.test.ts +115 -14
  130. package/components/form/__tests__/Probe.test.ts +12 -8
  131. package/components/form/__tests__/SSHKnownHosts.test.ts +11 -0
  132. package/components/form/__tests__/Select.test.ts +37 -0
  133. package/components/form/__tests__/UnitInput.test.ts +4 -5
  134. package/components/formatter/BadgeStateFormatter.vue +8 -5
  135. package/components/formatter/InternalExternalIP.vue +2 -0
  136. package/components/formatter/LiveDate.vue +3 -3
  137. package/components/formatter/SecretData.vue +20 -7
  138. package/components/nav/Favorite.vue +5 -1
  139. package/components/nav/Group.vue +18 -4
  140. package/components/nav/Header.vue +39 -13
  141. package/components/nav/Jump.vue +7 -0
  142. package/components/nav/NamespaceFilter.vue +21 -11
  143. package/components/nav/Pinned.vue +1 -1
  144. package/components/nav/TopLevelMenu.vue +5 -17
  145. package/components/nav/Type.vue +30 -33
  146. package/components/nav/__tests__/TopLevelMenu.test.ts +0 -40
  147. package/components/rancherResourceDetail/Masthead.vue +769 -0
  148. package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
  149. package/components/rancherResourceDetail/index.vue +591 -0
  150. package/components/rancherResourceList/Masthead-btn.vue +225 -0
  151. package/components/rancherResourceList/Masthead.vue +375 -0
  152. package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
  153. package/components/rancherResourceList/index.vue +307 -0
  154. package/components/rancherResourceList/resource-list.config.js +7 -0
  155. package/components/rancherResourceTable.vue +783 -0
  156. package/components/rancherSortableTable/THead.vue +561 -0
  157. package/components/rancherSortableTable/actions.js +153 -0
  158. package/components/rancherSortableTable/advanced-filtering.js +272 -0
  159. package/components/rancherSortableTable/debug.js +117 -0
  160. package/components/rancherSortableTable/filtering.js +290 -0
  161. package/components/rancherSortableTable/grouping.js +48 -0
  162. package/components/rancherSortableTable/index.vue +2712 -0
  163. package/components/rancherSortableTable/paging.js +155 -0
  164. package/components/rancherSortableTable/selection.js +629 -0
  165. package/components/rancherSortableTable/sortable-config.ts +4 -0
  166. package/components/rancherSortableTable/sorting.js +129 -0
  167. package/components/templates/blank.vue +4 -1
  168. package/components/templates/default.vue +8 -0
  169. package/components/templates/home.vue +10 -1
  170. package/components/templates/plain.vue +10 -1
  171. package/composables/focusTrap.ts +11 -3
  172. package/composables/useRuntimeFlag.ts +29 -0
  173. package/config/private-label.js +15 -10
  174. package/config/router/routes.js +21 -13
  175. package/config/store.js +4 -0
  176. package/config/table-headers.js +3 -2
  177. package/config/uiplugins.js +5 -1
  178. package/core/plugin-routes.ts +5 -115
  179. package/core/plugins.js +1 -1
  180. package/core/types.ts +23 -2
  181. package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +84 -23
  182. package/detail/autoscaling.horizontalpodautoscaler/index.vue +13 -3
  183. package/detail/provisioning.cattle.io.cluster.vue +72 -6
  184. package/dialog/AddCustomBadgeDialog.vue +1 -0
  185. package/dialog/DeactivateDriverDialog.vue +5 -4
  186. package/dialog/ForceMachineRemoveDialog.vue +6 -3
  187. package/dialog/GitRepoForceUpdateDialog.vue +1 -1
  188. package/dialog/ScalePoolDownDialog.vue +2 -2
  189. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
  190. package/edit/auth/__tests__/oidc.test.ts +162 -88
  191. package/edit/auth/azuread.vue +2 -1
  192. package/edit/auth/github.vue +1 -1
  193. package/edit/auth/googleoauth.vue +5 -1
  194. package/edit/auth/ldap/__tests__/config.test.ts +0 -14
  195. package/edit/auth/ldap/config.vue +0 -24
  196. package/edit/auth/ldap/index.vue +1 -1
  197. package/edit/auth/oidc.vue +39 -6
  198. package/edit/auth/saml.vue +1 -1
  199. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +5 -2
  200. package/edit/cloudcredential.vue +24 -9
  201. package/edit/fleet.cattle.io.clustergroup.vue +5 -3
  202. package/edit/fleet.cattle.io.gitrepo.vue +2 -0
  203. package/edit/logging-flow/Match.vue +1 -1
  204. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +40 -9
  205. package/edit/management.cattle.io.user.vue +28 -3
  206. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
  207. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +31 -31
  208. package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +36 -12
  209. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
  210. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
  211. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
  212. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
  213. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
  214. package/edit/monitoring.coreos.com.receiver/auth.vue +29 -29
  215. package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
  216. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
  217. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
  218. package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
  219. package/edit/namespace.vue +1 -2
  220. package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
  221. package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
  222. package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
  223. package/edit/persistentvolume/__tests__/persistentvolume.test.ts +14 -2
  224. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
  225. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -9
  226. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -10
  227. package/edit/provisioning.cattle.io.cluster/rke2.vue +31 -40
  228. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +5 -2
  229. package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
  230. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
  231. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +3 -3
  232. package/edit/service.vue +0 -3
  233. package/edit/token.vue +32 -11
  234. package/edit/workload/Job.vue +6 -6
  235. package/edit/workload/__tests__/Job.test.ts +0 -1
  236. package/edit/workload/index.vue +1 -0
  237. package/edit/workload/mixins/workload.js +3 -3
  238. package/initialize/install-plugins.js +2 -1
  239. package/list/harvesterhci.io.management.cluster.vue +4 -1
  240. package/list/management.cattle.io.feature.vue +1 -0
  241. package/list/namespace.vue +3 -1
  242. package/list/provisioning.cattle.io.cluster.vue +20 -12
  243. package/list/workload.vue +7 -6
  244. package/machine-config/__tests__/vmwarevsphere.test.ts +48 -3
  245. package/machine-config/azure.vue +16 -4
  246. package/machine-config/vmwarevsphere.vue +16 -0
  247. package/mixins/resource-fetch.js +2 -1
  248. package/models/__tests__/logging.banzaicloud.io.flow.test.ts +88 -0
  249. package/models/__tests__/namespace.test.ts +25 -1
  250. package/models/cloudcredential.js +5 -0
  251. package/models/kontainerdriver.js +6 -3
  252. package/models/logging.banzaicloud.io.flow.js +2 -1
  253. package/models/management.cattle.io.node.js +3 -3
  254. package/models/management.cattle.io.setting.js +2 -1
  255. package/models/namespace.js +4 -5
  256. package/models/nodedriver.js +6 -3
  257. package/models/storage.k8s.io.storageclass.js +2 -2
  258. package/models/workload.js +4 -1
  259. package/package.json +1 -1
  260. package/pages/about.vue +16 -8
  261. package/pages/account/index.vue +80 -24
  262. package/pages/account/pri.vue +229 -0
  263. package/pages/auth/login.vue +195 -44
  264. package/pages/auth/logout.vue +4 -1
  265. package/pages/auth/setup.vue +144 -19
  266. package/pages/auth/verify.vue +13 -8
  267. package/pages/auth copy/login.vue +595 -0
  268. package/pages/auth copy/logout.vue +47 -0
  269. package/pages/auth copy/setup.vue +523 -0
  270. package/pages/auth copy/verify.vue +203 -0
  271. package/pages/c/_cluster/_product/namespaces.vue +5 -5
  272. package/pages/c/_cluster/apps/charts/chart.vue +1 -1
  273. package/pages/c/_cluster/apps/charts/install.vue +26 -26
  274. package/pages/c/_cluster/auth/config/index.vue +10 -12
  275. package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
  276. package/pages/c/_cluster/explorer/index.vue +17 -15
  277. package/pages/c/_cluster/istio/index.vue +2 -2
  278. package/pages/c/_cluster/longhorn/index.vue +1 -1
  279. package/pages/c/_cluster/monitoring/index.vue +1 -1
  280. package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
  281. package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
  282. package/pages/c/_cluster/monitoring/monitor/index.vue +2 -2
  283. package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
  284. package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
  285. package/pages/c/_cluster/neuvector/index.vue +1 -1
  286. package/pages/c/_cluster/settings/brand.vue +3 -3
  287. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
  288. package/pages/diagnostic.vue +59 -11
  289. package/pages/fail-whale.vue +14 -8
  290. package/pages/home.vue +24 -18
  291. package/pages/prefs.vue +9 -7
  292. package/pages/support/index.vue +4 -1
  293. package/pkg/tsconfig.json +9 -9
  294. package/pkg/vue.config.js +1 -1
  295. package/plugins/dashboard-store/normalize.js +3 -1
  296. package/plugins/dashboard-store/resource-class.js +31 -29
  297. package/plugins/internal-api/index.ts +37 -0
  298. package/plugins/internal-api/shared/base-api.ts +13 -0
  299. package/plugins/internal-api/shell/shell.api.ts +108 -0
  300. package/promptRemove/management.cattle.io.fleetworkspace.vue +1 -1
  301. package/promptRemove/management.cattle.io.globalrole.vue +1 -1
  302. package/promptRemove/management.cattle.io.project.vue +2 -2
  303. package/promptRemove/management.cattle.io.roletemplate.vue +1 -1
  304. package/promptRemove/pod.vue +1 -1
  305. package/public/index.html +2 -1
  306. package/rancher-components/BadgeState/BadgeState.vue +5 -1
  307. package/rancher-components/Banner/Banner.vue +8 -2
  308. package/rancher-components/Card/Card.vue +3 -6
  309. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -0
  310. package/rancher-components/Form/LabeledInput/LabeledInput.vue +5 -2
  311. package/rancher-components/Form/Radio/RadioButton.vue +3 -3
  312. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -5
  313. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  314. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -2
  315. package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -3
  316. package/rancher-components/RcDropdown/types.ts +1 -0
  317. package/scripts/clean +0 -0
  318. package/scripts/extension/bundle +20 -0
  319. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +2 -2
  320. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
  321. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  322. package/scripts/extension/helm/scripts/package +0 -0
  323. package/scripts/extension/helm/scripts/patch +0 -0
  324. package/scripts/extension/helm/scripts/version +0 -0
  325. package/scripts/extension/helmpatch +44 -31
  326. package/scripts/extension/parse-tag-name +0 -0
  327. package/scripts/extension/publish +12 -12
  328. package/scripts/publish-shell.sh +18 -23
  329. package/scripts/serve-pkgs +0 -0
  330. package/scripts/sync-shell-deps +0 -0
  331. package/scripts/test-plugins-build.sh +4 -6
  332. package/scripts/typegen.sh +28 -46
  333. package/server/har-file.js +25 -3
  334. package/static/favicon.ico +0 -0
  335. package/static/favicon.png +0 -0
  336. package/static/loading-indicator.html +2 -2
  337. package/store/aws.js +9 -2
  338. package/store/features.js +2 -1
  339. package/store/i18n.js +3 -3
  340. package/store/modal.ts +71 -0
  341. package/store/slideInPanel.ts +47 -0
  342. package/store/type-map.js +9 -1
  343. package/types/cloud-shell/index.d.ts +11020 -0
  344. package/types/global-vue.d.ts +5 -0
  345. package/types/internal-api/shell/growl.d.ts +25 -0
  346. package/types/internal-api/shell/modal.d.ts +77 -0
  347. package/types/internal-api/shell/slideIn.d.ts +15 -0
  348. package/types/shell/index.d.ts +118 -128
  349. package/types/vue-shim.d.ts +4 -1
  350. package/utils/__tests__/object.test.ts +38 -4
  351. package/utils/__tests__/string.test.ts +2 -2
  352. package/utils/auth.js +1 -0
  353. package/utils/banners.js +0 -45
  354. package/utils/cluster.js +35 -0
  355. package/utils/color.js +9 -8
  356. package/utils/error.js +61 -3
  357. package/utils/errorTranslate.json +450 -30
  358. package/utils/object.js +46 -6
  359. package/utils/router.js +22 -1
  360. package/utils/select.js +26 -3
  361. package/utils/string.js +9 -8
  362. package/utils/title.ts +1 -1
  363. package/utils/validators/machine-pool.ts +20 -0
  364. package/vue.config.js +7 -2
  365. package/components/formatter/ExtensionCache.vue +0 -74
  366. package/components/formatter/Port.vue +0 -24
  367. package/components/formatter/SecretType.vue +0 -41
  368. package/types/resources/fleet.d.ts +0 -57
  369. package/types/resources/pod-security-admission.ts +0 -36
  370. package/types/resources/settings.d.ts +0 -93
  371. package/types/resources/userPreferences.d.ts +0 -13
  372. package/types/vue-shim.d +0 -20
@@ -81,7 +81,8 @@ export default {
81
81
  extensionHeaderActions: getApplicableExtensionEnhancements(this, ExtensionPoint.ACTION, ActionLocation.HEADER, this.$route),
82
82
  ctx: this,
83
83
  showImportModal: false,
84
- showSearchModal: false
84
+ showSearchModal: false,
85
+ userIcon: require('~shell/assets/images/logo.png'),
85
86
  };
86
87
  },
87
88
 
@@ -404,7 +405,7 @@ export default {
404
405
  <TopLevelMenu v-if="isRancherInHarvester || isMultiCluster || !isSingleProduct" />
405
406
  </div>
406
407
 
407
- <div
408
+ <!-- <div
408
409
  class="menu-spacer"
409
410
  :class="{'isSingleProduct': isSingleProduct }"
410
411
  >
@@ -523,8 +524,20 @@ export default {
523
524
  :alt="t('branding.logos.label')"
524
525
  />
525
526
  </div>
526
- </div>
527
+ </div> -->
527
528
 
529
+ <!-- logo -->
530
+ <div class="menu-spacer">
531
+ <router-link
532
+ v-if="isSingleProduct && !isRancherInHarvester"
533
+ :to="singleProductLogoRoute"
534
+ >
535
+ <img
536
+ :src="userIcon"
537
+ >
538
+ </router-link>
539
+ </div>
540
+ <!-- 中间 -->
528
541
  <div class="spacer" />
529
542
 
530
543
  <div class="rd-header-right">
@@ -696,20 +709,23 @@ export default {
696
709
  data-testid="nav_header_showUserMenu"
697
710
  :aria-label="t('nav.userMenu.button.label')"
698
711
  >
699
- <img
712
+ <!-- <img
700
713
  v-if="principal && principal.avatarSrc"
701
714
  :src="principal.avatarSrc"
702
715
  :class="{'avatar-round': principal.roundAvatar}"
703
716
  width="36"
704
717
  height="36"
718
+ :alt="t('nav.alt.userAvatar')"
705
719
  >
706
720
  <i
707
721
  v-else
708
722
  class="icon icon-user icon-3x avatar"
709
- />
723
+ /> -->
724
+ <i class="icon icon-usericon" />
725
+ <span class="login-name">{{ principal.loginName }}</span>
710
726
  </rc-dropdown-trigger>
711
727
  <template #dropdownCollection>
712
- <template v-if="authEnabled">
728
+ <!-- <template v-if="authEnabled">
713
729
  <div class="user-info">
714
730
  <div class="user-name">
715
731
  <i class="icon icon-lg icon-user" /> {{ principal.loginName }}
@@ -721,13 +737,13 @@ export default {
721
737
  </div>
722
738
  </div>
723
739
  <rc-dropdown-separator />
724
- </template>
725
- <rc-dropdown-item
740
+ </template> -->
741
+ <!-- <rc-dropdown-item
726
742
  v-if="showPreferencesLink"
727
743
  @click="$router.push({ name: 'prefs'})"
728
744
  >
729
745
  {{ t('nav.userMenu.preferences') }}
730
- </rc-dropdown-item>
746
+ </rc-dropdown-item> -->
731
747
  <rc-dropdown-item
732
748
  v-if="showAccountAndApiKeyLink"
733
749
  @click="$router.push({ name: 'account'})"
@@ -760,6 +776,7 @@ export default {
760
776
  HEADER {
761
777
  display: flex;
762
778
  z-index: z-index('mainHeader');
779
+ box-shadow: 0px 3px 3px 1px rgba(0,0,0,0.12);
763
780
 
764
781
  > .spacer {
765
782
  flex: 1;
@@ -877,7 +894,7 @@ export default {
877
894
 
878
895
  > * {
879
896
  background-color: var(--header-bg);
880
- border-bottom: var(--header-border-size) solid var(--header-border);
897
+ /* border-bottom: var(--header-border-size) solid var(--header-border); */
881
898
  }
882
899
 
883
900
  .rd-header-right {
@@ -890,7 +907,7 @@ export default {
890
907
  }
891
908
 
892
909
  > .top {
893
- padding-top: 6px;
910
+ padding-top: 10px;
894
911
 
895
912
  INPUT[type='search']::placeholder,
896
913
  .vs__open-indicator,
@@ -1010,7 +1027,7 @@ export default {
1010
1027
 
1011
1028
  > .user {
1012
1029
  outline: none;
1013
- width: var(--header-height);
1030
+ /* width: var(--header-height); */
1014
1031
 
1015
1032
  .v-popper {
1016
1033
  display: flex;
@@ -1024,6 +1041,10 @@ export default {
1024
1041
  .user-image {
1025
1042
  display: flex;
1026
1043
  align-items: center;
1044
+ &:hover{
1045
+ color: var(--primary);
1046
+ }
1047
+
1027
1048
  }
1028
1049
 
1029
1050
  &:focus {
@@ -1152,5 +1173,10 @@ export default {
1152
1173
  }
1153
1174
  }
1154
1175
  }
1155
-
1176
+ .login-name{
1177
+ font-size: 14px;
1178
+ margin-left: 5px;
1179
+ margin-top: 5px;
1180
+ line-height: 20px;
1181
+ }
1156
1182
  </style>
@@ -71,6 +71,12 @@ export default {
71
71
 
72
72
  <template>
73
73
  <div>
74
+ <p
75
+ id="describe-filter-resource-search"
76
+ hidden
77
+ >
78
+ {{ t('nav.resourceSearch.filteringDescription') }}
79
+ </p>
74
80
  <input
75
81
  ref="input"
76
82
  v-model="value"
@@ -78,6 +84,7 @@ export default {
78
84
  class="search"
79
85
  role="textbox"
80
86
  :aria-label="t('nav.resourceSearch.label')"
87
+ aria-describedby="describe-filter-resource-search"
81
88
  @keyup.esc="$emit('closeSearch')"
82
89
  >
83
90
  <div class="results">
@@ -20,6 +20,7 @@ import { KEY } from '@shell/utils/platform';
20
20
  import pAndNFiltering from '@shell/plugins/steve/projectAndNamespaceFiltering.utils';
21
21
  import { SETTING } from '@shell/config/settings';
22
22
  import paginationUtils from '@shell/utils/pagination-utils';
23
+ import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
23
24
 
24
25
  const forcedNamespaceValidTypes = [NAMESPACE_FILTER_KINDS.DIVIDER, NAMESPACE_FILTER_KINDS.PROJECT, NAMESPACE_FILTER_KINDS.NAMESPACE];
25
26
 
@@ -143,7 +144,10 @@ export default {
143
144
  const inStore = this.$store.getters['currentStore'](NAMESPACE);
144
145
 
145
146
  const params = { ...this.$route.params };
146
- const resource = params.resource;
147
+ let resource = params.resource;
148
+ if (params.resource) {
149
+ resource = cloud2harvesterhci(resource)
150
+ }
147
151
 
148
152
  // Sometimes, different pages may have different namespaces to filter
149
153
  const notFilterNamespaces = this.$store.getters[`type-map/optionsFor`](resource).notFilterNamespace || [];
@@ -752,7 +756,7 @@ export default {
752
756
  :data-testid="`namespaces-value-${j}`"
753
757
  class="ns-value"
754
758
  >
755
- <div>{{ ns.label }}</div>
759
+ <div>{{ ns.label.replace('harvester', 'cloud') }}</div>
756
760
  <!-- block user from removing the last selection if ns forced filtering is on -->
757
761
  <i
758
762
  v-if="!namespaceFilterMode || value.length > 1"
@@ -863,7 +867,7 @@ export default {
863
867
  v-if="opt.kind === NAMESPACE_FILTER_KINDS.NAMESPACE"
864
868
  class="icon icon-folder"
865
869
  />
866
- <div>{{ opt.label }}</div>
870
+ <div>{{ opt.label.replace('harvester', 'cloud') }}</div>
867
871
  <i
868
872
  v-if="opt.selected"
869
873
  class="icon icon-checkmark"
@@ -921,6 +925,7 @@ export default {
921
925
  display: flex;
922
926
  > i {
923
927
  padding-right: 5px;
928
+ font-size: 10px;
924
929
  }
925
930
  }
926
931
 
@@ -932,6 +937,8 @@ export default {
932
937
 
933
938
  .ns-filter-input {
934
939
  height: 24px;
940
+ border: 1px solid #d7d7d7;
941
+ padding: 0px 5px;
935
942
  }
936
943
 
937
944
  .ns-filter-clear {
@@ -946,7 +953,8 @@ export default {
946
953
 
947
954
  .ns-dropdown-menu {
948
955
  background-color: var(--header-bg);
949
- border: 1px solid var(--primary-border);
956
+ /* border: 1px solid var(--primary-border); */
957
+ border: 1px solid #d7d7d7;;
950
958
  border-bottom-left-radius: var(--border-radius);
951
959
  border-bottom-right-radius: var(--border-radius);
952
960
  color: var(--header-btn-text);
@@ -966,10 +974,10 @@ export default {
966
974
  }
967
975
 
968
976
  .ns-divider {
969
- border-top: 1px solid var(--border);
977
+ /* border-top: 1px solid var(--border); */
970
978
  cursor: default;
971
- margin-top: 10px;
972
- padding-bottom: 10px;
979
+ /* margin-top: 10px; */
980
+ /* padding-bottom: 10px; */
973
981
  }
974
982
 
975
983
  .ns-option {
@@ -1009,7 +1017,7 @@ export default {
1009
1017
  &.ns-selected:not(:hover) {
1010
1018
  .ns-item {
1011
1019
  > * {
1012
- color: var(--primary);
1020
+ /* color: var(--primary); */
1013
1021
  }
1014
1022
  }
1015
1023
 
@@ -1062,7 +1070,7 @@ export default {
1062
1070
  border-radius: var(--border-radius);
1063
1071
  color: var(--header-btn-text);
1064
1072
  cursor: pointer;
1065
- height: 40px;
1073
+ height: 32px;
1066
1074
  padding: 0 10px;
1067
1075
  position: relative;
1068
1076
  z-index: z-index('dropdownOverlay');
@@ -1070,7 +1078,8 @@ export default {
1070
1078
  &.ns-open {
1071
1079
  border-bottom-left-radius: 0;
1072
1080
  border-bottom-right-radius: 0;
1073
- border-color: var(--primary-border);
1081
+ /* border-color: var(--primary-border); */
1082
+ border-color: #d7d7d7;
1074
1083
  }
1075
1084
 
1076
1085
  > .ns-values {
@@ -1109,12 +1118,13 @@ export default {
1109
1118
  border-radius: 5px;
1110
1119
  color: var(--tag-text);
1111
1120
  display: flex;
1112
- line-height: 20px;
1121
+ /* line-height: 20px; */
1113
1122
  padding: 2px 5px;
1114
1123
  white-space: nowrap;
1115
1124
 
1116
1125
  > i {
1117
1126
  margin-left: 5px;
1127
+ font-size: 8px;
1118
1128
 
1119
1129
  &:hover {
1120
1130
  color: var(--primary);
@@ -36,7 +36,7 @@ export default {
36
36
  :aria-checked="!!pinned"
37
37
  class="pin icon"
38
38
  :class="{'icon-pin-outlined': !pinned, 'icon-pin': pinned}"
39
- aria-role="button"
39
+ role="button"
40
40
  :aria-label="t('nav.ariaLabel.pinCluster', { cluster: cluster.label })"
41
41
  @click.stop.prevent="toggle"
42
42
  @keydown.enter.prevent="toggle"
@@ -14,7 +14,6 @@ import { SETTING } from '@shell/config/settings';
14
14
  import { getProductFromRoute } from '@shell/utils/router';
15
15
  import { isRancherPrime } from '@shell/config/version';
16
16
  import Pinned from '@shell/components/nav/Pinned';
17
- import { getGlobalBannerFontSizes } from '@shell/utils/banners';
18
17
  import { TopLevelMenuHelperPagination, TopLevelMenuHelperLegacy } from '@shell/components/nav/TopLevelMenu.helper';
19
18
  import { debounce } from 'lodash';
20
19
  import { sameContents } from '@shell/utils/array';
@@ -82,15 +81,6 @@ export default {
82
81
  return this.$store.getters['prefs/get'](PINNED_CLUSTERS);
83
82
  },
84
83
 
85
- sideMenuStyle() {
86
- const globalBannerSettings = getGlobalBannerFontSizes(this.$store);
87
-
88
- return {
89
- marginBottom: globalBannerSettings?.footerFont,
90
- marginTop: globalBannerSettings?.headerFont
91
- };
92
- },
93
-
94
84
  showClusterSearch() {
95
85
  return this.allClustersCount > this.maxClustersToShow;
96
86
  },
@@ -440,8 +430,7 @@ export default {
440
430
 
441
431
  return {
442
432
  content,
443
- placement: 'right',
444
- popperOptions: { modifiers: { preventOverflow: { enabled: false }, hide: { enabled: false } } },
433
+ placement: 'right',
445
434
  popperClass
446
435
  };
447
436
  },
@@ -483,7 +472,6 @@ export default {
483
472
  data-testid="side-menu"
484
473
  class="side-menu"
485
474
  :class="{'menu-open': shown, 'menu-close':!shown}"
486
- :style="sideMenuStyle"
487
475
  tabindex="-1"
488
476
  role="navigation"
489
477
  :aria-label="t('nav.ariaLabel.topLevelMenu')"
@@ -710,7 +698,7 @@ export default {
710
698
  v-if="clustersFiltered.length > 0"
711
699
  class="category-title"
712
700
  >
713
- <hr>
701
+ <hr role="none">
714
702
  </div>
715
703
  </div>
716
704
 
@@ -824,7 +812,7 @@ export default {
824
812
  <div
825
813
  class="category-title"
826
814
  >
827
- <hr>
815
+ <hr role="none">
828
816
  <span>
829
817
  {{ t('nav.categories.multiCluster') }}
830
818
  </span>
@@ -857,7 +845,7 @@ export default {
857
845
  <div
858
846
  class="category-title"
859
847
  >
860
- <hr>
848
+ <hr role="none">
861
849
  <span>
862
850
  {{ t('nav.categories.configuration') }}
863
851
  </span>
@@ -1002,7 +990,7 @@ export default {
1002
990
  }
1003
991
  }
1004
992
 
1005
- position: fixed;
993
+ position: absolute;
1006
994
  top: 0;
1007
995
  left: 0px;
1008
996
  bottom: 0;
@@ -58,7 +58,18 @@ export default {
58
58
 
59
59
  isActive() {
60
60
  const typeFullPath = this.$router.resolve(this.type.route)?.fullPath.toLowerCase();
61
- const pageFullPath = this.$route.fullPath?.toLowerCase();
61
+ const pageFullPath = this.$route.fullPath?.toLowerCase().split('#')[0]; // Ignore the shebang when comparing routes
62
+ const routeMetaNav = this.$route.meta?.nav;
63
+
64
+ // If the route explicitly declares the nav path that should be highlighted, then use that
65
+ if (routeMetaNav) {
66
+ const cluster = this.$route.params?.cluster;
67
+ const navPath = routeMetaNav.replace(':cluster', cluster);
68
+
69
+ if (navPath === typeFullPath) {
70
+ return true;
71
+ }
72
+ }
62
73
 
63
74
  if ( !this.type.exact) {
64
75
  const typeSplit = typeFullPath.split('/');
@@ -122,6 +133,7 @@ export default {
122
133
  :aria-label="type.labelKey ? t(type.labelKey) : (type.labelDisplay || type.label)"
123
134
  :href="href"
124
135
  class="type-link"
136
+ :aria-current="isActive ? 'page' : undefined"
125
137
  @click="selectType(); navigate($event);"
126
138
  @mouseenter="setNear(true)"
127
139
  @mouseleave="setNear(false)"
@@ -199,6 +211,7 @@ export default {
199
211
  .label {
200
212
  align-items: center;
201
213
  grid-area: label;
214
+ display: flex;
202
215
  overflow: hidden;
203
216
  text-overflow: ellipsis;
204
217
 
@@ -206,13 +219,13 @@ export default {
206
219
  padding-left: 3px;
207
220
  }
208
221
 
209
- :deep() .highlight {
222
+ ::v-deep .highlight {
210
223
  background: var(--diff-ins-bg);
211
224
  color: var(--body-text);
212
225
  padding: 2px;
213
226
  }
214
227
 
215
- :deep() .icon {
228
+ ::v-deep .icon {
216
229
  position: relative;
217
230
  color: var(--muted);
218
231
  }
@@ -225,20 +238,24 @@ export default {
225
238
  grid-column-gap: 5px;
226
239
  font-size: 14px;
227
240
  line-height: 24px;
228
- padding: 7.5px 7px 7.5px 10px;
241
+ /* padding: 7.5px 7px 7.5px 10px; */
242
+ padding: 0px 16px 0px 40px;
243
+ height: 50px;
229
244
  margin: 0 0 0 -3px;
230
245
  overflow: hidden;
231
246
  text-overflow: ellipsis;
232
247
  white-space: nowrap;
233
248
  color: var(--body-text);
234
- height: 33px;
235
249
 
236
250
  &:hover {
237
- background: var(--nav-hover);
251
+ background: var(--nav-active);
252
+ color: var(--nav-hover-color);
253
+ /* background: var(--nav-hover); */
238
254
  text-decoration: none;
239
255
 
240
- :deep() .icon {
241
- color: var(--body-text);
256
+ ::v-deep .icon {
257
+ /* color: var(--body-text); */
258
+ color: var(--nav-hover-color);
242
259
  }
243
260
  }
244
261
  }
@@ -247,44 +264,24 @@ export default {
247
264
  grid-area: favorite;
248
265
  font-size: 12px;
249
266
  position: relative;
250
- vertical-align: middle;
251
- margin-right: 4px;
252
267
  }
253
268
 
254
269
  .count {
270
+ grid-area: count;
255
271
  font-size: 12px;
272
+ text-align: right;
256
273
  justify-items: center;
257
274
  padding-right: 4px;
258
- display: flex;
259
- align-items: center;
260
- }
261
-
262
- &.nav-type.nav-link {
263
- a .label {
264
- display: flex;
265
- }
266
275
  }
267
276
 
268
277
  &.nav-type:not(.depth-0) {
269
- A {
270
- padding-left: 16px;
271
- }
272
-
273
- :deep() .label I {
274
- padding-right: 2px;
275
- }
276
- }
277
-
278
- &.nav-type:is(.depth-1) {
279
278
  A {
280
279
  font-size: 13px;
281
- padding-left: 23px;
280
+ padding: 5.5px 7px 5.5px 10px;
282
281
  }
283
- }
284
282
 
285
- &.nav-type:not(.depth-0):not(.depth-1) {
286
- A {
287
- padding-left: 14px;
283
+ ::v-deep .label I {
284
+ padding-right: 2px;
288
285
  }
289
286
  }
290
287
  }
@@ -1,5 +1,4 @@
1
1
  import TopLevelMenu from '@shell/components/nav/TopLevelMenu.vue';
2
- import { SETTING } from '@shell/config/settings';
3
2
  import { mount, Wrapper } from '@vue/test-utils';
4
3
  import { CAPI, COUNT, MANAGEMENT } from '@shell/config/types';
5
4
  import { PINNED_CLUSTERS } from '@shell/store/prefs';
@@ -429,45 +428,6 @@ describe('topLevelMenu', () => {
429
428
  expect(description4.text()).toStrictEqual('some-description4');
430
429
  });
431
430
 
432
- it('should not "crash" the component if the structure of banner settings is in an old format', async() => {
433
- const wrapper: Wrapper<InstanceType<typeof TopLevelMenu>> = mount(TopLevelMenu, {
434
- global: {
435
- mocks: {
436
- $route: {},
437
- $store: {
438
- ...generateStore(
439
- [{ name: 'whatever' }],
440
- [
441
- // object based on https://github.com/rancher/dashboard/issues/10140#issuecomment-1883252402
442
- {
443
- id: SETTING.BANNERS,
444
- value: JSON.stringify({
445
- banner: {
446
- color: '#78c9cf',
447
- background: '#27292e',
448
- text: 'Hello World!'
449
- },
450
- showHeader: 'true',
451
- showFooter: 'true'
452
- })
453
- }
454
- ]
455
- ),
456
- }
457
- },
458
-
459
- stubs: ['BrandImage', 'router-link'],
460
- },
461
- });
462
-
463
- await waitForIt();
464
-
465
- expect(wrapper.vm.sideMenuStyle).toStrictEqual({
466
- marginBottom: '2em',
467
- marginTop: '2em'
468
- });
469
- });
470
-
471
431
  describe('searching a term', () => {
472
432
  describe('should displays a no results message if have clusters but', () => {
473
433
  it('given no matching clusters', async() => {