@rancher/shell 3.0.5-rc.3 → 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 (424) hide show
  1. package/assets/data/aws-regions.json +1 -0
  2. package/assets/images/icons/document.svg +3 -0
  3. package/assets/images/key.svg +17 -0
  4. package/assets/images/vendor/cognito.svg +1 -0
  5. package/assets/styles/app.scss +1 -0
  6. package/assets/styles/base/_basic.scss +10 -0
  7. package/assets/styles/base/_spacing.scss +29 -0
  8. package/assets/styles/global/_form.scss +1 -1
  9. package/assets/styles/global/_labeled-input.scss +1 -1
  10. package/assets/styles/global/_layout.scss +1 -1
  11. package/assets/styles/themes/_dark.scss +28 -0
  12. package/assets/styles/themes/_light.scss +68 -0
  13. package/assets/styles/vendor/vue-select.scss +1 -1
  14. package/assets/translations/en-us.yaml +721 -83
  15. package/assets/translations/zh-hans.yaml +11 -9
  16. package/cloud-credential/gcp.vue +9 -1
  17. package/components/AppModal.vue +2 -0
  18. package/components/Certificates.vue +5 -0
  19. package/components/CodeMirror.vue +1 -1
  20. package/components/ConfigMapSettings/Settings.vue +377 -0
  21. package/components/ConfigMapSettings/index.vue +354 -0
  22. package/components/CruResource.vue +1 -2
  23. package/components/DetailText.vue +61 -11
  24. package/components/Drawer/Chrome.vue +116 -0
  25. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  26. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  27. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  28. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  29. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
  30. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  31. package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
  32. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  33. package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
  34. package/components/FilterPanel.vue +156 -0
  35. package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
  36. package/components/GrowlManager.vue +16 -15
  37. package/components/IconOrSvg.vue +19 -35
  38. package/components/KeyValueView.vue +1 -1
  39. package/components/LocaleSelector.vue +9 -1
  40. package/components/ProgressBarMulti.vue +1 -0
  41. package/components/PromptModal.vue +6 -1
  42. package/components/PromptRemove.vue +5 -1
  43. package/components/RelatedResources.vue +4 -12
  44. package/components/Resource/Detail/Additional.vue +46 -0
  45. package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
  46. package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
  47. package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
  48. package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
  49. package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
  50. package/components/Resource/Detail/Card/Scaler.vue +89 -0
  51. package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
  52. package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
  53. package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
  54. package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
  55. package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
  56. package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
  57. package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
  58. package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
  59. package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
  60. package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
  61. package/components/Resource/Detail/Card/index.vue +56 -0
  62. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
  63. package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
  64. package/components/Resource/Detail/Metadata/Annotations/index.vue +31 -0
  65. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  66. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
  67. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +64 -0
  68. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
  69. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +133 -0
  70. package/components/Resource/Detail/Metadata/KeyValue.vue +138 -0
  71. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
  72. package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
  73. package/components/Resource/Detail/Metadata/Labels/index.vue +31 -0
  74. package/components/Resource/Detail/Metadata/Rectangle.vue +32 -0
  75. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
  76. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
  77. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  78. package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
  79. package/components/Resource/Detail/Metadata/composables.ts +78 -0
  80. package/components/Resource/Detail/Metadata/index.vue +73 -0
  81. package/components/Resource/Detail/Page.vue +37 -0
  82. package/components/Resource/Detail/PercentageBar.vue +40 -0
  83. package/components/Resource/Detail/ResourceRow.vue +138 -0
  84. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  85. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  86. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  87. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  88. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  89. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  90. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  91. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  92. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  93. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  94. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  95. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  96. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  97. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  98. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  99. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  100. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  101. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  102. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  103. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  104. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  105. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  106. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  107. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  108. package/components/Resource/Detail/SpacedRow.vue +14 -0
  109. package/components/Resource/Detail/StatusBar.vue +59 -0
  110. package/components/Resource/Detail/StatusRow.vue +61 -0
  111. package/components/Resource/Detail/TitleBar/Title.vue +14 -0
  112. package/components/Resource/Detail/TitleBar/Top.vue +14 -0
  113. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
  114. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
  115. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  116. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
  117. package/components/Resource/Detail/TitleBar/composables.ts +44 -0
  118. package/components/Resource/Detail/TitleBar/index.vue +196 -0
  119. package/components/Resource/Detail/Top/index.vue +34 -0
  120. package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
  121. package/components/Resource/Detail/composables.ts +45 -0
  122. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  123. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  124. package/components/ResourceDetail/Masthead/index.vue +65 -0
  125. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  126. package/components/ResourceDetail/__tests__/index.test.ts +135 -0
  127. package/components/ResourceDetail/index.vue +73 -557
  128. package/components/ResourceDetail/legacy.vue +562 -0
  129. package/components/ResourceList/Masthead.vue +6 -0
  130. package/components/ResourceTable.vue +41 -7
  131. package/components/ResourceYaml.vue +14 -1
  132. package/components/SlideInPanelManager.vue +117 -10
  133. package/components/SortableTable/index.vue +13 -2
  134. package/components/SortableTable/selection.js +21 -8
  135. package/components/StateDot/index.vue +28 -0
  136. package/components/StatusBadge.vue +6 -4
  137. package/components/SubtleLink.vue +25 -0
  138. package/components/Tabbed/index.vue +11 -15
  139. package/components/Wizard.vue +16 -3
  140. package/components/YamlEditor.vue +1 -1
  141. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  142. package/components/__tests__/FilterPanel.test.ts +81 -0
  143. package/components/__tests__/GrowlManager.test.ts +0 -25
  144. package/components/auth/AuthBanner.vue +2 -3
  145. package/components/auth/RoleDetailEdit.vue +45 -3
  146. package/components/auth/login/ldap.vue +1 -1
  147. package/components/auth/login/oidc.vue +6 -1
  148. package/components/fleet/FleetApplications.vue +174 -0
  149. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  150. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  151. package/components/fleet/FleetClusters.vue +25 -6
  152. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  153. package/components/fleet/FleetHelmOps.vue +123 -0
  154. package/components/fleet/FleetIntro.vue +58 -28
  155. package/components/fleet/FleetNoWorkspaces.vue +5 -1
  156. package/components/fleet/FleetOCIStorageSecret.vue +171 -0
  157. package/components/fleet/FleetRepos.vue +37 -80
  158. package/components/fleet/FleetResources.vue +53 -26
  159. package/components/fleet/FleetSummary.vue +26 -51
  160. package/components/fleet/FleetValuesFrom.vue +295 -0
  161. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  162. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  163. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
  164. package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
  165. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  166. package/components/fleet/dashboard/Empty.vue +73 -0
  167. package/components/fleet/dashboard/ResourceCard.vue +184 -0
  168. package/components/fleet/dashboard/ResourceCardSummary.vue +195 -0
  169. package/components/fleet/dashboard/ResourceDetails.vue +194 -0
  170. package/components/fleet/dashboard/ResourcePanel.vue +383 -0
  171. package/components/form/ArrayList.vue +19 -2
  172. package/components/form/ChangePassword.vue +3 -1
  173. package/components/form/Footer.vue +10 -4
  174. package/components/form/KeyValue.vue +81 -43
  175. package/components/form/LabeledSelect.vue +56 -16
  176. package/components/form/Labels.vue +90 -17
  177. package/components/form/MatchExpressions.vue +46 -5
  178. package/components/form/NameNsDescription.vue +1 -1
  179. package/components/form/ResourceSelector.vue +1 -0
  180. package/components/form/ResourceTabs/index.vue +5 -0
  181. package/components/form/SecretSelector.vue +9 -2
  182. package/components/form/Select.vue +57 -19
  183. package/components/form/SimpleSecretSelector.vue +17 -4
  184. package/components/form/Taints.vue +21 -2
  185. package/components/form/UnitInput.vue +8 -0
  186. package/components/form/ValueFromResource.vue +31 -19
  187. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  188. package/components/form/__tests__/Labels.test.ts +360 -0
  189. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  190. package/components/form/__tests__/Select.test.ts +5 -2
  191. package/components/formatter/FleetApplicationClustersReady.vue +77 -0
  192. package/components/formatter/FleetApplicationSource.vue +71 -0
  193. package/components/formatter/FleetSummaryGraph.vue +7 -0
  194. package/components/formatter/WorkloadHealthScale.vue +1 -1
  195. package/components/google/AccountAccess.vue +211 -0
  196. package/components/google/types/gcp.d.ts +136 -0
  197. package/components/google/types/index.d.ts +101 -0
  198. package/components/google/util/__mocks__/gcp.ts +465 -0
  199. package/components/google/util/formatter.ts +82 -0
  200. package/components/google/util/gcp.ts +134 -0
  201. package/components/google/util/index.d.ts +11 -0
  202. package/components/nav/Favorite.vue +1 -1
  203. package/components/nav/Group.vue +70 -47
  204. package/components/nav/Header.vue +13 -8
  205. package/components/nav/NamespaceFilter.vue +13 -1
  206. package/components/nav/NotificationCenter/Notification.vue +510 -0
  207. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  208. package/components/nav/NotificationCenter/index.vue +148 -0
  209. package/components/nav/TopLevelMenu.helper.ts +55 -34
  210. package/components/nav/TopLevelMenu.vue +11 -0
  211. package/components/nav/Type.vue +4 -1
  212. package/composables/drawer.ts +26 -0
  213. package/composables/resources.test.ts +63 -0
  214. package/composables/resources.ts +38 -0
  215. package/composables/useI18n.ts +12 -11
  216. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  217. package/config/labels-annotations.js +20 -11
  218. package/config/product/auth.js +17 -1
  219. package/config/product/{cis.js → compliance.js} +23 -26
  220. package/config/product/explorer.js +5 -1
  221. package/config/product/fleet.js +77 -17
  222. package/config/product/settings.js +22 -11
  223. package/config/query-params.js +6 -1
  224. package/config/roles.ts +2 -1
  225. package/config/router/navigation-guards/authentication.js +51 -2
  226. package/config/router/routes.js +45 -31
  227. package/config/secret.ts +15 -0
  228. package/config/settings.ts +24 -5
  229. package/config/store.js +2 -0
  230. package/config/system-namespaces.js +1 -1
  231. package/config/table-headers.js +53 -23
  232. package/config/types.js +17 -6
  233. package/core/plugin-helpers.ts +3 -2
  234. package/core/plugin.ts +32 -7
  235. package/core/types.ts +18 -1
  236. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  237. package/detail/fleet.cattle.io.cluster.vue +28 -15
  238. package/detail/fleet.cattle.io.gitrepo.vue +10 -1
  239. package/detail/fleet.cattle.io.helmop.vue +157 -0
  240. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  241. package/detail/management.cattle.io.oidcclient.vue +369 -0
  242. package/detail/node.vue +2 -2
  243. package/detail/pod.vue +2 -2
  244. package/detail/service.vue +10 -1
  245. package/detail/workload/index.vue +8 -2
  246. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  247. package/dialog/GenericPrompt.vue +1 -1
  248. package/dialog/HelmOpForceUpdateDialog.vue +132 -0
  249. package/dialog/ImportDialog.vue +8 -8
  250. package/dialog/OidcClientSecretDialog.vue +117 -0
  251. package/dialog/RedeployWorkloadDialog.vue +164 -0
  252. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  253. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +60 -68
  254. package/edit/auth/oidc.vue +159 -93
  255. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  256. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  257. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  258. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  259. package/edit/configmap.vue +4 -1
  260. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  261. package/edit/fleet.cattle.io.gitrepo.vue +70 -255
  262. package/edit/fleet.cattle.io.helmop.vue +772 -0
  263. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  264. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  265. package/edit/logging-flow/index.vue +1 -0
  266. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  267. package/edit/management.cattle.io.fleetworkspace.vue +44 -10
  268. package/edit/management.cattle.io.oidcclient.vue +162 -0
  269. package/edit/management.cattle.io.project.vue +4 -1
  270. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  271. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  272. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  273. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  274. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  275. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  276. package/edit/monitoring.coreos.com.route.vue +1 -0
  277. package/edit/namespace.vue +1 -0
  278. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  279. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  280. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  281. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  282. package/edit/node.vue +1 -0
  283. package/edit/persistentvolume/index.vue +4 -1
  284. package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
  285. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
  286. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  287. package/edit/resources.cattle.io.restore.vue +1 -1
  288. package/edit/secret/index.vue +1 -0
  289. package/edit/service.vue +4 -1
  290. package/edit/serviceaccount.vue +4 -1
  291. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  292. package/edit/workload/index.vue +5 -0
  293. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  294. package/list/fleet.cattle.io.gitrepo.vue +1 -1
  295. package/list/fleet.cattle.io.helmop.vue +108 -0
  296. package/list/management.cattle.io.oidcclient.vue +108 -0
  297. package/list/namespace.vue +5 -2
  298. package/list/node.vue +2 -0
  299. package/machine-config/amazonec2.vue +3 -24
  300. package/machine-config/components/GCEImage.vue +374 -0
  301. package/machine-config/google.vue +617 -0
  302. package/mixins/__tests__/brand.spec.ts +170 -0
  303. package/mixins/auth-config.js +8 -1
  304. package/mixins/brand.js +16 -17
  305. package/mixins/create-edit-view/index.js +5 -0
  306. package/mixins/preset.js +100 -0
  307. package/mixins/resource-fetch-api-pagination.js +18 -0
  308. package/mixins/resource-fetch.js +1 -1
  309. package/mixins/resource-table-watch.js +45 -0
  310. package/mixins/vue-select-overrides.js +1 -0
  311. package/models/__tests__/chart.test.ts +273 -0
  312. package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
  313. package/models/chart.js +144 -2
  314. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  315. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  316. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  317. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  318. package/models/fleet-application.js +314 -0
  319. package/models/fleet.cattle.io.bundle.js +9 -8
  320. package/models/fleet.cattle.io.cluster.js +11 -0
  321. package/models/fleet.cattle.io.gitrepo.js +41 -365
  322. package/models/fleet.cattle.io.helmop.js +198 -0
  323. package/models/management.cattle.io.authconfig.js +1 -0
  324. package/models/management.cattle.io.fleetworkspace.js +14 -1
  325. package/models/management.cattle.io.oidcclient.js +18 -0
  326. package/models/management.cattle.io.registration.js +3 -0
  327. package/models/provisioning.cattle.io.cluster.js +5 -5
  328. package/models/service.js +4 -0
  329. package/models/workload.js +19 -18
  330. package/package.json +2 -1
  331. package/pages/about.vue +4 -58
  332. package/pages/auth/login.vue +1 -1
  333. package/pages/auth/verify.vue +13 -1
  334. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +36 -0
  335. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
  336. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +54 -0
  337. package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
  338. package/pages/c/_cluster/apps/charts/index.vue +487 -465
  339. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  340. package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
  341. package/pages/c/_cluster/explorer/index.vue +3 -3
  342. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  343. package/pages/c/_cluster/fleet/__tests__/index.test.ts +426 -0
  344. package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
  345. package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
  346. package/pages/c/_cluster/fleet/application/create.vue +341 -0
  347. package/pages/c/_cluster/fleet/application/index.vue +139 -0
  348. package/pages/c/_cluster/fleet/graph/config.js +277 -0
  349. package/pages/c/_cluster/fleet/index.vue +809 -329
  350. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  351. package/pages/c/_cluster/longhorn/index.vue +5 -2
  352. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  353. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  354. package/pages/explorer/resource/detail/configmap.vue +42 -0
  355. package/pages/explorer/resource/detail/secret.vue +50 -0
  356. package/pages/home.vue +9 -55
  357. package/pages/support/index.vue +4 -6
  358. package/plugins/dashboard-store/actions.js +50 -14
  359. package/plugins/dashboard-store/getters.js +38 -21
  360. package/plugins/dashboard-store/mutations.js +51 -7
  361. package/plugins/dashboard-store/resource-class.js +30 -4
  362. package/plugins/steve/__tests__/subscribe.spec.ts +66 -1
  363. package/plugins/steve/actions.js +3 -0
  364. package/plugins/steve/steve-pagination-utils.ts +17 -8
  365. package/plugins/steve/subscribe.js +235 -43
  366. package/rancher-components/BadgeState/BadgeState.vue +3 -1
  367. package/rancher-components/Banner/Banner.vue +13 -0
  368. package/rancher-components/Form/Checkbox/Checkbox.vue +11 -6
  369. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  370. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  371. package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
  372. package/rancher-components/RcItemCard/RcItemCard.vue +430 -0
  373. package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
  374. package/rancher-components/RcItemCard/index.ts +2 -0
  375. package/store/auth.js +3 -0
  376. package/store/catalog.js +85 -25
  377. package/store/growl.js +97 -8
  378. package/store/index.js +39 -14
  379. package/store/notifications.ts +426 -0
  380. package/store/prefs.js +0 -1
  381. package/store/slideInPanel.ts +6 -0
  382. package/store/type-map.js +19 -15
  383. package/store/uiplugins.ts +15 -1
  384. package/types/fleet.d.ts +59 -0
  385. package/types/notifications/index.ts +74 -0
  386. package/types/resources/settings.d.ts +19 -1
  387. package/types/shell/index.d.ts +388 -307
  388. package/types/store/dashboard-store.types.ts +33 -3
  389. package/types/store/pagination.types.ts +6 -1
  390. package/types/store/subscribe.types.ts +50 -0
  391. package/utils/__tests__/fleet.test.ts +148 -0
  392. package/utils/__tests__/object.test.ts +54 -1
  393. package/utils/__tests__/string.test.ts +273 -1
  394. package/utils/__tests__/time.test.ts +31 -0
  395. package/utils/auth.js +41 -5
  396. package/utils/crypto/encryption.ts +103 -0
  397. package/utils/cspAdaptor.ts +51 -0
  398. package/utils/fleet-types.ts +0 -0
  399. package/utils/fleet.ts +190 -2
  400. package/utils/object.js +36 -0
  401. package/utils/pagination-utils.ts +27 -2
  402. package/utils/pagination-wrapper.ts +132 -50
  403. package/utils/release-notes.ts +48 -0
  404. package/utils/selector-typed.ts +7 -2
  405. package/utils/settings.ts +4 -1
  406. package/utils/string.js +24 -0
  407. package/utils/style.ts +39 -0
  408. package/utils/{time.js → time.ts} +25 -6
  409. package/utils/uiplugins.ts +22 -0
  410. package/utils/validators/formRules/__tests__/index.test.ts +36 -3
  411. package/utils/validators/formRules/index.ts +13 -3
  412. package/utils/window.js +11 -7
  413. package/components/__tests__/ApplicationCard.test.ts +0 -27
  414. package/components/cards/ApplicationCard.vue +0 -145
  415. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
  416. package/config/product/legacy.js +0 -62
  417. package/config/secret.js +0 -14
  418. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
  419. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  420. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  421. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  422. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
  423. /package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -0
  424. /package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +0 -0
@@ -1,15 +1,27 @@
1
1
  <script lang="ts" setup>
2
- import { computed } from 'vue';
2
+ import { computed, onBeforeUnmount, watch } from 'vue';
3
3
  import { useStore } from 'vuex';
4
+ import {
5
+ DEFAULT_FOCUS_TRAP_OPTS,
6
+ useWatcherBasedSetupFocusTrapWithDestroyIncluded
7
+ } from '@shell/composables/focusTrap';
8
+ import { isEqual } from 'lodash';
9
+ import { useRouter } from 'vue-router';
4
10
 
5
11
  const HEADER_HEIGHT = 55;
6
12
 
7
13
  const store = useStore();
8
14
  const isOpen = computed(() => store.getters['slideInPanel/isOpen']);
15
+ const isClosing = computed(() => store.getters['slideInPanel/isClosing']);
9
16
  const currentComponent = computed(() => store.getters['slideInPanel/component']);
10
17
  const currentProps = computed(() => store.getters['slideInPanel/componentProps']);
11
18
 
12
19
  const panelTop = computed(() => {
20
+ // Some components like the ResourceDetailDrawer are designed to take up the full height of the viewport so we want to be able to specify the top.
21
+ if (currentProps?.value?.top) {
22
+ return currentProps?.value?.top;
23
+ }
24
+
13
25
  const banner = document.getElementById('banner-header');
14
26
  let height = HEADER_HEIGHT;
15
27
 
@@ -20,11 +32,93 @@ const panelTop = computed(() => {
20
32
  return `${ height }px`;
21
33
  });
22
34
 
23
- const panelHeight = computed(() => `calc(100vh - ${ panelTop?.value })`);
35
+ // Some components like the ResourceDetailDrawer are designed to take up the full height of the viewport so we want to be able to specify the height.
36
+ const panelHeight = computed(() => (currentProps?.value?.height) ? (currentProps?.value?.height) : `calc(100vh - ${ panelTop?.value })`);
24
37
  const panelWidth = computed(() => currentProps?.value?.width || '33%');
25
38
  const panelRight = computed(() => (isOpen?.value ? '0' : `-${ panelWidth?.value }`));
39
+ const panelZIndex = computed(() => `${ (isOpen?.value ? 1 : 2) * (currentProps?.value?.zIndex ?? 1000) }`);
40
+
41
+ const showHeader = computed(() => currentProps?.value?.showHeader ?? true);
42
+ const panelTitle = showHeader.value ? computed(() => currentProps?.value?.title || 'Details') : null;
43
+ const closeOnRouteChange = computed(() => {
44
+ const propsCloseOnRouteChange = currentProps?.value.closeOnRouteChange;
45
+
46
+ if (!propsCloseOnRouteChange) {
47
+ return ['name', 'params', 'hash', 'query'];
48
+ }
49
+
50
+ return propsCloseOnRouteChange;
51
+ });
52
+ const router = useRouter();
53
+
54
+ watch(
55
+ /**
56
+ * trigger focus trap
57
+ */
58
+ () => currentProps?.value?.triggerFocusTrap,
59
+ (neu) => {
60
+ if (neu) {
61
+ const opts = {
62
+ ...DEFAULT_FOCUS_TRAP_OPTS,
63
+ /**
64
+ * will return focus to the first iterable node of this container select
65
+ */
66
+ setReturnFocus: () => {
67
+ const returnFocusSelector = currentProps?.value?.returnFocusSelector;
68
+
69
+ if (returnFocusSelector && !document.querySelector(returnFocusSelector)) {
70
+ console.warn('SlideInPanelManager: cannot find elem with "returnFocusSelector", returning focus to main view'); // eslint-disable-line no-console
71
+
72
+ return '.dashboard-root';
73
+ }
74
+
75
+ return returnFocusSelector || '.dashboard-root';
76
+ }
77
+ };
78
+
79
+ useWatcherBasedSetupFocusTrapWithDestroyIncluded(
80
+ () => {
81
+ if (currentProps?.value?.focusTrapWatcherBasedVariable) {
82
+ return currentProps.value.focusTrapWatcherBasedVariable;
83
+ }
84
+
85
+ return isOpen?.value && !isClosing?.value;
86
+ },
87
+ '#slide-in-panel-manager',
88
+ opts,
89
+ false
90
+ );
91
+ }
92
+ }
93
+ );
94
+
95
+ watch(
96
+ () => router?.currentRoute?.value,
97
+ (newValue, oldValue) => {
98
+ if (!isOpen?.value) {
99
+ return;
100
+ }
101
+
102
+ if (closeOnRouteChange.value.includes('name') && !isEqual(newValue?.name, oldValue?.name)) {
103
+ closePanel();
104
+ }
105
+
106
+ if (closeOnRouteChange.value.includes('params') && !isEqual(newValue?.params, oldValue?.params)) {
107
+ closePanel();
108
+ }
26
109
 
27
- const panelTitle = computed(() => currentProps?.value?.title || 'Details');
110
+ if (closeOnRouteChange.value.includes('hash') && !isEqual(newValue?.hash, oldValue?.hash)) {
111
+ closePanel();
112
+ }
113
+
114
+ if (closeOnRouteChange.value.includes('query') && !isEqual(newValue?.query, oldValue?.query)) {
115
+ closePanel();
116
+ }
117
+ },
118
+ { deep: true }
119
+ );
120
+
121
+ onBeforeUnmount(closePanel);
28
122
 
29
123
  function closePanel() {
30
124
  store.commit('slideInPanel/close');
@@ -33,20 +127,35 @@ function closePanel() {
33
127
 
34
128
  <template>
35
129
  <Teleport to="#slides">
36
- <div id="slide-in-panel-manager">
130
+ <div
131
+ id="slide-in-panel-manager"
132
+ @keydown.escape="closePanel"
133
+ >
37
134
  <div
38
135
  v-show="isOpen"
39
136
  data-testid="slide-in-glass"
40
137
  class="slide-in-glass"
41
138
  :class="{ 'slide-in-glass-open': isOpen }"
139
+ :style="{
140
+ ['z-index']: panelZIndex
141
+ }"
42
142
  @click="closePanel"
43
143
  />
44
- <div
144
+ <aside
45
145
  class="slide-in"
46
146
  :class="{ 'slide-in-open': isOpen }"
47
- :style="{ width: panelWidth, right: panelRight, top: panelTop, height: panelHeight }"
147
+ :style="{
148
+ width: panelWidth,
149
+ right: panelRight,
150
+ top: panelTop,
151
+ height: panelHeight,
152
+ ['z-index']: panelZIndex
153
+ }"
48
154
  >
49
- <div class="header">
155
+ <div
156
+ v-if="showHeader"
157
+ class="header"
158
+ >
50
159
  <div class="title">
51
160
  {{ panelTitle }}
52
161
  </div>
@@ -66,7 +175,7 @@ function closePanel() {
66
175
  class="dynamic-panel-content"
67
176
  />
68
177
  </div>
69
- </div>
178
+ </aside>
70
179
  </div>
71
180
  </Teleport>
72
181
  </template>
@@ -84,7 +193,6 @@ function closePanel() {
84
193
  background-color: var(--body-bg);
85
194
  display: block;
86
195
  opacity: 0.5;
87
- z-index: 1000;
88
196
  }
89
197
 
90
198
  .slide-in {
@@ -92,7 +200,6 @@ function closePanel() {
92
200
  flex-direction: column;
93
201
  position: fixed;
94
202
  top: 0;
95
- z-index: 2000;
96
203
  transition: right 0.5s ease;
97
204
  border-left: 1px solid var(--border);
98
205
  background-color: var(--body-bg);
@@ -64,6 +64,7 @@ export default {
64
64
  ActionMenu,
65
65
  ActionDropdownShell,
66
66
  },
67
+
67
68
  mixins: [
68
69
  filtering,
69
70
  sorting,
@@ -378,8 +379,17 @@ export default {
378
379
  manualRefreshButtonSize: {
379
380
  type: String,
380
381
  default: ''
381
- }
382
+ },
382
383
 
384
+ /**
385
+ * Usually the manual refresh button is controlled via isTooManyItemsToAutoUpdate
386
+ *
387
+ * However this is singular on page. In some places there's more than one...
388
+ */
389
+ hideManualRefreshButton: {
390
+ type: Boolean,
391
+ default: false
392
+ }
383
393
  },
384
394
 
385
395
  data() {
@@ -1196,9 +1206,10 @@ export default {
1196
1206
  <div class="bg" />
1197
1207
  </li>
1198
1208
  </ul>
1209
+ <slot name="watch-controls" />
1199
1210
  <slot name="header-right" />
1200
1211
  <AsyncButton
1201
- v-if="isTooManyItemsToAutoUpdate"
1212
+ v-if="!hideManualRefreshButton && isTooManyItemsToAutoUpdate"
1202
1213
  mode="manual-refresh"
1203
1214
  :size="manualRefreshButtonSize"
1204
1215
  :current-phase="refreshButtonPhase"
@@ -127,25 +127,38 @@ export default {
127
127
  },
128
128
 
129
129
  watch: {
130
- // On page change
130
+ /**
131
+ * Handle changes to the page (SSP enabled)
132
+ */
133
+ externalPaginationResult() {
134
+ // Handle changes to the page (SSP enabled)
135
+ this.pageChanged(this.pagedRows);
136
+ },
137
+
138
+ /**
139
+ * Handle changes to the page (SSP disabled)
140
+ */
131
141
  pagedRows() {
132
- // When the table contents changes:
133
- // - Remove items that are in the selection but no longer in the table.
142
+ this.pageChanged(this.pagedRows);
143
+ }
144
+ },
134
145
 
135
- const content = this.pagedRows;
146
+ methods: {
147
+ /**
148
+ * Remove items that are in the selection but no longer in the table.
149
+ */
150
+ pageChanged(page) {
136
151
  const toRemove = [];
137
152
 
138
153
  for (const node of this.selectedRows) {
139
- if (!content.includes(node) ) {
154
+ if (!page.includes(node) ) {
140
155
  toRemove.push(node);
141
156
  }
142
157
  }
143
158
 
144
159
  this.update([], toRemove);
145
- }
146
- },
160
+ },
147
161
 
148
- methods: {
149
162
  onToggleAll(value) {
150
163
  if ( value ) {
151
164
  this.update(this.pagedRows, []);
@@ -0,0 +1,28 @@
1
+ <script setup lang="ts">
2
+ import { StateColor, stateColorCssVar } from '@shell/utils/style';
3
+ import { computed } from 'vue';
4
+
5
+ interface Props {
6
+ color: StateColor;
7
+ size?: string;
8
+ }
9
+
10
+ const props = withDefaults(defineProps<Props>(), { size: '8px' });
11
+ const backgroundColor = computed(() => stateColorCssVar(props.color));
12
+ </script>
13
+
14
+ <template>
15
+ <span class="state-dot" />
16
+ </template>
17
+
18
+ <style lang="scss" scoped>
19
+ .state-dot {
20
+ display: inline-block;
21
+
22
+ width: v-bind('props.size');
23
+ height: v-bind('props.size');
24
+
25
+ border-radius: 50%;
26
+ background-color: v-bind('backgroundColor');
27
+ }
28
+ </style>
@@ -19,11 +19,13 @@ const STATUS = {
19
19
  }
20
20
  };
21
21
 
22
+ export interface Props {
23
+ status?: 'success' | 'warning' | 'info' | 'error',
24
+ label?: string
25
+ }
26
+
22
27
  withDefaults(
23
- defineProps<{
24
- status?: 'success' | 'warning' | 'info' | 'error',
25
- label?: string
26
- }>(),
28
+ defineProps<Props>(),
27
29
  {
28
30
  status: 'success',
29
31
  label: '',
@@ -0,0 +1,25 @@
1
+ <script setup lang="ts">
2
+ import { RouterLink, RouteLocationRaw } from 'vue-router';
3
+
4
+ export interface Props {
5
+ to: RouteLocationRaw;
6
+ }
7
+
8
+ const { to } = defineProps<Props>();
9
+ </script>
10
+
11
+ <template>
12
+ <RouterLink
13
+ class="subtle-link"
14
+ :to="to"
15
+ >
16
+ <slot name="default" />
17
+ </RouterLink>
18
+ </template>
19
+
20
+ <style lang="scss" scoped>
21
+ .subtle-link {
22
+ text-decoration: underline;
23
+ color: var(--body-text);
24
+ }
25
+ </style>
@@ -145,17 +145,10 @@ export default {
145
145
  this.select(activeTab.name);
146
146
  }
147
147
  },
148
- },
149
-
150
- mounted() {
151
- if ( this.useHash ) {
152
- window.addEventListener('hashchange', this.hashChange);
153
- }
154
- },
155
-
156
- unmounted() {
157
- if ( this.useHash ) {
158
- window.removeEventListener('hashchange', this.hashChange);
148
+ '$route.hash'() {
149
+ if ( this.useHash ) {
150
+ this.hashChange();
151
+ }
159
152
  }
160
153
  },
161
154
 
@@ -164,7 +157,7 @@ export default {
164
157
  return tab.displayAlertIcon || (tab.error && !tab.active);
165
158
  },
166
159
  hashChange() {
167
- if (!this.scrollOnChange) {
160
+ if (this.scrollOnChange) {
168
161
  const scrollable = document.getElementsByTagName('main')[0];
169
162
 
170
163
  if (scrollable) {
@@ -182,8 +175,9 @@ export default {
182
175
  select(name/* , event */) {
183
176
  const { sortedTabs } = this;
184
177
 
185
- const selected = this.find(name);
186
- const hashName = `#${ name }`;
178
+ const cleanName = name.replace('#', '');
179
+ const selected = this.find(cleanName);
180
+ const hashName = `#${ cleanName }`;
187
181
 
188
182
  if ( !selected || selected.disabled) {
189
183
  return;
@@ -281,7 +275,7 @@ export default {
281
275
  >
282
276
  <a
283
277
  :data-testid="`btn-${tab.name}`"
284
- :aria-controls="'#' + tab.name"
278
+ :aria-controls="tab.name"
285
279
  :aria-selected="tab.active"
286
280
  :aria-label="tab.labelDisplay || ''"
287
281
  role="tab"
@@ -318,6 +312,7 @@ export default {
318
312
  type="button"
319
313
  class="btn bg-transparent"
320
314
  data-testid="tab-list-add"
315
+ :aria-label="t('tabs.addItem')"
321
316
  @click="tabAddClicked"
322
317
  >
323
318
  <i class="icon icon-plus" />
@@ -327,6 +322,7 @@ export default {
327
322
  class="btn bg-transparent"
328
323
  :disabled="!sortedTabs.length"
329
324
  data-testid="tab-list-remove"
325
+ :aria-label="t('tabs.removeItem')"
330
326
  @click="tabRemoveClicked"
331
327
  >
332
328
  <i class="icon icon-minus" />
@@ -1,5 +1,5 @@
1
1
  <script>
2
-
2
+ import { _CREATE, _VIEW } from '@shell/config/query-params';
3
3
  import AsyncButton from '@shell/components/AsyncButton';
4
4
  import { Banner } from '@components/Banner';
5
5
  import Loading from '@shell/components/Loading';
@@ -56,6 +56,11 @@ export default {
56
56
  required: true
57
57
  },
58
58
 
59
+ mode: {
60
+ type: String,
61
+ default: _CREATE
62
+ },
63
+
59
64
  // Initial step to show when Wizard loads.
60
65
  initStepIndex: {
61
66
  type: Number,
@@ -121,6 +126,11 @@ export default {
121
126
  },
122
127
 
123
128
  computed: {
129
+
130
+ isView() {
131
+ return this.mode === _VIEW;
132
+ },
133
+
124
134
  errorStrings() {
125
135
  return ( this.errors || [] ).map((x) => stringify(x));
126
136
  },
@@ -351,7 +361,7 @@ export default {
351
361
  role="presentation"
352
362
  >
353
363
  <span
354
- :aria-controls="'step' + idx+1"
364
+ :aria-controls="'step-container-' + step.name"
355
365
  :aria-selected="step.name === activeStep.name"
356
366
  role="tab"
357
367
  class="controls"
@@ -366,7 +376,7 @@ export default {
366
376
  </span>
367
377
  </span>
368
378
  </li>
369
- <div
379
+ <li
370
380
  v-if="idx!==visibleSteps.length-1"
371
381
  :key="step.name"
372
382
  class="divider"
@@ -387,7 +397,9 @@ export default {
387
397
  >
388
398
  <div
389
399
  v-if="step.name === activeStep.name || step.hidden"
400
+ :id="'step-container-' + step.name"
390
401
  :key="step.name"
402
+ role="tabpanel"
391
403
  class="step-container__step"
392
404
  :class="{'hide': step.name !== activeStep.name && step.hidden}"
393
405
  >
@@ -461,6 +473,7 @@ export default {
461
473
  :finish="finish"
462
474
  >
463
475
  <AsyncButton
476
+ v-if="!isView"
464
477
  :disabled="!activeStep.ready"
465
478
  :mode="finishMode"
466
479
  @click="finish"
@@ -203,7 +203,7 @@ export default {
203
203
 
204
204
  updateValue(value) {
205
205
  this.curValue = value;
206
- this.$refs.cm.updateValue(value);
206
+ this.$refs.cm?.updateValue(value);
207
207
  }
208
208
  }
209
209
  };