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
@@ -84,53 +84,14 @@ export default {
84
84
  },
85
85
 
86
86
  data() {
87
- if (!this.value[this.field]) {
88
- this.value[this.field] = {};
89
- }
90
- const { podAffinity = {}, podAntiAffinity = {} } = this.value[this.field];
91
- const allAffinityTerms = [...(podAffinity.preferredDuringSchedulingIgnoredDuringExecution || []), ...(podAffinity.requiredDuringSchedulingIgnoredDuringExecution || [])].map((term) => {
92
- let out = clone(term);
93
-
94
- out._id = randomStr(4);
95
- out._anti = false;
96
- if (term.podAffinityTerm) {
97
- Object.assign(out, term.podAffinityTerm);
98
- out = this.parsePodAffinityTerm(out);
99
-
100
- delete out.podAffinityTerm;
101
- } else {
102
- out = this.parsePodAffinityTerm(out);
103
- }
104
-
105
- return out;
106
- });
107
- const allAntiTerms = [...(podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution || []), ...(podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution || [])].map((term) => {
108
- let out = clone(term);
109
-
110
- out._id = randomStr(4);
111
- out._anti = true;
112
- if (term.podAffinityTerm) {
113
- Object.assign(out, term.podAffinityTerm);
114
- out = this.parsePodAffinityTerm(out);
115
-
116
- delete out.podAffinityTerm;
117
- } else {
118
- out = this.parsePodAffinityTerm(out);
119
- }
120
-
121
- return out;
122
- });
123
-
124
- const allSelectorTerms = [...allAffinityTerms, ...allAntiTerms];
125
-
126
87
  return {
127
- allSelectorTerms,
128
- defaultWeight: 1,
88
+ allSelectorTerms: [],
89
+ defaultWeight: 1,
129
90
  // rules in MatchExpressions.vue can not catch changes what happens on parent component
130
91
  // we need re-render it via key changing
131
- rerenderNums: randomStr(4),
92
+ rerenderNums: randomStr(4),
132
93
  NAMESPACE_SELECTION_OPTION_VALUES,
133
- defaultAddValue: {
94
+ defaultAddValue: {
134
95
  _namespaceOption: NAMESPACE_SELECTION_OPTION_VALUES.POD,
135
96
  matchExpressions: [],
136
97
  namespaces: null,
@@ -138,6 +99,7 @@ export default {
138
99
  }
139
100
  };
140
101
  },
102
+
141
103
  computed: {
142
104
  ...mapGetters({ t: 'i18n/t' }),
143
105
  isView() {
@@ -226,6 +188,44 @@ export default {
226
188
  },
227
189
 
228
190
  created() {
191
+ if (!this.value[this.field]) {
192
+ this.value[this.field] = {};
193
+ }
194
+ const { podAffinity = {}, podAntiAffinity = {} } = this.value[this.field];
195
+ const allAffinityTerms = [...(podAffinity.preferredDuringSchedulingIgnoredDuringExecution || []), ...(podAffinity.requiredDuringSchedulingIgnoredDuringExecution || [])].map((term) => {
196
+ let out = clone(term);
197
+
198
+ out._id = randomStr(4);
199
+ out._anti = false;
200
+ if (term.podAffinityTerm) {
201
+ Object.assign(out, term.podAffinityTerm);
202
+ out = this.parsePodAffinityTerm(out);
203
+
204
+ delete out.podAffinityTerm;
205
+ } else {
206
+ out = this.parsePodAffinityTerm(out);
207
+ }
208
+
209
+ return out;
210
+ });
211
+ const allAntiTerms = [...(podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution || []), ...(podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution || [])].map((term) => {
212
+ let out = clone(term);
213
+
214
+ out._id = randomStr(4);
215
+ out._anti = true;
216
+ if (term.podAffinityTerm) {
217
+ Object.assign(out, term.podAffinityTerm);
218
+ out = this.parsePodAffinityTerm(out);
219
+
220
+ delete out.podAffinityTerm;
221
+ } else {
222
+ out = this.parsePodAffinityTerm(out);
223
+ }
224
+
225
+ return out;
226
+ });
227
+
228
+ this.allSelectorTerms = [...allAffinityTerms, ...allAntiTerms];
229
229
  this.queueUpdate = debounce(this.update, 500);
230
230
  },
231
231
 
@@ -364,14 +364,13 @@ export default {
364
364
  <div class="col span-12">
365
365
  <ArrayListGrouped
366
366
  v-model:value="allSelectorTerms"
367
- class="mt-20"
368
367
  :default-add-value="defaultAddValue"
369
368
  :mode="mode"
370
369
  :add-label="addLabel"
371
370
  @remove="remove"
372
371
  >
373
372
  <template #default="props">
374
- <div class="row mt-20 mb-20">
373
+ <div class="row mt-20">
375
374
  <div class="col span-6">
376
375
  <LabeledSelect
377
376
  :mode="mode"
@@ -393,7 +392,7 @@ export default {
393
392
  />
394
393
  </div>
395
394
  </div>
396
- <div class="row">
395
+ <div class="row mb-20">
397
396
  <RadioGroup
398
397
  :options="namespaceSelectionOptions"
399
398
  :labels="namespaceSelectionLabels"
@@ -439,7 +438,7 @@ export default {
439
438
  @update:value="e=>updateLabelSelector(e, props)"
440
439
  />
441
440
  <div class="row mt-20">
442
- <div class="col span-9">
441
+ <div class="col span-6">
443
442
  <LabeledSelect
444
443
  v-if="hasNodes"
445
444
  v-model:value="props.row.value.topologyKey"
@@ -469,7 +468,7 @@ export default {
469
468
  </div>
470
469
  <div
471
470
  v-if="'weight' in props.row.value"
472
- class="col span-3"
471
+ class="col span-6"
473
472
  >
474
473
  <LabeledInput
475
474
  v-model:value.number="props.row.value.weight"
@@ -6,6 +6,7 @@ import { LabeledInput } from '@components/Form/LabeledInput';
6
6
  import LabeledSelect from '@shell/components/form/LabeledSelect';
7
7
  import ShellInput from '@shell/components/form/ShellInput';
8
8
  import KeyValue from '@shell/components/form/KeyValue';
9
+ import { computed, ref, watch } from 'vue';
9
10
 
10
11
  const KINDS = [
11
12
  'none',
@@ -43,29 +44,29 @@ export default {
43
44
  },
44
45
  },
45
46
 
46
- data() {
47
- let kind = 'none';
48
- let probe = null;
49
- let exec = null;
50
- let httpGet = null;
51
- let tcpSocket = null;
52
-
53
- if ( this.value ) {
54
- probe = clone(this.value);
55
-
56
- if ( probe.exec ) {
57
- kind = 'exec';
58
- } else if ( probe.httpGet ) {
59
- if ( (probe.httpGet.scheme || '').toLowerCase() === 'https' ) {
60
- kind = 'HTTPS';
47
+ setup(props, { emit }) {
48
+ const kind = ref('none');
49
+ const probe = ref(null);
50
+ const exec = ref(null);
51
+ const httpGet = ref(null);
52
+ const tcpSocket = ref(null);
53
+
54
+ if ( props.value ) {
55
+ probe.value = clone(props.value);
56
+
57
+ if ( probe.value.exec ) {
58
+ kind.value = 'exec';
59
+ } else if ( probe.value.httpGet ) {
60
+ if ( (probe.value.httpGet.scheme || '').toLowerCase() === 'https' ) {
61
+ kind.value = 'HTTPS';
61
62
  } else {
62
- kind = 'HTTP';
63
+ kind.value = 'HTTP';
63
64
  }
64
- } else if ( probe.tcpSocket ) {
65
- kind = 'tcp';
65
+ } else if ( probe.value.tcpSocket ) {
66
+ kind.value = 'tcp';
66
67
  }
67
68
  } else {
68
- probe = {
69
+ probe.value = {
69
70
  failureThreshold: 3,
70
71
  successThreshold: 1,
71
72
  initialDelaySeconds: 0,
@@ -77,68 +78,68 @@ export default {
77
78
  };
78
79
  }
79
80
 
80
- exec = probe.exec || {};
81
- httpGet = probe.httpGet || {};
82
- tcpSocket = probe.tcpSocket || {};
81
+ exec.value = probe.value.exec || {};
82
+ httpGet.value = probe.value.httpGet || {};
83
+ tcpSocket.value = probe.value.tcpSocket || {};
83
84
 
84
- return {
85
- probe, kind, exec, httpGet, tcpSocket
86
- };
87
- },
88
-
89
- computed: {
90
- isView() {
91
- return this.mode === _VIEW;
92
- },
93
-
94
- isNone() {
95
- return this.kind === 'none';
96
- },
85
+ const isNone = computed(() => {
86
+ return kind.value === 'none';
87
+ });
97
88
 
98
- kindOptions() {
99
- return KINDS.map((k) => {
100
- return { label: this.t(`workload.container.healthCheck.kind.${ k }`), value: k };
101
- });
102
- }
103
- },
104
-
105
- watch: {
106
- kind() {
107
- this.update();
108
- }
109
- },
110
-
111
- methods: {
112
- update() {
113
- const probe = this.probe;
114
-
115
- if ( this.isNone ) {
116
- this.$emit('update:value', null);
89
+ const update = () => {
90
+ if ( isNone.value ) {
91
+ emit('update:value', null);
117
92
 
118
93
  return;
119
94
  }
120
95
 
121
- switch ( this.kind ) {
96
+ switch ( kind.value ) {
122
97
  case 'HTTP':
123
98
  case 'HTTPS':
124
- this.httpGet.scheme = this.kind;
125
- probe.httpGet = this.httpGet;
126
- probe.tcpSocket = null;
127
- probe.exec = null;
99
+ httpGet.value.scheme = kind.value;
100
+ probe.value.httpGet = httpGet.value;
101
+ probe.value.tcpSocket = null;
102
+ probe.value.exec = null;
128
103
  break;
129
104
  case 'tcp':
130
- probe.httpGet = null;
131
- probe.tcpSocket = this.tcpSocket;
132
- probe.exec = null;
105
+ probe.value.httpGet = null;
106
+ probe.value.tcpSocket = tcpSocket.value;
107
+ probe.value.exec = null;
133
108
  break;
134
109
  case 'exec':
135
- probe.httpGet = null;
136
- probe.tcpSocket = null;
137
- probe.exec = this.exec;
110
+ probe.value.httpGet = null;
111
+ probe.value.tcpSocket = null;
112
+ probe.value.exec = exec.value;
138
113
  break;
139
114
  }
140
115
 
141
- this.$emit('update:value', probe);
116
+ emit('update:value', probe.value);
117
+ };
118
+
119
+ watch(kind, () => {
120
+ update();
121
+ });
122
+
123
+ return {
124
+ probe,
125
+ kind,
126
+ exec,
127
+ httpGet,
128
+ tcpSocket,
129
+ update,
130
+ isNone,
131
+ };
132
+ },
133
+
134
+ computed: {
135
+ isView() {
136
+ return this.mode === _VIEW;
137
+ },
138
+
139
+ kindOptions() {
140
+ return KINDS.map((k) => {
141
+ return { label: this.t(`workload.container.healthCheck.kind.${ k }`), value: k };
142
+ });
142
143
  }
143
144
  },
144
145
  };
@@ -244,6 +245,7 @@ export default {
244
245
  v-if="kind && kind!=='none'"
245
246
  :style="{'position':'relative', 'margin':'0px'}"
246
247
  class="vertical"
248
+ role="none"
247
249
  >
248
250
  </div>
249
251
 
@@ -72,13 +72,13 @@ export default {
72
72
  <template>
73
73
  <div>
74
74
  <div class="headers mb-10">
75
- <div class="mr-10">
75
+ <div style="width: 400px;">
76
76
  <label>{{ t('resourceQuota.headers.resourceType') }}</label>
77
77
  </div>
78
- <div class="mr-10">
78
+ <div style="width: 400px;">
79
79
  <label>{{ t('resourceQuota.headers.projectResourceAvailability') }}</label>
80
80
  </div>
81
- <div class="mr-20">
81
+ <div style="width: 400px;">
82
82
  <label>{{ t('resourceQuota.headers.limit') }}</label>
83
83
  </div>
84
84
  </div>
@@ -101,7 +101,7 @@ export default {
101
101
  .headers {
102
102
  display: flex;
103
103
  flex-direction: row;
104
- justify-content: space-evenly;
104
+ justify-content: space-between;
105
105
  align-items: center;
106
106
  border-bottom: 1px solid var(--border);
107
107
  height: 30px;
@@ -173,16 +173,15 @@ export default {
173
173
  <template>
174
174
  <div
175
175
  v-if="typeOption"
176
- class="row"
176
+ class="rowNew"
177
177
  >
178
178
  <Select
179
- class="mr-10"
180
179
  :mode="mode"
181
180
  :value="type"
182
181
  :disabled="true"
183
182
  :options="types"
184
183
  />
185
- <div class="resource-availability mr-10">
184
+ <div class="resource-availability">
186
185
  <PercentageBar
187
186
  v-clean-tooltip="tooltip"
188
187
  class="percentage-bar"
@@ -208,13 +207,12 @@ export default {
208
207
  .resource-availability {
209
208
  align-self: center;
210
209
  }
211
- .row {
210
+ .rowNew {
212
211
  display: flex;
213
- flex-direction: row;
214
- justify-content: space-evenly;
212
+ justify-content: space-between;
215
213
 
216
214
  & > * {
217
- width: 100%;
215
+ width: 400px;
218
216
  }
219
217
  }
220
218
  </style>
@@ -28,11 +28,15 @@ export default {
28
28
  },
29
29
 
30
30
  data() {
31
+ return { typeValues: null };
32
+ },
33
+
34
+ created() {
31
35
  this.value['spec'] = this.value.spec || {};
32
36
  this.value.spec['namespaceDefaultResourceQuota'] = this.value.spec.namespaceDefaultResourceQuota || { limit: {} };
33
37
  this.value.spec['resourceQuota'] = this.value.spec.resourceQuota || { limit: {} };
34
38
 
35
- return { typeValues: Object.keys(this.value.spec.resourceQuota.limit) };
39
+ this.typeValues = Object.keys(this.value.spec.resourceQuota.limit);
36
40
  },
37
41
 
38
42
  computed: { ...QUOTA_COMPUTED },
@@ -53,14 +57,14 @@ export default {
53
57
  </script>
54
58
  <template>
55
59
  <div>
56
- <div class="headers mb-10">
57
- <div class="mr-10">
60
+ <div style="justify-content: right;" class="headers mb-10">
61
+ <div style="width: 400px;">
58
62
  <label>{{ t('resourceQuota.headers.resourceType') }}</label>
59
63
  </div>
60
- <div class="mr-20">
64
+ <div style="width: 400px;">
61
65
  <label>{{ t('resourceQuota.headers.projectLimit') }}</label>
62
66
  </div>
63
- <div class="mr-10">
67
+ <div style="width: 400px;">
64
68
  <label>{{ t('resourceQuota.headers.namespaceDefaultLimit') }}</label>
65
69
  </div>
66
70
  </div>
@@ -70,11 +70,11 @@ export default {
70
70
  <template>
71
71
  <div
72
72
  v-if="typeOption"
73
- class="row"
73
+ style="justify-content: right;"
74
+ class="rowNew"
74
75
  >
75
76
  <Select
76
77
  :value="type"
77
- class="mr-10"
78
78
  :mode="mode"
79
79
  :options="types"
80
80
  data-testid="projectrow-type-input"
@@ -82,7 +82,6 @@ export default {
82
82
  />
83
83
  <UnitInput
84
84
  :value="resourceQuotaLimit[type]"
85
- class="mr-10"
86
85
  :mode="mode"
87
86
  :placeholder="typeOption.placeholder"
88
87
  :increment="typeOption.increment"
@@ -107,9 +106,8 @@ export default {
107
106
  </template>
108
107
 
109
108
  <style lang='scss' scoped>
110
- .row {
109
+ .rowNew {
111
110
  display: flex;
112
- flex-direction: row;
113
- justify-content: space-evenly;
111
+ justify-content: space-between;
114
112
  }
115
113
  </style>
@@ -45,16 +45,14 @@ export default {
45
45
  },
46
46
 
47
47
  data() {
48
- const matchingResources = {
49
- matched: 0,
50
- matches: [],
51
- none: true,
52
- sample: null,
53
- total: 0,
54
- };
55
-
56
48
  return {
57
- matchingResources,
49
+ matchingResources: {
50
+ matched: 0,
51
+ matches: [],
52
+ none: true,
53
+ sample: null,
54
+ total: 0,
55
+ },
58
56
  allResources: [],
59
57
  allResourcesInScope: [],
60
58
  tableHeaders: this.$store.getters['type-map/headersFor'](
@@ -22,7 +22,7 @@ export default {
22
22
  mode: {
23
23
  type: String,
24
24
  default: _EDIT
25
- },
25
+ }
26
26
  },
27
27
 
28
28
  data() {
@@ -40,8 +40,9 @@ export default {
40
40
 
41
41
  return {
42
42
  codeMirrorOptions,
43
- text: this.value,
44
- showModal: false,
43
+ text: this.value,
44
+ showModal: false,
45
+ returnFocusSelector: '#known-ssh-hosts-trigger'
45
46
  };
46
47
  },
47
48
 
@@ -83,6 +84,8 @@ export default {
83
84
  data-testid="sshKnownHostsDialog"
84
85
  height="auto"
85
86
  :scrollable="true"
87
+ :trigger-focus-trap="true"
88
+ :return-focus-selector="returnFocusSelector"
86
89
  @close="closeDialog(false)"
87
90
  >
88
91
  <div
@@ -14,6 +14,17 @@ const requiredSetup = () => {
14
14
  return { global: { mocks: { $store: mockedStore() } } };
15
15
  };
16
16
 
17
+ jest.mock('focus-trap', () => {
18
+ return {
19
+ createFocusTrap: jest.fn().mockImplementation(() => {
20
+ return {
21
+ activate: jest.fn(),
22
+ deactivate: jest.fn(),
23
+ };
24
+ }),
25
+ };
26
+ });
27
+
17
28
  describe('component: KnownHostsEditDialog', () => {
18
29
  beforeEach(() => {
19
30
  document.body.innerHTML = '<div id="modals"></div>';
@@ -21,7 +32,7 @@ describe('component: KnownHostsEditDialog', () => {
21
32
  attachTo: document.body,
22
33
  props: {
23
34
  mode: _EDIT,
24
- value: 'line1\nline2\n',
35
+ value: 'line1\nline2\n'
25
36
  },
26
37
  ...requiredSetup(),
27
38
  });
@@ -65,12 +65,18 @@ export default defineComponent({
65
65
  </div>
66
66
  <template v-if="!isViewMode">
67
67
  <button
68
+ id="known-ssh-hosts-trigger"
68
69
  ref="button"
70
+ role="button"
71
+ :aria-label="t('secret.ssh.editKnownHosts.title')"
69
72
  data-testid="input-known-ssh-hosts_open-dialog"
70
73
  class="show-dialog-btn btn"
71
74
  @click="openDialog"
72
75
  >
73
- <i class="icon icon-edit" />
76
+ <i
77
+ class="icon icon-edit"
78
+ :alt="t('secret.ssh.editKnownHosts.title')"
79
+ />
74
80
  </button>
75
81
 
76
82
  <KnownHostsEditDialog
@@ -94,8 +100,16 @@ export default defineComponent({
94
100
  }
95
101
 
96
102
  .show-dialog-btn {
97
- display: contents;
98
103
  background-color: transparent;
104
+ padding: 4px;
105
+ height: 22px;
106
+ margin: -3px -3px 0 0;
107
+ min-height: unset;
108
+
109
+ &:focus-visible {
110
+ @include focus-outline;
111
+ outline-offset: 1px;
112
+ }
99
113
  }
100
114
  }
101
115
  </style>