dashboard-shell-shell 1.0.121 → 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 -554
  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
@@ -78,6 +78,7 @@ export default {
78
78
  :rules="fvGetAndReportPathRules('decodedData.accessKey')"
79
79
  :mode="mode"
80
80
  :required="true"
81
+ data-testid="access-key"
81
82
  @update:value="$emit('valueChanged', 'accessKey', $event)"
82
83
  />
83
84
  <LabeledInput
@@ -89,6 +90,7 @@ export default {
89
90
  :rules="fvGetAndReportPathRules('decodedData.secretKey')"
90
91
  :mode="mode"
91
92
  :required="true"
93
+ data-testid="secret-key"
92
94
  @update:value="$emit('valueChanged', 'secretKey', $event)"
93
95
  />
94
96
  <LabeledSelect
@@ -222,7 +222,7 @@ export default {
222
222
 
223
223
  > .divider-inner {
224
224
  padding: 0;
225
- border-bottom: 1px solid var(--dropdown-divider);
225
+ border-bottom: 0px solid var(--dropdown-divider);
226
226
  width: 125%;
227
227
  margin: 0 auto;
228
228
  }
@@ -0,0 +1,71 @@
1
+ <script setup lang="ts">
2
+ import { RcDropdown, RcDropdownTrigger, RcDropdownItem } from '@components/RcDropdown';
3
+ type HiddenAction = {
4
+ action: string;
5
+ enabled: boolean;
6
+ icon: string;
7
+ label: string;
8
+ bulkable: boolean;
9
+ bulkAction: string;
10
+ allEnabled: boolean;
11
+ anyEnabled: boolean;
12
+ }
13
+
14
+ defineProps<{
15
+ disabled: boolean,
16
+ hiddenActions: HiddenAction[],
17
+ actionTooltip: unknown,
18
+ }>();
19
+
20
+ const emit = defineEmits(['click', 'mouseover', 'mouseleave']);
21
+
22
+ const applyTableAction = (act: HiddenAction, args: unknown, event: Event) => {
23
+ emit('click', act, args, event);
24
+ };
25
+
26
+ const setBulkActionOfInterest = (act: HiddenAction | null, event: 'mouseover' | 'mouseleave' = 'mouseover') => {
27
+ emit(event, act);
28
+ };
29
+ </script>
30
+
31
+ <template>
32
+ <rc-dropdown
33
+ :distance="14"
34
+ placement="bottom"
35
+ >
36
+ <rc-dropdown-trigger
37
+ class="bulk-actions-dropdown"
38
+ :disabled="disabled"
39
+ >
40
+ <template #before>
41
+ <i class="icon icon-gear" />
42
+ </template>
43
+ <span>{{ t('sortableTable.bulkActions.collapsed.label') }}</span>
44
+ <template #after>
45
+ <i class="ml-10 icon icon-chevron-down" />
46
+ </template>
47
+ </rc-dropdown-trigger>
48
+ <template #dropdownCollection>
49
+ <rc-dropdown-item
50
+ v-for="(act, i) in hiddenActions"
51
+ :key="i"
52
+ v-clean-tooltip="{
53
+ content: actionTooltip,
54
+ placement: 'right'
55
+ }"
56
+ :disabled="!act.enabled"
57
+ @click="applyTableAction(act, null, $event)"
58
+ @mouseover="setBulkActionOfInterest(act)"
59
+ @mouseleave="setBulkActionOfInterest(null, 'mouseleave')"
60
+ >
61
+ <template #before>
62
+ <i
63
+ v-if="act.icon"
64
+ :class="act.icon"
65
+ />
66
+ </template>
67
+ <span v-clean-html="act.label" />
68
+ </rc-dropdown-item>
69
+ </template>
70
+ </rc-dropdown>
71
+ </template>
@@ -305,7 +305,7 @@ export default {
305
305
  color: var(--dropdown-text);
306
306
  background-color: var(--dropdown-bg);
307
307
  border: 1px solid var(--dropdown-border);
308
- border-radius: 5px;
308
+ border-radius: 3px;
309
309
  box-shadow: 0 5px 20px var(--shadow);
310
310
 
311
311
  LI {
@@ -326,7 +326,7 @@ export default {
326
326
 
327
327
  &.divider {
328
328
  padding: 0;
329
- border-bottom: 1px solid var(--dropdown-divider);
329
+ border-bottom: 0px solid var(--dropdown-divider);
330
330
  }
331
331
 
332
332
  &:not(.divider):hover {
@@ -18,6 +18,7 @@ type RcDropdownMenuComponentProps = {
18
18
  dataTestid?: string;
19
19
  resource: Object;
20
20
  customActions?: DropdownOption[];
21
+ showIcon?: Boolean;
21
22
  }
22
23
 
23
24
  const props = defineProps <RcDropdownMenuComponentProps>();
@@ -89,6 +90,7 @@ const menuOptions = () => {
89
90
 
90
91
  return options.value;
91
92
  };
93
+
92
94
  </script>
93
95
 
94
96
  <template>
@@ -99,6 +101,7 @@ const menuOptions = () => {
99
101
  :dropdown-aria-label="dropdownAriaLabel"
100
102
  :options="menuOptions()"
101
103
  :data-testid="dataTestid"
104
+ :showIcon="showIcon"
102
105
  @update:open="openChanged"
103
106
  @select="(e: MouseEvent, option: object) => execute(option, e)"
104
107
  />
@@ -1,6 +1,11 @@
1
1
  <script lang="ts">
2
2
  import { defineComponent } from 'vue';
3
- import { DEFAULT_FOCUS_TRAP_OPTS, useBasicSetupFocusTrap, getFirstFocusableElement } from '@shell/composables/focusTrap';
3
+ import {
4
+ DEFAULT_FOCUS_TRAP_OPTS,
5
+ useBasicSetupFocusTrap,
6
+ getFirstFocusableElement,
7
+ useWatcherBasedSetupFocusTrapWithDestroyIncluded
8
+ } from '@shell/composables/focusTrap';
4
9
 
5
10
  export const DEFAULT_ITERABLE_NODE_SELECTOR = 'body;';
6
11
 
@@ -26,7 +31,7 @@ export default defineComponent({
26
31
  */
27
32
  width: {
28
33
  type: [Number, String],
29
- default: 600,
34
+ default: 610,
30
35
  validator(value) {
31
36
  if (typeof value === 'number') {
32
37
  return value > 0;
@@ -80,7 +85,21 @@ export default defineComponent({
80
85
  returnFocusFirstIterableNodeSelector: {
81
86
  type: String,
82
87
  default: DEFAULT_ITERABLE_NODE_SELECTOR,
83
- }
88
+ },
89
+ /**
90
+ * trigger focus trap - but watcher based
91
+ */
92
+ triggerFocusTrapWatcherBased: {
93
+ type: Boolean,
94
+ default: false,
95
+ },
96
+ /**
97
+ * watcher-based focus trap variable to watch
98
+ */
99
+ focusTrapWatcherBasedVariable: {
100
+ type: Boolean,
101
+ default: false,
102
+ },
84
103
  },
85
104
  computed: {
86
105
  modalWidth(): string {
@@ -90,7 +109,7 @@ export default defineComponent({
90
109
  return `${ this.width }${ uom }`;
91
110
  }
92
111
 
93
- return '600px';
112
+ return '610px';
94
113
  },
95
114
  stylesPropToObj(): object {
96
115
  return this.styles.split(';')
@@ -131,7 +150,19 @@ export default defineComponent({
131
150
  };
132
151
  }
133
152
 
134
- useBasicSetupFocusTrap('#modal-container-element', opts);
153
+ if (!props.triggerFocusTrapWatcherBased) {
154
+ useBasicSetupFocusTrap('#modal-container-element', opts);
155
+ }
156
+ }
157
+ },
158
+ created() {
159
+ // This usecase is to cover the PromptModal scenario where it's renders a generic component inside.
160
+ // Due to the architecture of the PromptModal it needs to be handled with a watcher based focus trap
161
+ // but with a dedicated unmount hook
162
+ if (this.triggerFocusTrapWatcherBased) {
163
+ const opts:any = DEFAULT_FOCUS_TRAP_OPTS;
164
+
165
+ useWatcherBasedSetupFocusTrapWithDestroyIncluded(() => this.focusTrapWatcherBasedVariable, '#modal-container-element', opts, true);
135
166
  }
136
167
  },
137
168
  mounted() {
@@ -150,6 +181,18 @@ export default defineComponent({
150
181
  this.$emit('close');
151
182
  }
152
183
  },
184
+ close(event: MouseEvent) {
185
+ console.log('close');
186
+
187
+ if (
188
+ this.$refs.modalRef
189
+ ) {
190
+ console.log('clickcolse');
191
+
192
+ this.$emit('close');
193
+ }
194
+ // this.$emit('close');
195
+ },
153
196
  handleEscapeKey(event: KeyboardEvent) {
154
197
  if (this.clickToClose && event.key === 'Escape') {
155
198
  this.$emit('close');
@@ -190,8 +233,20 @@ export default defineComponent({
190
233
  :style="modalStyles"
191
234
  @click.stop
192
235
  >
236
+ <div
237
+ class="close-dailog-icon"
238
+ >
239
+ <button
240
+ class="btn btn-sm role-link hide-bar"
241
+ @click="close"
242
+ >
243
+ <i class="icon icon-x" />
244
+ </button>
245
+ </div>
246
+ <div>
193
247
  <slot><!--Empty content--></slot>
194
248
  </div>
249
+ </div>
195
250
  </div>
196
251
  </transition>
197
252
  </teleport>
@@ -204,18 +259,21 @@ export default defineComponent({
204
259
  left: 0;
205
260
  width: 100vw;
206
261
  height: 100vh;
207
- background-color: var(--overlay-bg);
262
+ /* background-color: var(--overlay-bg); */
263
+ background-color: var(--overlay-model-bg);
208
264
  display: flex;
209
265
  justify-content: center;
210
266
  align-items: center;
211
- z-index: z-index('modalOverlay');
267
+ /* z-index: z-index('modalOverlay'); */
268
+ z-index: 50;
212
269
 
213
270
  .modal-container {
214
271
  background-color: var(--modal-bg);
215
272
  border-radius: var(--border-radius);
216
273
  max-height: 95vh;
217
274
  overflow: auto;
218
- border: 2px solid var(--modal-border);
275
+ border: 0px;
276
+ position: relative;
219
277
  }
220
278
  }
221
279
 
@@ -228,4 +286,22 @@ export default defineComponent({
228
286
  .modal-fade-leave-to {
229
287
  opacity: 0;
230
288
  }
289
+ .hide-bar{
290
+ width: 32px;
291
+ min-width: 32px !important;
292
+ }
293
+ .close-dailog-icon{
294
+ position: absolute;
295
+ right: 13px;
296
+ top: 18px;
297
+ & > button{
298
+ color:var(--body-text) !important;
299
+ min-width: 32px !important;
300
+ width: 32px !important;
301
+ & > button:hover{
302
+ color:var(--body-text) !important;
303
+ }
304
+ }
305
+
306
+ }
231
307
  </style>
@@ -115,6 +115,7 @@ export default {
115
115
  styles="background-color: var(--nav-bg); border-radius: var(--border-radius); max-height: 100vh;"
116
116
  height="auto"
117
117
  :scrollable="true"
118
+ :trigger-focus-trap="true"
118
119
  @close="close"
119
120
  >
120
121
  <Card
@@ -157,17 +158,20 @@ export default {
157
158
  </template>
158
159
 
159
160
  <template #actions>
160
- <button
161
- class="btn role-secondary"
162
- @click="close"
163
- >
164
- {{ t('generic.cancel') }}
165
- </button>
166
-
167
- <AsyncButton
168
- mode="apply"
169
- @click="apply"
170
- />
161
+ <div class="actions-container">
162
+ <button
163
+ class="btn role-secondary"
164
+ @click="close"
165
+ >
166
+ {{ t('generic.cancel') }}
167
+ </button>
168
+
169
+ <AsyncButton
170
+ class="apply-btn"
171
+ mode="apply"
172
+ @click="apply"
173
+ />
174
+ </div>
171
175
  </template>
172
176
  </Card>
173
177
  </app-modal>
@@ -181,5 +185,15 @@ export default {
181
185
  & ::-webkit-scrollbar-corner {
182
186
  background: rgba(0,0,0,0);
183
187
  }
188
+
189
+ .actions-container {
190
+ display: flex;
191
+ justify-content: flex-end;
192
+ width: 100%;
193
+
194
+ .apply-btn {
195
+ margin-left: 20px;
196
+ }
197
+ }
184
198
  }
185
199
  </style>
@@ -11,6 +11,7 @@ export const ASYNC_BUTTON_STATES = {
11
11
 
12
12
  const TEXT = 'text';
13
13
  const TOOLTIP = 'tooltip';
14
+ const DISABLED_CLASS_STYLE = 'btn-disabled';
14
15
 
15
16
  export type AsyncButtonCallback = (success: boolean) => void;
16
17
 
@@ -152,9 +153,29 @@ export default defineComponent({
152
153
  out[`btn-${ this.size }`] = true;
153
154
  }
154
155
 
156
+ // while we are waiting for the async button to get
157
+ // it's callback we want to the button to appear as disabled
158
+ // but not being actually disabled as need it to be
159
+ // able to return the keyboard navigation focus back to it
160
+ // which can't be done while actually disabled, as per
161
+ // https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#focusabilityofdisabledcontrols
162
+ if (this.phase === ASYNC_BUTTON_STATES.WAITING) {
163
+ out[DISABLED_CLASS_STYLE] = true;
164
+ }
165
+
166
+ // used to assist e2e testing mostly when waiting for button to return
167
+ // to it's normal state/phase
168
+ if (this.phase === ASYNC_BUTTON_STATES.ACTION) {
169
+ out['ready-for-action'] = true;
170
+ }
171
+
155
172
  return out;
156
173
  },
157
174
 
175
+ appearsDisabled(): boolean {
176
+ return this.disabled || this.phase === ASYNC_BUTTON_STATES.WAITING;
177
+ },
178
+
158
179
  displayIcon(): string {
159
180
  const exists = this.$store.getters['i18n/exists'];
160
181
  const t = this.$store.getters['i18n/t'];
@@ -204,10 +225,6 @@ export default defineComponent({
204
225
  return this.phase === ASYNC_BUTTON_STATES.WAITING;
205
226
  },
206
227
 
207
- isDisabled(): boolean {
208
- return this.disabled || this.phase === ASYNC_BUTTON_STATES.WAITING;
209
- },
210
-
211
228
  isManualRefresh() {
212
229
  return this.mode === 'manual-refresh';
213
230
  },
@@ -232,7 +249,7 @@ export default defineComponent({
232
249
 
233
250
  methods: {
234
251
  clicked() {
235
- if ( this.isDisabled ) {
252
+ if ( this.appearsDisabled ) {
236
253
  return;
237
254
  }
238
255
 
@@ -283,8 +300,8 @@ export default defineComponent({
283
300
  :class="classes"
284
301
  :name="name"
285
302
  :type="type"
286
- :disabled="isDisabled"
287
- :aria-disabled="isDisabled"
303
+ :disabled="disabled"
304
+ :aria-disabled="appearsDisabled"
288
305
  :tab-index="tabIndex"
289
306
  :data-testid="componentTestid + '-async-button'"
290
307
  @click="clicked"
@@ -36,6 +36,7 @@ export default {
36
36
  data-testid="banner-brand__img"
37
37
  file-name="banner.svg"
38
38
  :draggable="false"
39
+ :alt="t('landing.bannerImage')"
39
40
  />
40
41
  </div>
41
42
  <div
@@ -196,7 +196,8 @@ export default {
196
196
  @update:modelValue="$emit('click-action', $event)"
197
197
  >
198
198
  <template #no-options>
199
- <slot name="no-options" />
199
+ 暂无数据
200
+ <!-- <slot name="no-options" /> -->
200
201
  </template>
201
202
 
202
203
  <template #selected-option="option">
@@ -247,16 +248,35 @@ export default {
247
248
  }
248
249
  }
249
250
  .button-dropdown {
250
- background: var(--accent-btn);
251
+ /* background: var(--accent-btn); */
252
+ background: var(--accent-btn-hover);
251
253
  border: solid 1px var(--link);
252
254
  color: var(--link);
253
255
  padding: 0;
254
256
 
257
+ &{
258
+ :deep() .vs__dropdown-toggle .vs__actions,
259
+ :deep() .vs__selected-options {
260
+ background: var(--accent-btn-hover);
261
+ }
262
+ :deep() .vs__selected-options .vs__selected button {
263
+ background-color: transparent;
264
+ color: var(--accent-btn-hover-text);
265
+ }
266
+ :deep() .vs__dropdown-toggle .vs__actions {
267
+ &:after {
268
+ color: var(--accent-btn-hover-text);
269
+ padding-top: 10px;
270
+ }
271
+ }
272
+ }
273
+
255
274
  &.vs--open :deep() {
256
275
  outline: none;
257
276
  box-shadow: none;
258
277
  }
259
278
 
279
+
260
280
  &:hover {
261
281
  :deep() .vs__dropdown-toggle .vs__actions,
262
282
  :deep() .vs__selected-options {
@@ -275,6 +295,7 @@ export default {
275
295
 
276
296
  :deep() > .vs__dropdown-toggle {
277
297
  width: 100%;
298
+ width: 100px;
278
299
  display: grid;
279
300
  grid-template-columns: 75% 25%;
280
301
  border: none;
@@ -283,7 +304,7 @@ export default {
283
304
  .vs__actions {
284
305
 
285
306
  &:after {
286
- color: var(--link);
307
+ color: var(--accent-btn-hover-text);
287
308
  line-height: 1;
288
309
  }
289
310
  }
@@ -297,7 +318,8 @@ export default {
297
318
  button {
298
319
  border: none;
299
320
  background: transparent;
300
- color: var(--link);
321
+ color: var(--accent-btn-hover-text);
322
+ min-width: 83px;
301
323
  }
302
324
  }
303
325
  .vs__search {
@@ -77,6 +77,9 @@ export default {
77
77
  const tooltip = opt.tooltipKey ? this.t(opt.tooltipKey) : opt.tooltip;
78
78
 
79
79
  return ariaLabel || tooltip || label || undefined;
80
+ },
81
+ isPressed(opt) {
82
+ return this.value === opt.value;
80
83
  }
81
84
  }
82
85
  };
@@ -97,6 +100,7 @@ export default {
97
100
  :disabled="disabled || opt.disabled"
98
101
  role="button"
99
102
  :aria-label="actionAriaLabel(opt)"
103
+ :aria-pressed="isPressed(opt)"
100
104
  @click="change(opt.value)"
101
105
  >
102
106
  <slot
@@ -30,6 +30,7 @@ const buttonClass = computed(() => {
30
30
  class="icon icon-actions"
31
31
  :alt="t('sortableTable.tableActionsImgAlt')"
32
32
  />
33
+ <!-- <i style="font-style: normal;">操作</i> -->
33
34
  </button>
34
35
  </template>
35
36
 
@@ -5,7 +5,7 @@ import { _EDIT, _VIEW } from '@shell/config/query-params';
5
5
  export default {
6
6
  name: 'CodeMirror',
7
7
 
8
- emits: ['onReady', 'onInput', 'onChanges', 'onFocus', 'validationChanged'],
8
+ emits: ['onReady', 'onInput', 'onChanges', 'onFocus'],
9
9
 
10
10
  props: {
11
11
  /**
@@ -140,9 +140,9 @@ export default {
140
140
  },
141
141
 
142
142
  watch: {
143
- hasLintErrors(neu) {
144
- this.$emit('validationChanged', !neu);
145
- },
143
+ // hasLintErrors(neu) {
144
+ // this.$emit('validationChanged', !neu);
145
+ // },
146
146
 
147
147
  isCodeMirrorContainerFocused: {
148
148
  handler(neu) {
@@ -209,7 +209,7 @@ export default {
209
209
  },
210
210
 
211
211
  onReady(codeMirrorRef) {
212
- this.$emit('validationChanged', true);
212
+ // this.$emit('validationChanged', true);
213
213
 
214
214
  this.$nextTick(() => {
215
215
  codeMirrorRef.refresh();
@@ -279,7 +279,7 @@ export default {
279
279
  id="code-mirror-el"
280
280
  ref="codeMirrorRef"
281
281
  :value="value"
282
- :options="combinedOptions"
282
+
283
283
  :disabled="isDisabled"
284
284
  :original-style="true"
285
285
  @ready="onReady"
@@ -288,6 +288,19 @@ export default {
288
288
  @focus="onFocus"
289
289
  @blur="onBlur"
290
290
  />
291
+ <!-- <Codemirror
292
+ id="code-mirror-el"
293
+ ref="codeMirrorRef"
294
+ :value="value"
295
+ :options="combinedOptions"
296
+ :disabled="isDisabled"
297
+ :original-style="true"
298
+ @ready="onReady"
299
+ @input="onInput"
300
+ @changes="onChanges"
301
+ @focus="onFocus"
302
+ @blur="onBlur"
303
+ /> -->
291
304
  <span
292
305
  v-show="isCodeMirrorFocused"
293
306
  class="escape-text"
@@ -140,7 +140,7 @@ export default {
140
140
  :aria-label="t('footer.wechat.title')"
141
141
  role="link"
142
142
  @click="show"
143
- @keyup.enter="show"
143
+ @keydown.enter="show"
144
144
  >
145
145
  {{ t('footer.wechat.title') }}
146
146
  </a>
@@ -151,6 +151,7 @@ export default {
151
151
  name="wechat-modal"
152
152
  height="auto"
153
153
  :width="640"
154
+ :trigger-focus-trap="true"
154
155
  @close="close"
155
156
  >
156
157
  <div class="wechat-modal">
@@ -164,8 +165,7 @@ export default {
164
165
  :aria-label="t('generic.close')"
165
166
  role="button"
166
167
  @click="close"
167
- @keyup.enter="close"
168
- @keyup.space="close"
168
+ @keydown.enter.stop
169
169
  >
170
170
  {{ t('generic.close') }}
171
171
  </button>
@@ -59,7 +59,11 @@ export default {
59
59
  usedAsResourceName: {
60
60
  type: Boolean,
61
61
  defaut: false
62
- }
62
+ },
63
+ reserveText: {
64
+ type: String,
65
+ defaut: '预留'
66
+ },
63
67
  },
64
68
  computed: {
65
69
  displayUnits() {
@@ -91,13 +95,13 @@ export default {
91
95
  </script>
92
96
 
93
97
  <template>
94
- <div class="consumption-gauge">
98
+ <!-- <div class="consumption-gauge">
95
99
  <h3 v-if="resourceName && !usedAsResourceName">
96
100
  {{ resourceName }}
97
101
  </h3>
98
- <div class="numbers">
102
+ <div class="numbers"> -->
99
103
  <!-- @slot Optional slot to use as the title rather than showing the resource name -->
100
- <slot
104
+ <!-- <slot
101
105
  name="title"
102
106
  :amountTemplateValues="amountTemplateValues"
103
107
  :formattedPercentage="formattedPercentage"
@@ -118,7 +122,22 @@ export default {
118
122
  :color-stops="colorStops"
119
123
  />
120
124
  </div>
121
- </div>
125
+ </div> -->
126
+ <div class="consumption-gauge">
127
+ <div
128
+ v-if="resourceName && !usedAsResourceName"
129
+ class="mb-20"
130
+ >
131
+ {{ resourceName }}
132
+ </div>
133
+ <slot
134
+ name="content"
135
+ :amountTemplateValues="amountTemplateValues"
136
+ :formattedPercentage="formattedPercentage"
137
+ >
138
+ <p>{{ formattedPercentage + '(共' + amountTemplateValues.total + ' ' + amountTemplateValues.unit + ',' + reserveText + ' ' + amountTemplateValues.used + ' ' + amountTemplateValues.unit + ')' }}</p>
139
+ </slot>
140
+ </div>
122
141
  </template>
123
142
 
124
143
  <style lang="scss">
@@ -49,9 +49,10 @@ export default {
49
49
  v-if="text"
50
50
  class="copy-to-clipboard-text"
51
51
  role="button"
52
- :aria-label="t('generic.copyToClipboard')"
53
52
  :class="{ 'copied': copied, 'plain': plain}"
54
53
  href="#"
54
+ :aria-label="t('generic.copyToClipboard')"
55
+ v-bind="$attrs"
55
56
  @click="clicked"
56
57
  @keyup.space="clicked"
57
58
  >