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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/assets/data/aws-regions.json +1 -0
  2. package/assets/images/key.svg +17 -0
  3. package/assets/styles/base/_spacing.scss +2 -2
  4. package/assets/styles/global/_form.scss +1 -1
  5. package/assets/styles/global/_labeled-input.scss +1 -1
  6. package/assets/styles/themes/_dark.scss +3 -0
  7. package/assets/styles/themes/_light.scss +3 -0
  8. package/assets/styles/vendor/vue-select.scss +1 -1
  9. package/assets/translations/en-us.yaml +404 -64
  10. package/assets/translations/zh-hans.yaml +3 -4
  11. package/cloud-credential/gcp.vue +9 -1
  12. package/components/AppModal.vue +2 -0
  13. package/components/CodeMirror.vue +1 -1
  14. package/components/ConfigMapSettings/Settings.vue +377 -0
  15. package/components/ConfigMapSettings/index.vue +354 -0
  16. package/components/CruResource.vue +1 -2
  17. package/components/DetailText.vue +61 -11
  18. package/components/Drawer/Chrome.vue +116 -0
  19. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  20. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  21. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  22. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  23. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
  24. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  25. package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
  26. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  27. package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
  28. package/components/GrowlManager.vue +16 -15
  29. package/components/IconOrSvg.vue +5 -0
  30. package/components/KeyValueView.vue +1 -1
  31. package/components/LocaleSelector.vue +9 -1
  32. package/components/ProgressBarMulti.vue +1 -0
  33. package/components/PromptModal.vue +6 -1
  34. package/components/RelatedResources.vue +4 -12
  35. package/components/Resource/Detail/Additional.vue +46 -0
  36. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
  37. package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
  38. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  39. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +37 -254
  40. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
  41. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +27 -5
  42. package/components/Resource/Detail/Metadata/KeyValue.vue +25 -17
  43. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
  44. package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
  45. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
  46. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
  47. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  48. package/components/Resource/Detail/Metadata/composables.ts +60 -11
  49. package/components/Resource/Detail/Metadata/index.vue +12 -5
  50. package/components/Resource/Detail/Page.vue +15 -0
  51. package/components/Resource/Detail/ResourceRow.vue +37 -18
  52. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  53. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  54. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  55. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  56. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  57. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  58. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  59. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  60. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  61. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  62. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  63. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  64. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  65. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  66. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  67. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  68. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  69. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  70. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  71. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  72. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  73. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  74. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  75. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  76. package/components/Resource/Detail/TitleBar/Title.vue +2 -1
  77. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
  78. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
  79. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  80. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
  81. package/components/Resource/Detail/TitleBar/composables.ts +44 -0
  82. package/components/Resource/Detail/TitleBar/index.vue +83 -11
  83. package/components/Resource/Detail/composables.ts +45 -0
  84. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  85. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  86. package/components/ResourceDetail/Masthead/index.vue +65 -0
  87. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  88. package/components/ResourceDetail/__tests__/index.test.ts +26 -5
  89. package/components/ResourceDetail/index.vue +30 -16
  90. package/components/ResourceDetail/legacy.vue +18 -1
  91. package/components/ResourceList/Masthead.vue +6 -0
  92. package/components/ResourceYaml.vue +14 -1
  93. package/components/SlideInPanelManager.vue +46 -7
  94. package/components/StateDot/index.vue +28 -0
  95. package/components/Tabbed/index.vue +11 -15
  96. package/components/Wizard.vue +4 -2
  97. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  98. package/components/__tests__/GrowlManager.test.ts +0 -25
  99. package/components/auth/login/ldap.vue +1 -1
  100. package/components/fleet/FleetApplications.vue +0 -7
  101. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  102. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  103. package/components/fleet/FleetClusters.vue +25 -6
  104. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  105. package/components/fleet/FleetHelmOps.vue +8 -0
  106. package/components/fleet/FleetRepos.vue +1 -6
  107. package/components/fleet/FleetResources.vue +4 -5
  108. package/components/fleet/FleetValuesFrom.vue +295 -0
  109. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  110. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  111. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
  112. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  113. package/components/fleet/dashboard/ResourceCard.vue +1 -0
  114. package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
  115. package/components/fleet/dashboard/ResourceDetails.vue +8 -10
  116. package/components/fleet/dashboard/ResourcePanel.vue +15 -8
  117. package/components/form/ArrayList.vue +13 -2
  118. package/components/form/ChangePassword.vue +3 -1
  119. package/components/form/Footer.vue +10 -4
  120. package/components/form/KeyValue.vue +81 -43
  121. package/components/form/LabeledSelect.vue +56 -16
  122. package/components/form/Labels.vue +90 -17
  123. package/components/form/MatchExpressions.vue +46 -5
  124. package/components/form/NameNsDescription.vue +1 -1
  125. package/components/form/ResourceSelector.vue +1 -0
  126. package/components/form/ResourceTabs/index.vue +5 -0
  127. package/components/form/SecretSelector.vue +9 -2
  128. package/components/form/Select.vue +57 -19
  129. package/components/form/SimpleSecretSelector.vue +9 -2
  130. package/components/form/Taints.vue +21 -2
  131. package/components/form/UnitInput.vue +8 -0
  132. package/components/form/ValueFromResource.vue +1 -1
  133. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  134. package/components/form/__tests__/Labels.test.ts +360 -0
  135. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  136. package/components/form/__tests__/Select.test.ts +5 -2
  137. package/components/formatter/FleetApplicationSource.vue +1 -1
  138. package/components/formatter/WorkloadHealthScale.vue +1 -1
  139. package/components/google/AccountAccess.vue +211 -0
  140. package/components/google/types/gcp.d.ts +136 -0
  141. package/components/google/types/index.d.ts +101 -0
  142. package/components/google/util/__mocks__/gcp.ts +465 -0
  143. package/components/google/util/formatter.ts +82 -0
  144. package/components/google/util/gcp.ts +134 -0
  145. package/components/google/util/index.d.ts +11 -0
  146. package/components/nav/Favorite.vue +1 -1
  147. package/components/nav/Group.vue +70 -47
  148. package/components/nav/Header.vue +5 -1
  149. package/components/nav/NamespaceFilter.vue +13 -1
  150. package/components/nav/NotificationCenter/Notification.vue +510 -0
  151. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  152. package/components/nav/NotificationCenter/index.vue +148 -0
  153. package/composables/drawer.ts +26 -0
  154. package/composables/resources.test.ts +63 -0
  155. package/composables/resources.ts +38 -0
  156. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  157. package/config/labels-annotations.js +6 -0
  158. package/config/product/auth.js +16 -1
  159. package/config/product/{cis.js → compliance.js} +23 -26
  160. package/config/product/explorer.js +5 -1
  161. package/config/product/fleet.js +7 -0
  162. package/config/product/settings.js +22 -11
  163. package/config/query-params.js +3 -0
  164. package/config/roles.ts +1 -1
  165. package/config/router/navigation-guards/authentication.js +51 -2
  166. package/config/router/routes.js +27 -31
  167. package/config/settings.ts +21 -3
  168. package/config/store.js +2 -0
  169. package/config/system-namespaces.js +1 -1
  170. package/config/table-headers.js +2 -2
  171. package/config/types.js +15 -6
  172. package/core/plugin.ts +32 -7
  173. package/core/types.ts +18 -1
  174. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  175. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  176. package/detail/management.cattle.io.oidcclient.vue +369 -0
  177. package/detail/node.vue +2 -2
  178. package/detail/pod.vue +2 -2
  179. package/detail/service.vue +10 -1
  180. package/detail/workload/index.vue +8 -2
  181. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  182. package/dialog/GenericPrompt.vue +1 -1
  183. package/dialog/ImportDialog.vue +8 -8
  184. package/dialog/OidcClientSecretDialog.vue +117 -0
  185. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  186. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
  187. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  188. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  189. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  190. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  191. package/edit/configmap.vue +4 -1
  192. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  193. package/edit/fleet.cattle.io.gitrepo.vue +44 -222
  194. package/edit/fleet.cattle.io.helmop.vue +44 -269
  195. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  196. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  197. package/edit/logging-flow/index.vue +1 -0
  198. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  199. package/edit/management.cattle.io.fleetworkspace.vue +1 -0
  200. package/edit/management.cattle.io.oidcclient.vue +162 -0
  201. package/edit/management.cattle.io.project.vue +4 -1
  202. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  203. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  204. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  205. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  206. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  207. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  208. package/edit/monitoring.coreos.com.route.vue +1 -0
  209. package/edit/namespace.vue +1 -0
  210. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  211. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  212. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  213. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  214. package/edit/node.vue +1 -0
  215. package/edit/persistentvolume/index.vue +4 -1
  216. package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
  217. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
  218. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  219. package/edit/resources.cattle.io.restore.vue +1 -1
  220. package/edit/secret/index.vue +1 -0
  221. package/edit/service.vue +4 -1
  222. package/edit/serviceaccount.vue +4 -1
  223. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  224. package/edit/workload/index.vue +5 -0
  225. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  226. package/list/management.cattle.io.oidcclient.vue +108 -0
  227. package/list/node.vue +2 -0
  228. package/machine-config/amazonec2.vue +3 -24
  229. package/machine-config/components/GCEImage.vue +374 -0
  230. package/machine-config/google.vue +617 -0
  231. package/mixins/__tests__/brand.spec.ts +170 -0
  232. package/mixins/brand.js +16 -17
  233. package/mixins/create-edit-view/index.js +5 -0
  234. package/mixins/resource-fetch-api-pagination.js +16 -0
  235. package/mixins/vue-select-overrides.js +1 -0
  236. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  237. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  238. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  239. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  240. package/models/fleet-application.js +8 -79
  241. package/models/fleet.cattle.io.cluster.js +11 -0
  242. package/models/fleet.cattle.io.gitrepo.js +2 -2
  243. package/models/fleet.cattle.io.helmop.js +9 -39
  244. package/models/management.cattle.io.fleetworkspace.js +2 -1
  245. package/models/management.cattle.io.oidcclient.js +18 -0
  246. package/models/management.cattle.io.registration.js +3 -0
  247. package/models/provisioning.cattle.io.cluster.js +5 -5
  248. package/models/service.js +4 -0
  249. package/models/workload.js +5 -0
  250. package/package.json +1 -1
  251. package/pages/about.vue +4 -58
  252. package/pages/auth/login.vue +1 -1
  253. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
  254. package/pages/c/_cluster/apps/charts/index.vue +285 -81
  255. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  256. package/pages/c/_cluster/explorer/index.vue +3 -3
  257. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  258. package/pages/c/_cluster/fleet/application/create.vue +3 -2
  259. package/pages/c/_cluster/fleet/index.vue +94 -56
  260. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  261. package/pages/c/_cluster/longhorn/index.vue +5 -2
  262. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  263. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  264. package/pages/explorer/resource/detail/configmap.vue +30 -7
  265. package/pages/explorer/resource/detail/secret.vue +50 -0
  266. package/pages/home.vue +9 -55
  267. package/pages/support/index.vue +4 -6
  268. package/plugins/dashboard-store/actions.js +19 -5
  269. package/plugins/dashboard-store/getters.js +4 -0
  270. package/plugins/dashboard-store/resource-class.js +16 -2
  271. package/plugins/steve/steve-pagination-utils.ts +26 -18
  272. package/plugins/steve/subscribe.js +6 -1
  273. package/rancher-components/Banner/Banner.vue +13 -0
  274. package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
  275. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  276. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  277. package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
  278. package/store/auth.js +2 -0
  279. package/store/catalog.js +23 -1
  280. package/store/growl.js +97 -8
  281. package/store/index.js +6 -0
  282. package/store/notifications.ts +426 -0
  283. package/store/prefs.js +0 -1
  284. package/store/type-map.js +19 -16
  285. package/store/uiplugins.ts +15 -1
  286. package/types/fleet.d.ts +24 -0
  287. package/types/notifications/index.ts +74 -0
  288. package/types/shell/index.d.ts +46 -32
  289. package/types/store/dashboard-store.types.ts +16 -0
  290. package/utils/__tests__/fleet.test.ts +148 -0
  291. package/utils/__tests__/object.test.ts +54 -1
  292. package/utils/__tests__/string.test.ts +273 -1
  293. package/utils/__tests__/time.test.ts +31 -0
  294. package/utils/auth.js +9 -2
  295. package/utils/crypto/encryption.ts +103 -0
  296. package/utils/cspAdaptor.ts +51 -0
  297. package/utils/fleet.ts +54 -65
  298. package/utils/object.js +36 -0
  299. package/utils/pagination-utils.ts +1 -1
  300. package/utils/release-notes.ts +48 -0
  301. package/utils/selector-typed.ts +7 -2
  302. package/utils/string.js +24 -0
  303. package/utils/{time.js → time.ts} +25 -6
  304. package/utils/uiplugins.ts +22 -0
  305. package/utils/validators/formRules/index.ts +3 -0
  306. package/components/Resource/Detail/TitleBar/composable.ts +0 -31
  307. package/config/product/legacy.js +0 -62
  308. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  309. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  310. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  311. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
  312. /package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -0
@@ -158,6 +158,11 @@ export const SYSTEM_LABELS: string[];
158
158
  export namespace CLOUD_CREDENTIALS {
159
159
  let EXPIRATION: string;
160
160
  }
161
+ export namespace OIDC_CLIENT_SECRET_ANNOTATIONS {
162
+ let CREATE: string;
163
+ let REGEN: string;
164
+ let REMOVE: string;
165
+ }
161
166
  }
162
167
 
163
168
  // @shell/config/query-params
@@ -224,6 +229,7 @@ export const PROVIDER: "provider";
224
229
  export const CLOUD_CREDENTIAL: "cloud";
225
230
  export const PROJECT_ID: "projectId";
226
231
  export const FLAT_VIEW: "flatView";
232
+ export const RANCHER_AS_OIDC_QUERY_PARAMS: string[];
227
233
  }
228
234
 
229
235
  // @shell/config/table-headers
@@ -2045,6 +2051,12 @@ export namespace CATALOG {
2045
2051
  export { APP_1 as APP };
2046
2052
  export let REPO: string;
2047
2053
  }
2054
+ export namespace CATALOG_SORT_OPTIONS {
2055
+ let RECOMMENDED: string;
2056
+ let LAST_UPDATED_DESC: string;
2057
+ let ALPHABETICAL_ASC: string;
2058
+ let ALPHABETICAL_DESC: string;
2059
+ }
2048
2060
  export const UI_PLUGIN: "catalog.cattle.io.uiplugin";
2049
2061
  export namespace HELM {
2050
2062
  let PROJECTHELMCHART: string;
@@ -2126,6 +2138,7 @@ export namespace MANAGEMENT {
2126
2138
  export let RKE_TEMPLATE: string;
2127
2139
  export let RKE_TEMPLATE_REVISION: string;
2128
2140
  export let CLUSTER_PROXY_CONFIG: string;
2141
+ export let OIDC_CLIENT: string;
2129
2142
  }
2130
2143
  export namespace CAPI {
2131
2144
  let CAPI_CLUSTER: string;
@@ -2202,7 +2215,7 @@ export namespace BACKUP_RESTORE {
2202
2215
  let BACKUP: string;
2203
2216
  let RESTORE: string;
2204
2217
  }
2205
- export namespace CIS {
2218
+ export namespace COMPLIANCE {
2206
2219
  let CLUSTER_SCAN: string;
2207
2220
  let CLUSTER_SCAN_PROFILE: string;
2208
2221
  let BENCHMARK: string;
@@ -2341,6 +2354,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2341
2354
  type: BooleanConstructor;
2342
2355
  default: boolean;
2343
2356
  };
2357
+ useTabbedHash: {
2358
+ type: BooleanConstructor;
2359
+ default: any;
2360
+ };
2344
2361
  }>, {}, {
2345
2362
  errors: any[];
2346
2363
  }, {
@@ -2394,6 +2411,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2394
2411
  type: BooleanConstructor;
2395
2412
  default: boolean;
2396
2413
  };
2414
+ useTabbedHash: {
2415
+ type: BooleanConstructor;
2416
+ default: any;
2417
+ };
2397
2418
  }>> & Readonly<{
2398
2419
  [x: `on${Capitalize<string>}`]: (...args: any[]) => any;
2399
2420
  }>, {
@@ -2403,6 +2424,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2403
2424
  initialValue: Record<string, any>;
2404
2425
  liveValue: Record<string, any>;
2405
2426
  realMode: string;
2427
+ useTabbedHash: boolean;
2406
2428
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2407
2429
  export default _default;
2408
2430
  }
@@ -2660,6 +2682,7 @@ declare namespace _default {
2660
2682
  *
2661
2683
  * @param {*} ctx
2662
2684
  * @param { {type: string, opt: ActionFindPageArgs} } opt
2685
+ * @returns @ActionFindPageResponse
2663
2686
  */
2664
2687
  export function findPage(ctx: any, { type, opt }: {
2665
2688
  type: string;
@@ -2675,6 +2698,9 @@ declare namespace _default {
2675
2698
  * b) Pagination Disabled - use the old 'native kube api' - findMatching
2676
2699
  *
2677
2700
  * Filter is defined via the kube labelSelector object (see KubeLabelSelector)
2701
+ *
2702
+ * opt: @ActionFindLabelSelectorArgs
2703
+ * @returns @ActionFindMatchingResponse (resources[], or if transient { data: resources[], pagination: StorePagination })
2678
2704
  */
2679
2705
  export function findLabelSelector(ctx: any, { type, context, matching: { namespace, labelSelector }, opt }: {
2680
2706
  type: any;
@@ -2685,6 +2711,9 @@ declare namespace _default {
2685
2711
  };
2686
2712
  opt: any;
2687
2713
  }): Promise<any>;
2714
+ /**
2715
+ * opt: @ActionFindMatchingArgs
2716
+ */
2688
2717
  export function findMatching(ctx: any, { type, selector, opt, namespace }: {
2689
2718
  type: any;
2690
2719
  selector: any;
@@ -2723,7 +2752,7 @@ declare namespace _default {
2723
2752
  commit: any;
2724
2753
  dispatch: any;
2725
2754
  state: any;
2726
- }, type: any): void;
2755
+ }, type: any, compareWatches: any): void;
2727
2756
  export function promptRemove({ commit, state }: {
2728
2757
  commit: any;
2729
2758
  state: any;
@@ -2948,6 +2977,11 @@ export default class Resource {
2948
2977
  setAnnotation(key: any, val: any): void;
2949
2978
  get stateDisplay(): any;
2950
2979
  get stateColor(): any;
2980
+ get stateColorPair(): {
2981
+ state: any;
2982
+ color: any;
2983
+ };
2984
+ get stateSimpleColor(): any;
2951
2985
  get stateBackground(): any;
2952
2986
  get stateIcon(): string;
2953
2987
  get stateSort(): string;
@@ -3328,7 +3362,6 @@ export const HIDE_REPOS: any;
3328
3362
  export const HIDE_DESC: any;
3329
3363
  export const HIDE_SENSITIVE: any;
3330
3364
  export const SHOW_PRE_RELEASE: any;
3331
- export const SHOW_CHART_MODE: any;
3332
3365
  export const DATE_FORMAT: any;
3333
3366
  export const TIME_FORMAT: any;
3334
3367
  export const TIME_ZONE: any;
@@ -3487,7 +3520,7 @@ export function tryInitialSetup(store: any, password?: string): Promise<boolean>
3487
3520
  /**
3488
3521
  * Record in our state management that we're indeed logged in
3489
3522
  */
3490
- export function isLoggedIn(store: any, me: any): void;
3523
+ export function isLoggedIn(store: any, userData: any): Promise<void>;
3491
3524
  /**
3492
3525
  * Record in our state management that we're not logged in and then redirect to the login page
3493
3526
  */
@@ -4116,6 +4149,8 @@ export function mergeWithReplace(obj1?: any, obj2?: any, { mutateOriginal, repla
4116
4149
  }): any;
4117
4150
  export { isEqualBasic as isEqual };
4118
4151
  export function toDictionary(array: any, callback: any): any;
4152
+ export function convertKVToString(input: any): string;
4153
+ export function convertStringToKV(input: string): {};
4119
4154
  /**
4120
4155
  * Super simple lodash isEqual equivalent.
4121
4156
  *
@@ -4528,6 +4563,13 @@ export function sanitizeIP(v: any): any;
4528
4563
  export function xOfy(x: any, y: any): string;
4529
4564
  export function isBase64(value: any): boolean;
4530
4565
  export function generateRandomAlphaString(length: any): string;
4566
+ /**
4567
+ * Generate a key-value nested object from a list of paths that represents a directory tree.
4568
+ *
4569
+ * Each key is a subpath
4570
+ * Each value contains the children of the subpath
4571
+ */
4572
+ export function pathArrayToTree(paths: any): any[];
4531
4573
  export namespace CHARSET {
4532
4574
  export { num as NUMERIC };
4533
4575
  export let NO_VOWELS: string;
@@ -4600,34 +4642,6 @@ declare class Color {
4600
4642
  export {};
4601
4643
  }
4602
4644
 
4603
- // @shell/utils/time
4604
-
4605
- declare module '@shell/utils/time' {
4606
- export function diffFrom(value: any, from: any, t: any): {
4607
- diff: any;
4608
- absDiff: number;
4609
- label: string;
4610
- unitsKey: string;
4611
- units: string;
4612
- next: number;
4613
- };
4614
- export function safeSetTimeout(timeout: any, callback: any, that: any): NodeJS.Timeout;
4615
- export function getSecondsDiff(startDate: any, endDate: any): number;
4616
- /**
4617
- * return { diff: number; label: string }
4618
- *
4619
- * diff: update frequency in seconds
4620
- * label: content of the cell's column
4621
- */
4622
- export function elapsedTime(seconds: any): {
4623
- diff?: undefined;
4624
- label?: undefined;
4625
- } | {
4626
- diff: number;
4627
- label: string;
4628
- };
4629
- }
4630
-
4631
4645
  // @shell/utils/units
4632
4646
 
4633
4647
  declare module '@shell/utils/units' {
@@ -1,3 +1,4 @@
1
+ import { KubeLabelSelector } from '@shell/types/kube/kube-api';
1
2
  import { PaginationArgs, StorePagination } from '@shell/types/store/pagination.types';
2
3
 
3
4
  /**
@@ -81,3 +82,18 @@ export interface ActionFindPageArgs extends ActionCoreFindArgs {
81
82
  */
82
83
  transient?: boolean,
83
84
  }
85
+
86
+ export type ActionFindPageResponse<T = any> = {
87
+ data: T[],
88
+ pagination?: StorePagination
89
+ } | T[];
90
+
91
+ export interface ActionFindMatchingArgs extends ActionCoreFindArgs {
92
+ labelSelector: KubeLabelSelector,
93
+ namespaced?: string,
94
+ depaginate?: boolean
95
+ }
96
+
97
+ export type ActionFindMatchingResponse<T = any> = ActionFindPageResponse<T>
98
+
99
+ export type ActionFindLabelSelectorArgs = ActionFindPageArgs | ActionFindMatchingArgs;
@@ -0,0 +1,148 @@
1
+ import { Target } from '@shell/types/fleet';
2
+ import FleetUtils from '@shell/utils/fleet';
3
+
4
+ describe('fx: util.getTargetMode', () => {
5
+ const util = FleetUtils.Application;
6
+
7
+ it('should return "all" when targets contain excludeHarvesterRule and namespace is not fleet-local', () => {
8
+ const targets = [{
9
+ clusterSelector: {
10
+ matchExpressions: [{
11
+ key: 'provider.cattle.io',
12
+ operator: 'NotIn',
13
+ values: ['harvester'],
14
+ }],
15
+ },
16
+ }];
17
+ const namespace = 'ws1';
18
+
19
+ expect(util.getTargetMode(targets, namespace)).toBe('all');
20
+ });
21
+
22
+ it('should return "clusters" when targets include clusterName and clusterSelector', () => {
23
+ const targets = [{ clusterName: 'fleet-5-france' }, { clusterSelector: { matchLabels: { foo: 'true' } } }];
24
+ const namespace = 'ws1';
25
+
26
+ expect(util.getTargetMode(targets, namespace)).toBe('clusters');
27
+ });
28
+
29
+ it('should return "clusters" when targets only include multiple clusterSelectors', () => {
30
+ const targets: Target[] = [{ clusterSelector: { matchLabels: { foo: 'true' } } }, { clusterSelector: { matchLabels: { hci: 'true' } } }];
31
+ const namespace = 'ws1';
32
+
33
+ expect(util.getTargetMode(targets, namespace)).toBe('clusters');
34
+ });
35
+
36
+ it('should return "advanced" when a target contains clusterGroupSelector', () => {
37
+ const targets = [{ clusterGroupSelector: {} }];
38
+ const namespace = 'ws1';
39
+
40
+ expect(util.getTargetMode(targets, namespace)).toBe('advanced');
41
+ });
42
+
43
+ it('should return "advanced" when any target contains clusterGroup or clusterGroupSelector', () => {
44
+ const targets = [{
45
+ clusterGroup: 'cg1',
46
+ clusterGroupSelector: {
47
+ matchExpressions: [{
48
+ key: 'string',
49
+ operator: 'string',
50
+ values: ['string']
51
+ }],
52
+ matchLabels: { foo: 'bar' }
53
+ },
54
+ clusterName: 'pippo',
55
+ clusterSelector: {
56
+ matchExpressions: [{
57
+ key: 'string',
58
+ operator: 'string',
59
+ values: ['vvv']
60
+ }],
61
+ matchLabels: { foo: 'bar' }
62
+ },
63
+ name: 'tt1',
64
+ }, {
65
+ clusterGroup: 'cg2',
66
+ clusterGroupSelector: {
67
+ matchExpressions: [{
68
+ key: 'string',
69
+ operator: 'string',
70
+ values: ['string']
71
+ }],
72
+ matchLabels: { foo: 'bar' }
73
+ },
74
+ clusterName: 'pippo',
75
+ clusterSelector: {
76
+ matchExpressions: [{
77
+ key: 'string',
78
+ operator: 'string',
79
+ values: ['vvv']
80
+ }],
81
+ matchLabels: { foo: 'bar' }
82
+ },
83
+ name: 'tt1',
84
+ }];
85
+ const namespace = 'ws1';
86
+
87
+ expect(util.getTargetMode(targets, namespace)).toBe('advanced');
88
+ });
89
+
90
+ it('should return "none" when targets is an empty array', () => {
91
+ const targets: Target[] = [];
92
+ const namespace = 'ws1';
93
+
94
+ expect(util.getTargetMode(targets, namespace)).toBe('none');
95
+ });
96
+
97
+ it('should return "local" when namespace is "fleet-local" regardless of targets', () => {
98
+ const targets: Target[] = [{ clusterSelector: { matchLabels: { foo: 'true' } } }, { clusterSelector: { matchLabels: { hci: 'true' } } }];
99
+ const namespace = 'fleet-local';
100
+
101
+ expect(util.getTargetMode(targets, namespace)).toBe('local');
102
+ });
103
+
104
+ it('should return "all" if no specific target type (clusterName, clusterSelector, clusterGroup, clusterGroupSelector) is present', () => {
105
+ const targets = [{ name: 'target1' }];
106
+ const namespace = 'ws1';
107
+
108
+ expect(util.getTargetMode(targets, namespace)).toBe('all');
109
+ });
110
+
111
+ it('should return "clusters" if multiple targets include only clusterName', () => {
112
+ const targets = [{ clusterName: 'cluster-a' }, { clusterName: 'cluster-b' }];
113
+ const namespace = 'ws1';
114
+
115
+ expect(util.getTargetMode(targets, namespace)).toBe('clusters');
116
+ });
117
+
118
+ it('should return "clusters" if a mix of clusterName and empty clusterSelector is present', () => {
119
+ const targets = [{ clusterName: 'cluster-c' }, { clusterSelector: {} },
120
+ ];
121
+ const namespace = 'ws1';
122
+
123
+ expect(util.getTargetMode(targets, namespace)).toBe('clusters');
124
+ });
125
+
126
+ it('should return "advanced" if one target has clusterGroup but others have clusterName or clusterSelector', () => {
127
+ const targets = [{ clusterName: 'cluster-x' }, { clusterGroup: 'my-group' }, { clusterSelector: { matchLabels: { env: 'prod' } } }];
128
+ const namespace = 'ws1';
129
+
130
+ expect(util.getTargetMode(targets, namespace)).toBe('advanced');
131
+ });
132
+
133
+ it('should return "all" when targets contain excludeHarvesterRule along with other irrelevant properties', () => {
134
+ const targets = [{
135
+ clusterSelector: {
136
+ matchExpressions: [{
137
+ key: 'provider.cattle.io',
138
+ operator: 'NotIn',
139
+ values: ['harvester'],
140
+ }],
141
+ },
142
+ name: 'some-other-name'
143
+ }];
144
+ const namespace = 'ws1';
145
+
146
+ expect(util.getTargetMode(targets, namespace)).toBe('all');
147
+ });
148
+ });
@@ -1,6 +1,6 @@
1
1
  import { reactive, isReactive } from 'vue';
2
2
  import {
3
- clone, get, getter, isEmpty, toDictionary, remove, diff, definedKeys, deepToRaw, mergeWithReplace
3
+ clone, get, getter, isEmpty, toDictionary, remove, diff, definedKeys, deepToRaw, mergeWithReplace, convertKVToString, convertStringToKV
4
4
  } from '@shell/utils/object';
5
5
 
6
6
  describe('fx: get', () => {
@@ -441,3 +441,56 @@ describe('fx: mergeWithReplace', () => {
441
441
  expect(result).toStrictEqual(expected);
442
442
  });
443
443
  });
444
+
445
+ describe('fx: convertKVToString', () => {
446
+ it.each([
447
+ [{}, ''],
448
+ [{ foo: 'bar' }, 'foo,bar'],
449
+ [{ foo: 'bar', baz: 'bang' }, 'foo,bar,baz,bang'],
450
+ [{ foo: 'bar', baz: null }, 'foo,bar,baz,null'],
451
+ [{ ' spaced ': ' value ' }, ' spaced , value '], // preserves raw keys/values
452
+ [{ 0: 42, truthy: true }, '0,42,truthy,true'],
453
+ ])('should convert %p -> "%s"', (input, expected) => {
454
+ const result = convertKVToString(input);
455
+
456
+ expect(result).toBe(expected);
457
+ });
458
+
459
+ it('should produce a string with an even number of comma-separated parts', () => {
460
+ const str = convertKVToString({
461
+ a: 1, b: 2, c: 3
462
+ });
463
+ const parts = str.split(',');
464
+
465
+ expect(parts.length % 2).toBe(0);
466
+ });
467
+ });
468
+
469
+ describe('fx: convertStringToKV', () => {
470
+ it.each([
471
+ ['', {}],
472
+ ['foo,bar', { foo: 'bar' }],
473
+ ['foo,bar,baz,bang', { foo: 'bar', baz: 'bang' }],
474
+ [' foo , bar ', { foo: 'bar' }], // trims whitespace
475
+ ['foo,bar,baz', { foo: 'bar' }], // dangling key ignored
476
+ ['foo,bar,,bang', { foo: 'bar', '': 'bang' }], // empty key retained when present
477
+ ])('should convert "%s" -> %p', (input, expected) => {
478
+ const result = convertStringToKV(input);
479
+
480
+ expect(result).toStrictEqual(expected);
481
+ });
482
+ });
483
+
484
+ describe('fx: convertStringToKV to convertKVToString and back (round-trip)', () => {
485
+ it.each([
486
+ '',
487
+ 'foo,bar',
488
+ 'foo,bar,baz,bang',
489
+ 'answer,42,truthy,true,falsy,false',
490
+ ])('should round-trip %p without loss', (input) => {
491
+ const asObj = convertStringToKV(input);
492
+ const backToString = convertKVToString(asObj);
493
+
494
+ expect(backToString).toStrictEqual(input);
495
+ });
496
+ });