@rancher/shell 3.0.12-rc.1 → 3.0.12-rc.3

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 (376) hide show
  1. package/apis/impl/apis.ts +6 -0
  2. package/apis/index.ts +26 -0
  3. package/apis/intf/resources-api/cluster-api.ts +18 -0
  4. package/apis/intf/resources-api/mgmt-api.ts +15 -0
  5. package/apis/intf/resources-api/resource-base.ts +107 -0
  6. package/apis/intf/resources-api/resource-constants.ts +147 -0
  7. package/apis/intf/resources-api/resources-api.ts +143 -0
  8. package/apis/intf/resources.ts +49 -0
  9. package/apis/intf/{modal.ts → shell-api/modal.ts} +21 -26
  10. package/apis/intf/shell-api/proxy.ts +216 -0
  11. package/apis/intf/{slide-in.ts → shell-api/slide-in.ts} +4 -3
  12. package/apis/intf/{system.ts → shell-api/system.ts} +4 -1
  13. package/apis/intf/shell.ts +12 -6
  14. package/apis/resources/__tests__/resources-api-class.test.ts +550 -0
  15. package/apis/resources/index.ts +22 -0
  16. package/apis/resources/resources-api-class.ts +187 -0
  17. package/apis/shell/__tests__/proxy.test.ts +369 -0
  18. package/apis/shell/index.ts +8 -1
  19. package/apis/shell/modal.ts +4 -1
  20. package/apis/shell/notifications.ts +9 -6
  21. package/apis/shell/proxy.ts +256 -0
  22. package/apis/shell/slide-in.ts +4 -1
  23. package/apis/vue-shim.d.ts +2 -1
  24. package/assets/data/aws-regions.json +4 -0
  25. package/assets/fonts/lato/LatoLatin-Black.woff +0 -0
  26. package/assets/fonts/lato/LatoLatin-Black.woff2 +0 -0
  27. package/assets/fonts/lato/LatoLatin-BlackItalic.woff +0 -0
  28. package/assets/fonts/lato/LatoLatin-BlackItalic.woff2 +0 -0
  29. package/assets/fonts/lato/LatoLatin-Bold.woff +0 -0
  30. package/assets/fonts/lato/LatoLatin-Bold.woff2 +0 -0
  31. package/assets/fonts/lato/LatoLatin-BoldItalic.woff +0 -0
  32. package/assets/fonts/lato/LatoLatin-BoldItalic.woff2 +0 -0
  33. package/assets/fonts/lato/LatoLatin-Heavy.woff +0 -0
  34. package/assets/fonts/lato/LatoLatin-Heavy.woff2 +0 -0
  35. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff +0 -0
  36. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff2 +0 -0
  37. package/assets/fonts/lato/LatoLatin-Italic.woff +0 -0
  38. package/assets/fonts/lato/LatoLatin-Italic.woff2 +0 -0
  39. package/assets/fonts/lato/LatoLatin-Light.woff +0 -0
  40. package/assets/fonts/lato/LatoLatin-Light.woff2 +0 -0
  41. package/assets/fonts/lato/LatoLatin-LightItalic.woff +0 -0
  42. package/assets/fonts/lato/LatoLatin-LightItalic.woff2 +0 -0
  43. package/assets/fonts/lato/LatoLatin-Medium.woff +0 -0
  44. package/assets/fonts/lato/LatoLatin-Medium.woff2 +0 -0
  45. package/assets/fonts/lato/LatoLatin-MediumItalic.woff +0 -0
  46. package/assets/fonts/lato/LatoLatin-MediumItalic.woff2 +0 -0
  47. package/assets/fonts/lato/LatoLatin-Regular.woff +0 -0
  48. package/assets/fonts/lato/LatoLatin-Regular.woff2 +0 -0
  49. package/assets/fonts/lato/LatoLatin-Semibold.woff +0 -0
  50. package/assets/fonts/lato/LatoLatin-Semibold.woff2 +0 -0
  51. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff +0 -0
  52. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2 +0 -0
  53. package/assets/images/providers/entraid-black.svg +4 -0
  54. package/assets/images/providers/entraid.svg +9 -0
  55. package/assets/images/vendor/entraid.svg +9 -0
  56. package/assets/styles/app.scss +0 -1
  57. package/assets/styles/base/_variables.scss +2 -0
  58. package/assets/styles/fonts/_fontstack.scss +132 -8
  59. package/assets/translations/en-us.yaml +41 -22
  60. package/assets/translations/zh-hans.yaml +4 -8
  61. package/chart/__tests__/S3.test.ts +10 -3
  62. package/chart/monitoring/index.vue +10 -1
  63. package/components/ActionDropdownShell.vue +2 -1
  64. package/components/CountBox.vue +20 -0
  65. package/components/CreateDriver.vue +0 -12
  66. package/components/CruResourceFooter.vue +9 -5
  67. package/components/DetailText.vue +12 -3
  68. package/components/ExplorerProjectsNamespaces.vue +1 -1
  69. package/components/InstallHelmCharts.vue +2 -2
  70. package/components/LandingPagePreference.vue +14 -5
  71. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +15 -1
  72. package/components/Resource/Detail/Metadata/index.vue +6 -0
  73. package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
  74. package/components/Resource/Detail/SpacedRow.vue +3 -1
  75. package/components/Resource/Detail/TitleBar/index.vue +10 -11
  76. package/components/ResourceList/Masthead.vue +12 -8
  77. package/components/SelectIconGrid.vue +5 -10
  78. package/components/SingleClusterInfo.vue +1 -0
  79. package/components/SortableTable/__tests__/sorting.test.ts +126 -0
  80. package/components/SortableTable/index.vue +6 -9
  81. package/components/SortableTable/selection.js +23 -5
  82. package/components/SortableTable/sorting.js +6 -3
  83. package/components/Wizard.vue +14 -13
  84. package/components/__tests__/CountBox.test.ts +72 -0
  85. package/components/__tests__/DetailText.test.ts +113 -0
  86. package/components/fleet/FleetBundles.vue +100 -12
  87. package/components/fleet/FleetClusterTargets/index.vue +54 -15
  88. package/components/fleet/__tests__/FleetClusterTargets.test.ts +149 -115
  89. package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
  90. package/components/form/InputWithSelect.vue +18 -10
  91. package/components/form/KeyValue.vue +17 -1
  92. package/components/form/LabeledSelect.vue +101 -26
  93. package/components/form/NameNsDescription.vue +11 -0
  94. package/components/form/Security.vue +6 -2
  95. package/components/form/Select.vue +73 -56
  96. package/components/form/ServiceNameSelect.vue +13 -11
  97. package/components/form/WorkloadPorts.vue +2 -7
  98. package/components/form/__tests__/KeyValue.test.ts +66 -0
  99. package/components/form/__tests__/NodeScheduling.test.ts +9 -0
  100. package/components/form/__tests__/Security.test.ts +76 -0
  101. package/components/form/labeled-select-utils/useLabeledSelectPagination.ts +138 -0
  102. package/components/formatter/Autoscaler.vue +4 -4
  103. package/components/formatter/ClusterKubeVersion.vue +27 -0
  104. package/components/formatter/ClusterLink.vue +1 -7
  105. package/components/formatter/ClusterProvider.vue +6 -10
  106. package/components/formatter/FleetSummaryGraph.vue +0 -3
  107. package/components/formatter/MachineSummaryGraph.vue +1 -1
  108. package/components/formatter/PodsUsage.vue +2 -2
  109. package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
  110. package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
  111. package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
  112. package/components/nav/Group.vue +7 -6
  113. package/components/nav/Header.vue +24 -3
  114. package/components/nav/NamespaceFilter.vue +2 -2
  115. package/components/nav/NotificationCenter/Notification.vue +4 -1
  116. package/components/nav/NotificationCenter/NotificationHeader.vue +20 -8
  117. package/components/nav/NotificationCenter/__tests__/NotificationHeader.test.ts +80 -0
  118. package/components/nav/TopLevelMenu.helper.ts +15 -3
  119. package/components/nav/TopLevelMenu.vue +16 -5
  120. package/components/nav/Type.vue +8 -7
  121. package/components/nav/WindowManager/index.vue +2 -1
  122. package/components/nav/WorkspaceSwitcher.vue +13 -0
  123. package/components/nav/__tests__/Group.test.ts +67 -0
  124. package/components/nav/__tests__/Header.test.ts +235 -0
  125. package/components/nav/__tests__/TopLevelMenu.test.ts +145 -21
  126. package/components/nav/__tests__/Type.test.ts +20 -3
  127. package/components/templates/default.vue +34 -4
  128. package/components/templates/home.vue +30 -25
  129. package/components/templates/plain.vue +31 -26
  130. package/components/templates/standalone.vue +17 -0
  131. package/composables/useFormValidation.ts +93 -0
  132. package/composables/useLabeledFormElement.ts +10 -2
  133. package/composables/useLabeledSelect.ts +60 -0
  134. package/composables/useUserRetentionValidation.ts +1 -49
  135. package/composables/useVeeValidateField.test.ts +159 -0
  136. package/composables/useVeeValidateField.ts +67 -0
  137. package/config/cookies.js +0 -1
  138. package/config/labels-annotations.js +1 -0
  139. package/config/pagination-table-headers.js +18 -1
  140. package/config/product/manager.js +82 -21
  141. package/config/query-params.js +1 -0
  142. package/config/router/routes.js +6 -8
  143. package/config/table-headers.js +20 -1
  144. package/config/types.js +2 -1
  145. package/core/__tests__/plugin-products.test.ts +1505 -30
  146. package/core/plugin-products-base.ts +137 -20
  147. package/core/plugin-products-helpers.ts +5 -4
  148. package/core/plugin-products.ts +4 -0
  149. package/core/plugin-types.ts +129 -4
  150. package/core/plugin.ts +15 -7
  151. package/core/productDebugger.js +9 -4
  152. package/core/types-provisioning.ts +43 -30
  153. package/core/types.ts +58 -19
  154. package/detail/__tests__/management.cattle.io.fleetworkspace.test.ts +128 -0
  155. package/detail/__tests__/pod.test.ts +41 -0
  156. package/detail/harvesterhci.io.management.cluster.vue +6 -2
  157. package/detail/management.cattle.io.fleetworkspace.vue +49 -0
  158. package/detail/pod.vue +1 -1
  159. package/detail/provisioning.cattle.io.cluster.vue +4 -10
  160. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +9 -0
  161. package/edit/__tests__/kontainerDriver.test.ts +0 -13
  162. package/edit/__tests__/nodeDriver.test.ts +5 -11
  163. package/edit/__tests__/resources.cattle.io.restore.test.ts +9 -0
  164. package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
  165. package/edit/auth/__tests__/azuread.test.ts +217 -34
  166. package/edit/auth/__tests__/oidc.test.ts +54 -0
  167. package/edit/auth/azuread.vue +123 -15
  168. package/edit/auth/oidc.vue +10 -2
  169. package/edit/kontainerDriver.vue +1 -2
  170. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
  171. package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
  172. package/edit/networking.k8s.io.ingress/index.vue +75 -20
  173. package/edit/nodeDriver.vue +0 -2
  174. package/edit/provisioning.cattle.io.cluster/AgentEnv.vue +1 -0
  175. package/edit/provisioning.cattle.io.cluster/__tests__/AgentEnv.test.ts +25 -0
  176. package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
  177. package/edit/provisioning.cattle.io.cluster/index.vue +81 -106
  178. package/edit/provisioning.cattle.io.cluster/rke2.vue +8 -4
  179. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
  180. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
  181. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
  182. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
  183. package/edit/secret/__tests__/ssh.test.ts +5 -6
  184. package/edit/secret/basic.vue +31 -0
  185. package/edit/secret/index.vue +68 -17
  186. package/edit/secret/registry.vue +38 -0
  187. package/edit/secret/ssh.vue +29 -0
  188. package/edit/secret/tls.vue +30 -0
  189. package/edit/service.vue +4 -4
  190. package/edit/workload/Upgrading.vue +3 -3
  191. package/edit/workload/__tests__/Upgrading.test.ts +6 -9
  192. package/edit/workload/mixins/workload.js +2 -1
  193. package/initialize/App.vue +29 -2
  194. package/initialize/install-plugins.js +0 -2
  195. package/list/__tests__/management.cattle.io.feature.test.ts +105 -0
  196. package/list/catalog.cattle.io.app.vue +25 -5
  197. package/list/fleet.cattle.io.bundle.vue +7 -104
  198. package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
  199. package/list/management.cattle.io.feature.vue +1 -1
  200. package/list/management.cattle.io.fleetworkspace.vue +8 -0
  201. package/list/provisioning.cattle.io.cluster.vue +262 -180
  202. package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
  203. package/machine-config/amazonec2.vue +1 -0
  204. package/mixins/__tests__/chart.test.ts +112 -0
  205. package/mixins/brand.js +2 -1
  206. package/mixins/chart.js +50 -15
  207. package/mixins/resource-fetch-api-pagination.js +41 -5
  208. package/models/__tests__/catalog.cattle.io.app.test.ts +15 -1
  209. package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +84 -0
  210. package/models/__tests__/chart.test.ts +99 -6
  211. package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
  212. package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
  213. package/models/__tests__/management.cattle.io.feature.test.ts +131 -0
  214. package/models/__tests__/management.cattle.io.node.ts +6 -5
  215. package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
  216. package/models/__tests__/monitoring.coreos.com.alertmanagerconfig.test.ts +98 -0
  217. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +32 -11
  218. package/models/base-cluster.x-k8s.io.js +26 -0
  219. package/models/catalog.cattle.io.app.js +21 -17
  220. package/models/catalog.cattle.io.clusterrepo.js +39 -11
  221. package/models/chart.js +33 -19
  222. package/models/cluster.js +1 -1
  223. package/models/cluster.x-k8s.io.machine.js +4 -22
  224. package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
  225. package/models/cluster.x-k8s.io.machineset.js +2 -20
  226. package/models/compliance.cattle.io.clusterscan.js +130 -2
  227. package/models/ext.cattle.io.kubeconfig.ts +4 -7
  228. package/models/fleet-application.js +4 -2
  229. package/models/fleet.cattle.io.bundle.js +1 -1
  230. package/models/kontainerdriver.js +11 -0
  231. package/models/management.cattle.io.authconfig.js +5 -1
  232. package/models/management.cattle.io.cluster.js +402 -78
  233. package/models/management.cattle.io.feature.js +3 -3
  234. package/models/management.cattle.io.kontainerdriver.js +1 -26
  235. package/models/management.cattle.io.node.js +6 -4
  236. package/models/management.cattle.io.nodepool.js +1 -1
  237. package/models/monitoring.coreos.com.alertmanagerconfig.js +31 -17
  238. package/models/networking.k8s.io.ingress.js +12 -4
  239. package/models/nodedriver.js +7 -0
  240. package/models/provisioning.cattle.io.cluster.js +47 -330
  241. package/models/rke.cattle.io.etcdsnapshot.js +1 -2
  242. package/package.json +20 -37
  243. package/pages/__tests__/readme.test.ts +49 -0
  244. package/pages/auth/setup.vue +2 -3
  245. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +265 -0
  246. package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +55 -0
  247. package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +53 -0
  248. package/pages/c/_cluster/apps/charts/chart.vue +275 -39
  249. package/pages/c/_cluster/apps/charts/index.vue +2 -2
  250. package/pages/c/_cluster/apps/charts/install.vue +18 -10
  251. package/pages/c/_cluster/auth/user.retention/index.vue +55 -22
  252. package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
  253. package/pages/c/_cluster/explorer/index.vue +5 -49
  254. package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
  255. package/pages/c/_cluster/istio/index.vue +21 -6
  256. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +5 -7
  257. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +40 -2
  258. package/pages/c/_cluster/uiplugins/__tests__/PluginInfoPanel.test.ts +61 -0
  259. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +735 -13
  260. package/pages/c/_cluster/uiplugins/index.vue +226 -222
  261. package/pages/diagnostic.vue +13 -17
  262. package/pages/fail-whale.vue +18 -0
  263. package/pages/home.vue +77 -260
  264. package/pages/readme.vue +88 -0
  265. package/plugins/dashboard-store/__tests__/resource-class.test.ts +88 -0
  266. package/plugins/dashboard-store/actions.js +40 -18
  267. package/plugins/dashboard-store/resource-class.js +5 -2
  268. package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
  269. package/plugins/steve/steve-pagination-utils.ts +11 -3
  270. package/plugins/steve/subscribe.js +35 -5
  271. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +211 -1
  272. package/rancher-components/Form/LabeledInput/LabeledInput.vue +37 -4
  273. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +1 -1
  274. package/rancher-components/RcButton/RcButton.test.ts +37 -1
  275. package/rancher-components/RcButton/RcButton.vue +38 -8
  276. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
  277. package/scripts/test-plugins-build.sh +5 -2
  278. package/server/server-middleware.js +2 -2
  279. package/static/humans.txt +1 -0
  280. package/static/robots.txt +34 -0
  281. package/static/welcome-cow.svg +18 -0
  282. package/store/__tests__/catalog.test.ts +276 -12
  283. package/store/__tests__/type-map.test.ts +556 -1
  284. package/store/action-menu.js +8 -3
  285. package/store/auth.js +1 -4
  286. package/store/aws.js +27 -16
  287. package/store/catalog.js +87 -11
  288. package/store/digitalocean.js +20 -38
  289. package/store/index.js +2 -0
  290. package/store/linode.js +25 -40
  291. package/store/pnap.js +1 -0
  292. package/store/type-map.js +111 -29
  293. package/tsconfig.paths.json +8 -8
  294. package/types/kube/kube-api.ts +14 -1
  295. package/types/rancher/steve.api.ts +12 -12
  296. package/types/resources/settings.d.ts +2 -1
  297. package/types/shell/index.d.ts +128 -24
  298. package/types/store/dashboard-store.types.ts +108 -11
  299. package/types/store/pagination.types.ts +6 -3
  300. package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
  301. package/utils/__tests__/async.test.ts +87 -0
  302. package/utils/__tests__/aws.test.ts +140 -0
  303. package/utils/__tests__/banners.test.ts +176 -0
  304. package/utils/__tests__/chart.test.ts +64 -1
  305. package/utils/__tests__/color.test.ts +226 -0
  306. package/utils/__tests__/duration.test.ts +140 -0
  307. package/utils/__tests__/fleet.test.ts +340 -0
  308. package/utils/__tests__/git.test.ts +270 -0
  309. package/utils/__tests__/inactivity.test.ts +316 -0
  310. package/utils/__tests__/ingress.test.ts +553 -0
  311. package/utils/__tests__/kube.test.ts +68 -0
  312. package/utils/__tests__/namespace-filter.test.ts +109 -0
  313. package/utils/__tests__/object.test.ts +77 -0
  314. package/utils/__tests__/pagination-utils.test.ts +361 -0
  315. package/utils/__tests__/parse-externalid.test.ts +137 -0
  316. package/utils/__tests__/perf-setting.utils.test.ts +98 -0
  317. package/utils/__tests__/poller-sequential.test.ts +177 -0
  318. package/utils/__tests__/poller.test.ts +170 -0
  319. package/utils/__tests__/promise.test.ts +346 -0
  320. package/utils/__tests__/settings.test.ts +140 -0
  321. package/utils/__tests__/sort-utils.test.ts +301 -0
  322. package/utils/__tests__/string-utils.test.ts +798 -0
  323. package/utils/__tests__/string.test.ts +23 -1
  324. package/utils/__tests__/style.test.ts +154 -0
  325. package/utils/__tests__/svg-filter.test.ts +184 -0
  326. package/utils/__tests__/time.test.ts +14 -1
  327. package/utils/__tests__/units.test.ts +417 -0
  328. package/utils/__tests__/url.test.ts +246 -0
  329. package/utils/__tests__/versions.test.ts +128 -0
  330. package/utils/__tests__/xccdf.test.ts +391 -0
  331. package/utils/chart.js +36 -0
  332. package/utils/fleet.ts +13 -3
  333. package/utils/gatekeeper/__tests__/util.test.ts +174 -0
  334. package/utils/gc/__tests__/gc-interval.test.ts +119 -0
  335. package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
  336. package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
  337. package/utils/gc/__tests__/gc.test.ts +487 -0
  338. package/utils/ingress.ts +9 -1
  339. package/utils/object.js +33 -2
  340. package/utils/pagination-utils.ts +2 -1
  341. package/utils/string.js +25 -2
  342. package/utils/time.ts +5 -0
  343. package/utils/uiplugins.ts +5 -5
  344. package/utils/validators/__tests__/cluster-name.test.ts +110 -0
  345. package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
  346. package/utils/validators/__tests__/index.test.ts +481 -0
  347. package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
  348. package/utils/validators/__tests__/misc-validators.test.ts +246 -0
  349. package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
  350. package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
  351. package/utils/validators/__tests__/role-template.test.ts +149 -0
  352. package/utils/validators/__tests__/service.test.ts +283 -0
  353. package/utils/validators/__tests__/setting.test.js +32 -0
  354. package/utils/validators/formRules/__tests__/index.test.ts +50 -0
  355. package/utils/validators/formRules/index.ts +5 -5
  356. package/utils/validators/machine-pool.ts +1 -1
  357. package/utils/validators/setting.js +18 -3
  358. package/utils/xccdf.ts +418 -0
  359. package/vue.config.js +0 -9
  360. package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
  361. package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
  362. package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
  363. package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
  364. package/assets/images/providers/azuread-black.svg +0 -22
  365. package/assets/images/providers/azuread.svg +0 -25
  366. package/assets/images/vendor/azuread.svg +0 -18
  367. package/assets/styles/fonts/_dots.scss +0 -18
  368. package/components/EmberPage.vue +0 -622
  369. package/components/EmberPageView.vue +0 -39
  370. package/components/form/labeled-select-utils/labeled-select-pagination.ts +0 -116
  371. package/mixins/labeled-form-element.ts +0 -225
  372. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -28
  373. package/pages/c/_cluster/manager/pages/_page.vue +0 -22
  374. package/pages/c/_cluster/mcapps/pages/_page.vue +0 -22
  375. package/plugins/ember-cookie.js +0 -17
  376. package/utils/ember-page.js +0 -30
@@ -132,6 +132,7 @@ generic:
132
132
  deprecated: Deprecated
133
133
  upgradeable: Upgradeable
134
134
  installed: Installed
135
+ installedMultiple: Installed (multiple)
135
136
  featured: Featured
136
137
  shortFeatured: Feat
137
138
  category: Category
@@ -184,6 +185,7 @@ locale:
184
185
  none: (None)
185
186
 
186
187
  nav:
188
+ skipToContent: Skip to main content
187
189
  ariaLabel:
188
190
  clusterIconKeyCombo: Cluster keyboard shortcut combination icon
189
191
  localClusterIcon: Local Cluster icon
@@ -498,7 +500,7 @@ authConfig:
498
500
  unrestricted: Allow any valid user
499
501
  allowedPrincipalIds:
500
502
  title: Authorized Users & Groups
501
- associatedWarning: 'The {provider} account that is used to enable the external provider will be granted admin permissions. If you use a test account or non-admin account, that account will still be granted admin-level permissions. See <a href="{docsBase}/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config#external-authentication-configuration-and-principal-users" target="_blank" rel="noopener noreferrer nofollow">External Authentication Configuration and Principal Users</a> to understand why.'
503
+ associatedWarning: 'The {provider} account that is used to enable the external provider will be granted permissions equal to the currently logged in Rancher user. See <a href="{docsBase}/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config#external-authentication-configuration-and-principal-users" target="_blank" rel="noopener noreferrer nofollow">External Authentication Configuration and Principal Users</a> to understand why.'
502
504
  githubapp:
503
505
  clientId:
504
506
  label: Client ID
@@ -712,7 +714,7 @@ authConfig:
712
714
  azuread:
713
715
  tenantId:
714
716
  label: Tenant ID
715
- tooltip: From the Azure AD portal
717
+ tooltip: From the Microsoft Entra admin center
716
718
  placeholder: A long UUID string
717
719
  applicationId:
718
720
  label: Application ID
@@ -732,6 +734,9 @@ authConfig:
732
734
  label: Token Endpoint
733
735
  authEndpoint:
734
736
  label: Auth Endpoint
737
+ endSessionEndpoint:
738
+ title: End Session Endpoint
739
+ tooltip: Azure AD URL used for logging a user out of their session (e.g. https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/logout)
735
740
  groupMembershipFilter:
736
741
  label: Group Membership Filter
737
742
  enable: Limit users by group membership
@@ -739,17 +744,17 @@ authConfig:
739
744
  externalHelp: See the OData filter expression documentation for more information.
740
745
  externalHelpLink: https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/webservices/use-filter-expressions-in-odata-uris#filter-expressions
741
746
  reply:
742
- info: 'Azure AD requires a whitelisted URL for your Rancher server before beginning this setup. Please ensure that the following URL is set in the Reply URL section of your Azure Portal. Please note that it may take up to 5 minutes for the whitelisted URL to propagate.'
747
+ info: 'Microsoft Entra ID requires a whitelisted URL for your Rancher server before beginning this setup. Please ensure that the following URL is set in the Reply URL section of your Microsoft Entra admin center. Please note that it may take up to 5 minutes for the whitelisted URL to propagate.'
743
748
  label: Reply URL
744
749
  ariaLabel: Copy Reply URL to clipboard
745
750
  updateEndpoint:
746
751
  button: Update Endpoint
747
752
  banner:
748
- message: 'Azure AD Authentication must be updated: it is using the Azure Graph API, which will be deprecated at the end of 2022.'
753
+ message: 'Microsoft Entra ID Authentication must be updated: it is using the Azure AD Graph API, which was deprecated at the end of 2022.'
749
754
  linkText: 'Update it here.'
750
755
  modal:
751
756
  title: Are you sure? This update is irreversible.
752
- body: '<p><b>You may need to make some additional changes</b>. Please ensure the Azure AD app has the Directory.Read.All <b>Application</b> permission added to Microsoft Graph.<br> If any endpoints were customized while configuring Azure AD authentication in Rancher, they will not be automatically updated. </p>'
757
+ body: '<p><b>You may need to make some additional changes</b>. Please ensure the Microsoft Entra ID app has the Directory.Read.All <b>Application</b> permission added to Microsoft Graph.<br> If any endpoints were customized while configuring Microsoft Entra ID authentication in Rancher, they will not be automatically updated. </p>'
753
758
  oidc:
754
759
  endSessionEndpoint:
755
760
  title: End Session Endpoint
@@ -806,6 +811,9 @@ authConfig:
806
811
  groupSearch:
807
812
  label: Enable group search
808
813
  tooltip: Allows users with appropriate permissions to search and view all groups within the OIDC provider's realm. This can be useful for administrators who need to assign global roles to groups that they are not currently a member of.
814
+ clientAuthenticatedSearch:
815
+ label: Enable client authenticated search
816
+ tooltip: Use the OIDC Client Credentials to authenticate to Keycloak when searching for users or groups. This will bypass user-based RBAC within the realm
809
817
  stateBanner:
810
818
  disabled: 'The {provider} authentication provider is currently disabled.'
811
819
  enabled: 'The {provider} authentication provider is currently enabled.'
@@ -1138,7 +1146,6 @@ catalog:
1138
1146
  label: Chart Versions
1139
1147
  showMore: Show More
1140
1148
  showLess: Show Less
1141
- missingVersionDate: No date available for this chart version
1142
1149
  home: Homepage
1143
1150
  repository: Repository Page
1144
1151
  maintainers: Maintainers
@@ -1152,12 +1159,18 @@ catalog:
1152
1159
  deprecatedWarning: '{chartName} has been marked as deprecated. Use caution when installing this helm chart as it might be removed in the future.'
1153
1160
  experimentalWarning: '{chartName} has been marked as experimental. Use caution when installing this helm chart as it might not function as expected.'
1154
1161
  deprecatedAndExperimentalWarning: '{chartName} has been marked as deprecated and experimental. Use caution when installing this helm chart as it might be removed in the future and might not function as expected.'
1162
+ viewReadmeSeparately:
1163
+ label: View separately
1164
+ tooltip: Open the readme in a new tab
1165
+ installedAppsSelector:
1166
+ ariaLabel: Select installed app instance
1155
1167
  chartButton:
1156
1168
  action:
1157
1169
  install: Install this version
1158
1170
  edit: Edit the current version
1159
1171
  upgrade: Upgrade to this version
1160
1172
  downgrade: Downgrade to this version
1173
+ installNew: Install as a new instance
1161
1174
  charts:
1162
1175
  browseAriaLabel: Show only charts grid
1163
1176
  iconAlt: Icon for {app} card/grid item
@@ -1183,15 +1196,11 @@ catalog:
1183
1196
  all: All Operating Systems
1184
1197
  linux: Linux
1185
1198
  windows: Windows
1186
- search: Search the catalogue...
1187
- deprecatedChartsFilter:
1188
- label: Show deprecated apps
1199
+ search: Search the catalog...
1189
1200
  addNewRepo:
1190
1201
  label: Add new
1191
1202
  ariaLabel: Add a new repository
1192
1203
  appChartCard:
1193
- subHeaderItem:
1194
- missingVersionDate: Last updated date is not available for this chart
1195
1204
  footerItem:
1196
1205
  ariaLabel: 'Apply {filter} filter'
1197
1206
  statusFilterCautions:
@@ -1435,6 +1444,8 @@ catalog:
1435
1444
  refreshInterval:
1436
1445
  label: Refresh Interval
1437
1446
  placeholder: 'default: {hours}'
1447
+ error:
1448
+ refresh: Error refreshing repository
1438
1449
  tools:
1439
1450
  iconAlt: Icon for {app} Cluster Tool
1440
1451
  header: Cluster Tools
@@ -1506,9 +1517,12 @@ compliance:
1506
1517
  =1 { Any scheduled scans using this profile will no longer work. }
1507
1518
  other { Any scheduled scans using either of these profiles will no longer work. }
1508
1519
  }
1509
- downloadAllReports: Download All Saved Reports
1510
- downloadLatestReport: Download Latest Report
1511
- downloadReport: Download Report
1520
+ downloadAllReports: Download All Saved Reports (CSV)
1521
+ downloadAllReportsXCCDF: Download All Saved Reports (XCCDF)
1522
+ downloadLatestReport: Download Latest Report (CSV)
1523
+ downloadLatestReportXCCDF: Download Latest Report (XCCDF)
1524
+ downloadReport: Download Report (CSV)
1525
+ downloadReportXCCDF: Download Report (XCCDF)
1512
1526
  maxKubernetesVersion: Maximum allowed Kubernetes version
1513
1527
  minKubernetesVersion: Minimum required Kubernetes version
1514
1528
  noProfiles: There are no valid ClusterScanProfiles for this cluster type to select.
@@ -1517,6 +1531,8 @@ compliance:
1517
1531
  reports: Reports
1518
1532
  retention: Retention Count
1519
1533
  scan:
1534
+ errorNoParsedNodes: No nodes were parsed from the scan results, so no report can be generated.
1535
+ errorDownload: Error downloading file
1520
1536
  description: Description
1521
1537
  fail: Fail
1522
1538
  lastScanTime: Last Scan Time
@@ -2333,7 +2349,9 @@ cluster:
2333
2349
  etcdControlPlaneWarning: We don't recommend using Autoscaler with machine pools that have the etcd or Control Plane roles. You can modify the yaml if you want to override the current value.
2334
2350
  name:
2335
2351
  label: Pool Name
2352
+ notNamed: (Not Named)
2336
2353
  placeholder: A random one will be generated by default
2354
+ unique: Pool names should be unique
2337
2355
  nodeTotals:
2338
2356
  label:
2339
2357
  controlPlane: '{count} Control Plane'
@@ -2386,7 +2404,7 @@ cluster:
2386
2404
  label: Auto Replace
2387
2405
  toolTip: If greater than 0, nodes that are unreachable for this duration will be automatically deleted and replaced.
2388
2406
  unit: "Seconds"
2389
- managementTimeout: The cluster to become available. It's possible the cluster was created. We suggest checking the clusters page before trying to create another.
2407
+ managementTimeout: The {type} {name} to become available. It's possible the cluster was created. We suggest checking the clusters page before trying to create another.
2390
2408
  memberRoles:
2391
2409
  removeMessage: 'Note: Removing a user will not remove their project permissions'
2392
2410
  addClusterMember:
@@ -2836,8 +2854,8 @@ providers:
2836
2854
  drivers:
2837
2855
  kontainer:
2838
2856
  title: Cluster Drivers
2839
- emberDeprecationMessage: 'Support for UI Plugins (based on Ember) for cluster and node drivers was deprecated in Rancher 2.11.0 and will be removed in a future release. These need to be migrated to the new <a href="https://extensions.rancher.io" target="_blank" rel="noopener noreferrer nofollow">UI Extensions framework</a>.'
2840
- refreshError: 'Error refreshing cluster drivers: {error}'
2857
+ emberRemovalMessage: 'Support for UI Plugins (based on Ember) for cluster and node drivers was deprecated in Rancher 2.11.0 and has been removed in 2.15.0. If you still need one of these plugins, it will need to be migrated to the new <a href="https://extensions.rancher.io/extensions/next/provisioning/hosted-provider/overview" target="_blank" rel="noopener noreferrer nofollow">UI Extensions framework</a>.'
2858
+ emberRemovalTooltip: 'Support for UI Plugins (based on Ember) for cluster and node drivers was deprecated in Rancher 2.11.0 and has been removed in 2.15.0. If you still need this plugin, it will need to be migrated to the new UI Extensions framework.'
2841
2859
  node:
2842
2860
  title: Node Drivers
2843
2861
  add:
@@ -5446,6 +5464,7 @@ inactivity:
5446
5464
  # Rancher Extensions
5447
5465
  plugins:
5448
5466
  altIcon: Icon for {extension} extension card
5467
+ deprecatedExtension: This extension is deprecated and may soon be removed from the catalog.
5449
5468
  incompatiblePrimeOnly: "The latest version of this extension ({ version }) needs Rancher Prime in order to be installed."
5450
5469
  incompatibleRancherVersion: "The latest version of this extension ({ version }) is not compatible with the current Rancher version ({ required })."
5451
5470
  incompatibleKubeVersion: "The latest version of this extension ({ version }) is not compatible with the current Kube version ({ required })."
@@ -6176,6 +6195,7 @@ resourceTable:
6176
6195
  cluster: Group by Cluster
6177
6196
  device: Group by Device
6178
6197
  pool: Group by Pool
6198
+ workspace: Group by Workspace
6179
6199
  groupLabel:
6180
6200
  cluster: "<span>Cluster:</span> {name}"
6181
6201
  notInACluster: Not in a Cluster
@@ -7975,7 +7995,7 @@ model:
7975
7995
  local: Local
7976
7996
  multiple: Multiple
7977
7997
  activedirectory: ActiveDirectory
7978
- azuread: AzureAD
7998
+ azuread: Microsoft Entra ID
7979
7999
  github: GitHub
7980
8000
  githubapp: GitHub App
7981
8001
  keycloak: Keycloak
@@ -8780,6 +8800,9 @@ registryConfig:
8780
8800
  toolTip: 'When an image needs to be pulled from the given registry hostname, this information will be used to verify the identity of the registry and authenticate to it.'
8781
8801
  addLabel: Add Registry
8782
8802
  description: "Define the TLS and credential configuration for each registry hostname and mirror."
8803
+ caBundle:
8804
+ tooltip: Accepts a CA PEM certificate or a base64 encoded CA PEM.
8805
+ validationError: Invalid CA cert bundle. Must be a CA PEM certificate or a base64 encoded CA PEM.
8783
8806
 
8784
8807
  ##############################
8785
8808
  ### Advanced Settings
@@ -9174,10 +9197,6 @@ support:
9174
9197
  title: Innovate with Freedom
9175
9198
  text: Take advantage of our certified compatibility with a wide range of Kubernetes providers, operating systems, and open source software.
9176
9199
 
9177
- embedding:
9178
- retry: Retry
9179
- unavailable: Cluster Manager UI is not available
9180
-
9181
9200
  serverUpgrade:
9182
9201
  title: "{vendor} Server Changed"
9183
9202
  message: "The page reloaded because the version of {vendor} running on your server changed."
@@ -531,16 +531,16 @@ authConfig:
531
531
  tokenEndpoint: Token 端点
532
532
  authEndpoint: Auth 端点
533
533
  reply:
534
- info: '在开始设置之前,Azure AD 需要 Rancher Server 的白名单 URL。请确保在 Azure 门户的回复 URL 中设置了以下 URL。请注意,白名单 URL 可能需要 5 分钟才能生效。'
534
+ info: '在开始设置之前,Microsoft Entra ID 需要 Rancher Server 的白名单 URL。请确保在 Microsoft Entra 管理中心的回复 URL 中设置了以下 URL。请注意,白名单 URL 可能需要 5 分钟才能生效。'
535
535
  label: 回复 URL
536
536
  updateEndpoint:
537
537
  button: 更新端点
538
538
  banner:
539
- message: '必须更新 Azure AD 身份认证:它使用了 Azure Graph API,该 API 将于 2022 年底弃用。'
539
+ message: '必须更新 Microsoft Entra ID 身份认证:它使用了 Azure AD Graph API,该 API 已于 2022 年底弃用。'
540
540
  linkText: '在此处进行更新。'
541
541
  modal:
542
542
  title: 是否确认?此更新是不可逆的。
543
- body: '<p><b>你可能需要进行额外的更改</b>。请确保 Azure AD 应用已将 Directory.Read.All <b>Application</b> 权限添加到 Microsoft Graph。<br> 如果在 Rancher 中配置 Azure AD 身份认证时自定义了端点,这些端点将不会自动更新。</p>'
543
+ body: '<p><b>你可能需要进行额外的更改</b>。请确保 Microsoft Entra ID 应用已将 Directory.Read.All <b>Application</b> 权限添加到 Microsoft Graph。<br> 如果在 Rancher 中配置 Microsoft Entra ID 身份认证时自定义了端点,这些端点将不会自动更新。</p>'
544
544
  oidc:
545
545
  oidc: 配置 OIDC 账号
546
546
  keycloakoidc: 配置 Keycloak OIDC 账号
@@ -6269,7 +6269,7 @@ model:
6269
6269
  local: 本地
6270
6270
  multiple: Multiple
6271
6271
  activedirectory: Active Directory
6272
- azuread: AzureAD
6272
+ azuread: Microsoft Entra ID
6273
6273
  github: GitHub
6274
6274
  keycloak: Keycloak
6275
6275
  ldap: LDAP
@@ -7307,10 +7307,6 @@ support:
7307
7307
  title: 自由创新
7308
7308
  text: 基于我们与众多 Kubernetes 供应商、操作系统和开源软件认证的兼容性,实现自主创新。
7309
7309
 
7310
- embedding:
7311
- retry: 重试
7312
- unavailable: Cluster Manager UI 不可用
7313
-
7314
7310
  legacy:
7315
7311
  alerts: 告警
7316
7312
  apps: 应用
@@ -3,7 +3,7 @@ import { nextTick } from 'vue';
3
3
  import { mount } from '@vue/test-utils';
4
4
 
5
5
  import S3 from '@shell/chart/rancher-backup/S3';
6
- import Vuex from 'vuex';
6
+ import { createStore } from 'vuex';
7
7
 
8
8
  describe('rancher-backup: S3', () => {
9
9
  const mockStore = {
@@ -16,8 +16,15 @@ describe('rancher-backup: S3', () => {
16
16
  }
17
17
  };
18
18
  const wrapper = mount(S3, {
19
- plugins: [Vuex],
20
- global: { mocks: { $store: mockStore, $fetchState: { pending: false } } }
19
+ global: { mocks: { $store: mockStore, $fetchState: { pending: false } } },
20
+ provide: {
21
+ store: createStore({
22
+ getters: {
23
+ 'cluster/paginationEnabled': () => () => false,
24
+ currentStore: () => 'cluster'
25
+ }
26
+ })
27
+ },
21
28
  });
22
29
 
23
30
  it('should emit invalid when form is not filled', () => {
@@ -17,6 +17,7 @@ import Tabbed from '@shell/components/Tabbed';
17
17
  import { allHash } from '@shell/utils/promise';
18
18
  import { STORAGE_CLASS, PVC, SECRET, WORKLOAD_TYPES } from '@shell/config/types';
19
19
  import { CATTLE_MONITORING_NAMESPACE } from '@shell/utils/monitoring';
20
+ import { CATALOG as CATALOG_ANNOTATIONS } from '@shell/config/labels-annotations';
20
21
 
21
22
  export default {
22
23
  emits: ['register-before-hook', 'input'],
@@ -50,6 +51,12 @@ export default {
50
51
  return {};
51
52
  },
52
53
  },
54
+
55
+ // The selected chart version object, passed from install.vue
56
+ version: {
57
+ type: Object,
58
+ default: null,
59
+ },
53
60
  },
54
61
 
55
62
  async fetch() {
@@ -92,7 +99,9 @@ export default {
92
99
 
93
100
  const hash = await allHash(hashPromises);
94
101
 
95
- this.targetNamespace = hash.namespaces[this.chart.targetNamespace] || false;
102
+ const ns = this.version?.annotations?.[CATALOG_ANNOTATIONS.NAMESPACE] || this.chart.targetNamespace;
103
+
104
+ this.targetNamespace = hash.namespaces[ns] || false;
96
105
 
97
106
  if (!isEmpty(hash.storageClasses)) {
98
107
  this.storageClasses = hash.storageClasses;
@@ -35,6 +35,7 @@ const setBulkActionOfInterest = (act: HiddenAction | null, event: 'mouseover' |
35
35
  >
36
36
  <rc-dropdown-trigger
37
37
  class="bulk-actions-dropdown"
38
+ size="large"
38
39
  :disabled="disabled"
39
40
  >
40
41
  <template #before>
@@ -42,7 +43,7 @@ const setBulkActionOfInterest = (act: HiddenAction | null, event: 'mouseover' |
42
43
  </template>
43
44
  <span>{{ t('sortableTable.bulkActions.collapsed.label') }}</span>
44
45
  <template #after>
45
- <i class="ml-10 icon icon-chevron-down" />
46
+ <i class="icon icon-chevron-down" />
46
47
  </template>
47
48
  </rc-dropdown-trigger>
48
49
  <template #dropdownCollection>
@@ -3,6 +3,8 @@
3
3
  export default {
4
4
  name: 'CountBox',
5
5
 
6
+ emits: ['click'],
7
+
6
8
  props: {
7
9
  name: {
8
10
  type: String,
@@ -19,6 +21,10 @@ export default {
19
21
  compact: {
20
22
  type: Boolean,
21
23
  default: false
24
+ },
25
+ clickable: {
26
+ type: Boolean,
27
+ default: false
22
28
  }
23
29
  },
24
30
  computed: {
@@ -34,6 +40,12 @@ export default {
34
40
  methods: {
35
41
  customizePrimaryColorOpacity(opacity) {
36
42
  return `rgba(var(${ this.primaryColorVar }), ${ opacity })`;
43
+ },
44
+
45
+ handleClick() {
46
+ if (this.clickable) {
47
+ this.$emit('click');
48
+ }
37
49
  }
38
50
  }
39
51
  };
@@ -42,7 +54,9 @@ export default {
42
54
  <template>
43
55
  <div
44
56
  class="count-container"
57
+ :class="{ 'clickable': clickable }"
45
58
  :style="sideStyle"
59
+ @click="handleClick"
46
60
  >
47
61
  <div
48
62
  class="count"
@@ -61,6 +75,12 @@ export default {
61
75
  </template>
62
76
 
63
77
  <style lang="scss" scoped>
78
+ .count-container {
79
+ &.clickable {
80
+ cursor: pointer;
81
+ }
82
+ }
83
+
64
84
  .count {
65
85
  $padding: 10px;
66
86
 
@@ -22,7 +22,6 @@ export default {
22
22
  rules: {
23
23
  default: () => ({
24
24
  url: [],
25
- uiUrl: [],
26
25
  checksum: [],
27
26
  whitelistDomains: []
28
27
  }),
@@ -56,17 +55,6 @@ export default {
56
55
  :data-testid="'driver-create-checksum-field'"
57
56
  />
58
57
  </div>
59
- <div class="row mb-20">
60
- <LabeledInput
61
- v-model:value.trim="value.uiUrl"
62
- :label="t('drivers.add.customUiUrl.label')"
63
- :tooltip="t('drivers.add.customUiUrl.tooltip', null, true)"
64
- :placeholder="t('drivers.add.customUiUrl.placeholder', null, true)"
65
- :mode="mode"
66
- :rules="rules.uiUrl"
67
- :data-testid="'driver-create-uiurl-field'"
68
- />
69
- </div>
70
58
  <div class="col span-6">
71
59
  <ArrayList
72
60
  v-model:value="value.whitelistDomains"
@@ -3,13 +3,16 @@ import { mapGetters } from 'vuex';
3
3
 
4
4
  import AsyncButton from '@shell/components/AsyncButton';
5
5
  import ResourceCancelModal from '@shell/components/ResourceCancelModal';
6
+ import { RcButton } from '@components/RcButton';
6
7
  import { _VIEW } from '@shell/config/query-params';
7
8
 
8
9
  export default {
9
10
  emits: ['cancel-confirmed', 'finish'],
10
11
 
11
- components: { AsyncButton, ResourceCancelModal },
12
- props: {
12
+ components: {
13
+ AsyncButton, RcButton, ResourceCancelModal
14
+ },
15
+ props: {
13
16
  mode: {
14
17
  type: String,
15
18
  default: 'create',
@@ -84,16 +87,17 @@ export default {
84
87
  <div class="cru-resource-footer">
85
88
  <slot name="footer-prefix" />
86
89
  <slot name="cancel">
87
- <button
90
+ <RcButton
88
91
  v-if="!isView && showCancel"
89
92
  id="cru-cancel"
90
93
  :data-testid="componentTestid + '-cancel'"
91
94
  type="button"
92
- class="btn role-secondary"
95
+ variant="secondary"
96
+ size="large"
93
97
  @click="confirmCancelRequired ? checkCancel(true) : $emit('cancel-confirmed', true)"
94
98
  >
95
99
  <t k="generic.cancel" />
96
- </button>
100
+ </RcButton>
97
101
  </slot>
98
102
  <slot :checkCancel="checkCancel">
99
103
  <AsyncButton
@@ -187,10 +187,9 @@ export default {
187
187
  >{{ body }}</span>
188
188
 
189
189
  <CodeMirror
190
- v-else-if="jsonStr"
190
+ v-else-if="jsonStr && !concealed"
191
191
  :options="{mode:{name:'javascript', json:true}, lineNumbers:false, foldGutter:false, readOnly:true}"
192
192
  :value="jsonStr"
193
- :class="{'conceal': concealed}"
194
193
  aria-live="polite"
195
194
  />
196
195
 
@@ -199,9 +198,16 @@ export default {
199
198
  :class="{'conceal-wrapper': concealed}"
200
199
  >
201
200
  <span
201
+ v-if="concealed"
202
+ data-testid="detail-top_html"
203
+ class="conceal"
204
+ aria-live="polite"
205
+ />
206
+ <span
207
+ v-else
202
208
  v-clean-html="bodyHtml"
203
209
  data-testid="detail-top_html"
204
- :class="{'conceal': concealed, 'monospace': monospace && !isBinary}"
210
+ :class="{'monospace': monospace && !isBinary}"
205
211
  aria-live="polite"
206
212
  />
207
213
  </div>
@@ -270,6 +276,9 @@ export default {
270
276
  .conceal {
271
277
  white-space: nowrap;
272
278
  display: block;
279
+ &::before {
280
+ content: '••••••••••••••••••••••••';
281
+ }
273
282
  }
274
283
 
275
284
  .action-group {
@@ -295,7 +295,7 @@ export default {
295
295
  return this.$store.getters['i18n/t']('resourceTable.groupLabel.notInAProject');
296
296
  },
297
297
  showCreateNsButton() {
298
- return this.groupPreference !== 'namespace';
298
+ return this.groupPreference !== 'namespace' && this.isNamespaceCreatable;
299
299
  },
300
300
  projectGroupBy() {
301
301
  return this.groupPreference === 'none' ? null : 'groupById';
@@ -248,7 +248,7 @@ export default {
248
248
 
249
249
  };
250
250
 
251
- this.installCmd.namespace = this.targetNamespace || this.chart?.targetNamespace || 'default';
251
+ this.installCmd.namespace = this.targetNamespace || this.versionInfo?.chart?.annotations?.[CATALOG_ANNOTATIONS.NAMESPACE] || this.chart?.targetNamespace || 'default';
252
252
  }
253
253
  },
254
254
 
@@ -360,7 +360,7 @@ export default {
360
360
  this.canInstallChart = false;
361
361
  } else {
362
362
  try {
363
- const app = await this.$store.dispatch(`${ this.store }/find`, { type: CATALOG.APP, id: `${ this.targetNamespace || this.chart?.targetNamespace || 'default' }/${ this.chartName }` });
363
+ const app = await this.$store.dispatch(`${ this.store }/find`, { type: CATALOG.APP, id: `${ this.targetNamespace || this.versionInfo?.chart?.annotations?.[CATALOG_ANNOTATIONS.NAMESPACE] || this.chart?.targetNamespace || 'default' }/${ this.chartName }` });
364
364
 
365
365
  if (app) {
366
366
  this.installedVersion = app?.spec?.chart?.metadata?.appVersion;
@@ -14,10 +14,6 @@ export default {
14
14
  Select,
15
15
  },
16
16
 
17
- async fetch() {
18
- this.clusters = await this.$store.dispatch('management/findAll', { type: MANAGEMENT.CLUSTER });
19
- },
20
-
21
17
  data() {
22
18
  // Store the route as it was on page load (before the user may have changed it)
23
19
  const customRoute = this.$store.getters['prefs/get'](AFTER_LOGIN_ROUTE);
@@ -90,13 +86,25 @@ export default {
90
86
  },
91
87
 
92
88
  methods: {
93
- updateLoginRoute(neu) {
89
+ async updateLoginRoute(neu) {
94
90
  if (neu) {
95
91
  this.afterLoginRoute = neu;
96
92
  } else {
93
+ this.clusters = await this.$store.dispatch('management/findAll', { type: MANAGEMENT.CLUSTER });
97
94
  this.afterLoginRoute = this.routeFromDropdown?.value || this.routeDropdownOptions[0]?.value;
98
95
  }
99
96
  },
97
+ },
98
+
99
+ watch: {
100
+ afterLoginRoute: {
101
+ async handler(neu) {
102
+ if (typeof neu === 'object') {
103
+ this.clusters = await this.$store.dispatch('management/findAll', { type: MANAGEMENT.CLUSTER });
104
+ }
105
+ },
106
+ immediate: true
107
+ },
100
108
  }
101
109
  };
102
110
  </script>
@@ -129,6 +137,7 @@ export default {
129
137
  />
130
138
  <Select
131
139
  v-model:value="routeFromDropdown"
140
+ :loading="clusters.length < 1"
132
141
  :aria-label="t('landing.landingPrefs.ariaLabelTakeMeToCluster')"
133
142
  :searchable="true"
134
143
  :disabled="afterLoginRoute === 'home' || afterLoginRoute === 'last-visited'"
@@ -103,12 +103,26 @@ const getRowValueId = (row:Row): string => `value-${ row.label }:${ row.value }`
103
103
  flex-direction: column;
104
104
 
105
105
  .row {
106
+ gap: 8px;
107
+
108
+ // Hide clearfix pseudo-elements inherited from the global .row class
109
+ &::before, &::after {
110
+ display: none;
111
+ }
112
+
106
113
  &:not(:last-of-type) {
107
114
  margin-bottom: 8px;
108
115
  }
109
116
 
110
117
  .full-custom-value {
111
118
  flex: 1;
119
+ min-width: 0;
120
+
121
+ // Override inline-block on .popover-card-target so it respects the
122
+ // parent's width constraint instead of sizing to its content
123
+ :deep(.popover-card-target) {
124
+ width: 100%;
125
+ }
112
126
  }
113
127
 
114
128
  .value {
@@ -128,7 +142,7 @@ const getRowValueId = (row:Row): string => `value-${ row.label }:${ row.value }`
128
142
 
129
143
  .label {
130
144
  width: 30%;
131
- min-width: 120px;
145
+ min-width: min-content;
132
146
  }
133
147
 
134
148
  .status {
@@ -82,6 +82,12 @@ const showBothEmpty = computed(() => labels.length === 0 && annotations.length =
82
82
 
83
83
  <style lang="scss" scoped>
84
84
  .metadata {
85
+ .identifying-info {
86
+ // Allow the grid cell to shrink below its content size without
87
+ // using overflow:hidden, which would clip the namespace popover
88
+ min-width: 0;
89
+ }
90
+
85
91
  .labels-and-annotations-empty {
86
92
  grid-column: span 2;
87
93
  }
@@ -115,11 +115,22 @@ const actionInvoked = () => {
115
115
 
116
116
  .display {
117
117
  display: inline-flex;
118
+ align-items: center;
119
+ max-width: 100%;
120
+
121
+ // Truncate the link text instead of wrapping to a second line
122
+ a {
123
+ overflow: hidden;
124
+ text-overflow: ellipsis;
125
+ white-space: nowrap;
126
+ min-width: 0;
127
+ }
118
128
  }
119
129
 
120
130
  .rc-status-indicator {
131
+ // Keep the status dot from collapsing when the link text is long
132
+ flex-shrink: 0;
121
133
  margin-right: 12px;
122
- margin-top: 4px;
123
134
  height: initial;
124
135
  line-height: initial;
125
136
  }
@@ -7,9 +7,11 @@
7
7
  <style lang="scss" scoped>
8
8
  .spaced-row {
9
9
  display: grid;
10
- grid-template-columns: repeat(3, minmax(0, 1fr));;
10
+ grid-template-columns: repeat(3, minmax(0, 1fr));
11
11
  grid-auto-flow: dense;
12
12
  grid-gap: 24px;
13
13
  justify-content: space-evenly;
14
+ // Match the title bar floor so sections scroll together
15
+ min-width: $resource-detail-min-width;
14
16
  }
15
17
  </style>