dashboard-shell-shell 1.0.1000000116 → 1.0.1000000117

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 (124) hide show
  1. package/assets/images/action.svg +6 -0
  2. package/assets/images/pl/logo.png +0 -0
  3. package/assets/styles/base/_functions.scss +0 -0
  4. package/assets/styles/base/_mixins.scss +1 -1
  5. package/assets/styles/global/_button.scss +17 -10
  6. package/assets/styles/global/_form.scss +2 -2
  7. package/assets/styles/global/_labeled-input.scss +6 -2
  8. package/assets/styles/global/_select.scss +6 -7
  9. package/assets/styles/global/_table.scss +3 -2
  10. package/assets/styles/global/_tooltip.scss +8 -1
  11. package/assets/styles/themes/_dark.scss +2 -0
  12. package/assets/styles/themes/_light.scss +5 -2
  13. package/assets/styles/vendor/vue-select.scss +2 -1
  14. package/assets/translations/en-us.yaml +1 -3
  15. package/assets/translations/zh-hans.yaml +51 -28
  16. package/components/ActionDropdown.vue +1 -0
  17. package/components/ActionMenuShell.vue +6 -3
  18. package/components/BrandImage.vue +22 -0
  19. package/components/ClusterIconMenu.vue +1 -1
  20. package/components/CodeMirror.vue +1 -0
  21. package/components/CruResource.vue +1 -1
  22. package/components/CruResourceFooter.vue +1 -1
  23. package/components/ExplorerProjectsNamespaces.vue +4 -24
  24. package/components/GlobalRoleBindings.vue +112 -48
  25. package/components/IndentedPanel.vue +4 -10
  26. package/components/PromptRemove.vue +3 -3
  27. package/components/ResourceDetail/Masthead.vue +190 -242
  28. package/components/ResourceDetail/index.vue +20 -5
  29. package/components/ResourceList/Masthead.vue +146 -84
  30. package/components/ResourceList/ResourceLoadingIndicator.vue +5 -2
  31. package/components/ResourceTable.vue +76 -1
  32. package/components/SideNav.vue +66 -29
  33. package/components/SortableTable/THead.vue +6 -0
  34. package/components/SortableTable/index.vue +481 -388
  35. package/components/Tabbed/index.vue +4 -5
  36. package/components/auth/Principal.vue +3 -2
  37. package/components/auth/RoleDetailEdit.vue +58 -5
  38. package/components/auth/SelectPrincipal.vue +1 -0
  39. package/components/form/BannerSettings.vue +18 -16
  40. package/components/form/ChangePassword.vue +4 -4
  41. package/components/form/ColorInput.vue +32 -8
  42. package/components/form/Footer.vue +1 -1
  43. package/components/form/InputWithSelect.vue +2 -0
  44. package/components/form/KeyValue.vue +31 -7
  45. package/components/form/LabeledSelect.vue +178 -178
  46. package/components/form/Members/ClusterPermissionsEditor.vue +1 -2
  47. package/components/form/Members/MembershipEditor.vue +1 -1
  48. package/components/form/NameNsDescription.vue +24 -11
  49. package/components/form/Password.vue +6 -2
  50. package/components/form/ResourceQuota/Namespace.vue +1 -1
  51. package/components/form/ResourceQuota/NamespaceRow.vue +13 -10
  52. package/components/form/ResourceQuota/ProjectRow.vue +0 -1
  53. package/components/form/Select.vue +2 -2
  54. package/components/nav/Favorite.vue +5 -1
  55. package/components/nav/Group.vue +69 -23
  56. package/components/nav/Header.vue +82 -17
  57. package/components/nav/HeaderPageActionMenu.vue +1 -0
  58. package/components/nav/NamespaceFilter.vue +0 -3
  59. package/components/nav/TopLevelMenu.vue +182 -119
  60. package/components/nav/Type.vue +48 -11
  61. package/composables/useClickOutside.ts +1 -1
  62. package/config/product/auth.js +16 -7
  63. package/config/product/explorer.js +1 -1
  64. package/config/product/settings.js +17 -8
  65. package/config/settings.ts +28 -0
  66. package/edit/management.cattle.io.user.vue +17 -4
  67. package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
  68. package/edit/token.vue +1 -1
  69. package/list/harvesterhci.io.management.cluster.vue +17 -0
  70. package/list/management.cattle.io.setting.vue +22 -13
  71. package/list/management.cattle.io.user.vue +25 -14
  72. package/list/provisioning.cattle.io.cluster.vue +6 -7
  73. package/mixins/brand.js +17 -0
  74. package/package.json +1 -1
  75. package/pages/auth/login.vue +84 -29
  76. package/pages/c/_cluster/auth/roles/index.vue +61 -14
  77. package/pages/c/_cluster/settings/banners.vue +174 -101
  78. package/pages/c/_cluster/settings/brand.vue +348 -301
  79. package/pages/c/_cluster/settings/performance.vue +61 -38
  80. package/pages/home.vue +70 -21
  81. package/pages/prefs.vue +25 -23
  82. package/pkg/tsconfig.json +9 -9
  83. package/pkg/vue.config.js +1 -1
  84. package/promptRemove/mixin/roleDeletionCheck.js +2 -2
  85. package/scripts/clean +0 -0
  86. package/scripts/extension/bundle +0 -0
  87. package/scripts/extension/helm/scripts/package +0 -0
  88. package/scripts/extension/helm/scripts/patch +0 -0
  89. package/scripts/extension/helm/scripts/version +0 -0
  90. package/scripts/extension/helmpatch +0 -0
  91. package/scripts/extension/parse-tag-name +0 -0
  92. package/scripts/extension/publish +0 -0
  93. package/scripts/publish-shell.sh +86 -60
  94. package/scripts/serve-pkgs +0 -0
  95. package/scripts/sync-shell-deps +0 -0
  96. package/scripts/typegen.sh +44 -28
  97. package/store/i18n.js +5 -5
  98. package/store/prefs.js +17 -5
  99. package/store/type-map.js +2 -1
  100. package/types/shell/index.d.ts +1 -1
  101. package/utils/error.js +4 -0
  102. package/utils/router.js +3 -3
  103. package/vue.config.js +1 -6
  104. package/components/rancherResourceDetail/Masthead.vue +0 -769
  105. package/components/rancherResourceDetail/__tests__/Masthead.test.ts +0 -65
  106. package/components/rancherResourceDetail/index.vue +0 -591
  107. package/components/rancherResourceList/Masthead.vue +0 -375
  108. package/components/rancherResourceList/ResourceLoadingIndicator.vue +0 -140
  109. package/components/rancherResourceList/index.vue +0 -307
  110. package/components/rancherResourceList/resource-list.config.js +0 -7
  111. package/components/rancherResourceTable.vue +0 -783
  112. package/components/rancherSortableTable/THead.vue +0 -561
  113. package/components/rancherSortableTable/actions.js +0 -153
  114. package/components/rancherSortableTable/advanced-filtering.js +0 -272
  115. package/components/rancherSortableTable/debug.js +0 -117
  116. package/components/rancherSortableTable/filtering.js +0 -290
  117. package/components/rancherSortableTable/grouping.js +0 -48
  118. package/components/rancherSortableTable/index.vue +0 -2712
  119. package/components/rancherSortableTable/paging.js +0 -155
  120. package/components/rancherSortableTable/selection.js +0 -629
  121. package/components/rancherSortableTable/sortable-config.ts +0 -4
  122. package/components/rancherSortableTable/sorting.js +0 -129
  123. package/types/cloud-shell/index.d.ts +0 -11014
  124. /package/components/{rancherResourceList → ResourceList}/Masthead-btn.vue +0 -0
@@ -8,6 +8,11 @@ export default {
8
8
  emits: ['expand', 'close'],
9
9
 
10
10
  props: {
11
+ loginName: {
12
+ type: String,
13
+ default: '',
14
+ },
15
+
11
16
  depth: {
12
17
  type: Number,
13
18
  default: 0,
@@ -46,8 +51,16 @@ export default {
46
51
 
47
52
  data() {
48
53
  const id = (this.idPrefix || '') + this.group.name;
54
+ const icons = {
55
+ '虚拟机管理': 'icon-backupandsnapshot',
56
+ '网络管理': 'icon-networks',
57
+ '镜像管理': 'icon-imagelist',
58
+ '资源管理': 'icon-sorcetype',
59
+ '运维管理': 'icon-monitoringandlogging'
60
+ }
61
+
49
62
 
50
- return { id, expanded: false };
63
+ return { id, expanded: false, icons };
51
64
  },
52
65
 
53
66
  computed: {
@@ -179,8 +192,7 @@ export default {
179
192
  const withoutQuery = withoutHash.split('?')[0];
180
193
  const itemFullPath = this.$router.resolve(item.route).fullPath;
181
194
 
182
- // if (matchesNavLevel || itemFullPath === withoutQuery) {
183
- if (matchesNavLevel || itemFullPath === withoutQuery || withoutQuery.includes(itemFullPath)) {
195
+ if (matchesNavLevel || itemFullPath === withoutQuery) {
184
196
  return true;
185
197
  } else if (parentPath && itemFullPath === parentPath) {
186
198
  return true;
@@ -222,6 +234,7 @@ export default {
222
234
  class="accordion"
223
235
  :class="{[`depth-${depth}`]: true, 'expanded': isExpanded, 'has-children': hasChildren, 'group-highlight': isGroupActive}"
224
236
  >
237
+ <!-- 分组标题区 -->
225
238
  <div
226
239
  v-if="showHeader"
227
240
  class="header"
@@ -233,26 +246,37 @@ export default {
233
246
  @keyup.enter="groupSelected()"
234
247
  @keyup.space="groupSelected()"
235
248
  >
249
+
250
+ <!-- 具名插槽 header,允许外部自定义标题内容 -->
236
251
  <slot name="header">
237
- <router-link
238
- v-if="hasOverview"
239
- :to="group.children[0].route"
240
- :exact="group.children[0].exact"
241
- :tabindex="-1"
242
- >
243
- <h6>
252
+
253
+ <!-- 如果分组有概览页(overview) 跳转到第一个子路由 -->
254
+ <h6 v-if="hasOverview">
255
+ <router-link
256
+ class="menuRouterLink"
257
+ :to="group.children[0].route"
258
+ :exact="group.children[0].exact"
259
+ :tabindex="-1"
260
+ >
261
+ <i v-if="!group.labelDisplay || (group.labelDisplay && group.labelDisplay.indexOf('</i>') === -1)" class="icon" :class="icons[group.label] ? icons[group.label] + ' init_icon' : 'icon-globe'" style="color: var(--muted);width: 32px;" />
244
262
  <span v-clean-html="group.labelDisplay || group.label" />
245
- </h6>
246
- </router-link>
263
+ </router-link>
264
+ </h6>
265
+ <!-- 虚拟机管理:icon-backupandsnapshot -->
266
+ <!-- 网络管理:icon-networks -->
267
+ <!-- 镜像管理:icon-imagelist -->
268
+ <!-- 资源管理:icon-sorcetype -->
269
+ <!-- 运维管理:icon-monitoringandlogging -->
270
+ <!-- 没有概览页的情况 -->
247
271
  <h6
248
272
  v-else
249
- @click="peek($event, true)"
250
273
  >
251
- <i :class="'nav-icon icon-'+group.name.replace(/\s+/g, '').toLowerCase()" />
252
- {{ group.labelDisplay || group.label }}
253
- <!-- <span v-clean-html="group.labelDisplay || group.label" /> -->
274
+ <i v-if="!group.labelDisplay || (group.labelDisplay && group.labelDisplay.indexOf('</i>') === -1)" class="icon" :class="icons[group.label] ? icons[group.label] + ' init_icon' : 'icon-globe'" style="color: var(--muted);width: 32px;" />
275
+ <span v-clean-html="group.labelDisplay || group.label" />
254
276
  </h6>
255
277
  </slot>
278
+
279
+ <!-- 折叠/展开图标 -->
256
280
  <i
257
281
  v-if="!onlyHasOverview && canCollapse"
258
282
  class="icon toggle toggle-accordion"
@@ -265,6 +289,8 @@ export default {
265
289
  @keyup.space="peek($event, true)"
266
290
  />
267
291
  </div>
292
+
293
+ <!-- 子列表(Accordion 内容) -->
268
294
  <ul
269
295
  v-if="isExpanded"
270
296
  class="list-unstyled body"
@@ -274,6 +300,7 @@ export default {
274
300
  v-for="(child, idx) in group[childrenKey]"
275
301
  :key="idx"
276
302
  >
303
+ <!-- <template v-if="!(loginName && loginName !== 'admin' && child.label === '资源大盘')"></template> -->
277
304
  <li
278
305
  v-if="child.divider"
279
306
  :key="idx"
@@ -319,14 +346,19 @@ export default {
319
346
  position: relative;
320
347
  cursor: pointer;
321
348
  color: var(--body-text);
322
- height: 33px;
323
- outline: none;
349
+ height: 50px;
324
350
 
325
351
  H6 {
326
352
  color: var(--body-text);
327
353
  user-select: none;
328
354
  text-transform: none;
329
355
  font-size: 14px;
356
+ .menuRouterLink {
357
+ color: var(--body-text);
358
+ user-select: none;
359
+ text-transform: none;
360
+ font-size: 14px;
361
+ }
330
362
  }
331
363
 
332
364
  > A {
@@ -367,6 +399,9 @@ export default {
367
399
  /* padding: 8px 0 8px 16px;
368
400
  font-weight: bold; */
369
401
  color: var(--nav-hover-color);
402
+ .menuRouterLink {
403
+ color: var(--nav-hover-color);
404
+ }
370
405
  }
371
406
  I{
372
407
  color: var(--nav-hover-color);
@@ -381,6 +416,9 @@ export default {
381
416
  color: var(--nav-hover-color);
382
417
  h6{
383
418
  color: var(--nav-hover-color);
419
+ .menuRouterLink {
420
+ color: var(--nav-hover-color);
421
+ }
384
422
  }
385
423
  }
386
424
  }
@@ -422,6 +460,7 @@ export default {
422
460
 
423
461
  &.depth-1 {
424
462
  > .header {
463
+ line-height: 50px;
425
464
  > H6 {
426
465
  font-size: 13px;
427
466
  line-height: 16px;
@@ -431,11 +470,13 @@ export default {
431
470
  padding: 9px 7px 8px 7px !important;
432
471
  }
433
472
  }
473
+
434
474
  }
435
475
 
436
476
  &:not(.depth-0) {
437
477
  > .header {
438
- padding-left: 10px;
478
+ padding-left: 30px;
479
+ line-height: 50px;
439
480
  > H6 {
440
481
  // Child groups that aren't linked themselves
441
482
  display: inline-block;
@@ -446,7 +487,9 @@ export default {
446
487
  position: absolute;
447
488
  right: 0;
448
489
  top: 0;
449
- padding: 6px 8px 6px 8px;
490
+ padding: 0px 20px 0px 0px !important;
491
+ user-select: none;
492
+ line-height: 50px;
450
493
  }
451
494
  }
452
495
  }
@@ -459,6 +502,9 @@ export default {
459
502
  A, A I {
460
503
  /* color: var(--primary-hover-text); */
461
504
  color: var(--nav-hover-color);
505
+ .menuRouterLink {
506
+ color: var(--nav-hover-color);
507
+ }
462
508
  }
463
509
 
464
510
  A {
@@ -488,9 +534,9 @@ export default {
488
534
  }
489
535
  }
490
536
  }
491
- .nav-icon{
537
+
538
+ .init_icon{
492
539
  font-size: 32px;
493
- margin-top: -11px;
494
- color: #a8abb2;
540
+ padding-left: 0px;
495
541
  }
496
542
  </style>
@@ -277,6 +277,18 @@ export default {
277
277
  },
278
278
 
279
279
  methods: {
280
+
281
+ LogOutfn (type) {
282
+ sessionStorage.removeItem('TOPLEVELPERMISSIONS')
283
+ if (type === '1') {
284
+ this.$router.push({ name: 'account'})
285
+ } else if (type === '2') {
286
+ this.showSloModal()
287
+ } else if (type === '3') {
288
+ this.$router.push(this.generateLogoutRoute)
289
+ }
290
+ },
291
+
280
292
  showSloModal() {
281
293
  this.$store.dispatch('management/promptModal', {
282
294
  component: 'SloDialog',
@@ -397,11 +409,15 @@ export default {
397
409
  </script>
398
410
 
399
411
  <template>
412
+
413
+ <!-- 整个页面的顶部 header -->
400
414
  <header
401
415
  ref="header"
402
416
  data-testid="header"
403
417
  >
404
418
  <div>
419
+
420
+ <!-- 顶部一级菜单(根据不同产品/集群条件决定是否显示) -->
405
421
  <TopLevelMenu v-if="isRancherInHarvester || isMultiCluster || !isSingleProduct" />
406
422
  </div>
407
423
 
@@ -526,34 +542,54 @@ export default {
526
542
  </div>
527
543
  </div> -->
528
544
 
529
- <!-- logo -->
530
- <div class="menu-spacer">
545
+ <!-- ===== 左侧 logo 区域 ===== -->
546
+ <div class="menu-spacer">
547
+
548
+ <!-- 如果是单产品模式且不是 RancherInHarvester,就显示 logo 路由跳转 -->
531
549
  <router-link
532
550
  v-if="isSingleProduct && !isRancherInHarvester"
533
551
  :to="singleProductLogoRoute"
534
552
  >
535
- <img
553
+
554
+ <!-- 显示用户头像或 logo 图片 -->
555
+ <!-- <img
536
556
  :src="userIcon"
537
- >
557
+ > -->
538
558
  </router-link>
539
559
  </div>
540
- <!-- 中间 -->
560
+
561
+ <!-- ===== 中间占位符(把左右内容分开) ===== -->
541
562
  <div class="spacer" />
542
563
 
564
+ <!-- ===== 右侧功能区域 ===== -->
543
565
  <div class="rd-header-right">
566
+
567
+ <!-- 动态插入右侧自定义组件(例如插件扩展的 header) -->
544
568
  <component :is="navHeaderRight" />
569
+
570
+ <!-- ===== 集群/命名空间过滤器 ===== -->
545
571
  <div
546
572
  v-if="showFilter"
547
573
  class="top"
548
574
  >
575
+
576
+ <!-- 如果集群就绪 + 当前产品支持命名空间过滤器 或 Explorer 模式 -->
549
577
  <NamespaceFilter v-if="clusterReady && currentProduct && (currentProduct.showNamespaceFilter || isExplorer)" />
578
+
579
+ <!-- 否则显示工作空间切换器 -->
550
580
  <WorkspaceSwitcher v-else-if="clusterReady && currentProduct && currentProduct.showWorkspaceSwitcher" />
551
581
  </div>
582
+
583
+ <!-- ===== 集群相关按钮(仅在有集群且不是 simple 模式下显示) ===== -->
552
584
  <div
553
585
  v-if="currentCluster && !simple"
554
586
  class="header-buttons"
555
587
  >
588
+
589
+ <!-- 如果当前产品支持集群切换器 -->
556
590
  <template v-if="currentProduct && currentProduct.showClusterSwitcher">
591
+
592
+ <!-- 导入 YAML 按钮 -->
557
593
  <button
558
594
  v-if="showImportYaml"
559
595
  v-clean-tooltip="t('nav.import')"
@@ -568,6 +604,8 @@ export default {
568
604
  >
569
605
  <i class="icon icon-upload icon-lg" />
570
606
  </button>
607
+
608
+ <!-- 导入 YAML 弹窗 -->
571
609
  <app-modal
572
610
  v-if="showImportModal"
573
611
  class="import-modal"
@@ -583,6 +621,7 @@ export default {
583
621
  />
584
622
  </app-modal>
585
623
 
624
+ <!-- KubeShell 终端按钮 -->
586
625
  <button
587
626
  v-if="showKubeShell"
588
627
  id="btn-kubectl"
@@ -600,6 +639,7 @@ export default {
600
639
  <i class="icon icon-terminal icon-lg" />
601
640
  </button>
602
641
 
642
+ <!-- 下载 kubeconfig 按钮 -->
603
643
  <button
604
644
  v-if="showKubeConfig"
605
645
  v-clean-tooltip="t('nav.kubeconfig.download')"
@@ -615,6 +655,7 @@ export default {
615
655
  <i class="icon icon-file icon-lg" />
616
656
  </button>
617
657
 
658
+ <!-- 复制 kubeconfig 按钮 -->
618
659
  <button
619
660
  v-if="showCopyConfig"
620
661
  v-clean-tooltip="t('nav.kubeconfig.copy')"
@@ -627,10 +668,14 @@ export default {
627
668
  :aria-label="t('nav.kubeconfig.copy')"
628
669
  @click="copyKubeConfig($event)"
629
670
  >
671
+
672
+ <!-- 点击复制后显示对勾 -->
630
673
  <i
631
674
  v-if="kubeConfigCopying"
632
675
  class="icon icon-checkmark icon-lg"
633
676
  />
677
+
678
+ <!-- 未复制状态显示复制图标 -->
634
679
  <i
635
680
  v-else
636
681
  class="icon icon-copy icon-lg"
@@ -638,6 +683,7 @@ export default {
638
683
  </button>
639
684
  </template>
640
685
 
686
+ <!-- 资源搜索按钮 -->
641
687
  <button
642
688
  v-if="showSearch"
643
689
  id="header-btn-search"
@@ -654,6 +700,8 @@ export default {
654
700
  >
655
701
  <i class="icon icon-search icon-lg" />
656
702
  </button>
703
+
704
+ <!-- 搜索弹窗 -->
657
705
  <app-modal
658
706
  v-if="showSearch && showSearchModal"
659
707
  class="search-modal"
@@ -668,7 +716,7 @@ export default {
668
716
  </app-modal>
669
717
  </div>
670
718
 
671
- <!-- Extension header actions -->
719
+ <!-- ===== 插件扩展按钮区 ===== -->
672
720
  <div
673
721
  v-if="extensionHeaderActions.length"
674
722
  class="header-buttons"
@@ -697,12 +745,16 @@ export default {
697
745
  </button>
698
746
  </div>
699
747
 
748
+ <!-- ===== 用户菜单(右上角头像 + 下拉) ===== -->
700
749
  <div class="center-self">
701
750
  <header-page-action-menu v-if="showPageActions" />
751
+
702
752
  <rc-dropdown
703
753
  v-if="showUserMenu"
704
754
  :aria-label="t('nav.userMenu.label')"
705
755
  >
756
+
757
+ <!-- 头像触发按钮 -->
706
758
  <rc-dropdown-trigger
707
759
  ghost
708
760
  small
@@ -721,9 +773,11 @@ export default {
721
773
  v-else
722
774
  class="icon icon-user icon-3x avatar"
723
775
  /> -->
724
- <i class="icon icon-usericon" />
776
+ <i class="icon icon-usericon" style="padding-bottom: 5px;" />
725
777
  <span class="login-name">{{ principal.loginName }}</span>
726
778
  </rc-dropdown-trigger>
779
+
780
+ <!-- 下拉菜单内容 -->
727
781
  <template #dropdownCollection>
728
782
  <!-- <template v-if="authEnabled">
729
783
  <div class="user-info">
@@ -744,21 +798,27 @@ export default {
744
798
  >
745
799
  {{ t('nav.userMenu.preferences') }}
746
800
  </rc-dropdown-item> -->
801
+
802
+ <!-- 退出登录(支持 SLO 弹窗) -->
747
803
  <rc-dropdown-item
748
804
  v-if="showAccountAndApiKeyLink"
749
- @click="$router.push({ name: 'account'})"
805
+ @click="LogOutfn('1')"
750
806
  >
751
807
  {{ t('nav.userMenu.accountAndKeys', {}, true) }}
752
808
  </rc-dropdown-item>
809
+
810
+ <!-- 普通退出登录 -->
753
811
  <rc-dropdown-item
754
812
  v-if="authEnabled && shouldShowSloLogoutModal"
755
- @click="showSloModal"
813
+ @click="LogOutfn('2')"
756
814
  >
757
815
  {{ t('nav.userMenu.logOut') }}
758
816
  </rc-dropdown-item>
817
+
818
+ <!-- 普通退出登录 -->
759
819
  <rc-dropdown-item
760
820
  v-else-if="authEnabled"
761
- @click="$router.push(generateLogoutRoute)"
821
+ @click="LogOutfn('3')"
762
822
  >
763
823
  {{ t('nav.userMenu.logOut') }}
764
824
  </rc-dropdown-item>
@@ -944,6 +1004,8 @@ export default {
944
1004
  // Spacing between header buttons
945
1005
  .btn:not(:last-of-type) {
946
1006
  margin-right: 10px;
1007
+ width: 30px;
1008
+ min-width: 30px;
947
1009
  }
948
1010
 
949
1011
  .btn:focus {
@@ -965,6 +1027,8 @@ export default {
965
1027
 
966
1028
  .header-btn {
967
1029
  width: 40px;
1030
+ display: flex;
1031
+ align-items: center;
968
1032
  }
969
1033
 
970
1034
  :deep() div .btn.role-tertiary {
@@ -972,19 +1036,21 @@ export default {
972
1036
  border: none;
973
1037
  background: var(--header-btn-bg);
974
1038
  color: var(--header-btn-text);
975
- padding: 0 10px;
1039
+ padding: 0 15px 0 10px;
976
1040
  line-height: 32px;
977
1041
  min-height: 32px;
1042
+ width: 30px;
1043
+ min-width: 30px;
978
1044
 
979
1045
  i {
980
1046
  // Ideally same height as the parent button, but this means tooltip needs adjusting (which is it's own can of worms)
981
1047
  line-height: 20px;
982
1048
  }
983
1049
 
984
- &:hover {
985
- background: var(--primary);
986
- color: #fff;
987
- }
1050
+ // &:hover {
1051
+ // background: var(--primary);
1052
+ // color: #fff;
1053
+ // }
988
1054
 
989
1055
  &[disabled=disabled] {
990
1056
  background-color: rgba(0,0,0,0.25) !important;
@@ -1067,7 +1133,6 @@ export default {
1067
1133
  > .center-self {
1068
1134
  align-self: center;
1069
1135
  display: flex;
1070
- gap: 1rem;
1071
1136
  align-items: center;
1072
1137
  padding-right: 1rem;
1073
1138
  }
@@ -1176,7 +1241,7 @@ export default {
1176
1241
  .login-name{
1177
1242
  font-size: 14px;
1178
1243
  margin-left: 5px;
1179
- margin-top: 5px;
1244
+ // margin-top: 5px;
1180
1245
  line-height: 20px;
1181
1246
  }
1182
1247
  </style>
@@ -17,6 +17,7 @@ const pageAction = (_event: Event, action: string) => {
17
17
  :dropdown-aria-label="t('nav.actionMenu.button.label')"
18
18
  data-testid="page-actions-menu-action-button"
19
19
  button-role="tertiary"
20
+ :showIcon="true"
20
21
  @select="pageAction"
21
22
  />
22
23
  </template>
@@ -145,9 +145,6 @@ export default {
145
145
 
146
146
  const params = { ...this.$route.params };
147
147
  let resource = params.resource;
148
- if (params.resource) {
149
- resource = resource
150
- }
151
148
 
152
149
  // Sometimes, different pages may have different namespaces to filter
153
150
  const notFilterNamespaces = this.$store.getters[`type-map/optionsFor`](resource).notFilterNamespace || [];