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

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 (361) 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/base/_variables.scss +17 -11
  5. package/assets/styles/global/_form.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +1 -1
  7. package/assets/styles/themes/_dark.scss +5 -0
  8. package/assets/styles/themes/_light.scss +11 -2
  9. package/assets/styles/vendor/vue-select.scss +1 -1
  10. package/assets/translations/en-us.yaml +426 -64
  11. package/assets/translations/zh-hans.yaml +3 -4
  12. package/cloud-credential/gcp.vue +9 -1
  13. package/components/AppModal.vue +2 -0
  14. package/components/CodeMirror.vue +2 -2
  15. package/components/ConfigMapSettings/Settings.vue +377 -0
  16. package/components/ConfigMapSettings/index.vue +354 -0
  17. package/components/CruResource.vue +1 -2
  18. package/components/DetailText.vue +61 -11
  19. package/components/Drawer/Chrome.vue +115 -0
  20. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  21. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  22. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  23. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  24. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
  25. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  26. package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
  27. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  28. package/components/Drawer/ResourceDetailDrawer/index.vue +111 -0
  29. package/components/GrowlManager.vue +16 -15
  30. package/components/IconOrSvg.vue +5 -0
  31. package/components/KeyValueView.vue +1 -1
  32. package/components/Loading.vue +1 -1
  33. package/components/LocaleSelector.vue +9 -1
  34. package/components/PaginatedResourceTable.vue +46 -1
  35. package/components/ProgressBarMulti.vue +1 -0
  36. package/components/PromptModal.vue +6 -1
  37. package/components/PromptRestore.vue +22 -44
  38. package/components/RelatedResources.vue +4 -12
  39. package/components/Resource/Detail/Additional.vue +46 -0
  40. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
  41. package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
  42. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  43. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +47 -256
  44. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
  45. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +34 -5
  46. package/components/Resource/Detail/Metadata/KeyValue.vue +32 -22
  47. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
  48. package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
  49. package/components/Resource/Detail/Metadata/Rectangle.vue +3 -1
  50. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
  51. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
  52. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  53. package/components/Resource/Detail/Metadata/composables.ts +60 -11
  54. package/components/Resource/Detail/Metadata/index.vue +12 -5
  55. package/components/Resource/Detail/Page.vue +15 -0
  56. package/components/Resource/Detail/ResourceRow.vue +37 -18
  57. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  58. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  59. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  60. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  61. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  62. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  63. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  64. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  65. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  66. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  67. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  68. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  69. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  70. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  71. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  72. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  73. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  74. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  75. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  76. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  77. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  78. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  79. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  80. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  81. package/components/Resource/Detail/SpacedRow.vue +1 -1
  82. package/components/Resource/Detail/TitleBar/Title.vue +2 -1
  83. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
  84. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
  85. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  86. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
  87. package/components/Resource/Detail/TitleBar/composables.ts +45 -0
  88. package/components/Resource/Detail/TitleBar/index.vue +85 -13
  89. package/components/Resource/Detail/composables.ts +45 -0
  90. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  91. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  92. package/components/ResourceDetail/Masthead/index.vue +65 -0
  93. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  94. package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +1 -1
  95. package/components/ResourceDetail/__tests__/index.test.ts +26 -5
  96. package/components/ResourceDetail/index.vue +33 -17
  97. package/components/ResourceDetail/legacy.vue +18 -1
  98. package/components/ResourceList/Masthead.vue +6 -0
  99. package/components/ResourceList/index.vue +1 -0
  100. package/components/ResourceTable.vue +6 -1
  101. package/components/ResourceYaml.vue +15 -2
  102. package/components/RichTranslation.vue +106 -0
  103. package/components/SlideInPanelManager.vue +46 -11
  104. package/components/SortableTable/index.vue +1 -1
  105. package/components/SortableTable/selection.js +0 -1
  106. package/components/StateDot/index.vue +28 -0
  107. package/components/Tabbed/index.vue +17 -16
  108. package/components/Wizard.vue +4 -2
  109. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  110. package/components/__tests__/GrowlManager.test.ts +0 -25
  111. package/components/__tests__/PromptRestore.test.ts +1 -65
  112. package/components/__tests__/RichTranslation.test.ts +115 -0
  113. package/components/auth/login/ldap.vue +1 -1
  114. package/components/fleet/FleetApplications.vue +0 -7
  115. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  116. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  117. package/components/fleet/FleetClusters.vue +25 -6
  118. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  119. package/components/fleet/FleetHelmOps.vue +8 -0
  120. package/components/fleet/FleetRepos.vue +1 -6
  121. package/components/fleet/FleetResources.vue +4 -5
  122. package/components/fleet/FleetValuesFrom.vue +295 -0
  123. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  124. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  125. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
  126. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  127. package/components/fleet/dashboard/ResourceCard.vue +1 -0
  128. package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
  129. package/components/fleet/dashboard/ResourceDetails.vue +8 -10
  130. package/components/fleet/dashboard/ResourcePanel.vue +17 -9
  131. package/components/form/ArrayList.vue +13 -2
  132. package/components/form/ChangePassword.vue +3 -1
  133. package/components/form/FileImageSelector.vue +1 -1
  134. package/components/form/Footer.vue +10 -4
  135. package/components/form/KeyValue.vue +81 -43
  136. package/components/form/LabeledSelect.vue +56 -16
  137. package/components/form/Labels.vue +90 -17
  138. package/components/form/MatchExpressions.vue +46 -5
  139. package/components/form/NameNsDescription.vue +2 -1
  140. package/components/form/Networking.vue +24 -19
  141. package/components/form/ResourceLabeledSelect.vue +4 -3
  142. package/components/form/ResourceSelector.vue +1 -0
  143. package/components/form/ResourceTabs/index.vue +5 -0
  144. package/components/form/SecretSelector.vue +9 -2
  145. package/components/form/Select.vue +57 -19
  146. package/components/form/SelectOrCreateAuthSecret.vue +6 -3
  147. package/components/form/SimpleSecretSelector.vue +9 -2
  148. package/components/form/Taints.vue +21 -2
  149. package/components/form/UnitInput.vue +8 -0
  150. package/components/form/ValueFromResource.vue +1 -1
  151. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  152. package/components/form/__tests__/Labels.test.ts +360 -0
  153. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  154. package/components/form/__tests__/Networking.test.ts +116 -0
  155. package/components/form/__tests__/Select.test.ts +5 -2
  156. package/components/formatter/FleetApplicationSource.vue +1 -1
  157. package/components/formatter/PodImages.vue +1 -1
  158. package/components/formatter/WorkloadHealthScale.vue +1 -1
  159. package/components/formatter/__tests__/LiveDate.test.ts +10 -2
  160. package/components/google/AccountAccess.vue +209 -0
  161. package/components/google/types/gcp.d.ts +136 -0
  162. package/components/google/types/index.d.ts +101 -0
  163. package/components/google/util/__mocks__/gcp.ts +465 -0
  164. package/components/google/util/formatter.ts +82 -0
  165. package/components/google/util/gcp.ts +134 -0
  166. package/components/google/util/index.d.ts +11 -0
  167. package/components/nav/Favorite.vue +1 -1
  168. package/components/nav/Group.vue +71 -45
  169. package/components/nav/Header.vue +5 -1
  170. package/components/nav/NamespaceFilter.vue +13 -1
  171. package/components/nav/NotificationCenter/Notification.vue +510 -0
  172. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  173. package/components/nav/NotificationCenter/index.vue +148 -0
  174. package/composables/drawer.ts +26 -0
  175. package/composables/resources.test.ts +63 -0
  176. package/composables/resources.ts +38 -0
  177. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  178. package/config/labels-annotations.js +8 -0
  179. package/config/pagination-table-headers.js +8 -1
  180. package/config/product/auth.js +16 -1
  181. package/config/product/{cis.js → compliance.js} +23 -26
  182. package/config/product/explorer.js +32 -3
  183. package/config/product/fleet.js +7 -0
  184. package/config/product/manager.js +0 -1
  185. package/config/product/settings.js +22 -11
  186. package/config/query-params.js +13 -0
  187. package/config/roles.ts +1 -1
  188. package/config/router/navigation-guards/authentication.js +51 -2
  189. package/config/router/routes.js +47 -31
  190. package/config/settings.ts +21 -3
  191. package/config/store.js +2 -0
  192. package/config/system-namespaces.js +1 -1
  193. package/config/table-headers.js +32 -3
  194. package/config/types.js +16 -7
  195. package/config/version.js +1 -1
  196. package/core/plugin.ts +32 -7
  197. package/core/types.ts +18 -1
  198. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  199. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  200. package/detail/management.cattle.io.oidcclient.vue +369 -0
  201. package/detail/node.vue +2 -2
  202. package/detail/pod.vue +2 -2
  203. package/detail/provisioning.cattle.io.cluster.vue +3 -47
  204. package/detail/service.vue +10 -1
  205. package/detail/workload/index.vue +8 -2
  206. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  207. package/dialog/GenericPrompt.vue +1 -1
  208. package/dialog/ImportDialog.vue +8 -8
  209. package/dialog/OidcClientSecretDialog.vue +117 -0
  210. package/dialog/RotateEncryptionKeyDialog.vue +10 -30
  211. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  212. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
  213. package/edit/auth/ldap/__tests__/config.test.ts +14 -0
  214. package/edit/auth/ldap/config.vue +24 -0
  215. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  216. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  217. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  218. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  219. package/edit/configmap.vue +8 -2
  220. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  221. package/edit/fleet.cattle.io.gitrepo.vue +44 -222
  222. package/edit/fleet.cattle.io.helmop.vue +44 -269
  223. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  224. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  225. package/edit/logging-flow/index.vue +1 -0
  226. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  227. package/edit/management.cattle.io.fleetworkspace.vue +1 -0
  228. package/edit/management.cattle.io.oidcclient.vue +162 -0
  229. package/edit/management.cattle.io.project.vue +4 -1
  230. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  231. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  232. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  233. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  234. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  235. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  236. package/edit/monitoring.coreos.com.route.vue +1 -0
  237. package/edit/namespace.vue +1 -0
  238. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  239. package/edit/networking.k8s.io.ingress/Certificate.vue +12 -12
  240. package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +165 -0
  241. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  242. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  243. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  244. package/edit/node.vue +1 -0
  245. package/edit/persistentvolume/index.vue +4 -1
  246. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +3 -2
  247. package/edit/provisioning.cattle.io.cluster/rke2.vue +516 -426
  248. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +48 -39
  249. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  250. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
  251. package/edit/resources.cattle.io.restore.vue +1 -1
  252. package/edit/secret/basic.vue +1 -0
  253. package/edit/secret/index.vue +127 -15
  254. package/edit/service.vue +4 -1
  255. package/edit/serviceaccount.vue +4 -1
  256. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  257. package/edit/workload/index.vue +5 -0
  258. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  259. package/list/management.cattle.io.oidcclient.vue +108 -0
  260. package/list/node.vue +2 -0
  261. package/list/projectsecret.vue +345 -0
  262. package/list/secret.vue +109 -0
  263. package/machine-config/amazonec2.vue +3 -24
  264. package/machine-config/components/GCEImage.vue +374 -0
  265. package/machine-config/google.vue +617 -0
  266. package/mixins/__tests__/brand.spec.ts +170 -0
  267. package/mixins/brand.js +16 -17
  268. package/mixins/create-edit-view/impl.js +10 -1
  269. package/mixins/create-edit-view/index.js +5 -0
  270. package/mixins/resource-fetch-api-pagination.js +24 -8
  271. package/mixins/resource-fetch.js +3 -1
  272. package/mixins/vue-select-overrides.js +1 -0
  273. package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
  274. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  275. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  276. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  277. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  278. package/models/fleet-application.js +8 -79
  279. package/models/fleet.cattle.io.cluster.js +13 -2
  280. package/models/fleet.cattle.io.gitrepo.js +2 -2
  281. package/models/fleet.cattle.io.helmop.js +9 -39
  282. package/models/management.cattle.io.fleetworkspace.js +2 -1
  283. package/models/management.cattle.io.oidcclient.js +18 -0
  284. package/models/management.cattle.io.registration.js +3 -0
  285. package/models/provisioning.cattle.io.cluster.js +29 -33
  286. package/models/secret.js +157 -2
  287. package/models/service.js +4 -0
  288. package/models/workload.js +5 -0
  289. package/package.json +2 -2
  290. package/pages/about.vue +4 -58
  291. package/pages/auth/login.vue +1 -1
  292. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
  293. package/pages/c/_cluster/apps/charts/index.vue +296 -81
  294. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  295. package/pages/c/_cluster/explorer/index.vue +3 -3
  296. package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
  297. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  298. package/pages/c/_cluster/fleet/application/create.vue +3 -2
  299. package/pages/c/_cluster/fleet/index.vue +94 -57
  300. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  301. package/pages/c/_cluster/longhorn/index.vue +5 -2
  302. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  303. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  304. package/pages/explorer/resource/detail/configmap.vue +30 -7
  305. package/pages/explorer/resource/detail/projectsecret.vue +9 -0
  306. package/pages/explorer/resource/detail/secret.vue +63 -0
  307. package/pages/home.vue +9 -55
  308. package/pages/support/index.vue +4 -6
  309. package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
  310. package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
  311. package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
  312. package/plugins/dashboard-store/actions.js +19 -5
  313. package/plugins/dashboard-store/getters.js +4 -0
  314. package/plugins/dashboard-store/normalize.js +29 -17
  315. package/plugins/dashboard-store/resource-class.js +68 -19
  316. package/plugins/steve/steve-pagination-utils.ts +38 -19
  317. package/plugins/steve/subscribe.js +6 -1
  318. package/rancher-components/Banner/Banner.vue +13 -0
  319. package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
  320. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  321. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  322. package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
  323. package/store/auth.js +2 -0
  324. package/store/catalog.js +23 -1
  325. package/store/growl.js +97 -8
  326. package/store/index.js +6 -0
  327. package/store/notifications.ts +426 -0
  328. package/store/prefs.js +0 -1
  329. package/store/type-map.js +19 -16
  330. package/store/uiplugins.ts +15 -1
  331. package/types/fleet.d.ts +24 -0
  332. package/types/kube/kube-api.ts +12 -0
  333. package/types/notifications/index.ts +74 -0
  334. package/types/shell/index.d.ts +661 -589
  335. package/types/store/dashboard-store.types.ts +16 -0
  336. package/types/store/pagination.types.ts +16 -6
  337. package/utils/__tests__/create-yaml.test.ts +235 -0
  338. package/utils/__tests__/fleet.test.ts +148 -0
  339. package/utils/__tests__/object.test.ts +54 -1
  340. package/utils/__tests__/string.test.ts +273 -1
  341. package/utils/__tests__/time.test.ts +31 -0
  342. package/utils/auth.js +9 -2
  343. package/utils/create-yaml.js +103 -9
  344. package/utils/crypto/encryption.ts +103 -0
  345. package/utils/cspAdaptor.ts +51 -0
  346. package/utils/fleet.ts +54 -65
  347. package/utils/object.js +36 -0
  348. package/utils/pagination-utils.ts +19 -1
  349. package/utils/release-notes.ts +48 -0
  350. package/utils/selector-typed.ts +7 -2
  351. package/utils/string.js +24 -0
  352. package/utils/{time.js → time.ts} +25 -6
  353. package/utils/uiplugins.ts +22 -0
  354. package/utils/validators/formRules/index.ts +3 -0
  355. package/components/Resource/Detail/TitleBar/composable.ts +0 -31
  356. package/config/product/legacy.js +0 -62
  357. package/models/etcdbackup.js +0 -45
  358. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  359. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  360. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  361. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
@@ -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>
@@ -0,0 +1,34 @@
1
+ <script>
2
+ import ResourceDetail from '@shell/components/ResourceDetail';
3
+ import { _CLONE, _EDIT, MODE } from '@shell/config/query-params';
4
+ import { SECRET, VIRTUAL_TYPES } from '@shell/config/types';
5
+ import { STORE } from '@shell/store/store-types';
6
+
7
+ export default {
8
+ name: 'ProjectSecretsPage',
9
+ components: { ResourceDetail },
10
+ data() {
11
+ return { STORE: STORE.MANAGEMENT };
12
+ },
13
+ computed: {
14
+ // Because we want to use the normal secret for editing and we want to use the project_secret for detail we had to change the override based on mode
15
+ resourceOverride() {
16
+ const isEdit = [_EDIT, _CLONE].includes(this.$route.query[MODE]);
17
+
18
+ return isEdit ? SECRET : VIRTUAL_TYPES.PROJECT_SECRETS;
19
+ }
20
+ }
21
+
22
+ };
23
+ </script>
24
+
25
+ <template>
26
+ <!-- resourceOverride - used in both new and old resource details -->
27
+ <!-- storeOverride - used in old resource details (specifically edit) -->
28
+ <!-- v-bind="$attrs" - removes issues with `class` being passed through -->
29
+ <ResourceDetail
30
+ v-bind="$attrs"
31
+ :resourceOverride="resourceOverride"
32
+ :storeOverride="STORE"
33
+ />
34
+ </template>
@@ -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;
@@ -311,7 +323,6 @@ export default {
311
323
  workspace,
312
324
  showHeader: false,
313
325
  width: window.innerWidth / 3 > 530 ? `${ window.innerWidth / 3 }px` : '530px',
314
- zIndex: 1,
315
326
  triggerFocusTrap: true,
316
327
  returnFocusSelector: `[data-testid="resource-card-${ value.id }"]`
317
328
  }
@@ -452,32 +463,38 @@ export default {
452
463
  </h1>
453
464
 
454
465
  <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
466
  <ButtonGroup
470
467
  :data-testid="'view-button'"
471
468
  :value="viewMode"
472
469
  :options="viewModeOptions"
473
470
  @update:value="viewMode = $event"
474
471
  />
472
+ <RcButton
473
+ small
474
+ ghost
475
+ data-testid="fleet-dashboard-expand-all"
476
+ class="collapse-all-btn"
477
+ @click="toggleCardAll(allCardsExpanded ? 'collapse' : 'expand')"
478
+ >
479
+ <p class="ml-10">
480
+ {{ allCardsExpanded ? t('fleet.dashboard.collapseAll') : t('fleet.dashboard.expandAll') }}
481
+ </p>
482
+ <template #after>
483
+ <i
484
+ :class="{
485
+ ['icon icon-chevron-down']: !allCardsExpanded,
486
+ ['icon icon-chevron-up']: allCardsExpanded,
487
+ }"
488
+ aria-hidden="true"
489
+ />
490
+ </template>
491
+ </RcButton>
475
492
  </div>
476
493
  </div>
477
494
  <div
478
495
  v-for="(workspace, i) in workspaces"
479
496
  :key="i"
480
- class="card-container m-0 mt-20"
497
+ class="workspace-card-container m-0 mt-20"
481
498
  :data-testid="`fleet-dashboard-workspace-card-${ workspace.id }`"
482
499
  :show-actions="false"
483
500
  :show-separator="false"
@@ -488,11 +505,11 @@ export default {
488
505
  class="card-panel-main-details"
489
506
  :class="{ expand: !isWorkspaceCollapsed[workspace.id] }"
490
507
  >
491
- <div class="title">
492
- <h3 class="label label-secondary">
508
+ <h2 class="workspace-title">
509
+ <span class="workspace-label label-secondary">
493
510
  <i class="icon icon-folder" />
494
511
  <span>{{ t('fleet.dashboard.workspace') }} : &nbsp;</span>
495
- </h3>
512
+ </span>
496
513
  <router-link
497
514
  class="name"
498
515
  role="link"
@@ -502,7 +519,7 @@ export default {
502
519
  >
503
520
  {{ workspace.nameDisplay }}
504
521
  </router-link>
505
- </div>
522
+ </h2>
506
523
  <div class="body">
507
524
  <ResourcePanel
508
525
  v-if="workspace.repos?.length || workspace.helmOps?.length"
@@ -546,9 +563,10 @@ export default {
546
563
  >
547
564
  <i
548
565
  :class="{
549
- ['icon icon-lg icon-chevron-right']: isWorkspaceCollapsed[workspace.id],
550
- ['icon icon-lg icon-chevron-down']: !isWorkspaceCollapsed[workspace.id],
566
+ ['icon icon-lg icon-chevron-down']: isWorkspaceCollapsed[workspace.id],
567
+ ['icon icon-lg icon-chevron-up']: !isWorkspaceCollapsed[workspace.id],
551
568
  }"
569
+ aria-hidden="true"
552
570
  />
553
571
  </RcButton>
554
572
  </div>
@@ -586,12 +604,12 @@ export default {
586
604
  v-if="permissions.gitRepos || permissions.helmOps"
587
605
  class="create-button"
588
606
  >
589
- <router-link
590
- :to="createRoute"
591
- class="btn role-primary"
607
+ <RcButton
608
+ small
609
+ @click="createResource(workspace.id)"
592
610
  >
593
611
  {{ t('fleet.application.intro.add') }}
594
- </router-link>
612
+ </RcButton>
595
613
  </div>
596
614
  </div>
597
615
  <div
@@ -623,16 +641,19 @@ export default {
623
641
  />
624
642
  <i
625
643
  v-if="state.statePanel.id !== 'success'"
626
- class="ml-5 state-icon"
644
+ class="state-icon"
627
645
  :class="state.statePanel.icon"
628
646
  :style="{ color: state.statePanel.color }"
629
647
  />
630
- <div class="label">
631
- <span class="partial">
632
- {{ state.stateDisplay }}&nbsp;&nbsp;{{ cardResources[workspace.id]?.[state.stateDisplay]?.length }}
648
+ <h3 class="state-title">
649
+ <span class="state-label">
650
+ {{ state.stateDisplay }}
651
+ </span>
652
+ <span class="state-amount">
653
+ {{ cardResources[workspace.id]?.[state.stateDisplay]?.length }}
633
654
  </span>
634
655
  <span class="total label-secondary">/{{ [ ...workspace.repos, ...workspace.helmOps ].length }}</span>
635
- </div>
656
+ </h3>
636
657
  </div>
637
658
  <div
638
659
  v-if="!isStateCollapsed[workspace.id]?.[state.stateDisplay]"
@@ -707,7 +728,11 @@ export default {
707
728
  display: flex;
708
729
  align-items: center;
709
730
  justify-content: end;
710
- gap: 15px;
731
+ gap: 16px;
732
+
733
+ .collapse-all-btn {
734
+ width: 105px;
735
+ }
711
736
  }
712
737
 
713
738
  .dashboard-header {
@@ -729,7 +754,7 @@ export default {
729
754
  }
730
755
  }
731
756
 
732
- .card-container {
757
+ .workspace-card-container {
733
758
  display: flex;
734
759
  flex-direction: column;
735
760
  border: 1px solid var(--border);
@@ -754,30 +779,34 @@ export default {
754
779
  display: flex;
755
780
  align-items: center;
756
781
 
757
- .title {
758
- margin: 0 20px 0 0;
759
-
760
- .name {
761
- font-size: 25px;
762
- }
782
+ .workspace-title {
783
+ min-width: 150px;
784
+ margin: 0 32px 0 0;
785
+ display: flex;
786
+ flex-direction: column;
763
787
 
764
- .label {
788
+ .workspace-label {
789
+ font-size: 16px;
790
+ font-weight: normal;
765
791
  display: flex;
766
792
  align-items: center;
767
- min-width: 150px;
768
- margin: 0 0 5px 0;
793
+ margin: 0 0 2px 0;
769
794
 
770
795
  .icon {
771
796
  margin-right: 5px;
772
797
  }
773
798
  }
799
+
800
+ .name {
801
+ font-size: 21px;
802
+ }
774
803
  }
775
804
 
776
805
  .body {
777
806
  display: flex;
778
807
  justify-content: flex-start;
779
808
  flex-wrap: wrap;
780
- gap: 15px;
809
+ gap: 24px;
781
810
 
782
811
  .spacer {
783
812
  border-left: 1px solid var(--border);
@@ -836,28 +865,40 @@ export default {
836
865
 
837
866
  .cards-panel {
838
867
  .card-panel {
839
- margin-top: 32px;
868
+ margin-top: 24px;
840
869
 
841
870
  .title {
842
871
  display: flex;
843
872
  align-items: center;
844
873
  cursor: pointer;
845
874
  width: fit-content;
846
- margin-bottom: 16px;
875
+ margin-bottom: 12px;
847
876
 
848
877
  .icon {
849
- margin-right: 5px;
878
+ margin-right: 8px;
879
+ }
880
+
881
+ .state-icon,
882
+ .state-title {
883
+ font-size: 21px;
884
+ }
885
+
886
+ .state-icon {
887
+ margin-top: 1px;
850
888
  }
851
889
 
852
- .label {
890
+ .state-title {
853
891
  display: flex;
854
892
  align-items: baseline;
855
- margin-left: 2px;
893
+ margin: 0;
856
894
 
857
- .partial {
858
- margin: 0;
859
- margin-right: 2px;
860
- font-size: 22px;
895
+ .state-amount {
896
+ margin-left: 4px
897
+ }
898
+
899
+ .total {
900
+ margin-left: 4px;
901
+ font-size: 16px;
861
902
  }
862
903
 
863
904
  p {
@@ -868,10 +909,6 @@ export default {
868
909
  }
869
910
  }
870
911
  }
871
-
872
- .state-icon {
873
- font-size: 1.75em;
874
- }
875
912
  }
876
913
 
877
914
  .card-panel-body {