dashboard-shell-shell 1.0.122 → 1.0.1000000081

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 +89 -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 +9 -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 +540 -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 +2 -1
  343. package/types/cloud-shell/index.d.ts +11014 -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
@@ -2,7 +2,8 @@
2
2
  import { KUBERNETES, PROJECT } from '@shell/config/labels-annotations';
3
3
  import { FLEET, NAMESPACE, MANAGEMENT, HELM } from '@shell/config/types';
4
4
  import ButtonGroup from '@shell/components/ButtonGroup';
5
- import { BadgeState } from '@components/BadgeState';
5
+ // import { BadgeState } from '@components/BadgeState';
6
+ import DotState from '@shell/components/DotState.vue';
6
7
  import { Banner } from '@components/Banner';
7
8
  import { get } from '@shell/utils/object';
8
9
  import { NAME as FLEET_NAME } from '@shell/config/product/fleet';
@@ -13,6 +14,10 @@ import {
13
14
  import { ExtensionPoint, PanelLocation } from '@shell/core/types';
14
15
  import ExtensionPanel from '@shell/components/ExtensionPanel';
15
16
  import TabTitle from '@shell/components/TabTitle';
17
+ import ActionMenu from '@shell/components/ActionMenuShell.vue';
18
+ import { useRuntimeFlag } from '@shell/composables/useRuntimeFlag';
19
+ import { useStore } from 'vuex';
20
+ import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
16
21
 
17
22
  // i18n-uses resourceDetail.header.*
18
23
 
@@ -26,7 +31,13 @@ export default {
26
31
  name: 'MastheadResourceDetail',
27
32
 
28
33
  components: {
29
- BadgeState, Banner, ButtonGroup, ExtensionPanel, TabTitle
34
+ // BadgeState,
35
+ DotState,
36
+ Banner,
37
+ ButtonGroup,
38
+ ExtensionPanel,
39
+ TabTitle,
40
+ ActionMenu,
30
41
  },
31
42
  props: {
32
43
  value: {
@@ -92,11 +103,19 @@ export default {
92
103
  }
93
104
  },
94
105
 
106
+ setup() {
107
+ const store = useStore();
108
+ const { featureDropdownMenu } = useRuntimeFlag(store);
109
+
110
+ return { featureDropdownMenu };
111
+ },
112
+
95
113
  data() {
96
114
  return {
97
115
  DETAIL_VIEW: _DETAIL,
98
116
  extensionType: ExtensionPoint.PANEL,
99
117
  extensionLocation: PanelLocation.DETAILS_MASTHEAD,
118
+ Svg: require('~shell/assets/images/API.svg')
100
119
  };
101
120
  },
102
121
 
@@ -237,7 +256,7 @@ export default {
237
256
  const defaultLocation = {
238
257
  name: 'c-cluster-product-resource',
239
258
  params: {
240
- resource: this.resource,
259
+ resource: harvesterhci2cloud(this.resource),
241
260
  product,
242
261
  }
243
262
  };
@@ -381,7 +400,9 @@ export default {
381
400
  demoDisplay() {
382
401
  const product = this.$store.getters['productId'];
383
402
 
384
- const productId = this.$store.getters['type-map/groupForBasicType'](this.$store.getters['productId'], this.location.params.resource);
403
+ const resources = this.location?.params?.resource || ''
404
+
405
+ const productId = this.$store.getters['type-map/groupForBasicType'](this.$store.getters['productId'], resources);
385
406
 
386
407
  if (productId === undefined) {
387
408
  return '';
@@ -401,11 +422,12 @@ export default {
401
422
  },
402
423
  menuIcon() {
403
424
  const product = this.$store.getters['productId'];
425
+
426
+ const resources = this.location?.params?.resource || ''
404
427
 
405
- return this.$store.getters['type-map/groupsForVirTypes'](product, this.location.params.resource);
428
+ return this.$store.getters['type-map/groupsForVirTypes'](product, cloud2harvesterhci(resources));
406
429
  },
407
430
 
408
-
409
431
  location() {
410
432
  const { parent } = this;
411
433
 
@@ -452,6 +474,7 @@ export default {
452
474
 
453
475
  <template>
454
476
  <div class="masthead">
477
+ <div class="title">
455
478
  <!-- 创建api密钥不需要面包屑 -->
456
479
  <div
457
480
  v-if="!(parentRouteOverride === 'account' && resource=== 'token')"
@@ -659,17 +682,28 @@ export default {
659
682
  class="mr-10"
660
683
  />
661
684
 
662
- <button
663
- v-if="isView"
664
- ref="actions"
665
- data-testid="masthead-action-menu"
666
- aria-haspopup="true"
667
- type="button"
668
- class="btn role-multi-action actions"
669
- @click="showActions"
670
- >
671
- <i class="icon icon-actions" />
672
- </button>
685
+ <template v-if="featureDropdownMenu">
686
+ <ActionMenu
687
+ v-if="isView"
688
+ button-role="multiAction"
689
+ button-size="compact"
690
+ :resource="value"
691
+ data-testid="masthead-action-menu"
692
+ />
693
+ </template>
694
+ <template v-else>
695
+ <button
696
+ v-if="isView"
697
+ ref="actions"
698
+ data-testid="masthead-action-menu"
699
+ aria-haspopup="true"
700
+ type="button"
701
+ class="btn role-multi-action actions"
702
+ @click="showActions"
703
+ >
704
+ <i class="icon icon-actions" />
705
+ </button>
706
+ </template>
673
707
  </div>
674
708
  </div>
675
709
  </slot>
@@ -696,6 +730,7 @@ export default {
696
730
  />
697
731
 
698
732
  <slot />
733
+ </div>
699
734
  </div>
700
735
  </template>
701
736
 
@@ -1,6 +1,7 @@
1
1
  import { mount, RouterLinkStub } from '@vue/test-utils';
2
2
  import { _VIEW } from '@shell/config/query-params';
3
3
  import Masthead from '@shell/components/ResourceDetail/Masthead.vue';
4
+ import { createStore } from 'vuex';
4
5
 
5
6
  const mockedStore = () => {
6
7
  return {
@@ -17,12 +18,15 @@ const mockedStore = () => {
17
18
  };
18
19
 
19
20
  const requiredSetup = () => {
21
+ const store = createStore({ getters: { 'management/byId': () => jest.fn() } });
22
+
20
23
  return {
21
24
  stubs: {
22
25
  'router-link': RouterLinkStub,
23
26
  LiveDate: true
24
27
  },
25
- mocks: { $store: mockedStore() }
28
+ provide: { store },
29
+ mocks: { $store: mockedStore() }
26
30
  };
27
31
  };
28
32
 
@@ -16,6 +16,7 @@ import ForceDirectedTreeChart from '@shell/components/fleet/ForceDirectedTreeCha
16
16
  import { checkSchemasForFindAllHash } from '@shell/utils/auth';
17
17
  import { stringify } from '@shell/utils/error';
18
18
  import { Banner } from '@components/Banner';
19
+ import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
19
20
 
20
21
  function modeFor(route) {
21
22
  if ( route.query?.mode === _IMPORT ) {
@@ -94,7 +95,8 @@ export default {
94
95
  const store = this.$store;
95
96
  const route = this.$route;
96
97
  const params = route.params;
97
- let resourceType = this.resourceOverride || params.resource;
98
+ const cloneParams = clone(params)
99
+ let resourceType = this.resourceOverride || cloud2harvesterhci(cloneParams.resource);
98
100
 
99
101
  const inStore = this.storeOverride || store.getters['currentStore'](resourceType);
100
102
  const realMode = this.realMode;
@@ -384,18 +386,7 @@ export default {
384
386
  },
385
387
 
386
388
  created() {
387
- // eslint-disable-next-line prefer-const
388
- const id = this.$route.params.id;
389
- const resource = this.resourceOverride || this.$route.params.resource;
390
- const options = this.$store.getters[`type-map/optionsFor`](resource);
391
-
392
- const detailResource = options.resourceDetail || options.resource || resource;
393
- const editResource = options.resourceEdit || options.resource || resource;
394
-
395
- // FIXME: These aren't right... signature is (rawType, subType).. not (rawType, resourceId)
396
- // Remove id? How does subtype get in (cluster/node)
397
- this.detailComponent = this.$store.getters['type-map/importDetail'](detailResource, id);
398
- this.editComponent = this.$store.getters['type-map/importEdit'](editResource, id);
389
+ this.configureResource();
399
390
  },
400
391
 
401
392
  methods: {
@@ -414,6 +405,53 @@ export default {
414
405
  closeError(index) {
415
406
  this.errors = this.errors.filter((_, i) => i !== index);
416
407
  },
408
+ /**
409
+ * Initializes the resource components based on the provided user and
410
+ * resource override.
411
+ *
412
+ * Configures the detail and edit components for a resource based on the
413
+ * user's ID and the specified resource.
414
+ *
415
+ * @param {Object} user - The user object containing user-specific
416
+ * information.
417
+ * @param {string|null} resourceOverride - An optional resource override
418
+ * string. If not provided, the method will use the default resource from
419
+ * the route parameters or the instance's resourceOverride property.
420
+ */
421
+ configureResource(userId = '', resourceOverride = null) {
422
+ const id = userId || this.$route.params.id;
423
+ // const paramsResource = this.$route.params.resource
424
+ const routerResource = clone(this.$route.params.resource)
425
+ const resource = resourceOverride || this.resourceOverride || cloud2harvesterhci(routerResource);
426
+ const options = this.$store.getters[`type-map/optionsFor`](resource);
427
+
428
+ const detailResource = options.resourceDetail || options.resource || resource;
429
+ const editResource = options.resourceEdit || options.resource || resource;
430
+
431
+ // FIXME: These aren't right... signature is (rawType, subType).. not (rawType, resourceId)
432
+ // Remove id? How does subtype get in (cluster/node)
433
+ this.detailComponent = this.$store.getters['type-map/importDetail'](detailResource, id);
434
+ this.editComponent = this.$store.getters['type-map/importEdit'](editResource, id);
435
+ },
436
+ /**
437
+ * Sets the mode and initializes the resource components.
438
+ *
439
+ * This method sets the mode of the component and configures the resource
440
+ * components based on the provided user and resource.
441
+ *
442
+ * @param {Object} payload - An object containing the mode, user, and
443
+ * resource properties.
444
+ * @param {string} payload.mode - The mode to set.
445
+ * @param {Object} payload.user - The user object containing user-specific
446
+ * information.
447
+ * @param {string} payload.resource - The resource string to use for
448
+ * initialization.
449
+ */
450
+ setMode({ mode, userId, resource }) {
451
+ this.mode = mode;
452
+ this.value.id = userId;
453
+ this.configureResource(userId, resource);
454
+ }
417
455
  }
418
456
  };
419
457
  </script>
@@ -431,15 +469,14 @@ export default {
431
469
  :has-graph="hasGraph"
432
470
  :has-detail="hasCustomDetail"
433
471
  :has-edit="hasCustomEdit"
434
- :can-view-yaml="canViewYaml"
435
472
  :resource-subtype="resourceSubtype"
436
473
  :parent-route-override="parentRouteOverride"
437
474
  :store-override="storeOverride"
438
475
  >
439
- <DetailTop
476
+ <!-- <DetailTop
440
477
  v-if="isView && isDetail"
441
478
  :value="liveModel"
442
- />
479
+ /> -->
443
480
  </Masthead>
444
481
  <div
445
482
  v-if="hasErrors"
@@ -491,6 +528,7 @@ export default {
491
528
  :real-mode="realMode"
492
529
  :class="{'flex-content': flexContent}"
493
530
  @update:value="$emit('input', $event)"
531
+ @update:mode="setMode"
494
532
  @set-subtype="setSubtype"
495
533
  />
496
534
 
@@ -6,6 +6,7 @@ import { get } from '@shell/utils/object';
6
6
  import { AS, _YAML } from '@shell/config/query-params';
7
7
  import ResourceLoadingIndicator from './ResourceLoadingIndicator';
8
8
  import TabTitle from '@shell/components/TabTitle';
9
+ import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
9
10
 
10
11
  /**
11
12
  * Resource List Masthead component.
@@ -85,20 +86,24 @@ export default {
85
86
  data() {
86
87
  const params = { ...this.$route.params };
87
88
 
88
- const formRoute = { name: `${ this.$route.name }-create`, params };
89
+ params.resource = harvesterhci2cloud(params.resource)
90
+
91
+ const formRoute = { name: `${ cloud2harvesterhci(this.$route.name) }-create`, params };
89
92
 
90
93
  const hasEditComponent = this.$store.getters['type-map/hasCustomEdit'](this.resource);
91
94
 
92
95
  const yamlRoute = {
93
- name: `${ this.$route.name }-create`,
96
+ name: `${ cloud2harvesterhci(this.$route.name) }-create`,
94
97
  params,
95
98
  query: { [AS]: _YAML },
96
99
  };
97
100
 
101
+ const tabList = ['集群配置'];
98
102
  return {
99
103
  formRoute,
100
104
  yamlRoute,
101
105
  hasEditComponent,
106
+ tabList,
102
107
  };
103
108
  },
104
109
 
@@ -126,7 +131,7 @@ export default {
126
131
  return this.$store.getters['type-map/labelFor'](this.schema, 99);
127
132
  },
128
133
  _descriptionDisplay() {
129
- const key = this.$route.path.split('/').pop();
134
+ const key = cloud2harvesterhci(this.$route.path.split('/').pop());
130
135
 
131
136
  return this.$store.getters['i18n/t'](`typeDescription."${ key.toLowerCase() }"`);
132
137
  },
@@ -201,7 +206,7 @@ export default {
201
206
  </span>
202
207
  <span class="excram-last-name">{{ _typeDisplay }}</span>
203
208
  </div>
204
- <h1 class="m-0">
209
+ <h1 class="m-0 descrip-name">
205
210
  <TabTitle>{{ _typeDisplay }}</TabTitle> <Favorite
206
211
  v-if="isExplorer"
207
212
  :resource="favoriteResource || resource"
@@ -9,6 +9,7 @@ import { ResourceListComponentName } from './resource-list.config';
9
9
  import { PanelLocation, ExtensionPoint } from '@shell/core/types';
10
10
  import ExtensionPanel from '@shell/components/ExtensionPanel';
11
11
  import { sameContents } from '@shell/utils/array';
12
+ import { cloud2harvesterhci } from '@shell/utils/router'
12
13
 
13
14
  export default {
14
15
  name: ResourceListComponentName,
@@ -40,7 +41,7 @@ export default {
40
41
 
41
42
  async fetch() {
42
43
  const store = this.$store;
43
- const resource = this.resource;
44
+ const resource = cloud2harvesterhci(this.resource);
44
45
 
45
46
  const schema = this.schema;
46
47
 
@@ -88,7 +89,7 @@ export default {
88
89
  data() {
89
90
  const getters = this.$store.getters;
90
91
  const params = { ...this.$route.params };
91
- const resource = params.resource;
92
+ const resource = cloud2harvesterhci(params.resource);
92
93
 
93
94
  const hasListComponent = getters['type-map/hasCustomList'](resource);
94
95
 
@@ -200,7 +201,7 @@ export default {
200
201
  created() {
201
202
  let listComponent = false;
202
203
 
203
- const resource = this.$route.params.resource;
204
+ const resource = cloud2harvesterhci(this.$route.params.resource);
204
205
  const hasListComponent = this.$store.getters['type-map/hasCustomList'](resource);
205
206
 
206
207
  if ( hasListComponent ) {
@@ -650,6 +650,7 @@ export default {
650
650
  <ButtonGroup
651
651
  v-model:value="group"
652
652
  :options="_groupOptions"
653
+ v-if="parsedPagingParams.singularLabel !== 'PCI设备'"
653
654
  />
654
655
  </template>
655
656
 
@@ -20,6 +20,7 @@ import { TYPE_MODES } from '@shell/store/type-map';
20
20
  import { NAME as NAVLINKS } from '@shell/config/product/navlinks';
21
21
  import Group from '@shell/components/nav/Group';
22
22
  import LocaleSelector from '@shell/components/LocaleSelector';
23
+ import { cloud2harvesterhci, harvester2cloud } from '@shell/utils/router';
23
24
 
24
25
  export default {
25
26
  name: 'SideNav',
@@ -154,7 +155,7 @@ export default {
154
155
  },
155
156
 
156
157
  isVirtualProduct() {
157
- return this.rootProduct.name === HARVESTER;
158
+ return this.rootProduct.name === harvester2cloud(HARVESTER);
158
159
  },
159
160
 
160
161
  allNavLinks() {
@@ -236,7 +237,7 @@ export default {
236
237
 
237
238
  getProductsGroups(out, loadProducts, namespaceMode, productMap) {
238
239
  const clusterId = this.$store.getters['clusterId'];
239
- const currentType = this.$route.params.resource || '';
240
+ const currentType = cloud2harvesterhci(this.$route.params.resource) || '';
240
241
 
241
242
  for ( const productId of loadProducts ) {
242
243
  const modes = [TYPE_MODES.BASIC];
@@ -394,8 +395,12 @@ export default {
394
395
  </script>
395
396
 
396
397
  <template>
397
- <nav class="side-nav">
398
- <div class="side-all-title">
398
+ <nav
399
+ class="side-nav"
400
+ role="navigation"
401
+ :aria-label="t('nav.ariaLabel.sideNav')"
402
+ >
403
+ <div class="side-all-title">
399
404
  控制台
400
405
  </div>
401
406
  <!-- Actual nav -->
@@ -417,36 +422,36 @@ export default {
417
422
  </template>
418
423
  </div>
419
424
  <!-- SideNav footer area (seems to be tied to harvester) -->
420
- <div
425
+ <!-- <div
421
426
  v-if="showProductFooter"
422
427
  class="footer"
423
- >
428
+ > -->
424
429
  <!-- support link -->
425
- <router-link
430
+ <!-- <router-link
426
431
  :to="supportLink"
427
432
  class="pull-right"
428
433
  role="link"
429
434
  :aria-label="t('nav.support', {hasSupport: true})"
430
435
  >
431
436
  {{ t('nav.support', {hasSupport: true}) }}
432
- </router-link>
437
+ </router-link> -->
433
438
  <!-- version number -->
434
- <span
439
+ <!-- <span
435
440
  v-clean-tooltip="{content: displayVersion, placement: 'top'}"
436
441
  class="clip version text-muted"
437
442
  >
438
443
  {{ displayVersion }}
439
- </span>
444
+ </span> -->
440
445
 
441
446
  <!-- locale selector -->
442
- <LocaleSelector
447
+ <!-- <LocaleSelector
443
448
  v-if="isSingleProduct && hasMultipleLocales && !isStandaloneHarvester"
444
449
  mode="login"
445
450
  :show-icon="false"
446
- />
447
- </div>
451
+ /> -->
452
+ <!-- </div> -->
448
453
  <!-- SideNav footer alternative -->
449
- <div
454
+ <!-- <div
450
455
  v-else
451
456
  class="version text-muted flex"
452
457
  >
@@ -467,7 +472,7 @@ export default {
467
472
  (Harvester-{{ harvesterVersion }})
468
473
  </span>
469
474
  </template>
470
- </div>
475
+ </div> -->
471
476
  </nav>
472
477
  </template>
473
478
 
@@ -0,0 +1,126 @@
1
+ <script lang="ts" setup>
2
+ import { computed } from 'vue';
3
+ import { useStore } from 'vuex';
4
+
5
+ const HEADER_HEIGHT = 55;
6
+
7
+ const store = useStore();
8
+ const isOpen = computed(() => store.getters['slideInPanel/isOpen']);
9
+ const currentComponent = computed(() => store.getters['slideInPanel/component']);
10
+ const currentProps = computed(() => store.getters['slideInPanel/componentProps']);
11
+
12
+ const panelTop = computed(() => {
13
+ const banner = document.getElementById('banner-header');
14
+ let height = HEADER_HEIGHT;
15
+
16
+ if (banner) {
17
+ height += banner.clientHeight;
18
+ }
19
+
20
+ return `${ height }px`;
21
+ });
22
+
23
+ const panelHeight = computed(() => `calc(100vh - ${ panelTop?.value })`);
24
+ const panelWidth = computed(() => currentProps?.value?.width || '33%');
25
+ const panelRight = computed(() => (isOpen?.value ? '0' : `-${ panelWidth?.value }`));
26
+
27
+ const panelTitle = computed(() => currentProps?.value?.title || 'Details');
28
+
29
+ function closePanel() {
30
+ store.commit('slideInPanel/close');
31
+ }
32
+ </script>
33
+
34
+ <template>
35
+ <Teleport to="#slides">
36
+ <div id="slide-in-panel-manager">
37
+ <div
38
+ v-show="isOpen"
39
+ data-testid="slide-in-glass"
40
+ class="slide-in-glass"
41
+ :class="{ 'slide-in-glass-open': isOpen }"
42
+ @click="closePanel"
43
+ />
44
+ <div
45
+ class="slide-in"
46
+ :class="{ 'slide-in-open': isOpen }"
47
+ :style="{ width: panelWidth, right: panelRight, top: panelTop, height: panelHeight }"
48
+ >
49
+ <div class="header">
50
+ <div class="title">
51
+ {{ panelTitle }}
52
+ </div>
53
+ <i
54
+ class="icon icon-close"
55
+ data-testid="slide-in-close"
56
+ :trigger-focus-trap="true"
57
+ tabindex="0"
58
+ @click="closePanel"
59
+ />
60
+ </div>
61
+ <div class="main-panel">
62
+ <component
63
+ :is="currentComponent"
64
+ v-if="isOpen || currentComponent"
65
+ v-bind="currentProps"
66
+ data-testid="slide-in-panel-component"
67
+ class="dynamic-panel-content"
68
+ />
69
+ </div>
70
+ </div>
71
+ </div>
72
+ </Teleport>
73
+ </template>
74
+
75
+ <style lang="scss" scoped>
76
+ .slide-in-glass {
77
+ display: none;
78
+ position: fixed;
79
+ top: 0;
80
+ left: 0;
81
+ height: 100vh;
82
+ width: 100vw;
83
+ }
84
+ .slide-in-glass-open {
85
+ background-color: var(--body-bg);
86
+ display: block;
87
+ opacity: 0.5;
88
+ z-index: 1000;
89
+ }
90
+
91
+ .slide-in {
92
+ display: flex;
93
+ flex-direction: column;
94
+ position: fixed;
95
+ top: 0;
96
+ z-index: 2000;
97
+ transition: right 0.5s ease;
98
+ border-left: 1px solid var(--border);
99
+ background-color: var(--body-bg);
100
+ }
101
+
102
+ .slide-in-open {
103
+ right: 0;
104
+ }
105
+
106
+ .header {
107
+ display: flex;
108
+ align-items: center;
109
+ padding: 4px;
110
+ border-bottom: 1px solid var(--border);
111
+
112
+ .title {
113
+ flex: 1;
114
+ font-weight: bold;
115
+ }
116
+
117
+ .icon-close {
118
+ cursor: pointer;
119
+ }
120
+ }
121
+
122
+ .main-panel {
123
+ padding: 10px;
124
+ overflow: auto;
125
+ }
126
+ </style>
@@ -273,10 +273,13 @@ export default {
273
273
  v-clean-tooltip="tooltip(col)"
274
274
  class="content"
275
275
  >
276
- <span v-clean-html="labelFor(col)" />
276
+ <span
277
+ v-clean-html="labelFor(col)"
278
+ class="text-no-break"
279
+ />
277
280
  <span
278
281
  v-if="col.subLabel"
279
- class="text-muted"
282
+ class="text-muted text-no-break"
280
283
  >
281
284
  {{ col.subLabel }}
282
285
  </span>
@@ -296,10 +299,12 @@ export default {
296
299
  <i
297
300
  v-if="isCurrent(col) && !descending"
298
301
  class="icon icon-sort-down icon-stack-1x"
302
+ :alt="t('sortableTable.alt.sortingIconDesc')"
299
303
  />
300
304
  <i
301
305
  v-if="isCurrent(col) && descending"
302
306
  class="icon icon-sort-up icon-stack-1x"
307
+ :alt="t('sortableTable.alt.sortingIconAsc')"
303
308
  />
304
309
  </span>
305
310
  </div>
@@ -308,6 +313,7 @@ export default {
308
313
  <th
309
314
  v-if="rowActions && hasAdvancedFiltering && tableColsOptions.length"
310
315
  :width="rowActionsWidth"
316
+ :align="'left'"
311
317
  >
312
318
  <div
313
319
  ref="table-options"
@@ -456,7 +462,7 @@ export default {
456
462
  }
457
463
 
458
464
  th {
459
- padding: 8px 5px;
465
+ padding: 16.5px 5px;
460
466
  font-weight: normal;
461
467
  border: 0;
462
468
  color: var(--body-text);
@@ -496,7 +502,7 @@ export default {
496
502
  &:last-child {
497
503
  padding-right: 10px;
498
504
  padding-left: 12px;
499
-
505
+ width: 200px;
500
506
  }
501
507
 
502
508
  &:not(.sortable) > SPAN {
@@ -1,7 +1,7 @@
1
1
  import debounce from 'lodash/debounce';
2
2
 
3
3
  // Use a visible display type to reduce flickering
4
- const displayType = 'inline-block';
4
+ const displayType = 'inline-flex';
5
5
 
6
6
  export default {
7
7