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
@@ -544,7 +544,10 @@ export default {
544
544
  class="flex-right"
545
545
  >{{ t('generic.moreInfo') }} <i class="icon icon-external-link" /></a>
546
546
  </div>
547
- <hr v-if="subtype.description">
547
+ <hr
548
+ v-if="subtype.description"
549
+ role="none"
550
+ >
548
551
  <div
549
552
  v-if="subtype.description"
550
553
  class="description"
@@ -621,14 +624,14 @@ export default {
621
624
  </template>
622
625
  </template>
623
626
  <div class="controls-steps">
624
- <button
627
+ <!-- <button
625
628
  v-if="showYaml"
626
629
  type="button"
627
630
  class="btn role-secondary"
628
631
  @click="showPreviewYaml"
629
632
  >
630
633
  <t k="cruResource.previewYaml" />
631
- </button>
634
+ </button> -->
632
635
  <template
633
636
  v-if="showPrevious"
634
637
  name="back"
@@ -708,7 +711,7 @@ export default {
708
711
  #default
709
712
  >
710
713
  <div>
711
- <button
714
+ <!-- <button
712
715
  v-if="showYaml"
713
716
  :data-testid="componentTestid + '-yaml'"
714
717
  type="button"
@@ -716,7 +719,7 @@ export default {
716
719
  @click="showPreviewYaml"
717
720
  >
718
721
  <t k="cruResource.previewYaml" />
719
- </button>
722
+ </button> -->
720
723
  <AsyncButton
721
724
  v-if="!showSubtypeSelection"
722
725
  ref="save"
@@ -732,7 +735,7 @@ export default {
732
735
  </template>
733
736
  <!------ YAML ------>
734
737
  <!-- Hide this section until it's needed. This means we don't need to upfront create initialYaml -->
735
- <section
738
+ <!-- <section
736
739
  v-else-if="showYaml && !showAsForm"
737
740
  class="cru-resource-yaml-container resource-container cru__content"
738
741
  >
@@ -806,7 +809,7 @@ export default {
806
809
  </slot>
807
810
  </template>
808
811
  </ResourceYaml>
809
- </section>
812
+ </section> -->
810
813
  </component>
811
814
  </section>
812
815
  </template>
@@ -892,6 +895,7 @@ form.create-resource-container .cru {
892
895
  display: flex;
893
896
  flex-direction: column;
894
897
  flex-grow: 1;
898
+ height: 100%;
895
899
  }
896
900
 
897
901
  &__content {
@@ -906,6 +910,8 @@ form.create-resource-container .cru {
906
910
  position: sticky;
907
911
  bottom: 0;
908
912
  background-color: var(--header-bg);
913
+ height: $footer-height;
914
+ box-sizing: border-box;
909
915
 
910
916
  // Overrides outlet padding
911
917
  margin-left: -$space-m;
@@ -115,12 +115,12 @@ export default {
115
115
  <style lang="scss">
116
116
  .cru-resource-footer {
117
117
  display: flex;
118
- justify-content: flex-end;
118
+ justify-content: flex-start;
119
119
  margin-top: 20px;
120
120
  z-index: z-index('cruFooter');
121
121
 
122
122
  .btn {
123
- margin-left: 20px;
123
+ margin-right: 10px;
124
124
  }
125
125
  }
126
126
 
@@ -102,26 +102,35 @@ export default {
102
102
 
103
103
  <template>
104
104
  <div class="graph-options">
105
- <div v-if="hasSummaryAndDetail">
106
- <ButtonGroup
107
- v-model:value="value.type"
108
- :options="detailSummaryOptions"
105
+ <div v-if="hasSummaryAndDetail" class="mr-10">
106
+ <ButtonGroup
107
+ v-model:value="value.type"
108
+ :options="detailSummaryOptions"
109
109
  />
110
110
  </div>
111
111
  <div v-else>
112
112
  <div />
113
113
  </div>
114
114
  <div class="range-refresh">
115
- <LabeledSelect
116
- v-model:value="value.range"
117
- :options="rangeOptions"
118
- :label="t('graphOptions.range')"
119
- />
120
- <LabeledSelect
121
- v-model:value="value.refreshRate"
122
- :options="refreshOptions"
123
- :label="t('graphOptions.refresh')"
115
+ <div class="mr-10">
116
+ <LabeledSelect
117
+ v-model:value="value.range"
118
+ :options="rangeOptions"
119
+ class="gafanana-select"
120
+ :selectWidth="'60px'"
121
+ :label="t('graphOptions.range')"
122
+ />
123
+ </div>
124
+ <div class="mr-10">
125
+ <LabeledSelect
126
+ v-model:value="value.refreshRate"
127
+ :options="refreshOptions"
128
+ class="gafanana-select"
129
+ :selectWidth="'60px'"
130
+ :label="t('graphOptions.refresh')"
124
131
  />
132
+ </div>
133
+
125
134
  </div>
126
135
  </div>
127
136
  </template>
@@ -131,17 +140,20 @@ export default {
131
140
  &, .range-refresh {
132
141
  display: flex;
133
142
  flex-direction: row;
134
- justify-content: flex-end;
143
+ /* justify-content: flex-end; */
135
144
  }
136
145
 
137
146
  & {
138
- justify-content: space-between;
147
+ /* justify-content: space-between; */
139
148
  align-items: center;
140
149
  }
141
150
 
142
- .labeled-select {
151
+ /* .labeled-select {
143
152
  width: 100px;
144
153
  margin-left: 10px;
145
- }
154
+ } */
155
+ }
156
+ .gafanana-select{
157
+ width: 300px;
146
158
  }
147
159
  </style>
@@ -58,6 +58,10 @@ export default {
58
58
  },
59
59
 
60
60
  computed: {
61
+ itemLabel() {
62
+ return this.labelKey ? this.t(this.labelKey) : this.label ? this.label : this.t('labels.annotations.singular');
63
+ },
64
+
61
65
  isBinary() {
62
66
  if ( this.binary === null ) {
63
67
  return typeof this.value === 'string' && !asciiLike(this.value);
@@ -186,6 +190,7 @@ export default {
186
190
  :text="value"
187
191
  class="role-tertiary"
188
192
  action-color=""
193
+ :aria-label="t('detailText.copyAriaLabel', {item: itemLabel })"
189
194
  />
190
195
  </div>
191
196
  </template>
@@ -44,6 +44,7 @@ export default {
44
44
  :width="400"
45
45
  height="auto"
46
46
  styles="max-height: 100vh;"
47
+ :trigger-focus-trap="true"
47
48
  @close="close"
48
49
  >
49
50
  <Card
@@ -0,0 +1,84 @@
1
+ <script lang="ts">
2
+ import Vue, { PropType, defineComponent } from 'vue';
3
+ import { mapGetters } from 'vuex';
4
+
5
+ interface Dot {
6
+ stateBackground: string;
7
+ stateDisplay: string;
8
+ }
9
+
10
+ export default defineComponent({
11
+
12
+ name: 'DotState',
13
+
14
+ props: {
15
+ value: {
16
+ type: Object as PropType<Dot>,
17
+ default: null
18
+ },
19
+ color: {
20
+ type: String,
21
+ default: null
22
+ },
23
+ label: {
24
+ type: String,
25
+ default: null
26
+ }
27
+ },
28
+
29
+ computed: {
30
+ ...mapGetters({ t: 'i18n/t' }),
31
+ bg(): string | null {
32
+ return this.value?.stateBackground || this.color;
33
+ },
34
+
35
+ msg(): string | null {
36
+ let text = this.value?.stateDisplay || this.label;
37
+ let zhText = this.t(`stateLabel.${ text }`)
38
+ return zhText ? zhText : text
39
+ }
40
+
41
+ }
42
+ });
43
+ </script>
44
+
45
+ <template>
46
+ <div style="display: flex;flex-direction: row;align-items: center;">
47
+ <div :class="{ [bg]: true }"></div>
48
+ <span style="margin-left: 5px;">{{ msg }}</span>
49
+
50
+ </div>
51
+
52
+ </template>
53
+ <style lang="scss" scoped>
54
+ .bg-error {
55
+ width: 10px; /* 圆点的宽度 */
56
+ height: 10px; /* 圆点的高度 */
57
+ background-color: #DD0C17; /* 圆点的颜色 */
58
+ border-radius: 50%; /* 设置为圆形 */
59
+ }
60
+ .bg-darker {
61
+ width: 10px; /* 圆点的宽度 */
62
+ height: 10px; /* 圆点的高度 */
63
+ background-color: #DD0C17; /* 圆点的颜色 */
64
+ border-radius: 50%; /* 设置为圆形 */
65
+ }
66
+ .bg-success {
67
+ width: 10px; /* 圆点的宽度 */
68
+ height: 10px; /* 圆点的高度 */
69
+ background-color: #95F204 !important; /* 圆点的颜色 */
70
+ border-radius: 50%; /* 设置为圆形 */
71
+ }
72
+ .bg-warning {
73
+ width: 10px; /* 圆点的宽度 */
74
+ height: 10px; /* 圆点的高度 */
75
+ background-color: #DAC342; /* 圆点的颜色 */
76
+ border-radius: 50%; /* 设置为圆形 */
77
+ }
78
+ .bg-info {
79
+ width: 10px; /* 圆点的宽度 */
80
+ height: 10px; /* 圆点的高度 */
81
+ background-color: #1890FF; /* 圆点的颜色 */
82
+ border-radius: 50%; /* 设置为圆形 */
83
+ }
84
+ </style>
@@ -63,7 +63,7 @@ export default {
63
63
  }
64
64
 
65
65
  if (projectRoleTemplateBindingSchema) {
66
- this.$store.dispatch('rancher/findAll', { type: NORMAN.PROJECT_ROLE_TEMPLATE_BINDING }, { root: true })
66
+ this.$store.dispatch('rancher/findAll', { type: NORMAN.PROJECT_ROLE_TEMPLATE_BINDING, opt: { force: true } }, { root: true })
67
67
  .then((bindings) => {
68
68
  this['projectRoleTemplateBindings'] = bindings;
69
69
  this.loadingProjectBindings = false;
@@ -1,21 +1,23 @@
1
1
  <script>
2
- import { mapGetters } from 'vuex';
3
- import ResourceTable, { defaultTableSortGenerationFn } from '@shell/components/ResourceTable';
2
+ import { mapGetters, useStore } from 'vuex';
3
+ import ResourceTable, { defaultTableSortGenerationFn } from '@shell/components/rancherResourceTable';
4
4
  import { STATE, AGE, NAME, NS_SNAPSHOT_QUOTA } from '@shell/config/table-headers';
5
5
  import { uniq } from '@shell/utils/array';
6
6
  import { MANAGEMENT, NAMESPACE, VIRTUAL_TYPES, HCI } from '@shell/config/types';
7
7
  import { PROJECT_ID, FLAT_VIEW } from '@shell/config/query-params';
8
8
  import { PanelLocation, ExtensionPoint } from '@shell/core/types';
9
9
  import ExtensionPanel from '@shell/components/ExtensionPanel';
10
- import Masthead from '@shell/components/ResourceList/Masthead';
10
+ import Masthead from '@shell/components/rancherResourceList/Masthead';
11
11
  import { mapPref, GROUP_RESOURCES, ALL_NAMESPACES, DEV } from '@shell/store/prefs';
12
12
  import MoveModal from '@shell/components/MoveModal';
13
13
  import ButtonMultiAction from '@shell/components/ButtonMultiAction.vue';
14
-
14
+ import { escapeHtml } from '@shell/utils/string';
15
15
  import { NAMESPACE_FILTER_ALL_ORPHANS } from '@shell/utils/namespace-filter';
16
16
  import ResourceFetch from '@shell/mixins/resource-fetch';
17
17
  import DOMPurify from 'dompurify';
18
18
  import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
19
+ import ActionMenu from '@shell/components/ActionMenuShell.vue';
20
+ import { useRuntimeFlag } from '@shell/composables/useRuntimeFlag';
19
21
 
20
22
  export default {
21
23
  name: 'ListProjectNamespace',
@@ -25,6 +27,7 @@ export default {
25
27
  MoveModal,
26
28
  ResourceTable,
27
29
  ButtonMultiAction,
30
+ ActionMenu,
28
31
  },
29
32
  mixins: [ResourceFetch],
30
33
 
@@ -58,6 +61,13 @@ export default {
58
61
  this.projects = await this.$store.dispatch('management/findAll', { type: MANAGEMENT.PROJECT, opt: { force: true } });
59
62
  },
60
63
 
64
+ setup() {
65
+ const store = useStore();
66
+ const { featureDropdownMenu } = useRuntimeFlag(store);
67
+
68
+ return { featureDropdownMenu };
69
+ },
70
+
61
71
  data() {
62
72
  return {
63
73
  loadResources: [NAMESPACE],
@@ -155,7 +165,7 @@ export default {
155
165
  rowsWithFakeNamespaces() {
156
166
  const fakeRows = this.projectsWithoutNamespaces.map((project) => {
157
167
  return {
158
- groupByLabel: `${ ('resourceTable.groupLabel.notInAProject') }-${ project.id }`,
168
+ groupById: `${ ('resourceTable.groupLabel.notInAProject') }-${ project.id }`,
159
169
  isFake: true,
160
170
  mainRowKey: project.id,
161
171
  nameDisplay: project.spec?.displayName, // Enable filtering by the project name
@@ -166,8 +176,8 @@ export default {
166
176
 
167
177
  if (this.showMockNotInProjectGroup) {
168
178
  fakeRows.push( {
169
- groupByLabel: this.t('resourceTable.groupLabel.notInAProject'), // Same as the groupByLabel for the namespace model
170
- mainRowKey: 'fake-empty',
179
+ groupById: this.t('resourceTable.groupLabel.notInAProject'),
180
+ mainRowKey: 'fake-empty',
171
181
  });
172
182
  }
173
183
 
@@ -273,6 +283,9 @@ export default {
273
283
  },
274
284
  showCreateNsButton() {
275
285
  return this.groupPreference !== 'namespace';
286
+ },
287
+ projectGroupBy() {
288
+ return this.groupPreference === 'none' ? null : 'groupById';
276
289
  }
277
290
  },
278
291
  methods: {
@@ -336,6 +349,10 @@ export default {
336
349
  return location;
337
350
  },
338
351
 
352
+ getProjectActions(group) {
353
+ return group.rows[0].project;
354
+ },
355
+
339
356
  showProjectAction(event, group) {
340
357
  const project = group.rows[0].project;
341
358
 
@@ -359,7 +376,13 @@ export default {
359
376
  );
360
377
  }
361
378
 
362
- return row.groupByLabel;
379
+ if ( row.groupById === this.notInProjectKey) {
380
+ return this.t('resourceTable.groupLabel.notInAProject');
381
+ }
382
+
383
+ const project = row.project?.nameDisplay || row.project?.id || '';
384
+
385
+ return this.t('resourceTable.groupLabel.project', { name: escapeHtml(project) }, true);
363
386
  },
364
387
 
365
388
  projectDescription(group) {
@@ -393,6 +416,7 @@ export default {
393
416
  </script>
394
417
 
395
418
  <template>
419
+ 测试111111111111111111111111
396
420
  <div class="project-namespaces outlet">
397
421
  <Masthead
398
422
  :schema="projectSchema"
@@ -404,6 +428,8 @@ export default {
404
428
  :show-incremental-loading-indicator="showIncrementalLoadingIndicator"
405
429
  :load-resources="loadResources"
406
430
  :load-indeterminate="loadIndeterminate"
431
+
432
+ :main-button-visible="false"
407
433
  >
408
434
  <template
409
435
  v-if="showCreateNsButton"
@@ -431,12 +457,32 @@ export default {
431
457
  :schema="schema"
432
458
  :headers="headers"
433
459
  :rows="filteredRows"
460
+ :group-by="projectGroupBy"
434
461
  :groupable="true"
435
462
  :sort-generation-fn="sortGenerationFn"
436
463
  :loading="loading"
437
464
  group-tooltip="resourceTable.groupBy.project"
438
465
  key-field="_key"
466
+
467
+ :create-location="createProjectLocation"
468
+ :schemaBtn="projectSchema"
469
+ :create-button-label="t('projectNamespaces.createProject')"
470
+ :type-display="t('projectNamespaces.label')"
471
+ :resource="MANAGEMENT.PROJECT"
472
+ :main-button-visible="true"
439
473
  >
474
+ <template
475
+ v-if="showCreateNsButton"
476
+ #extraActions
477
+ >
478
+ <router-link
479
+ :to="createNamespaceLocationFlatList()"
480
+ class="btn role-primary mr-10"
481
+ data-testid="create_project_namespaces"
482
+ >
483
+ {{ t('projectNamespaces.createNamespace') }}
484
+ </router-link>
485
+ </template>
440
486
  <template #group-by="group">
441
487
  <div
442
488
  class="project-bar"
@@ -460,18 +506,29 @@ export default {
460
506
  <div class="right">
461
507
  <router-link
462
508
  v-if="isNamespaceCreatable && (canSeeProjectlessNamespaces || group.group.key !== notInProjectKey)"
463
- class="create-namespace btn btn-sm role-secondary mr-5"
509
+ class="create-namespace"
510
+ style="margin-bottom: 3px;"
464
511
  :to="createNamespaceLocation(group.group)"
465
512
  >
466
513
  {{ t('projectNamespaces.createNamespace') }}
467
514
  </router-link>
468
- <ButtonMultiAction
469
- class="project-action mr-10"
470
- :borderless="true"
471
- :aria-label="t('projectNamespaces.tableActionsLabel', { resource: projectResource(group.group) })"
472
- :invisible="!showProjectActionButton(group.group)"
473
- @click="showProjectAction($event, group.group)"
474
- />
515
+ <span style="color: var(--link);margin-bottom: 3px;">|</span>
516
+ <template v-if="featureDropdownMenu">
517
+ <ActionMenu
518
+ :showIcon="true"
519
+ :resource="getProjectActions(group.group)"
520
+ :button-aria-label="t('projectNamespaces.tableActionsLabel', { resource: projectResource(group.group) })"
521
+ />
522
+ </template>
523
+ <template v-else>
524
+ <ButtonMultiAction
525
+ class="project-action"
526
+ :borderless="true"
527
+ :aria-label="t('projectNamespaces.tableActionsLabel', { resource: projectResource(group.group) })"
528
+ :invisible="!showProjectActionButton(group.group)"
529
+ @click="showProjectAction($event, group.group)"
530
+ />
531
+ </template>
475
532
  </div>
476
533
  </div>
477
534
  </template>
@@ -536,6 +593,11 @@ export default {
536
593
  </div>
537
594
  </template>
538
595
  <style lang="scss" scoped>
596
+ .invisible {
597
+ width: 42px;
598
+ display: inline-block;
599
+ }
600
+
539
601
  .project-namespaces {
540
602
  & :deep() {
541
603
  .project-namespaces-table table {
@@ -550,6 +612,17 @@ export default {
550
612
  display: flex;
551
613
  flex-direction: row;
552
614
  justify-content: space-between;
615
+ background-color: var(--sortable-table-bg) !important;
616
+
617
+ .right {
618
+ display: flex;
619
+ align-items: center;
620
+ }
621
+
622
+ .create-namespace {
623
+ color: var(--link);
624
+ padding: 0 18px;
625
+ }
553
626
 
554
627
  .group-tab {
555
628
  max-width: calc(100% - 230px);
@@ -37,7 +37,7 @@ export default {
37
37
  handleLineBreaksConsentText(banner) {
38
38
  if (banner.text?.length) {
39
39
  // split text by newline char
40
- const textArray = banner.text.split(/\\n/).filter((element) => element);
40
+ const textArray = banner.text.split('\n').filter((element) => element);
41
41
 
42
42
  if (textArray.length > 1) {
43
43
  textArray.forEach((str, i) => {
@@ -130,11 +130,11 @@ export default {
130
130
 
131
131
  if (isEmpty(banner)) {
132
132
  if (showHeader && this.header) {
133
- bannerContent = bannerHeader || {};
133
+ bannerContent = this.handleLineBreaksConsentText(bannerHeader) || {};
134
134
  } else if (showConsent && this.consent) {
135
135
  bannerContent = this.handleLineBreaksConsentText(bannerConsent) || {};
136
136
  } else if (showFooter && this.footer) {
137
- bannerContent = bannerFooter || {};
137
+ bannerContent = this.handleLineBreaksConsentText(bannerFooter) || {};
138
138
  } else {
139
139
  bannerContent = {};
140
140
  }
@@ -168,16 +168,20 @@ export default {
168
168
  >
169
169
  <!-- text as array to support line breaks programmatically rather than just exposing HTML -->
170
170
  <div v-if="isTextAnArray">
171
- <p
171
+ <div
172
172
  v-for="(text, index) in banner.text"
173
173
  :key="index"
174
+ class="array-row"
174
175
  >
175
176
  {{ text }}
176
- </p>
177
+ </div>
177
178
  </div>
178
- <p v-else>
179
+ <div
180
+ v-else
181
+ class="single-row"
182
+ >
179
183
  {{ banner.text }}
180
- </p>
184
+ </div>
181
185
  </div>
182
186
  <div v-else-if="showDialog">
183
187
  <div class="banner-dialog-glass" />
@@ -192,16 +196,20 @@ export default {
192
196
  >
193
197
  <!-- text as array to support line breaks programmatically rather than just exposing HTML -->
194
198
  <div v-if="isTextAnArray">
195
- <p
199
+ <div
196
200
  v-for="(text, index) in banner.text"
197
201
  :key="index"
202
+ class="array-row"
198
203
  >
199
204
  {{ text }}
200
- </p>
205
+ </div>
201
206
  </div>
202
- <p v-else>
207
+ <div
208
+ v-else
209
+ class="single-row"
210
+ >
203
211
  {{ banner.text }}
204
- </p>
212
+ </div>
205
213
  </div>
206
214
  <button
207
215
  class="btn role-primary"
@@ -223,7 +231,6 @@ export default {
223
231
  padding: 0 20px;
224
232
 
225
233
  &.banner-consent {
226
- position: absolute;
227
234
  height: unset;
228
235
  min-height: 2em;
229
236
  overflow: hidden;
@@ -49,6 +49,10 @@ export default {
49
49
  userId: {
50
50
  type: String,
51
51
  default: ''
52
+ },
53
+ watchOverride: {
54
+ type: Boolean,
55
+ default: true,
52
56
  }
53
57
  },
54
58
  async fetch() {
@@ -138,7 +142,7 @@ export default {
138
142
  this.update();
139
143
  },
140
144
  userId(userId, oldUserId) {
141
- if (userId === oldUserId) {
145
+ if (userId === oldUserId || this.watchOverride === true) {
142
146
  return;
143
147
  }
144
148
  this.update();
@@ -262,22 +262,22 @@ export default {
262
262
  <div v-if="loading">
263
263
  <Loading />
264
264
  </div>
265
- <div
265
+ <!-- <div
266
266
  v-if="!loading && !error"
267
267
  class="external-link"
268
- >
268
+ > -->
269
269
  <!-- https://github.com/harvester/harvester-installer/pull/512/files -->
270
270
  <!-- It is necessary to include the parameter referer when accessing the Grafana page. -->
271
271
  <!-- This parameter is required by the backend to identify the origin of the request from which cluster -->
272
272
  <!-- The matching mechanism as follows: -->
273
273
  <!-- ~.*/k8s/clusters/(c-m-.+)/.* -->
274
274
  <!-- ~.*/dashboard/harvester/c/(c-m-.+)/.* -->
275
- <a
275
+ <!-- <a
276
276
  :href="grafanaUrl"
277
277
  target="_blank"
278
278
  rel="noopener nofollow"
279
279
  >{{ t('grafanaDashboard.grafana') }} <i class="icon icon-external-link" /></a>
280
- </div>
280
+ </div> -->
281
281
  </div>
282
282
  </template>
283
283
 
@@ -1,5 +1,6 @@
1
1
  <script>
2
2
  import { mapState } from 'vuex';
3
+ import { translateError } from '@shell/utils/error'
3
4
 
4
5
  export default {
5
6
  data() {
@@ -25,6 +26,7 @@ export default {
25
26
  },
26
27
 
27
28
  methods: {
29
+ translateError,
28
30
  close(growl) {
29
31
  this.$store.dispatch('growl/remove', growl.id);
30
32
  },
@@ -107,6 +109,7 @@ export default {
107
109
  @click="close(growl)"
108
110
  />
109
111
  <div
112
+ v-if="growl.title"
110
113
  :id="`growl-title-${ growl.id }`"
111
114
  class="growl-text-title"
112
115
  >
@@ -117,7 +120,7 @@ export default {
117
120
  :id="`growl-message-${ growl.id }`"
118
121
  :class="{ 'has-title': !!growl.title }"
119
122
  >
120
- {{ growl.message }}
123
+ {{ translateError(growl.message) }}
121
124
  </p>
122
125
  </div>
123
126
  </div>