@rancher/shell 3.0.5-rc.5 → 3.0.5-rc.6

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 (312) hide show
  1. package/assets/data/aws-regions.json +1 -0
  2. package/assets/images/key.svg +17 -0
  3. package/assets/styles/base/_spacing.scss +2 -2
  4. package/assets/styles/global/_form.scss +1 -1
  5. package/assets/styles/global/_labeled-input.scss +1 -1
  6. package/assets/styles/themes/_dark.scss +3 -0
  7. package/assets/styles/themes/_light.scss +3 -0
  8. package/assets/styles/vendor/vue-select.scss +1 -1
  9. package/assets/translations/en-us.yaml +404 -64
  10. package/assets/translations/zh-hans.yaml +3 -4
  11. package/cloud-credential/gcp.vue +9 -1
  12. package/components/AppModal.vue +2 -0
  13. package/components/CodeMirror.vue +1 -1
  14. package/components/ConfigMapSettings/Settings.vue +377 -0
  15. package/components/ConfigMapSettings/index.vue +354 -0
  16. package/components/CruResource.vue +1 -2
  17. package/components/DetailText.vue +61 -11
  18. package/components/Drawer/Chrome.vue +116 -0
  19. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  20. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  21. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  22. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  23. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
  24. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  25. package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
  26. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  27. package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
  28. package/components/GrowlManager.vue +16 -15
  29. package/components/IconOrSvg.vue +5 -0
  30. package/components/KeyValueView.vue +1 -1
  31. package/components/LocaleSelector.vue +9 -1
  32. package/components/ProgressBarMulti.vue +1 -0
  33. package/components/PromptModal.vue +6 -1
  34. package/components/RelatedResources.vue +4 -12
  35. package/components/Resource/Detail/Additional.vue +46 -0
  36. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
  37. package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
  38. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  39. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +37 -254
  40. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
  41. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +27 -5
  42. package/components/Resource/Detail/Metadata/KeyValue.vue +25 -17
  43. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
  44. package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
  45. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
  46. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
  47. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  48. package/components/Resource/Detail/Metadata/composables.ts +60 -11
  49. package/components/Resource/Detail/Metadata/index.vue +12 -5
  50. package/components/Resource/Detail/Page.vue +15 -0
  51. package/components/Resource/Detail/ResourceRow.vue +37 -18
  52. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  53. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  54. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  55. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  56. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  57. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  58. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  59. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  60. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  61. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  62. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  63. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  64. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  65. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  66. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  67. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  68. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  69. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  70. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  71. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  72. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  73. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  74. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  75. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  76. package/components/Resource/Detail/TitleBar/Title.vue +2 -1
  77. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
  78. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
  79. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  80. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
  81. package/components/Resource/Detail/TitleBar/composables.ts +44 -0
  82. package/components/Resource/Detail/TitleBar/index.vue +83 -11
  83. package/components/Resource/Detail/composables.ts +45 -0
  84. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  85. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  86. package/components/ResourceDetail/Masthead/index.vue +65 -0
  87. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  88. package/components/ResourceDetail/__tests__/index.test.ts +26 -5
  89. package/components/ResourceDetail/index.vue +30 -16
  90. package/components/ResourceDetail/legacy.vue +18 -1
  91. package/components/ResourceList/Masthead.vue +6 -0
  92. package/components/ResourceYaml.vue +14 -1
  93. package/components/SlideInPanelManager.vue +46 -7
  94. package/components/StateDot/index.vue +28 -0
  95. package/components/Tabbed/index.vue +11 -15
  96. package/components/Wizard.vue +4 -2
  97. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  98. package/components/__tests__/GrowlManager.test.ts +0 -25
  99. package/components/auth/login/ldap.vue +1 -1
  100. package/components/fleet/FleetApplications.vue +0 -7
  101. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  102. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  103. package/components/fleet/FleetClusters.vue +25 -6
  104. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  105. package/components/fleet/FleetHelmOps.vue +8 -0
  106. package/components/fleet/FleetRepos.vue +1 -6
  107. package/components/fleet/FleetResources.vue +4 -5
  108. package/components/fleet/FleetValuesFrom.vue +295 -0
  109. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  110. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  111. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
  112. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  113. package/components/fleet/dashboard/ResourceCard.vue +1 -0
  114. package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
  115. package/components/fleet/dashboard/ResourceDetails.vue +8 -10
  116. package/components/fleet/dashboard/ResourcePanel.vue +15 -8
  117. package/components/form/ArrayList.vue +13 -2
  118. package/components/form/ChangePassword.vue +3 -1
  119. package/components/form/Footer.vue +10 -4
  120. package/components/form/KeyValue.vue +81 -43
  121. package/components/form/LabeledSelect.vue +56 -16
  122. package/components/form/Labels.vue +90 -17
  123. package/components/form/MatchExpressions.vue +46 -5
  124. package/components/form/NameNsDescription.vue +1 -1
  125. package/components/form/ResourceSelector.vue +1 -0
  126. package/components/form/ResourceTabs/index.vue +5 -0
  127. package/components/form/SecretSelector.vue +9 -2
  128. package/components/form/Select.vue +57 -19
  129. package/components/form/SimpleSecretSelector.vue +9 -2
  130. package/components/form/Taints.vue +21 -2
  131. package/components/form/UnitInput.vue +8 -0
  132. package/components/form/ValueFromResource.vue +1 -1
  133. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  134. package/components/form/__tests__/Labels.test.ts +360 -0
  135. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  136. package/components/form/__tests__/Select.test.ts +5 -2
  137. package/components/formatter/FleetApplicationSource.vue +1 -1
  138. package/components/formatter/WorkloadHealthScale.vue +1 -1
  139. package/components/google/AccountAccess.vue +211 -0
  140. package/components/google/types/gcp.d.ts +136 -0
  141. package/components/google/types/index.d.ts +101 -0
  142. package/components/google/util/__mocks__/gcp.ts +465 -0
  143. package/components/google/util/formatter.ts +82 -0
  144. package/components/google/util/gcp.ts +134 -0
  145. package/components/google/util/index.d.ts +11 -0
  146. package/components/nav/Favorite.vue +1 -1
  147. package/components/nav/Group.vue +70 -47
  148. package/components/nav/Header.vue +5 -1
  149. package/components/nav/NamespaceFilter.vue +13 -1
  150. package/components/nav/NotificationCenter/Notification.vue +510 -0
  151. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  152. package/components/nav/NotificationCenter/index.vue +148 -0
  153. package/composables/drawer.ts +26 -0
  154. package/composables/resources.test.ts +63 -0
  155. package/composables/resources.ts +38 -0
  156. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  157. package/config/labels-annotations.js +6 -0
  158. package/config/product/auth.js +16 -1
  159. package/config/product/{cis.js → compliance.js} +23 -26
  160. package/config/product/explorer.js +5 -1
  161. package/config/product/fleet.js +7 -0
  162. package/config/product/settings.js +22 -11
  163. package/config/query-params.js +3 -0
  164. package/config/roles.ts +1 -1
  165. package/config/router/navigation-guards/authentication.js +51 -2
  166. package/config/router/routes.js +27 -31
  167. package/config/settings.ts +21 -3
  168. package/config/store.js +2 -0
  169. package/config/system-namespaces.js +1 -1
  170. package/config/table-headers.js +2 -2
  171. package/config/types.js +15 -6
  172. package/core/plugin.ts +32 -7
  173. package/core/types.ts +18 -1
  174. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  175. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  176. package/detail/management.cattle.io.oidcclient.vue +369 -0
  177. package/detail/node.vue +2 -2
  178. package/detail/pod.vue +2 -2
  179. package/detail/service.vue +10 -1
  180. package/detail/workload/index.vue +8 -2
  181. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  182. package/dialog/GenericPrompt.vue +1 -1
  183. package/dialog/ImportDialog.vue +8 -8
  184. package/dialog/OidcClientSecretDialog.vue +117 -0
  185. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  186. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
  187. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  188. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  189. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  190. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  191. package/edit/configmap.vue +4 -1
  192. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  193. package/edit/fleet.cattle.io.gitrepo.vue +44 -222
  194. package/edit/fleet.cattle.io.helmop.vue +44 -269
  195. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  196. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  197. package/edit/logging-flow/index.vue +1 -0
  198. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  199. package/edit/management.cattle.io.fleetworkspace.vue +1 -0
  200. package/edit/management.cattle.io.oidcclient.vue +162 -0
  201. package/edit/management.cattle.io.project.vue +4 -1
  202. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  203. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  204. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  205. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  206. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  207. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  208. package/edit/monitoring.coreos.com.route.vue +1 -0
  209. package/edit/namespace.vue +1 -0
  210. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  211. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  212. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  213. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  214. package/edit/node.vue +1 -0
  215. package/edit/persistentvolume/index.vue +4 -1
  216. package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
  217. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
  218. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  219. package/edit/resources.cattle.io.restore.vue +1 -1
  220. package/edit/secret/index.vue +1 -0
  221. package/edit/service.vue +4 -1
  222. package/edit/serviceaccount.vue +4 -1
  223. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  224. package/edit/workload/index.vue +5 -0
  225. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  226. package/list/management.cattle.io.oidcclient.vue +108 -0
  227. package/list/node.vue +2 -0
  228. package/machine-config/amazonec2.vue +3 -24
  229. package/machine-config/components/GCEImage.vue +374 -0
  230. package/machine-config/google.vue +617 -0
  231. package/mixins/__tests__/brand.spec.ts +170 -0
  232. package/mixins/brand.js +16 -17
  233. package/mixins/create-edit-view/index.js +5 -0
  234. package/mixins/resource-fetch-api-pagination.js +16 -0
  235. package/mixins/vue-select-overrides.js +1 -0
  236. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  237. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  238. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  239. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  240. package/models/fleet-application.js +8 -79
  241. package/models/fleet.cattle.io.cluster.js +11 -0
  242. package/models/fleet.cattle.io.gitrepo.js +2 -2
  243. package/models/fleet.cattle.io.helmop.js +9 -39
  244. package/models/management.cattle.io.fleetworkspace.js +2 -1
  245. package/models/management.cattle.io.oidcclient.js +18 -0
  246. package/models/management.cattle.io.registration.js +3 -0
  247. package/models/provisioning.cattle.io.cluster.js +5 -5
  248. package/models/service.js +4 -0
  249. package/models/workload.js +5 -0
  250. package/package.json +1 -1
  251. package/pages/about.vue +4 -58
  252. package/pages/auth/login.vue +1 -1
  253. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
  254. package/pages/c/_cluster/apps/charts/index.vue +285 -81
  255. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  256. package/pages/c/_cluster/explorer/index.vue +3 -3
  257. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  258. package/pages/c/_cluster/fleet/application/create.vue +3 -2
  259. package/pages/c/_cluster/fleet/index.vue +94 -56
  260. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  261. package/pages/c/_cluster/longhorn/index.vue +5 -2
  262. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  263. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  264. package/pages/explorer/resource/detail/configmap.vue +30 -7
  265. package/pages/explorer/resource/detail/secret.vue +50 -0
  266. package/pages/home.vue +9 -55
  267. package/pages/support/index.vue +4 -6
  268. package/plugins/dashboard-store/actions.js +19 -5
  269. package/plugins/dashboard-store/getters.js +4 -0
  270. package/plugins/dashboard-store/resource-class.js +16 -2
  271. package/plugins/steve/steve-pagination-utils.ts +26 -18
  272. package/plugins/steve/subscribe.js +6 -1
  273. package/rancher-components/Banner/Banner.vue +13 -0
  274. package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
  275. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  276. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  277. package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
  278. package/store/auth.js +2 -0
  279. package/store/catalog.js +23 -1
  280. package/store/growl.js +97 -8
  281. package/store/index.js +6 -0
  282. package/store/notifications.ts +426 -0
  283. package/store/prefs.js +0 -1
  284. package/store/type-map.js +19 -16
  285. package/store/uiplugins.ts +15 -1
  286. package/types/fleet.d.ts +24 -0
  287. package/types/notifications/index.ts +74 -0
  288. package/types/shell/index.d.ts +46 -32
  289. package/types/store/dashboard-store.types.ts +16 -0
  290. package/utils/__tests__/fleet.test.ts +148 -0
  291. package/utils/__tests__/object.test.ts +54 -1
  292. package/utils/__tests__/string.test.ts +273 -1
  293. package/utils/__tests__/time.test.ts +31 -0
  294. package/utils/auth.js +9 -2
  295. package/utils/crypto/encryption.ts +103 -0
  296. package/utils/cspAdaptor.ts +51 -0
  297. package/utils/fleet.ts +54 -65
  298. package/utils/object.js +36 -0
  299. package/utils/pagination-utils.ts +1 -1
  300. package/utils/release-notes.ts +48 -0
  301. package/utils/selector-typed.ts +7 -2
  302. package/utils/string.js +24 -0
  303. package/utils/{time.js → time.ts} +25 -6
  304. package/utils/uiplugins.ts +22 -0
  305. package/utils/validators/formRules/index.ts +3 -0
  306. package/components/Resource/Detail/TitleBar/composable.ts +0 -31
  307. package/config/product/legacy.js +0 -62
  308. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  309. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  310. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  311. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
  312. /package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -0
@@ -177,91 +177,93 @@ onBeforeRouteUpdate((_to: unknown, _from: unknown) => {
177
177
  </script>
178
178
 
179
179
  <template>
180
- <div>
181
- <user-retention-header />
182
- <div
183
- v-if="!loading"
184
- class="form-user-retention"
185
- >
186
- <banner
187
- v-if="error"
188
- color="error"
180
+ <div class="user-retention">
181
+ <div class="user-retention-content">
182
+ <user-retention-header />
183
+ <div
184
+ v-if="!loading"
185
+ class="form-user-retention"
189
186
  >
190
- {{ error }}
191
- </banner>
192
- <div class="input-fieldset">
193
- <checkbox
194
- v-model:value="disableAfterPeriod"
195
- data-testid="disableAfterPeriod"
196
- :label="t('user.retention.edit.form.disableAfter.checkbox')"
197
- />
198
- <labeled-input
199
- v-model:value="userRetentionSettings[SETTING.DISABLE_INACTIVE_USER_AFTER]"
200
- data-testid="disableAfterPeriodInput"
201
- :tooltip="t('user.retention.edit.form.disableAfter.input.tooltip')"
202
- class="input-field"
203
- :label="t('user.retention.edit.form.disableAfter.input.label')"
204
- :disabled="!disableAfterPeriod"
205
- :rules="[validateDisableInactiveUserAfterDuration, validateDurationAgainstAuthUserSession]"
206
- @update:validation="e => setValidation(SETTING.DISABLE_INACTIVE_USER_AFTER, e)"
207
- />
208
- </div>
209
- <div class="input-fieldset">
210
- <checkbox
211
- v-model:value="deleteAfterPeriod"
212
- data-testid="deleteAfterPeriod"
213
- :label="t('user.retention.edit.form.deleteAfter.checkbox')"
214
- />
215
- <labeled-input
216
- v-model:value="userRetentionSettings[SETTING.DELETE_INACTIVE_USER_AFTER]"
217
- data-testid="deleteAfterPeriodInput"
218
- :tooltip="t('user.retention.edit.form.deleteAfter.input.tooltip')"
219
- class="input-field"
220
- :label="t('user.retention.edit.form.deleteAfter.input.label')"
221
- :sub-label="t('user.retention.edit.form.deleteAfter.input.subLabel')"
222
- :disabled="!deleteAfterPeriod"
223
- :rules="[validateDeleteInactiveUserAfterDuration, validateDurationAgainstAuthUserSession, validateDeleteInactiveUserAfter]"
224
- @update:validation="e => setValidation(SETTING.DELETE_INACTIVE_USER_AFTER, e)"
225
- />
226
- </div>
227
- <template
228
- v-if="disableAfterPeriod || deleteAfterPeriod"
229
- >
230
- <div class="input-fieldset pt-12">
187
+ <banner
188
+ v-if="error"
189
+ color="error"
190
+ >
191
+ {{ error }}
192
+ </banner>
193
+ <div class="input-fieldset">
194
+ <checkbox
195
+ v-model:value="disableAfterPeriod"
196
+ data-testid="disableAfterPeriod"
197
+ :label="t('user.retention.edit.form.disableAfter.checkbox')"
198
+ />
231
199
  <labeled-input
232
- v-model:value="userRetentionSettings[SETTING.USER_RETENTION_CRON]"
233
- data-testid="userRetentionCron"
200
+ v-model:value="userRetentionSettings[SETTING.DISABLE_INACTIVE_USER_AFTER]"
201
+ data-testid="disableAfterPeriodInput"
202
+ :tooltip="t('user.retention.edit.form.disableAfter.input.tooltip')"
234
203
  class="input-field"
235
- required
236
- type="cron"
237
- :tooltip="t('user.retention.edit.form.cron.subLabel')"
238
- :rules="[validateUserRetentionCron]"
239
- :label="t('user.retention.edit.form.cron.label')"
240
- :require-dirty="false"
241
- @update:validation="e => setValidation(SETTING.USER_RETENTION_CRON, e)"
204
+ :label="t('user.retention.edit.form.disableAfter.input.label')"
205
+ :disabled="!disableAfterPeriod"
206
+ :rules="[validateDisableInactiveUserAfterDuration, validateDurationAgainstAuthUserSession]"
207
+ @update:validation="e => setValidation(SETTING.DISABLE_INACTIVE_USER_AFTER, e)"
242
208
  />
243
209
  </div>
244
- <div class="input-fieldset condensed pt-12">
245
- <toggle-switch
246
- v-model:value="userRetentionSettings[SETTING.USER_RETENTION_DRY_RUN]"
247
- data-testid="userRetentionDryRun"
248
- :onValue="'true'"
249
- :offValue="'false'"
250
- :on-label="t('user.retention.edit.form.dryRun.label')"
210
+ <div class="input-fieldset">
211
+ <checkbox
212
+ v-model:value="deleteAfterPeriod"
213
+ data-testid="deleteAfterPeriod"
214
+ :label="t('user.retention.edit.form.deleteAfter.checkbox')"
251
215
  />
252
- <span class="input-detail">{{ t('user.retention.edit.form.dryRun.subLabel') }}</span>
253
- </div>
254
- <div class="input-fieldset condensed">
255
216
  <labeled-input
256
- v-model:value="userRetentionSettings[SETTING.USER_LAST_LOGIN_DEFAULT]"
257
- data-testid="userLastLoginDefault"
217
+ v-model:value="userRetentionSettings[SETTING.DELETE_INACTIVE_USER_AFTER]"
218
+ data-testid="deleteAfterPeriodInput"
219
+ :tooltip="t('user.retention.edit.form.deleteAfter.input.tooltip')"
258
220
  class="input-field"
259
- :label="t('user.retention.edit.form.defaultLastLogin.label')"
260
- :sub-label="t('user.retention.edit.form.defaultLastLogin.subLabel')"
261
- :placeholder="t('user.retention.edit.form.defaultLastLogin.placeholder')"
221
+ :label="t('user.retention.edit.form.deleteAfter.input.label')"
222
+ :sub-label="t('user.retention.edit.form.deleteAfter.input.subLabel')"
223
+ :disabled="!deleteAfterPeriod"
224
+ :rules="[validateDeleteInactiveUserAfterDuration, validateDurationAgainstAuthUserSession, validateDeleteInactiveUserAfter]"
225
+ @update:validation="e => setValidation(SETTING.DELETE_INACTIVE_USER_AFTER, e)"
262
226
  />
263
227
  </div>
264
- </template>
228
+ <template
229
+ v-if="disableAfterPeriod || deleteAfterPeriod"
230
+ >
231
+ <div class="input-fieldset pt-12">
232
+ <labeled-input
233
+ v-model:value="userRetentionSettings[SETTING.USER_RETENTION_CRON]"
234
+ data-testid="userRetentionCron"
235
+ class="input-field"
236
+ required
237
+ type="cron"
238
+ :tooltip="t('user.retention.edit.form.cron.subLabel')"
239
+ :rules="[validateUserRetentionCron]"
240
+ :label="t('user.retention.edit.form.cron.label')"
241
+ :require-dirty="false"
242
+ @update:validation="e => setValidation(SETTING.USER_RETENTION_CRON, e)"
243
+ />
244
+ </div>
245
+ <div class="input-fieldset condensed pt-12">
246
+ <toggle-switch
247
+ v-model:value="userRetentionSettings[SETTING.USER_RETENTION_DRY_RUN]"
248
+ data-testid="userRetentionDryRun"
249
+ :onValue="'true'"
250
+ :offValue="'false'"
251
+ :on-label="t('user.retention.edit.form.dryRun.label')"
252
+ />
253
+ <span class="input-detail">{{ t('user.retention.edit.form.dryRun.subLabel') }}</span>
254
+ </div>
255
+ <div class="input-fieldset condensed">
256
+ <labeled-input
257
+ v-model:value="userRetentionSettings[SETTING.USER_LAST_LOGIN_DEFAULT]"
258
+ data-testid="userLastLoginDefault"
259
+ class="input-field"
260
+ :label="t('user.retention.edit.form.defaultLastLogin.label')"
261
+ :sub-label="t('user.retention.edit.form.defaultLastLogin.subLabel')"
262
+ :placeholder="t('user.retention.edit.form.defaultLastLogin.placeholder')"
263
+ />
264
+ </div>
265
+ </template>
266
+ </div>
265
267
  </div>
266
268
  <Footer
267
269
  class="footer-user-retention"
@@ -274,6 +276,15 @@ onBeforeRouteUpdate((_to: unknown, _from: unknown) => {
274
276
  </template>
275
277
 
276
278
  <style lang="scss" scoped>
279
+ .user-retention {
280
+ height: 100%;
281
+ }
282
+
283
+ .user-retention-content {
284
+ height: 100%;
285
+ overflow-y: scroll;
286
+ }
287
+
277
288
  .form-user-retention {
278
289
  display: flex;
279
290
  flex: 1;
@@ -283,15 +294,13 @@ onBeforeRouteUpdate((_to: unknown, _from: unknown) => {
283
294
 
284
295
  .footer-user-retention {
285
296
  border-top: var(--header-border-size) solid var(--header-border);
286
- right: 0;
287
- position: sticky;
288
- bottom: 0;
289
297
  background-color: var(--header-bg);
290
298
  margin-left: -20px;
291
299
  margin-right: -20px;
292
300
  margin-bottom: -20px;
293
301
  margin-top: 20px;
294
302
  padding: 10px 20px;
303
+ height: $footer-height;
295
304
 
296
305
  :deep() .spacer-small {
297
306
  padding: 0;
@@ -833,7 +833,7 @@ export default {
833
833
  v-if="props.active"
834
834
  :detail-url="CLUSTER_METRICS_DETAIL_URL"
835
835
  :summary-url="CLUSTER_METRICS_SUMMARY_URL"
836
- graph-height="825px"
836
+ graph-height="875px"
837
837
  />
838
838
  </template>
839
839
  </Tab>
@@ -848,7 +848,7 @@ export default {
848
848
  v-if="props.active"
849
849
  :detail-url="K8S_METRICS_DETAIL_URL"
850
850
  :summary-url="K8S_METRICS_SUMMARY_URL"
851
- graph-height="550px"
851
+ graph-height="600px"
852
852
  />
853
853
  </template>
854
854
  </Tab>
@@ -864,7 +864,7 @@ export default {
864
864
  class="etcd-metrics"
865
865
  :detail-url="ETCD_METRICS_DETAIL_URL"
866
866
  :summary-url="ETCD_METRICS_SUMMARY_URL"
867
- graph-height="550px"
867
+ graph-height="600px"
868
868
  >
869
869
  <EtcdInfoBanner />
870
870
  </DashboardMetrics>
@@ -3,7 +3,6 @@ import EmberPage from '@shell/components/EmberPage';
3
3
 
4
4
  const PAGES = {
5
5
  monitoring: 'monitoring/cluster-setting',
6
- cis: 'cis/scan',
7
6
  istio: 'istio/cluster-setting',
8
7
  snapshots: 'backups',
9
8
  };
@@ -41,7 +41,7 @@ export default {
41
41
  id: type,
42
42
  label,
43
43
  description: `fleet.application.subTypes.'${ type }'.description`,
44
- icon: FleetUtils.resourceIcons[type],
44
+ icon: FleetUtils.dashboardIcons[type],
45
45
  disabled: !canCreate,
46
46
  tooltip: canCreate ? null : this.t('fleet.application.noPermissions', { label }, true),
47
47
  }
@@ -205,6 +205,7 @@ export default {
205
205
  width: 100%;
206
206
  flex-direction:row;
207
207
  align-content: baseline;
208
+ justify-content: space-between;
208
209
  }
209
210
  .subtype-content {
210
211
  width: 100%;
@@ -334,7 +335,7 @@ export default {
334
335
  .footer {
335
336
  display: flex;
336
337
  justify-content: flex-end;
337
- margin: 20px 10px 0 10px;
338
+ margin: auto 10px 0 10px;
338
339
  z-index: 19;
339
340
  }
340
341
  </style>
@@ -103,7 +103,6 @@ export default {
103
103
 
104
104
  data() {
105
105
  return {
106
- createRoute: { name: 'c-cluster-fleet-application-create' },
107
106
  permissions: {},
108
107
  FLEET,
109
108
  [FLEET.REPO]: [],
@@ -157,6 +156,10 @@ export default {
157
156
  return this.$store.getters['management/schemaFor'](FLEET.GIT_REPO);
158
157
  },
159
158
 
159
+ createRoute() {
160
+ return { name: 'c-cluster-fleet-application-create' };
161
+ },
162
+
160
163
  workspaces() {
161
164
  if (this.fleetWorkspaces?.length) {
162
165
  return this.fleetWorkspaces;
@@ -296,6 +299,15 @@ export default {
296
299
  this.cardsCount[workspace][state] = val;
297
300
  },
298
301
 
302
+ createResource(workspace) {
303
+ this.$store.dispatch('showWorkspaceSwitcher', true);
304
+
305
+ this.$nextTick(() => {
306
+ this.$store.commit('updateWorkspace', { value: workspace, getters: this.$store.getters });
307
+ this.$router.push(this.createRoute);
308
+ });
309
+ },
310
+
299
311
  showResourceDetails(value, statePanel, workspace, selected) {
300
312
  if (this.isClosingSlideInPanel) {
301
313
  return;
@@ -452,32 +464,38 @@ export default {
452
464
  </h1>
453
465
 
454
466
  <div class="dashboard-main-actions">
455
- <div :data-testid="'fleet-dashboard-expand-all'">
456
- <p
457
- v-if="allCardsExpanded"
458
- @click="toggleCardAll('collapse')"
459
- >
460
- {{ t('fleet.dashboard.collapseAll') }}
461
- </p>
462
- <p
463
- v-else
464
- @click="toggleCardAll('expand')"
465
- >
466
- {{ t('fleet.dashboard.expandAll') }}
467
- </p>
468
- </div>
469
467
  <ButtonGroup
470
468
  :data-testid="'view-button'"
471
469
  :value="viewMode"
472
470
  :options="viewModeOptions"
473
471
  @update:value="viewMode = $event"
474
472
  />
473
+ <RcButton
474
+ small
475
+ ghost
476
+ data-testid="fleet-dashboard-expand-all"
477
+ class="collapse-all-btn"
478
+ @click="toggleCardAll(allCardsExpanded ? 'collapse' : 'expand')"
479
+ >
480
+ <p class="ml-10">
481
+ {{ allCardsExpanded ? t('fleet.dashboard.collapseAll') : t('fleet.dashboard.expandAll') }}
482
+ </p>
483
+ <template #after>
484
+ <i
485
+ :class="{
486
+ ['icon icon-chevron-down']: !allCardsExpanded,
487
+ ['icon icon-chevron-up']: allCardsExpanded,
488
+ }"
489
+ aria-hidden="true"
490
+ />
491
+ </template>
492
+ </RcButton>
475
493
  </div>
476
494
  </div>
477
495
  <div
478
496
  v-for="(workspace, i) in workspaces"
479
497
  :key="i"
480
- class="card-container m-0 mt-20"
498
+ class="workspace-card-container m-0 mt-20"
481
499
  :data-testid="`fleet-dashboard-workspace-card-${ workspace.id }`"
482
500
  :show-actions="false"
483
501
  :show-separator="false"
@@ -488,11 +506,11 @@ export default {
488
506
  class="card-panel-main-details"
489
507
  :class="{ expand: !isWorkspaceCollapsed[workspace.id] }"
490
508
  >
491
- <div class="title">
492
- <h3 class="label label-secondary">
509
+ <h2 class="workspace-title">
510
+ <span class="workspace-label label-secondary">
493
511
  <i class="icon icon-folder" />
494
512
  <span>{{ t('fleet.dashboard.workspace') }} : &nbsp;</span>
495
- </h3>
513
+ </span>
496
514
  <router-link
497
515
  class="name"
498
516
  role="link"
@@ -502,7 +520,7 @@ export default {
502
520
  >
503
521
  {{ workspace.nameDisplay }}
504
522
  </router-link>
505
- </div>
523
+ </h2>
506
524
  <div class="body">
507
525
  <ResourcePanel
508
526
  v-if="workspace.repos?.length || workspace.helmOps?.length"
@@ -546,9 +564,10 @@ export default {
546
564
  >
547
565
  <i
548
566
  :class="{
549
- ['icon icon-lg icon-chevron-right']: isWorkspaceCollapsed[workspace.id],
550
- ['icon icon-lg icon-chevron-down']: !isWorkspaceCollapsed[workspace.id],
567
+ ['icon icon-lg icon-chevron-down']: isWorkspaceCollapsed[workspace.id],
568
+ ['icon icon-lg icon-chevron-up']: !isWorkspaceCollapsed[workspace.id],
551
569
  }"
570
+ aria-hidden="true"
552
571
  />
553
572
  </RcButton>
554
573
  </div>
@@ -586,12 +605,12 @@ export default {
586
605
  v-if="permissions.gitRepos || permissions.helmOps"
587
606
  class="create-button"
588
607
  >
589
- <router-link
590
- :to="createRoute"
591
- class="btn role-primary"
608
+ <RcButton
609
+ small
610
+ @click="createResource(workspace.id)"
592
611
  >
593
612
  {{ t('fleet.application.intro.add') }}
594
- </router-link>
613
+ </RcButton>
595
614
  </div>
596
615
  </div>
597
616
  <div
@@ -623,16 +642,19 @@ export default {
623
642
  />
624
643
  <i
625
644
  v-if="state.statePanel.id !== 'success'"
626
- class="ml-5 state-icon"
645
+ class="state-icon"
627
646
  :class="state.statePanel.icon"
628
647
  :style="{ color: state.statePanel.color }"
629
648
  />
630
- <div class="label">
631
- <span class="partial">
632
- {{ state.stateDisplay }}&nbsp;&nbsp;{{ cardResources[workspace.id]?.[state.stateDisplay]?.length }}
649
+ <h3 class="state-title">
650
+ <span class="state-label">
651
+ {{ state.stateDisplay }}
652
+ </span>
653
+ <span class="state-amount">
654
+ {{ cardResources[workspace.id]?.[state.stateDisplay]?.length }}
633
655
  </span>
634
656
  <span class="total label-secondary">/{{ [ ...workspace.repos, ...workspace.helmOps ].length }}</span>
635
- </div>
657
+ </h3>
636
658
  </div>
637
659
  <div
638
660
  v-if="!isStateCollapsed[workspace.id]?.[state.stateDisplay]"
@@ -707,7 +729,11 @@ export default {
707
729
  display: flex;
708
730
  align-items: center;
709
731
  justify-content: end;
710
- gap: 15px;
732
+ gap: 16px;
733
+
734
+ .collapse-all-btn {
735
+ width: 105px;
736
+ }
711
737
  }
712
738
 
713
739
  .dashboard-header {
@@ -729,7 +755,7 @@ export default {
729
755
  }
730
756
  }
731
757
 
732
- .card-container {
758
+ .workspace-card-container {
733
759
  display: flex;
734
760
  flex-direction: column;
735
761
  border: 1px solid var(--border);
@@ -754,30 +780,34 @@ export default {
754
780
  display: flex;
755
781
  align-items: center;
756
782
 
757
- .title {
758
- margin: 0 20px 0 0;
759
-
760
- .name {
761
- font-size: 25px;
762
- }
783
+ .workspace-title {
784
+ min-width: 150px;
785
+ margin: 0 32px 0 0;
786
+ display: flex;
787
+ flex-direction: column;
763
788
 
764
- .label {
789
+ .workspace-label {
790
+ font-size: 16px;
791
+ font-weight: normal;
765
792
  display: flex;
766
793
  align-items: center;
767
- min-width: 150px;
768
- margin: 0 0 5px 0;
794
+ margin: 0 0 2px 0;
769
795
 
770
796
  .icon {
771
797
  margin-right: 5px;
772
798
  }
773
799
  }
800
+
801
+ .name {
802
+ font-size: 21px;
803
+ }
774
804
  }
775
805
 
776
806
  .body {
777
807
  display: flex;
778
808
  justify-content: flex-start;
779
809
  flex-wrap: wrap;
780
- gap: 15px;
810
+ gap: 24px;
781
811
 
782
812
  .spacer {
783
813
  border-left: 1px solid var(--border);
@@ -836,28 +866,40 @@ export default {
836
866
 
837
867
  .cards-panel {
838
868
  .card-panel {
839
- margin-top: 32px;
869
+ margin-top: 24px;
840
870
 
841
871
  .title {
842
872
  display: flex;
843
873
  align-items: center;
844
874
  cursor: pointer;
845
875
  width: fit-content;
846
- margin-bottom: 16px;
876
+ margin-bottom: 12px;
847
877
 
848
878
  .icon {
849
- margin-right: 5px;
879
+ margin-right: 8px;
880
+ }
881
+
882
+ .state-icon,
883
+ .state-title {
884
+ font-size: 21px;
885
+ }
886
+
887
+ .state-icon {
888
+ margin-top: 1px;
850
889
  }
851
890
 
852
- .label {
891
+ .state-title {
853
892
  display: flex;
854
893
  align-items: baseline;
855
- margin-left: 2px;
894
+ margin: 0;
856
895
 
857
- .partial {
858
- margin: 0;
859
- margin-right: 2px;
860
- font-size: 22px;
896
+ .state-amount {
897
+ margin-left: 4px
898
+ }
899
+
900
+ .total {
901
+ margin-left: 4px;
902
+ font-size: 16px;
861
903
  }
862
904
 
863
905
  p {
@@ -868,10 +910,6 @@ export default {
868
910
  }
869
911
  }
870
912
  }
871
-
872
- .state-icon {
873
- font-size: 1.75em;
874
- }
875
913
  }
876
914
 
877
915
  .card-panel-body {