@rancher/shell 3.0.7 → 3.0.8-rc.10

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 (375) hide show
  1. package/assets/brand/suse/banner.svg +1 -0
  2. package/assets/brand/suse/dark/banner.svg +1 -0
  3. package/assets/brand/suse/dark/login-landscape.svg +1 -0
  4. package/assets/brand/suse/dark/rancher-logo.svg +1 -1
  5. package/assets/brand/suse/favicon.png +0 -0
  6. package/assets/brand/suse/login-landscape.svg +1 -0
  7. package/assets/brand/suse/metadata.json +11 -1
  8. package/assets/brand/suse/rancher-logo.svg +1 -1
  9. package/assets/fonts/suse/suse-v2-latin-300.woff +0 -0
  10. package/assets/fonts/suse/suse-v2-latin-300.woff2 +0 -0
  11. package/assets/fonts/suse/suse-v2-latin-600.woff +0 -0
  12. package/assets/fonts/suse/suse-v2-latin-600.woff2 +0 -0
  13. package/assets/fonts/suse/suse-v2-latin-700.woff +0 -0
  14. package/assets/fonts/suse/suse-v2-latin-700.woff2 +0 -0
  15. package/assets/fonts/suse/suse-v2-latin-800.woff +0 -0
  16. package/assets/fonts/suse/suse-v2-latin-800.woff2 +0 -0
  17. package/assets/fonts/suse/suse-v2-latin-regular.woff +0 -0
  18. package/assets/fonts/suse/suse-v2-latin-regular.woff2 +0 -0
  19. package/assets/images/content/README.md +5 -0
  20. package/assets/images/content/cloud-native.svg +84 -0
  21. package/assets/images/content/dark/cloud-native.svg +21 -0
  22. package/assets/images/content/dark/shield.svg +59 -0
  23. package/assets/images/content/dark/suse.svg +10 -0
  24. package/assets/images/content/shield.svg +59 -0
  25. package/assets/images/content/suse.svg +10 -0
  26. package/assets/images/vendor/githubapp.svg +13 -0
  27. package/assets/styles/base/_typography.scss +2 -1
  28. package/assets/styles/fonts/_fontstack.scss +53 -1
  29. package/assets/styles/global/_cards.scss +0 -3
  30. package/assets/styles/global/_layout.scss +21 -35
  31. package/assets/styles/themes/_dark.scss +1 -1
  32. package/assets/styles/themes/_light.scss +1 -1
  33. package/assets/styles/themes/_modern.scss +16 -8
  34. package/assets/styles/themes/_suse.scss +116 -24
  35. package/assets/translations/en-us.yaml +185 -21
  36. package/assets/translations/zh-hans.yaml +0 -4
  37. package/components/AutoscalerCard.vue +113 -0
  38. package/components/AutoscalerTab.vue +94 -0
  39. package/components/BackLink.vue +8 -0
  40. package/components/BannerGraphic.vue +36 -21
  41. package/components/BrandImage.vue +17 -6
  42. package/components/ClusterIconMenu.vue +1 -1
  43. package/components/ClusterProviderIcon.vue +1 -1
  44. package/components/Cron/CronExpressionEditor.vue +1 -1
  45. package/components/Cron/CronExpressionEditorModal.vue +1 -1
  46. package/components/Drawer/Chrome.vue +2 -6
  47. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +4 -9
  48. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +3 -8
  49. package/components/Drawer/ResourceDetailDrawer/composables.ts +3 -4
  50. package/components/Drawer/ResourceDetailDrawer/index.vue +4 -9
  51. package/components/Drawer/ResourceDetailDrawer/types.ts +17 -0
  52. package/components/Drawer/types.ts +3 -0
  53. package/components/DynamicContent/DynamicContentBanner.vue +102 -0
  54. package/components/DynamicContent/DynamicContentCloseButton.vue +42 -0
  55. package/components/DynamicContent/DynamicContentIcon.vue +132 -0
  56. package/components/DynamicContent/DynamicContentPanel.vue +112 -0
  57. package/components/DynamicContent/content.ts +78 -0
  58. package/components/EmberPage.vue +1 -1
  59. package/components/IconOrSvg.vue +2 -2
  60. package/components/Inactivity.vue +222 -106
  61. package/components/InstallHelmCharts.vue +2 -2
  62. package/components/PaginatedResourceTable.vue +2 -6
  63. package/components/PopoverCard.vue +192 -0
  64. package/components/Questions/__tests__/index.test.ts +159 -0
  65. package/components/Resource/Detail/CopyToClipboard.vue +4 -1
  66. package/components/Resource/Detail/FetchLoader/composables.ts +18 -4
  67. package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
  68. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +1 -1
  69. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +4 -0
  70. package/components/Resource/Detail/Metadata/KeyValueRow.vue +1 -1
  71. package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
  72. package/components/Resource/Detail/Metadata/composables.ts +9 -9
  73. package/components/Resource/Detail/Metadata/index.vue +3 -3
  74. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -19
  75. package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +0 -29
  76. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +132 -150
  77. package/components/Resource/Detail/ResourcePopover/index.vue +54 -159
  78. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +0 -2
  79. package/components/Resource/Detail/TitleBar/composables.ts +2 -1
  80. package/components/Resource/Detail/TitleBar/index.vue +10 -6
  81. package/components/Resource/Detail/composables.ts +12 -0
  82. package/components/ResourceDetail/Masthead/latest.vue +29 -0
  83. package/components/ResourceDetail/index.vue +5 -2
  84. package/components/ResourceList/Masthead.vue +1 -1
  85. package/components/SortableTable/index.vue +18 -2
  86. package/components/Tabbed/__tests__/index.test.ts +86 -0
  87. package/components/{nav/WindowManager → Window}/ContainerLogs.vue +1 -1
  88. package/components/{nav/WindowManager → Window}/ContainerLogsActions.vue +1 -0
  89. package/components/{nav/WindowManager → Window}/__tests__/ContainerLogs.test.ts +1 -1
  90. package/components/{nav/WindowManager → Window}/__tests__/ContainerShell.test.ts +2 -2
  91. package/components/__tests__/AutoscalerCard.test.ts +154 -0
  92. package/components/__tests__/AutoscalerTab.test.ts +125 -0
  93. package/components/__tests__/PopoverCard.test.ts +204 -0
  94. package/components/auth/SelectPrincipal.vue +24 -6
  95. package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
  96. package/components/fleet/FleetConfigMapSelector.vue +117 -0
  97. package/components/fleet/FleetSecretSelector.vue +127 -0
  98. package/components/fleet/__tests__/FleetConfigMapSelector.test.ts +125 -0
  99. package/components/fleet/__tests__/FleetSecretSelector.test.ts +82 -0
  100. package/components/form/FileImageSelector.vue +13 -4
  101. package/components/form/FileSelector.vue +11 -2
  102. package/components/form/ResourceLabeledSelect.vue +1 -0
  103. package/components/form/__tests__/ResourceLabeledSelect.test.ts +90 -0
  104. package/components/formatter/Autoscaler.vue +97 -0
  105. package/components/formatter/InternalExternalIP.vue +198 -24
  106. package/components/formatter/__tests__/Autoscaler.test.ts +156 -0
  107. package/components/formatter/__tests__/InternalExternalIP.test.ts +133 -0
  108. package/components/google/util/__tests__/formatter.test.ts +47 -0
  109. package/components/google/util/formatter.ts +5 -2
  110. package/components/nav/Group.vue +12 -3
  111. package/components/nav/Header.vue +37 -16
  112. package/components/nav/NamespaceFilter.vue +13 -1
  113. package/components/nav/NotificationCenter/index.vue +2 -1
  114. package/components/nav/TopLevelMenu.helper.ts +16 -6
  115. package/components/nav/TopLevelMenu.vue +4 -2
  116. package/components/{DraggableZone.vue → nav/WindowManager/PinArea.vue} +47 -80
  117. package/components/nav/WindowManager/composables/useComponentsMount.ts +70 -0
  118. package/components/nav/WindowManager/composables/useDimensionsHandler.ts +105 -0
  119. package/components/nav/WindowManager/composables/useDragHandler.ts +99 -0
  120. package/components/nav/WindowManager/composables/usePanelHandler.ts +72 -0
  121. package/components/nav/WindowManager/composables/usePanelsHandler.ts +14 -0
  122. package/components/nav/WindowManager/composables/useResizeHandler.ts +167 -0
  123. package/components/nav/WindowManager/composables/useTabsHandler.ts +51 -0
  124. package/components/nav/WindowManager/constants.ts +23 -0
  125. package/components/nav/WindowManager/index.vue +61 -575
  126. package/components/nav/WindowManager/panels/HorizontalPanel.vue +265 -0
  127. package/components/nav/WindowManager/panels/TabBodyContainer.vue +39 -0
  128. package/components/nav/WindowManager/panels/VerticalPanel.vue +308 -0
  129. package/components/templates/default.vue +4 -40
  130. package/components/templates/home.vue +31 -5
  131. package/components/templates/plain.vue +30 -4
  132. package/components/templates/standalone.vue +1 -1
  133. package/composables/useI18n.ts +10 -1
  134. package/composables/useInterval.ts +15 -0
  135. package/config/__test__/uiplugins.test.ts +309 -0
  136. package/config/labels-annotations.js +9 -1
  137. package/config/product/auth.js +1 -0
  138. package/config/product/explorer.js +3 -1
  139. package/config/product/manager.js +20 -9
  140. package/config/query-params.js +1 -0
  141. package/config/router/routes.js +10 -2
  142. package/config/settings.ts +10 -2
  143. package/config/store.js +4 -2
  144. package/config/table-headers.js +8 -0
  145. package/config/types.js +11 -0
  146. package/config/uiplugins.js +46 -2
  147. package/config/version.js +1 -1
  148. package/core/__test__/extension-manager-impl.test.js +236 -0
  149. package/core/extension-manager-impl.js +23 -6
  150. package/core/plugin-helpers.ts +2 -0
  151. package/core/types-provisioning.ts +4 -1
  152. package/detail/pod.vue +1 -0
  153. package/detail/provisioning.cattle.io.cluster.vue +13 -1
  154. package/dialog/AddonConfigConfirmationDialog.vue +45 -1
  155. package/dialog/DeveloperLoadExtensionDialog.vue +12 -3
  156. package/dialog/RollbackWorkloadDialog.vue +2 -5
  157. package/directives/ui-context.ts +103 -0
  158. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +52 -11
  159. package/edit/auth/AuthProviderWarningBanners.vue +14 -1
  160. package/edit/auth/__tests__/oidc.test.ts +26 -0
  161. package/edit/auth/github-app-steps.vue +97 -0
  162. package/edit/auth/github-steps.vue +75 -0
  163. package/edit/auth/github.vue +99 -65
  164. package/edit/auth/oidc.vue +5 -1
  165. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
  166. package/edit/cloudcredential.vue +1 -1
  167. package/edit/configmap.vue +1 -0
  168. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  169. package/edit/fleet.cattle.io.gitrepo.vue +0 -10
  170. package/edit/fleet.cattle.io.helmop.vue +51 -2
  171. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  172. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  173. package/edit/logging-flow/index.vue +1 -0
  174. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  175. package/edit/management.cattle.io.fleetworkspace.vue +1 -1
  176. package/edit/management.cattle.io.project.vue +1 -0
  177. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -1
  178. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +2 -1
  179. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  180. package/edit/monitoring.coreos.com.receiver/index.vue +2 -1
  181. package/edit/monitoring.coreos.com.route.vue +1 -1
  182. package/edit/namespace.vue +1 -0
  183. package/edit/networking.istio.io.destinationrule/index.vue +1 -0
  184. package/edit/networking.k8s.io.ingress/index.vue +1 -0
  185. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +15 -5
  186. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -0
  187. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -0
  188. package/edit/node.vue +1 -0
  189. package/edit/persistentvolume/index.vue +27 -22
  190. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +13 -14
  191. package/edit/persistentvolume/plugins/azureDisk.vue +49 -48
  192. package/edit/persistentvolume/plugins/azureFile.vue +15 -14
  193. package/edit/persistentvolume/plugins/cephfs.vue +15 -14
  194. package/edit/persistentvolume/plugins/cinder.vue +15 -14
  195. package/edit/persistentvolume/plugins/csi.vue +18 -16
  196. package/edit/persistentvolume/plugins/fc.vue +13 -14
  197. package/edit/persistentvolume/plugins/flexVolume.vue +15 -14
  198. package/edit/persistentvolume/plugins/flocker.vue +1 -3
  199. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +13 -14
  200. package/edit/persistentvolume/plugins/glusterfs.vue +15 -14
  201. package/edit/persistentvolume/plugins/hostPath.vue +40 -39
  202. package/edit/persistentvolume/plugins/iscsi.vue +13 -14
  203. package/edit/persistentvolume/plugins/local.vue +1 -3
  204. package/edit/persistentvolume/plugins/longhorn.vue +23 -22
  205. package/edit/persistentvolume/plugins/nfs.vue +15 -14
  206. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -14
  207. package/edit/persistentvolume/plugins/portworxVolume.vue +15 -14
  208. package/edit/persistentvolume/plugins/quobyte.vue +15 -14
  209. package/edit/persistentvolume/plugins/rbd.vue +15 -14
  210. package/edit/persistentvolume/plugins/scaleIO.vue +15 -14
  211. package/edit/persistentvolume/plugins/storageos.vue +15 -14
  212. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -3
  213. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +32 -5
  214. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +35 -0
  215. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +155 -0
  216. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +11 -9
  217. package/edit/provisioning.cattle.io.cluster/index.vue +25 -15
  218. package/edit/provisioning.cattle.io.cluster/rke2.vue +98 -17
  219. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +28 -2
  220. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +107 -5
  221. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +92 -4
  222. package/edit/secret/index.vue +1 -1
  223. package/edit/service.vue +9 -4
  224. package/edit/serviceaccount.vue +1 -0
  225. package/edit/storage.k8s.io.storageclass/index.vue +1 -0
  226. package/edit/workload/index.vue +2 -1
  227. package/edit/workload/mixins/workload.js +1 -1
  228. package/initialize/App.vue +4 -4
  229. package/initialize/install-directives.js +2 -0
  230. package/initialize/install-plugins.js +19 -2
  231. package/list/projectsecret.vue +1 -1
  232. package/list/provisioning.cattle.io.cluster.vue +15 -2
  233. package/machine-config/amazonec2.vue +42 -135
  234. package/machine-config/azure.vue +1 -1
  235. package/machine-config/components/EC2Networking.vue +490 -0
  236. package/machine-config/components/__tests__/EC2Networking.test.ts +148 -0
  237. package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +294 -0
  238. package/machine-config/digitalocean.vue +11 -0
  239. package/machine-config/google.vue +1 -1
  240. package/mixins/__tests__/brand.spec.ts +2 -2
  241. package/mixins/__tests__/chart.test.ts +21 -0
  242. package/mixins/brand.js +1 -7
  243. package/mixins/chart.js +8 -2
  244. package/mixins/create-edit-view/index.js +5 -0
  245. package/models/__tests__/chart.test.ts +49 -12
  246. package/models/__tests__/compliance.cattle.io.clusterscanprofile.spec.js +30 -0
  247. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
  248. package/models/catalog.cattle.io.app.js +1 -1
  249. package/models/chart.js +28 -14
  250. package/models/cluster/node.js +13 -6
  251. package/models/cluster.x-k8s.io.machine.js +10 -20
  252. package/models/cluster.x-k8s.io.machinedeployment.js +5 -1
  253. package/models/compliance.cattle.io.clusterscanprofile.js +1 -1
  254. package/models/management.cattle.io.authconfig.js +1 -0
  255. package/models/management.cattle.io.cluster.js +21 -3
  256. package/models/management.cattle.io.kontainerdriver.js +1 -0
  257. package/models/provisioning.cattle.io.cluster.js +249 -33
  258. package/package.json +6 -5
  259. package/pages/auth/login.vue +43 -4
  260. package/pages/auth/verify.vue +1 -1
  261. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +3 -2
  262. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
  263. package/pages/c/_cluster/apps/charts/chart.vue +35 -17
  264. package/pages/c/_cluster/apps/charts/index.vue +11 -13
  265. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  266. package/pages/c/_cluster/explorer/EventsTable.vue +89 -3
  267. package/pages/c/_cluster/explorer/index.vue +8 -6
  268. package/pages/c/_cluster/explorer/tools/index.vue +3 -3
  269. package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
  270. package/pages/c/_cluster/settings/brand.vue +1 -1
  271. package/pages/c/_cluster/settings/performance.vue +12 -25
  272. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +7 -0
  273. package/pages/c/_cluster/uiplugins/catalogs.vue +147 -0
  274. package/pages/c/_cluster/uiplugins/index.vue +126 -184
  275. package/pages/home.vue +327 -16
  276. package/pkg/dynamic-importer.lib.js +4 -0
  277. package/plugins/axios.js +2 -1
  278. package/plugins/dashboard-client-init.js +3 -0
  279. package/plugins/dashboard-store/actions.js +1 -1
  280. package/plugins/dashboard-store/getters.js +18 -1
  281. package/plugins/dashboard-store/resource-class.js +21 -6
  282. package/plugins/dynamic-content.js +13 -0
  283. package/plugins/i18n.js +8 -0
  284. package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
  285. package/plugins/steve/steve-pagination-utils.ts +41 -22
  286. package/plugins/steve/subscribe.js +17 -9
  287. package/plugins/subscribe-events.ts +4 -2
  288. package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
  289. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -34
  290. package/rancher-components/Pill/RcStatusBadge/index.ts +0 -1
  291. package/rancher-components/Pill/RcStatusBadge/types.ts +1 -1
  292. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +5 -28
  293. package/rancher-components/Pill/RcStatusIndicator/types.ts +2 -1
  294. package/rancher-components/Pill/types.ts +0 -1
  295. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -0
  296. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +5 -1
  297. package/rancher-components/RcIcon/RcIcon.test.ts +51 -0
  298. package/rancher-components/RcIcon/RcIcon.vue +46 -0
  299. package/rancher-components/RcIcon/index.ts +1 -0
  300. package/rancher-components/RcIcon/types.ts +160 -0
  301. package/rancher-components/utils/status.test.ts +67 -0
  302. package/rancher-components/utils/status.ts +77 -0
  303. package/scripts/extension/publish +1 -1
  304. package/scripts/typegen.sh +1 -0
  305. package/store/action-menu.js +8 -0
  306. package/store/auth.js +11 -6
  307. package/store/aws.js +8 -6
  308. package/store/catalog.js +6 -0
  309. package/store/features.js +2 -0
  310. package/store/index.js +45 -20
  311. package/store/notifications.ts +51 -4
  312. package/store/plugins.js +7 -3
  313. package/store/prefs.js +12 -6
  314. package/store/type-map.js +3 -3
  315. package/store/ui-context.ts +86 -0
  316. package/store/wm.ts +244 -0
  317. package/types/kube/kube-api.ts +2 -1
  318. package/types/notifications/index.ts +27 -3
  319. package/types/rancher/index.d.ts +1 -0
  320. package/types/resources/settings.d.ts +29 -7
  321. package/types/shell/index.d.ts +138 -4
  322. package/types/store/__tests__/pagination.types.spec.ts +137 -0
  323. package/types/store/pagination.types.ts +157 -9
  324. package/types/store/subscribe-events.types.ts +8 -1
  325. package/types/store/subscribe.types.ts +1 -0
  326. package/types/window-manager.ts +24 -0
  327. package/utils/__tests__/cluster.test.ts +379 -1
  328. package/utils/__tests__/object.test.ts +19 -0
  329. package/utils/__tests__/provider.test.ts +98 -0
  330. package/utils/__tests__/selector-typed.test.ts +263 -0
  331. package/utils/__tests__/version.test.ts +19 -1
  332. package/utils/autoscaler-utils.ts +7 -0
  333. package/utils/back-off.ts +3 -3
  334. package/utils/brand.ts +29 -0
  335. package/utils/chart.js +18 -0
  336. package/utils/cluster.js +157 -3
  337. package/utils/color.js +1 -1
  338. package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
  339. package/utils/dynamic-content/__tests__/config.test.ts +187 -0
  340. package/utils/dynamic-content/__tests__/index.test.ts +390 -0
  341. package/utils/dynamic-content/__tests__/info.test.ts +275 -0
  342. package/utils/dynamic-content/__tests__/new-release.test.ts +216 -0
  343. package/utils/dynamic-content/__tests__/support-notice.test.ts +262 -0
  344. package/utils/dynamic-content/__tests__/util.test.ts +235 -0
  345. package/utils/dynamic-content/announcement.ts +142 -0
  346. package/utils/dynamic-content/config.ts +55 -0
  347. package/utils/dynamic-content/example.json +40 -0
  348. package/utils/dynamic-content/index.ts +277 -0
  349. package/utils/dynamic-content/info.ts +261 -0
  350. package/utils/dynamic-content/new-release.ts +126 -0
  351. package/utils/dynamic-content/notification-handler.ts +48 -0
  352. package/utils/dynamic-content/support-notice.ts +169 -0
  353. package/utils/dynamic-content/types.d.ts +153 -0
  354. package/utils/dynamic-content/util.ts +122 -0
  355. package/utils/dynamic-importer.js +2 -2
  356. package/utils/favicon.js +4 -4
  357. package/utils/inactivity.ts +104 -0
  358. package/utils/object.js +20 -2
  359. package/utils/pagination-utils.ts +19 -4
  360. package/utils/pagination-wrapper.ts +12 -8
  361. package/utils/provider.ts +14 -0
  362. package/utils/release-notes.ts +1 -1
  363. package/utils/scroll.js +7 -0
  364. package/utils/selector-typed.ts +6 -2
  365. package/utils/settings.ts +15 -0
  366. package/utils/validators/machine-pool.ts +13 -3
  367. package/utils/version.js +15 -0
  368. package/assets/images/icons/document.svg +0 -3
  369. package/plugins/nuxt-client-init.js +0 -3
  370. package/store/wm.js +0 -95
  371. /package/components/{nav/WindowManager → Window}/ChartReadme.vue +0 -0
  372. /package/components/{nav/WindowManager → Window}/ContainerShell.vue +0 -0
  373. /package/components/{nav/WindowManager → Window}/KubectlShell.vue +0 -0
  374. /package/components/{nav/WindowManager → Window}/MachineSsh.vue +0 -0
  375. /package/components/{nav/WindowManager → Window}/Window.vue +0 -0
package/store/wm.ts ADDED
@@ -0,0 +1,244 @@
1
+ import { STORAGE_KEY } from '@shell/components/nav/WindowManager/constants';
2
+ import { Layout, Position, Tab } from '@shell/types/window-manager';
3
+ import { addObject, removeObject } from '@shell/utils/array';
4
+ import { BOTTOM, LEFT, RIGHT } from '@shell/utils/position';
5
+
6
+ /**
7
+ * This module defines the Vuex store for the window manager, managing tabs, their positions,
8
+ * active states, panel dimensions, and user preferences.
9
+ *
10
+ * The store can be used to add, switch, and close tabs, as well as manage panel dimensions and locked positions.
11
+ * The store can be accessed also by Rancher extensions to integrate to handle the window manager.
12
+ */
13
+ export interface State {
14
+ tabs: Array<Tab>;
15
+ active: Record<Position | string, string>;
16
+ open: Record<Position | string, boolean>;
17
+ panelHeight: Record<Position | string, number | null>;
18
+ panelWidth: Record<Position | string, number | null>;
19
+ userPin: Position | string | null;
20
+ lockedPositions: Position[];
21
+ }
22
+
23
+ function moveTabByReference(tabs: Tab[], fromPosition: Position | undefined, toPosition: Position, tabId: string) {
24
+ const idx = tabs.findIndex((t) => t.id === tabId && t.position === fromPosition);
25
+
26
+ if (idx === -1) return;
27
+ const [tab] = tabs.splice(idx, 1);
28
+
29
+ tab.position = toPosition;
30
+
31
+ tabs.push(tab);
32
+ }
33
+
34
+ export const state = function() {
35
+ return {
36
+ tabs: [],
37
+ active: {},
38
+ open: {},
39
+ panelHeight: { [BOTTOM]: window.localStorage.getItem(STORAGE_KEY[BOTTOM]) },
40
+ panelWidth: {
41
+ [LEFT]: window.localStorage.getItem(STORAGE_KEY[LEFT]),
42
+ [RIGHT]: window.localStorage.getItem(STORAGE_KEY[RIGHT]),
43
+ },
44
+ userPin: null,
45
+ lockedPositions: [],
46
+ };
47
+ };
48
+
49
+ export const getters = {
50
+ byId: (state: State) => (id: string) => state.tabs.find((x) => x.id === id),
51
+ tabs: (state: State) => state.tabs,
52
+ isOpen: (state: State) => (position: string) => state.open[position],
53
+ panelWidth: (state: State) => state.panelWidth,
54
+ panelHeight: (state: State) => state.panelHeight,
55
+ userPin: (state: State) => state.userPin,
56
+ lockedPositions: (state: State) => state.lockedPositions,
57
+ };
58
+
59
+ export const mutations = {
60
+ /**
61
+ * Adds a new tab to the window manager.
62
+ *
63
+ * Usage:
64
+ *
65
+ * store.dispatch('wm/open', {
66
+ * id: PRODUCT_NAME,
67
+ * extensionId: PRODUCT_NAME,
68
+ * label: 'Label',
69
+ * component: 'LabelComponent',
70
+ * position: 'bottom',
71
+ * layouts: [
72
+ * Layout.default,
73
+ * Layout.home
74
+ * ],
75
+ * showHeader: false,
76
+ * }, { root: true });
77
+ *
78
+ * This will add a new tab with the specified properties to the window manager and set it as active.
79
+ */
80
+ addTab(state: State, tab: Tab) {
81
+ const existing = state.tabs.find((x) => x.id === tab.id);
82
+
83
+ if (tab.position === undefined || tab.position as string === 'undefined') {
84
+ tab.position = (window.localStorage.getItem(STORAGE_KEY['pin']) || BOTTOM) as Position;
85
+ }
86
+
87
+ if (!existing) {
88
+ if (state.lockedPositions.includes(BOTTOM)) {
89
+ tab.position = BOTTOM;
90
+ }
91
+
92
+ if (tab.layouts === undefined) {
93
+ tab.layouts = [Layout.default];
94
+ }
95
+
96
+ if (tab.showHeader === undefined) {
97
+ tab.showHeader = true;
98
+ }
99
+
100
+ addObject(state.tabs, tab);
101
+ }
102
+
103
+ state.active[tab.position] = tab.id;
104
+ state.open = { ...state.open, [tab.position]: true };
105
+
106
+ state.userPin = tab.position;
107
+ window.localStorage.setItem(STORAGE_KEY['pin'], tab.position);
108
+ },
109
+
110
+ /**
111
+ * Switches a tab to a different position within the window manager.
112
+ *
113
+ * Usage:
114
+ * store.commit('wm/switchTab', { tabId: 'tab1', targetPosition: LEFT });
115
+ *
116
+ * This will move the tab with ID 'tab1' to the LEFT position and update the active tab accordingly.
117
+ */
118
+ switchTab(state: State, { tabId, targetPosition }: { tabId: string, targetPosition: Position }) {
119
+ const current = { ...(state.tabs.find((x) => x.id === tabId) || {}) };
120
+
121
+ if (current) {
122
+ moveTabByReference(state.tabs, current.position, targetPosition, tabId);
123
+
124
+ state.active[targetPosition] = tabId;
125
+ state.open = { ...state.open, [targetPosition]: true };
126
+
127
+ if (current.position !== targetPosition) {
128
+ const oldPositionTabs = state.tabs.filter((t) => t.position === current.position);
129
+
130
+ if (current.position) {
131
+ state.active[current.position] = oldPositionTabs[0]?.id || '';
132
+ state.open[current.position] = oldPositionTabs.length > 0;
133
+ }
134
+ }
135
+ }
136
+
137
+ state.userPin = targetPosition;
138
+ window.localStorage.setItem(STORAGE_KEY['pin'], targetPosition);
139
+ },
140
+
141
+ closeTab(state: State, { id }: { id: string }) {
142
+ const tab = state.tabs.find((x) => x.id === id);
143
+
144
+ if ( !tab ) {
145
+ return;
146
+ }
147
+
148
+ let idx = state.tabs.indexOf(tab);
149
+
150
+ removeObject(state.tabs, tab);
151
+ if ( idx >= state.tabs.length ) {
152
+ idx = state.tabs.length - 1;
153
+ }
154
+
155
+ if ( idx >= 0 ) {
156
+ state.active[tab.position] = state.tabs[idx].id;
157
+ } else {
158
+ state.open[tab.position] = false;
159
+ }
160
+
161
+ const oldPositionTabs = state.tabs.filter((t) => t.position === tab.position);
162
+
163
+ if (tab.position) {
164
+ state.active[tab.position] = oldPositionTabs[0]?.id || '';
165
+ state.open[tab.position] = oldPositionTabs.length > 0;
166
+ }
167
+ },
168
+
169
+ removeTab(state: State, tab: Tab) {
170
+ removeObject(state.tabs, tab);
171
+ },
172
+
173
+ setOpen(state: State, { position, open }: { position: string, open: boolean }) {
174
+ state.open = { ...state.open, [position]: open };
175
+ },
176
+
177
+ setActive(state: State, { position, id }: { position: string, id: string }) {
178
+ state.active[position] = id;
179
+ },
180
+
181
+ setPanelHeight(state: State, { position, height }: { position: string, height: number | null }) {
182
+ state.panelHeight[position] = height;
183
+ window.localStorage.setItem(STORAGE_KEY[BOTTOM], `${ height }`);
184
+
185
+ for (const tab of state.tabs) {
186
+ if (tab.position === position) {
187
+ tab.containerHeight = height;
188
+ }
189
+ }
190
+ },
191
+
192
+ setPanelWidth(state: State, { position, width }: { position: Position, width: number | null }) {
193
+ state.panelWidth[position] = width;
194
+ window.localStorage.setItem(STORAGE_KEY[position as keyof typeof STORAGE_KEY], `${ width }`);
195
+
196
+ for (const tab of state.tabs) {
197
+ if (tab.position === position) {
198
+ tab.containerWidth = width;
199
+ }
200
+ }
201
+ },
202
+
203
+ /**
204
+ * Sets the user's preferred pin position for tabs in the window manager.
205
+ *
206
+ * Usage:
207
+ * store.commit('wm/setUserPin', LEFT);
208
+ *
209
+ * This will set the user's preferred pin position to LEFT and store it in local storage.
210
+ */
211
+ setUserPin(state: State, pin: string) {
212
+ state.userPin = pin;
213
+ window.localStorage.setItem(STORAGE_KEY['pin'], pin);
214
+ },
215
+
216
+ /**
217
+ * Sets the locked positions for tabs in the window manager.
218
+ *
219
+ * Usage:
220
+ * store.commit('wm/setLockedPositions', [LEFT, RIGHT]);
221
+ *
222
+ * This will lock tabs to the specified positions, preventing them from being moved elsewhere.
223
+ */
224
+ setLockedPositions(state: State, positions: Position[]) {
225
+ state.lockedPositions = positions;
226
+ }
227
+ };
228
+
229
+ export const actions = {
230
+ close({ commit }: { state: State, getters: any, commit: any }, id: string) {
231
+ if ( !id ) {
232
+ throw new Error('[wm] id is not provided');
233
+ }
234
+ commit('closeTab', { id });
235
+ },
236
+
237
+ open({ commit }: { commit: any }, tab: Tab) {
238
+ if ( !tab.id ) {
239
+ throw new Error('[wm] id is not provided');
240
+ }
241
+
242
+ commit('addTab', tab);
243
+ }
244
+ };
@@ -30,5 +30,6 @@ export interface KubeMetadata {
30
30
  }
31
31
 
32
32
  export interface RancherKubeMetadata extends KubeMetadata {
33
- namespace: string,
33
+ namespace?: string,
34
+ name: string
34
35
  }
@@ -14,6 +14,7 @@ export enum NotificationLevel {
14
14
  Success, // eslint-disable-line no-unused-vars
15
15
  Warning, // eslint-disable-line no-unused-vars
16
16
  Error, // eslint-disable-line no-unused-vars
17
+ Hidden, // eslint-disable-line no-unused-vars
17
18
  }
18
19
 
19
20
  /**
@@ -29,7 +30,7 @@ export type NotificationAction = {
29
30
  * Defines the User Preference linked to a notification
30
31
  */
31
32
  export type NotificationPreference = {
32
- key: string; // User preference key to use when setting the preference when the notification is marked as read
33
+ key: string; // User preference key to use when setting the preference when the notification is marked as read/unread
33
34
  value: string; // User preference value to use when setting the preference when the notification is marked as read
34
35
  unsetValue?: string; // User preference value to use when setting the preference when the notification is marked as unread - defaults to empty string
35
36
  };
@@ -47,6 +48,13 @@ export type EncryptedNotification = {
47
48
  primaryAction?: NotificationAction;
48
49
  // Secondary to be shown in the notification (optional)
49
50
  secondaryAction?: NotificationAction;
51
+ // User Preference tied to the notification (optional) (the preference will be updated when the notification is marked read)
52
+ preference?: NotificationPreference;
53
+ // Handler to be associated with this notification that can invoke additional behaviour when the notification changes
54
+ // This is the name of the handler (the handlers are added as extensions). Notifications are persisted in the store, so can't use functions.
55
+ handlerName?: string;
56
+ // Additional data to be stored with the notification (optional)
57
+ data?: any;
50
58
  };
51
59
 
52
60
  /**
@@ -57,8 +65,6 @@ export type Notification = {
57
65
  id: string;
58
66
  // Progress (0-100) for notifications of type `Task` (optional)
59
67
  progress?: number;
60
- // User Preference tied to the notification (optional) (the preference will be updated when the notification is marked read)
61
- preference?: NotificationPreference;
62
68
  } & EncryptedNotification;
63
69
 
64
70
  /**
@@ -72,3 +78,21 @@ export type StoredNotification = {
72
78
  created: Date;
73
79
  read: Boolean;
74
80
  } & Notification;
81
+
82
+ /**
83
+ * Name to use when registering a custom notification handler
84
+ */
85
+ export const NotificationHandlerExtensionName = 'notification-handler';
86
+
87
+ /**
88
+ * Interface for notification handler
89
+ */
90
+ export interface NotificationHandler {
91
+ /**
92
+ * Called when a notification with this handler has its read status is updated (read or unread)
93
+ *
94
+ * @param notification Notification that was marked read or unread
95
+ * @param read Indicates whether the notification was updated to be read or unread
96
+ */
97
+ onReadUpdated(notification: Notification, read: boolean): void;
98
+ }
@@ -4,6 +4,7 @@ declare module '@rancher/auto-import' {
4
4
 
5
5
  declare module '@shell/store/type-map' {
6
6
  export function DSL(store: any, name: string): any;
7
+ export function isAdminUser(getters: any): boolean;
7
8
  }
8
9
 
9
10
  declare module '@shell/plugins/dashboard-store';
@@ -20,14 +20,39 @@ export interface PaginationSettingsStore {
20
20
  }
21
21
  }
22
22
 
23
- /**
23
+ /*
24
24
  * Determine which resources can utilise server-side pagination
25
25
  */
26
26
  export interface PaginationSettingsStores {
27
27
  [store: string]: PaginationSettingsStore
28
28
  }
29
29
 
30
- export type PaginationFeature = 'listAutoRefreshToggle' | 'listManualRefresh'
30
+ /**
31
+ * Names of pagination features used in pagination settings (not featureflags)
32
+ */
33
+ export type PaginationFeatureName = 'listAutoRefreshToggle' | 'listManualRefresh' | 'homePageCluster'
34
+
35
+ export type PaginationFeatureHomePageClusterConfig = {
36
+ threshold: number,
37
+ results: number,
38
+ pagesPerRow: number
39
+ }
40
+
41
+ /**
42
+ * Details of a specific pagination feature
43
+ */
44
+ export type PaginationFeature<Config = any> = {
45
+ version: number,
46
+ enabled: boolean,
47
+ configuration?: Config,
48
+ }
49
+
50
+ /**
51
+ * List of specific features that can be enabled / disabled
52
+ */
53
+ export type PaginationSettingsFeatures = {
54
+ [key in PaginationFeatureName]?: PaginationFeature
55
+ }
31
56
 
32
57
  /**
33
58
  * Settings to handle server side pagination
@@ -45,11 +70,7 @@ export interface PaginationSettings {
45
70
  /**
46
71
  * List of specific features that can be enabled / disabled
47
72
  */
48
- features?: {
49
- [key in PaginationFeature]: {
50
- enabled: boolean,
51
- }
52
- },
73
+ features?: PaginationSettingsFeatures,
53
74
 
54
75
  /**
55
76
  * Debounce the amount of time between a resource changing and the backend sending a resource.changes message
@@ -82,6 +103,7 @@ type ManagedFields = {
82
103
  time: string;
83
104
  };
84
105
 
106
+ // Note - this should now be @RancherKubeMetadata
85
107
  type Metadata = {
86
108
  creationTimestamp: string;
87
109
  fields: string[];
@@ -70,12 +70,16 @@ export namespace CAPI {
70
70
  let SECRET_AUTH: string;
71
71
  let SECRET_WILL_DELETE: string;
72
72
  let UI_CUSTOM_PROVIDER: string;
73
+ let AUTOSCALER_CLUSTER_PAUSE: string;
74
+ let AUTOSCALER_MACHINE_POOL_MIN_SIZE: string;
75
+ let AUTOSCALER_MACHINE_POOL_MAX_SIZE: string;
73
76
  }
74
77
  export namespace CATALOG {
75
78
  let CERTIFIED: string;
76
79
  let _RANCHER: string;
77
80
  let _PARTNER: string;
78
81
  let _OTHER: string;
82
+ let PRIME_ONLY: string;
79
83
  let EXPERIMENTAL: string;
80
84
  let NAMESPACE: string;
81
85
  let RELEASE_NAME: string;
@@ -174,6 +178,7 @@ export const STEP: "step";
174
178
  export const LOGGED_OUT: "logged-out";
175
179
  export const IS_SSO: "is-sso";
176
180
  export const IS_SLO: "is-slo";
181
+ export const IS_SESSION_IDLE: "is-session-idle";
177
182
  export const UPGRADED: "upgraded";
178
183
  export const TIMED_OUT: "timed-out";
179
184
  export const AUTH_TEST: "test";
@@ -1999,6 +2004,18 @@ export namespace PROJECT {
1999
2004
  let labelKey_124: string;
2000
2005
  export { labelKey_124 as labelKey };
2001
2006
  }
2007
+ export namespace AUTOSCALER_ENABLED {
2008
+ let name_128: string;
2009
+ export { name_128 as name };
2010
+ let labelKey_125: string;
2011
+ export { labelKey_125 as labelKey };
2012
+ let value_127: string;
2013
+ export { value_127 as value };
2014
+ let sort_116: string[];
2015
+ export { sort_116 as sort };
2016
+ let formatter_71: string;
2017
+ export { formatter_71 as formatter };
2018
+ }
2002
2019
  }
2003
2020
 
2004
2021
  // @shell/config/types
@@ -2190,6 +2207,15 @@ export namespace MANAGEMENT {
2190
2207
  export let CLUSTER_PROXY_CONFIG: string;
2191
2208
  export let OIDC_CLIENT: string;
2192
2209
  }
2210
+ export namespace BRAND {
2211
+ let SUSE: string;
2212
+ let CSP: string;
2213
+ let FEDERAL: string;
2214
+ let RGS: string;
2215
+ }
2216
+ export namespace EXT {
2217
+ let USER_ACTIVITY: string;
2218
+ }
2193
2219
  export namespace CAPI {
2194
2220
  let CAPI_CLUSTER: string;
2195
2221
  let MACHINE_DEPLOYMENT: string;
@@ -2318,6 +2344,8 @@ export const ZERO_TIME: "0001-01-01T00:00:00Z";
2318
2344
  export const DEFAULT_GRAFANA_STORAGE_SIZE: "10Gi";
2319
2345
  export const DEPRECATED: "Deprecated";
2320
2346
  export const EXPERIMENTAL: "Experimental";
2347
+ export const AUTOSCALER_CONFIG_MAP_ID: "kube-system/cluster-autoscaler-status";
2348
+ export const HOSTED_PROVIDER: "hostedprovider";
2321
2349
  }
2322
2350
 
2323
2351
  // @shell/config/version
@@ -2332,7 +2360,7 @@ export function getVersionData(): {
2332
2360
  export function setVersionData(v: any): void;
2333
2361
  export function getKubeVersionData(): {};
2334
2362
  export function setKubeVersionData(v: any): void;
2335
- export const CURRENT_RANCHER_VERSION: "2.12";
2363
+ export const CURRENT_RANCHER_VERSION: "2.13";
2336
2364
  }
2337
2365
 
2338
2366
  // @shell/mixins/components/ResourceList/resource-list.config
@@ -2421,6 +2449,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2421
2449
  type: BooleanConstructor;
2422
2450
  default: any;
2423
2451
  };
2452
+ defaultTab: {
2453
+ type: StringConstructor;
2454
+ default: any;
2455
+ };
2424
2456
  }>, {}, {
2425
2457
  errors: any[];
2426
2458
  }, {
@@ -2478,6 +2510,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2478
2510
  type: BooleanConstructor;
2479
2511
  default: any;
2480
2512
  };
2513
+ defaultTab: {
2514
+ type: StringConstructor;
2515
+ default: any;
2516
+ };
2481
2517
  }>> & Readonly<{
2482
2518
  [x: `on${Capitalize<string>}`]: (...args: any[]) => any;
2483
2519
  }>, {
@@ -2488,6 +2524,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2488
2524
  liveValue: Record<string, any>;
2489
2525
  realMode: string;
2490
2526
  useTabbedHash: boolean;
2527
+ defaultTab: string;
2491
2528
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2492
2529
  export default _default;
2493
2530
  }
@@ -3294,7 +3331,7 @@ export default class Resource {
3294
3331
  weight: number;
3295
3332
  divider?: undefined;
3296
3333
  })[];
3297
- showConfiguration(returnFocusSelector: any): void;
3334
+ showConfiguration(returnFocusSelector: any, defaultTab: any): void;
3298
3335
  get _availableActions(): ({
3299
3336
  action: string;
3300
3337
  label: any;
@@ -3612,6 +3649,26 @@ export default class Resource {
3612
3649
  }
3613
3650
  }
3614
3651
 
3652
+ // @shell/plugins/i18n
3653
+
3654
+ declare module '@shell/plugins/i18n' {
3655
+ /**
3656
+ * @param {import('vuex').Store<any>} store
3657
+ * @param {string} key
3658
+ * @param {Record<string, any>} [args]
3659
+ * @param {boolean} [raw]
3660
+ * @param {boolean} [escapehtml]
3661
+ * @returns {string}
3662
+ */
3663
+ export function stringFor(store: import("vuex").Store<any>, key: string, args?: Record<string, any>, raw?: boolean, escapehtml?: boolean): string;
3664
+ export function directiveSsr(vnode: any, binding: any): void;
3665
+ export default i18n;
3666
+ declare namespace i18n {
3667
+ let name: string;
3668
+ function install(vueApp: any, _options: any): void;
3669
+ }
3670
+ }
3671
+
3615
3672
  // @shell/plugins/steve/hybrid-class
3616
3673
 
3617
3674
  declare module '@shell/plugins/steve/hybrid-class' {
@@ -3671,6 +3728,8 @@ export const STEVE_CACHE: any;
3671
3728
  export const UIEXTENSION: any;
3672
3729
  export const PROVISIONING_PRE_BOOTSTRAP: any;
3673
3730
  export const SCHEDULING_CUSTOMIZATION: any;
3731
+ export const SCC: any;
3732
+ export const AUTOSCALER: any;
3674
3733
  export namespace getters {
3675
3734
  function get(state: any, getters: any, rootState: any, rootGetters: any): (name: any) => any;
3676
3735
  }
@@ -3754,6 +3813,10 @@ export const _RKE2: "rke2";
3754
3813
  export const PROVISIONER: any;
3755
3814
  export const MENU_MAX_CLUSTERS: 10;
3756
3815
  export const SCALE_POOL_PROMPT: any;
3816
+ export const READ_NEW_RELEASE: any;
3817
+ export const READ_SUPPORT_NOTICE: any;
3818
+ export const READ_UPCOMING_SUPPORT_NOTICE: any;
3819
+ export const READ_ANNOUNCEMENTS: any;
3757
3820
  export function state(): {
3758
3821
  cookiesLoaded: boolean;
3759
3822
  data: {};
@@ -3923,6 +3986,19 @@ export function getIndividualBanners(store: any): {};
3923
3986
  export function overlayIndividualBanners(parsedBanner: any, banners: any): void;
3924
3987
  }
3925
3988
 
3989
+ // @shell/utils/chart
3990
+
3991
+ declare module '@shell/utils/chart' {
3992
+ /**
3993
+ * Get the latest chart version that is compatible with the cluster's OS and user's pre-release preference.
3994
+ * @param {Object} chart - The chart object.
3995
+ * @param {Array<string>} workerOSs - The list of worker OSs for the cluster.
3996
+ * @param {boolean} showPrerelease - Whether to include pre-release versions.
3997
+ * @returns {Object} The latest compatible chart version object.
3998
+ */
3999
+ export function getLatestCompatibleVersion(chart: any, workerOSs: Array<string>, showPrerelease: boolean): any;
4000
+ }
4001
+
3926
4002
  // @shell/utils/clipboard
3927
4003
 
3928
4004
  declare module '@shell/utils/clipboard' {
@@ -3980,6 +4056,57 @@ export function initSchedulingCustomization(value: any, features: any, store: an
3980
4056
  schedulingCustomizationOriginallyEnabled: boolean;
3981
4057
  errors: any[];
3982
4058
  }>;
4059
+ /**
4060
+ * Recursively filters a `diffs` object to only include differences that are relevant to the user.
4061
+ * A difference is considered relevant if the user has provided a custom value for that specific field.
4062
+ *
4063
+ * @param {object} diffs - The object representing the differences between two chart versions' default values.
4064
+ * @param {object} userVals - The object containing the user's custom values.
4065
+ * @returns {object} A new object containing only the relevant differences.
4066
+ */
4067
+ export function _addonConfigPreserveFilter(diffs: object, userVals: object): object;
4068
+ /**
4069
+ * @typedef {object} AddonPreserveContext
4070
+ * @property {object} addonConfigDiffs - An object that stores the diffs.
4071
+ * @property {string[]} addonNames - An array of addon names to check.
4072
+ * @property {object} $store - The Vuex store.
4073
+ * @property {object} userChartValues - The user's customized chart values.
4074
+ *
4075
+ * When the Kubernetes version is changed, this method is called to handle the add-on configurations
4076
+ * for all enabled addons. It checks if an addon's version has changed and, if so, determines if the
4077
+ * user's custom configurations should be preserved for the new version.
4078
+ *
4079
+ * The goal is to avoid showing a confirmation dialog for changes in default values that the user has not customized.
4080
+ *
4081
+ * @param {AddonPreserveContext} context The context object from the component.
4082
+ * @param {object} oldCharts The charts object from the K8s release object being changed from.
4083
+ * @param {object} newCharts The charts object from the K8s release object being changed to.
4084
+ */
4085
+ export function addonConfigPreserve(context: AddonPreserveContext, oldCharts: object, newCharts: object): Promise<void>;
4086
+ export type AddonPreserveContext = {
4087
+ /**
4088
+ * - An object that stores the diffs.
4089
+ */
4090
+ addonConfigDiffs: object;
4091
+ /**
4092
+ * - An array of addon names to check.
4093
+ */
4094
+ addonNames: string[];
4095
+ /**
4096
+ * - The Vuex store.
4097
+ */
4098
+ $store: object;
4099
+ /**
4100
+ * - The user's customized chart values.
4101
+ *
4102
+ * When the Kubernetes version is changed, this method is called to handle the add-on configurations
4103
+ * for all enabled addons. It checks if an addon's version has changed and, if so, determines if the
4104
+ * user's custom configurations should be preserved for the new version.
4105
+ *
4106
+ * The goal is to avoid showing a confirmation dialog for changes in default values that the user has not customized.
4107
+ */
4108
+ userChartValues: object;
4109
+ };
3983
4110
  }
3984
4111
 
3985
4112
  // @shell/utils/color
@@ -3992,7 +4119,7 @@ export function contrastColor(color: any, contrastOptions?: {
3992
4119
  dark: string;
3993
4120
  light: string;
3994
4121
  }): string;
3995
- export function parseColor(str: any): any;
4122
+ export function parseColor(str: any): import("color").ColorInstance;
3996
4123
  export function textColor(color: any): "black" | "white";
3997
4124
  export function hexToRgb(hex: any): {
3998
4125
  r: number;
@@ -4436,7 +4563,7 @@ export function isEmpty(obj: any): boolean;
4436
4563
  export function isSimpleKeyValue(obj: any): boolean;
4437
4564
  export function cleanUp(obj: any): any;
4438
4565
  export function definedKeys(obj: any): any;
4439
- export function diff(from: any, to: any): any;
4566
+ export function diff(from: any, to: any, preventNull?: boolean): any;
4440
4567
  export function changeset(from: any, to: any, parentPath?: any[]): {};
4441
4568
  export function changesetConflicts(a: any, b: any): any[];
4442
4569
  export function applyChangeset(obj: any, changeset: any): any;
@@ -4676,6 +4803,12 @@ export function routeRequiresAuthentication(to: any): boolean;
4676
4803
  export function routeRequiresInstallRedirect(to: any): boolean;
4677
4804
  }
4678
4805
 
4806
+ // @shell/utils/scroll
4807
+
4808
+ declare module '@shell/utils/scroll' {
4809
+ export function scrollToBottom(): void;
4810
+ }
4811
+
4679
4812
  // @shell/utils/select
4680
4813
 
4681
4814
  declare module '@shell/utils/select' {
@@ -5160,6 +5293,7 @@ export function parse(str: any): any;
5160
5293
  export function sortable(str: any): any;
5161
5294
  export function compare(in1: any, in2: any): any;
5162
5295
  export function isPrerelease(version?: string): boolean;
5296
+ export function isUpgradeFromPreToStable(currentVersion: any, targetVersion: any): any;
5163
5297
  export function isDevBuild(version: any): boolean;
5164
5298
  export function getVersionInfo(store: any): {
5165
5299
  displayVersion: any;