dashboard-shell-shell 3.0.2-rc.105 → 3.0.5-test.1

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 (630) hide show
  1. package/assets/data/aws-regions.json +3 -0
  2. package/assets/icons/demo.css:Zone.Identifier +0 -0
  3. package/assets/icons/demo_index.html:Zone.Identifier +0 -0
  4. package/assets/icons/iconfont.css:Zone.Identifier +0 -0
  5. package/assets/icons/iconfont.js:Zone.Identifier +0 -0
  6. package/assets/icons/iconfont.json:Zone.Identifier +0 -0
  7. package/assets/icons/iconfont.ttf:Zone.Identifier +0 -0
  8. package/assets/icons/iconfont.woff2:Zone.Identifier +0 -0
  9. package/assets/icons/iconfont.woff:Zone.Identifier +0 -0
  10. package/assets/images/icons/document.svg +3 -0
  11. package/assets/images/key.svg +17 -0
  12. package/assets/images/providers/sks.svg +1 -0
  13. package/assets/images/vendor/cognito.svg +1 -0
  14. package/assets/styles/app.scss +3 -0
  15. package/assets/styles/base/_basic.scss +10 -0
  16. package/assets/styles/base/_spacing.scss +29 -0
  17. package/assets/styles/base/_variables.scss +16 -10
  18. package/assets/styles/global/_labeled-input.scss +1 -1
  19. package/assets/styles/global/_layout.scss +1 -1
  20. package/assets/styles/themes/_dark.scss +30 -0
  21. package/assets/styles/themes/_light.scss +80 -2
  22. package/assets/translations/en-us.yaml +822 -105
  23. package/assets/translations/zh-hans.yaml +13 -3
  24. package/chart/__tests__/S3.test.ts +2 -1
  25. package/chart/monitoring/index.vue +1 -1
  26. package/cloud-credential/gcp.vue +9 -1
  27. package/components/ActionMenuShell.vue +3 -7
  28. package/components/AppModal.vue +9 -28
  29. package/components/AsyncButton.vue +2 -0
  30. package/components/BrandImage.vue +0 -21
  31. package/components/Certificates.vue +5 -0
  32. package/components/CodeMirror.vue +3 -3
  33. package/components/CommunityLinks.vue +3 -58
  34. package/components/ConfigMapSettings/Settings.vue +377 -0
  35. package/components/ConfigMapSettings/index.vue +354 -0
  36. package/components/CruResource.vue +103 -16
  37. package/components/DetailText.vue +61 -11
  38. package/components/Drawer/Chrome.vue +115 -0
  39. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  40. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  41. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  42. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  43. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
  44. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  45. package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
  46. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  47. package/components/Drawer/ResourceDetailDrawer/index.vue +123 -0
  48. package/components/ExplorerProjectsNamespaces.vue +46 -29
  49. package/components/FilterPanel.vue +156 -0
  50. package/components/FixedBanner.vue +19 -5
  51. package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
  52. package/components/GrowlManager.vue +16 -15
  53. package/components/IconOrSvg.vue +19 -35
  54. package/components/KeyValueView.vue +1 -1
  55. package/components/LandingPagePreference.vue +2 -0
  56. package/components/Loading.vue +1 -1
  57. package/components/LocaleSelector.vue +10 -2
  58. package/components/PaginatedResourceTable.vue +53 -1
  59. package/components/ProgressBarMulti.vue +1 -0
  60. package/components/PromptModal.vue +38 -7
  61. package/components/PromptRemove.vue +5 -1
  62. package/components/PromptRestore.vue +22 -44
  63. package/components/RelatedResources.vue +4 -12
  64. package/components/Resource/Detail/Additional.vue +46 -0
  65. package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
  66. package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
  67. package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
  68. package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
  69. package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
  70. package/components/Resource/Detail/Card/Scaler.vue +89 -0
  71. package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
  72. package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
  73. package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
  74. package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
  75. package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
  76. package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
  77. package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
  78. package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
  79. package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
  80. package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
  81. package/components/Resource/Detail/Card/index.vue +56 -0
  82. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
  83. package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
  84. package/components/Resource/Detail/Metadata/Annotations/index.vue +31 -0
  85. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  86. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
  87. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +72 -0
  88. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
  89. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +140 -0
  90. package/components/Resource/Detail/Metadata/KeyValue.vue +140 -0
  91. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
  92. package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
  93. package/components/Resource/Detail/Metadata/Labels/index.vue +31 -0
  94. package/components/Resource/Detail/Metadata/Rectangle.vue +34 -0
  95. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
  96. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
  97. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  98. package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
  99. package/components/Resource/Detail/Metadata/composables.ts +81 -0
  100. package/components/Resource/Detail/Metadata/index.vue +88 -0
  101. package/components/Resource/Detail/Page.vue +37 -0
  102. package/components/Resource/Detail/PercentageBar.vue +40 -0
  103. package/components/Resource/Detail/ResourceRow.vue +138 -0
  104. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  105. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  106. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  107. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  108. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  109. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  110. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  111. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  112. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  113. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  114. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  115. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  116. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  117. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  118. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  119. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  120. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  121. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  122. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  123. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  124. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  125. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  126. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  127. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  128. package/components/Resource/Detail/SpacedRow.vue +14 -0
  129. package/components/Resource/Detail/StatusBar.vue +59 -0
  130. package/components/Resource/Detail/StatusRow.vue +61 -0
  131. package/components/Resource/Detail/TitleBar/Title.vue +14 -0
  132. package/components/Resource/Detail/TitleBar/Top.vue +14 -0
  133. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
  134. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
  135. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  136. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
  137. package/components/Resource/Detail/TitleBar/composables.ts +46 -0
  138. package/components/Resource/Detail/TitleBar/index.vue +204 -0
  139. package/components/Resource/Detail/Top/index.vue +34 -0
  140. package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
  141. package/components/Resource/Detail/composables.ts +45 -0
  142. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  143. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  144. package/components/ResourceDetail/Masthead/index.vue +65 -0
  145. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  146. package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -1
  147. package/components/ResourceDetail/__tests__/index.test.ts +135 -0
  148. package/components/ResourceDetail/index.vue +75 -575
  149. package/components/ResourceDetail/legacy.vue +564 -0
  150. package/components/ResourceList/Masthead.vue +49 -8
  151. package/components/ResourceList/index.vue +3 -2
  152. package/components/ResourceTable.vue +59 -85
  153. package/components/ResourceYaml.vue +15 -2
  154. package/components/RichTranslation.vue +106 -0
  155. package/components/SlideInPanelManager.vue +116 -14
  156. package/components/SortableTable/index.vue +14 -5
  157. package/components/SortableTable/paging.js +15 -16
  158. package/components/SortableTable/selection.js +22 -10
  159. package/components/StateDot/index.vue +28 -0
  160. package/components/StatusBadge.vue +6 -4
  161. package/components/SubtleLink.vue +25 -0
  162. package/components/Tabbed/Tab.vue +1 -1
  163. package/components/Tabbed/index.vue +61 -64
  164. package/components/Wizard.vue +16 -3
  165. package/components/YamlEditor.vue +1 -2
  166. package/components/__tests__/AsyncButton.test.ts +39 -0
  167. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  168. package/components/__tests__/CruResource.test.ts +63 -0
  169. package/components/__tests__/FilterPanel.test.ts +81 -0
  170. package/components/__tests__/GrowlManager.test.ts +0 -25
  171. package/components/__tests__/PromptModal.test.ts +146 -0
  172. package/components/__tests__/PromptRestore.test.ts +1 -65
  173. package/components/__tests__/RichTranslation.test.ts +115 -0
  174. package/components/auth/AuthBanner.vue +15 -14
  175. package/components/auth/Principal.vue +0 -1
  176. package/components/auth/RoleDetailEdit.vue +44 -4
  177. package/components/auth/login/ldap.vue +2 -2
  178. package/components/auth/login/oidc.vue +6 -1
  179. package/components/fleet/FleetApplications.vue +174 -0
  180. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  181. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  182. package/components/fleet/FleetClusters.vue +25 -6
  183. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  184. package/components/fleet/FleetHelmOps.vue +123 -0
  185. package/components/fleet/FleetIntro.vue +58 -28
  186. package/components/fleet/FleetNoWorkspaces.vue +5 -1
  187. package/components/fleet/FleetOCIStorageSecret.vue +171 -0
  188. package/components/fleet/FleetRepos.vue +37 -80
  189. package/components/fleet/FleetResources.vue +69 -27
  190. package/components/fleet/FleetSummary.vue +26 -51
  191. package/components/fleet/FleetValuesFrom.vue +295 -0
  192. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  193. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  194. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
  195. package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
  196. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  197. package/components/fleet/dashboard/Empty.vue +73 -0
  198. package/components/fleet/dashboard/ResourceCard.vue +184 -0
  199. package/components/fleet/dashboard/ResourceCardSummary.vue +195 -0
  200. package/components/fleet/dashboard/ResourceDetails.vue +194 -0
  201. package/components/fleet/dashboard/ResourcePanel.vue +384 -0
  202. package/components/form/ArrayList.vue +144 -116
  203. package/components/form/BannerSettings.vue +117 -50
  204. package/components/form/ChangePassword.vue +3 -1
  205. package/components/form/ColorInput.vue +35 -6
  206. package/components/form/FileImageSelector.vue +1 -1
  207. package/components/form/Footer.vue +10 -4
  208. package/components/form/KeyValue.vue +94 -66
  209. package/components/form/LabeledSelect.vue +72 -54
  210. package/components/form/Labels.vue +91 -21
  211. package/components/form/MatchExpressions.vue +58 -11
  212. package/components/form/NameNsDescription.vue +8 -4
  213. package/components/form/Networking.vue +24 -19
  214. package/components/form/NotificationSettings.vue +15 -1
  215. package/components/form/ResourceLabeledSelect.vue +22 -8
  216. package/components/form/ResourceSelector.vue +27 -23
  217. package/components/form/ResourceTabs/index.vue +7 -1
  218. package/components/form/SSHKnownHosts/index.vue +14 -11
  219. package/components/form/SecretSelector.vue +18 -2
  220. package/components/form/Select.vue +57 -26
  221. package/components/form/SelectOrCreateAuthSecret.vue +6 -3
  222. package/components/form/SimpleSecretSelector.vue +17 -4
  223. package/components/form/Taints.vue +21 -2
  224. package/components/form/UnitInput.vue +21 -0
  225. package/components/form/ValueFromResource.vue +31 -19
  226. package/components/form/__tests__/ArrayList.test.ts +32 -0
  227. package/components/form/__tests__/ColorInput.test.ts +35 -0
  228. package/components/form/__tests__/KeyValue.test.ts +36 -0
  229. package/components/form/__tests__/LabeledSelect.test.ts +79 -2
  230. package/components/form/__tests__/Labels.test.ts +360 -0
  231. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  232. package/components/form/__tests__/Networking.test.ts +116 -0
  233. package/components/form/__tests__/SSHKnownHosts.test.ts +11 -2
  234. package/components/form/__tests__/Select.test.ts +37 -1
  235. package/components/form/__tests__/UnitInput.test.ts +23 -1
  236. package/components/form/labeled-select-utils/labeled-select-pagination.ts +3 -38
  237. package/components/formatter/ClusterLink.vue +5 -8
  238. package/components/formatter/Description.vue +30 -0
  239. package/components/formatter/FleetApplicationClustersReady.vue +77 -0
  240. package/components/formatter/FleetApplicationSource.vue +79 -0
  241. package/components/formatter/FleetSummaryGraph.vue +7 -0
  242. package/components/formatter/PodImages.vue +1 -1
  243. package/components/formatter/WorkloadHealthScale.vue +1 -1
  244. package/components/formatter/__tests__/ClusterLink.test.ts +2 -32
  245. package/components/formatter/__tests__/LiveDate.test.ts +10 -2
  246. package/components/google/AccountAccess.vue +209 -0
  247. package/components/google/types/gcp.d.ts +136 -0
  248. package/components/google/types/index.d.ts +101 -0
  249. package/components/google/util/__mocks__/gcp.ts +465 -0
  250. package/components/google/util/formatter.ts +82 -0
  251. package/components/google/util/gcp.ts +134 -0
  252. package/components/google/util/index.d.ts +11 -0
  253. package/components/nav/Favorite.vue +1 -1
  254. package/components/nav/Group.vue +5 -0
  255. package/components/nav/Header.vue +24 -38
  256. package/components/nav/NamespaceFilter.vue +142 -85
  257. package/components/nav/NotificationCenter/Notification.vue +484 -0
  258. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  259. package/components/nav/NotificationCenter/index.vue +148 -0
  260. package/components/nav/TopLevelMenu.helper.ts +55 -34
  261. package/components/nav/TopLevelMenu.vue +11 -0
  262. package/components/nav/Type.vue +4 -1
  263. package/components/nav/WindowManager/ContainerLogs.vue +87 -61
  264. package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
  265. package/components/nav/WindowManager/index.vue +3 -2
  266. package/components/templates/default.vue +0 -3
  267. package/components/templates/plain.vue +0 -3
  268. package/composables/drawer.ts +26 -0
  269. package/composables/focusTrap.ts +3 -3
  270. package/composables/resources.test.ts +63 -0
  271. package/composables/resources.ts +38 -0
  272. package/composables/useI18n.ts +12 -11
  273. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  274. package/config/labels-annotations.js +22 -11
  275. package/config/pagination-table-headers.js +8 -1
  276. package/config/private-label.js +0 -1
  277. package/config/product/auth.js +20 -3
  278. package/config/product/{cis.js → compliance.js} +23 -26
  279. package/config/product/explorer.js +49 -17
  280. package/config/product/fleet.js +77 -17
  281. package/config/product/manager.js +1 -29
  282. package/config/product/settings.js +23 -11
  283. package/config/query-params.js +16 -1
  284. package/config/roles.ts +2 -1
  285. package/config/router/navigation-guards/authentication.js +51 -2
  286. package/config/router/navigation-guards/index.js +5 -59
  287. package/config/router/routes.js +65 -31
  288. package/config/secret.ts +15 -0
  289. package/config/settings.ts +33 -16
  290. package/config/store.js +2 -0
  291. package/config/system-namespaces.js +1 -1
  292. package/config/table-headers.js +92 -31
  293. package/config/types.js +18 -7
  294. package/config/version.js +1 -1
  295. package/core/plugin-helpers.ts +3 -2
  296. package/core/plugin.ts +32 -7
  297. package/core/types.ts +25 -7
  298. package/detail/catalog.cattle.io.app.vue +5 -1
  299. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  300. package/detail/fleet.cattle.io.bundle.vue +70 -6
  301. package/detail/fleet.cattle.io.cluster.vue +28 -15
  302. package/detail/fleet.cattle.io.gitrepo.vue +11 -2
  303. package/detail/fleet.cattle.io.helmop.vue +157 -0
  304. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  305. package/detail/management.cattle.io.oidcclient.vue +369 -0
  306. package/detail/namespace.vue +0 -3
  307. package/detail/node.vue +20 -16
  308. package/detail/pod.vue +2 -2
  309. package/detail/provisioning.cattle.io.cluster.vue +16 -50
  310. package/detail/service.vue +10 -2
  311. package/detail/workload/index.vue +48 -39
  312. package/dialog/AddCustomBadgeDialog.vue +0 -1
  313. package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
  314. package/dialog/AddonConfigConfirmationDialog.vue +1 -1
  315. package/dialog/AssignToDialog.vue +176 -0
  316. package/dialog/ChangePasswordDialog.vue +106 -0
  317. package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
  318. package/dialog/DisableAuthProviderDialog.vue +101 -0
  319. package/dialog/DrainNode.vue +1 -1
  320. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
  321. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +87 -66
  322. package/dialog/FeatureFlagListDialog.vue +288 -0
  323. package/dialog/ForceMachineRemoveDialog.vue +1 -1
  324. package/dialog/GenericPrompt.vue +1 -1
  325. package/dialog/HelmOpForceUpdateDialog.vue +132 -0
  326. package/{components/Import.vue → dialog/ImportDialog.vue} +8 -13
  327. package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
  328. package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -62
  329. package/dialog/MoveNamespaceDialog.vue +157 -0
  330. package/dialog/OidcClientSecretDialog.vue +117 -0
  331. package/dialog/RedeployWorkloadDialog.vue +164 -0
  332. package/dialog/RotateEncryptionKeyDialog.vue +10 -30
  333. package/dialog/ScalePoolDownDialog.vue +1 -1
  334. package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
  335. package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
  336. package/dialog/WechatDialog.vue +57 -0
  337. package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +15 -34
  338. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  339. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +60 -68
  340. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  341. package/edit/__tests__/service.test.ts +2 -1
  342. package/edit/auth/ldap/__tests__/config.test.ts +14 -0
  343. package/edit/auth/ldap/config.vue +24 -0
  344. package/edit/auth/oidc.vue +159 -93
  345. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  346. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  347. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  348. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  349. package/edit/configmap.vue +8 -2
  350. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  351. package/edit/fleet.cattle.io.gitrepo.vue +70 -256
  352. package/edit/fleet.cattle.io.helmop.vue +786 -0
  353. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  354. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  355. package/edit/logging-flow/index.vue +1 -0
  356. package/edit/logging.banzaicloud.io.output/index.vue +2 -1
  357. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +5 -6
  358. package/edit/management.cattle.io.fleetworkspace.vue +44 -10
  359. package/edit/management.cattle.io.oidcclient.vue +162 -0
  360. package/edit/management.cattle.io.project.vue +4 -1
  361. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  362. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  363. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  364. package/edit/monitoring.coreos.com.receiver/auth.vue +3 -3
  365. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  366. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  367. package/edit/monitoring.coreos.com.route.vue +1 -0
  368. package/edit/namespace.vue +2 -4
  369. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  370. package/edit/networking.k8s.io.ingress/Certificate.vue +11 -3
  371. package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +37 -0
  372. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  373. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -14
  374. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +57 -62
  375. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +10 -16
  376. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.test.ts +72 -41
  377. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/mock.json +17 -1
  378. package/edit/networking.k8s.io.networkpolicy/index.vue +23 -31
  379. package/edit/node.vue +1 -0
  380. package/edit/persistentvolume/index.vue +4 -1
  381. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
  382. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +69 -2
  383. package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
  384. package/edit/provisioning.cattle.io.cluster/index.vue +21 -73
  385. package/edit/provisioning.cattle.io.cluster/rke2.vue +535 -428
  386. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +48 -39
  387. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
  388. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  389. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
  390. package/edit/resources.cattle.io.restore.vue +1 -1
  391. package/edit/secret/basic.vue +1 -0
  392. package/edit/secret/index.vue +127 -15
  393. package/edit/service.vue +17 -29
  394. package/edit/serviceaccount.vue +4 -1
  395. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  396. package/edit/workload/index.vue +11 -15
  397. package/edit/workload/mixins/workload.js +0 -2
  398. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  399. package/list/fleet.cattle.io.gitrepo.vue +1 -1
  400. package/list/fleet.cattle.io.helmop.vue +108 -0
  401. package/list/harvesterhci.io.management.cluster.vue +0 -17
  402. package/list/management.cattle.io.feature.vue +4 -288
  403. package/list/management.cattle.io.oidcclient.vue +108 -0
  404. package/list/management.cattle.io.user.vue +13 -20
  405. package/list/namespace.vue +6 -2
  406. package/list/node.vue +2 -0
  407. package/list/projectsecret.vue +345 -0
  408. package/list/secret.vue +109 -0
  409. package/list/workload.vue +6 -2
  410. package/machine-config/__tests__/vmwarevsphere.test.ts +5 -7
  411. package/machine-config/amazonec2.vue +3 -24
  412. package/machine-config/components/GCEImage.vue +374 -0
  413. package/machine-config/google.vue +617 -0
  414. package/machine-config/vmwarevsphere.vue +7 -17
  415. package/mixins/__tests__/brand.spec.ts +170 -0
  416. package/mixins/auth-config.js +8 -1
  417. package/mixins/brand.js +16 -17
  418. package/mixins/create-edit-view/impl.js +10 -1
  419. package/mixins/create-edit-view/index.js +5 -0
  420. package/mixins/preset.js +100 -0
  421. package/mixins/resource-fetch-api-pagination.js +73 -44
  422. package/mixins/resource-fetch.js +18 -8
  423. package/mixins/resource-table-watch.js +45 -0
  424. package/mixins/vue-select-overrides.js +1 -4
  425. package/models/__tests__/chart.test.ts +296 -0
  426. package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
  427. package/models/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  428. package/models/__tests__/node.test.ts +7 -63
  429. package/models/__tests__/workload.test.ts +1 -0
  430. package/models/chart.js +157 -2
  431. package/models/cluster/node.js +2 -1
  432. package/models/cluster.js +32 -2
  433. package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
  434. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  435. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  436. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  437. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  438. package/models/fleet-application.js +297 -0
  439. package/models/fleet.cattle.io.bundle.js +9 -8
  440. package/models/fleet.cattle.io.cluster.js +21 -4
  441. package/models/fleet.cattle.io.gitrepo.js +46 -382
  442. package/models/fleet.cattle.io.helmop.js +202 -0
  443. package/models/management.cattle.io.authconfig.js +1 -0
  444. package/models/management.cattle.io.cluster.js +0 -20
  445. package/models/management.cattle.io.feature.js +7 -1
  446. package/models/management.cattle.io.fleetworkspace.js +14 -1
  447. package/models/management.cattle.io.node.js +7 -22
  448. package/models/management.cattle.io.nodepool.js +12 -0
  449. package/models/management.cattle.io.oidcclient.js +18 -0
  450. package/models/management.cattle.io.registration.js +3 -0
  451. package/models/management.cattle.io.setting.js +0 -1
  452. package/models/namespace.js +12 -1
  453. package/models/provisioning.cattle.io.cluster.js +60 -97
  454. package/models/secret.js +157 -2
  455. package/models/service.js +28 -9
  456. package/models/storage.k8s.io.storageclass.js +2 -2
  457. package/models/workload.js +91 -51
  458. package/package.json +6 -5
  459. package/pages/about.vue +17 -61
  460. package/pages/account/index.vue +9 -1
  461. package/pages/auth/login.vue +3 -38
  462. package/pages/auth/verify.vue +13 -1
  463. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +36 -0
  464. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
  465. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +57 -0
  466. package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
  467. package/pages/c/_cluster/apps/charts/index.vue +501 -468
  468. package/pages/c/_cluster/apps/charts/install.vue +0 -1
  469. package/pages/c/_cluster/auth/roles/index.vue +19 -48
  470. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  471. package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
  472. package/pages/c/_cluster/explorer/index.vue +14 -3
  473. package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
  474. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  475. package/pages/c/_cluster/fleet/__tests__/index.test.ts +720 -0
  476. package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
  477. package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
  478. package/pages/c/_cluster/fleet/application/create.vue +341 -0
  479. package/pages/c/_cluster/fleet/application/index.vue +139 -0
  480. package/pages/c/_cluster/fleet/graph/config.js +277 -0
  481. package/pages/c/_cluster/fleet/index.vue +866 -328
  482. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  483. package/pages/c/_cluster/longhorn/index.vue +5 -2
  484. package/pages/c/_cluster/settings/banners.vue +56 -2
  485. package/pages/c/_cluster/settings/brand.vue +2 -1
  486. package/pages/c/_cluster/settings/performance.vue +7 -26
  487. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  488. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  489. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
  490. package/pages/c/_cluster/uiplugins/index.vue +98 -55
  491. package/pages/explorer/resource/detail/configmap.vue +42 -0
  492. package/pages/explorer/resource/detail/projectsecret.vue +9 -0
  493. package/pages/explorer/resource/detail/secret.vue +63 -0
  494. package/pages/home.vue +8 -104
  495. package/pages/prefs.vue +0 -1
  496. package/pages/support/index.vue +4 -6
  497. package/plugins/clean-html.js +2 -0
  498. package/plugins/dashboard-store/__tests__/actions.test.ts +4 -1
  499. package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
  500. package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
  501. package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
  502. package/plugins/dashboard-store/actions.js +212 -55
  503. package/plugins/dashboard-store/getters.js +112 -24
  504. package/plugins/dashboard-store/mutations.js +61 -12
  505. package/plugins/dashboard-store/normalize.js +29 -19
  506. package/plugins/dashboard-store/resource-class.js +132 -49
  507. package/plugins/steve/__tests__/getters.test.ts +19 -12
  508. package/plugins/steve/__tests__/steve-class.test.ts +1 -0
  509. package/plugins/steve/__tests__/subscribe.spec.ts +324 -1
  510. package/plugins/steve/actions.js +37 -24
  511. package/plugins/steve/getters.js +47 -12
  512. package/plugins/steve/resourceWatcher.js +10 -3
  513. package/plugins/steve/steve-class.js +5 -0
  514. package/plugins/steve/steve-pagination-utils.ts +225 -43
  515. package/plugins/steve/subscribe.js +418 -53
  516. package/plugins/steve/worker/web-worker.advanced.js +5 -1
  517. package/rancher-components/Banner/Banner.test.ts +51 -3
  518. package/rancher-components/Banner/Banner.vue +37 -6
  519. package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
  520. package/rancher-components/Form/Checkbox/Checkbox.vue +27 -9
  521. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +51 -0
  522. package/rancher-components/Form/LabeledInput/LabeledInput.vue +21 -3
  523. package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
  524. package/rancher-components/Form/Radio/RadioButton.vue +21 -5
  525. package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
  526. package/rancher-components/Form/Radio/RadioGroup.vue +81 -38
  527. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +4 -0
  528. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +22 -1
  529. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  530. package/rancher-components/RcButton/RcButton.vue +1 -1
  531. package/rancher-components/RcDropdown/RcDropdown.test.ts +98 -0
  532. package/rancher-components/RcDropdown/RcDropdown.vue +6 -0
  533. package/rancher-components/RcDropdown/RcDropdownItem.vue +8 -55
  534. package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +69 -0
  535. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +93 -0
  536. package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -8
  537. package/rancher-components/RcDropdown/index.ts +2 -0
  538. package/rancher-components/RcDropdown/useDropdownContext.ts +21 -0
  539. package/rancher-components/RcDropdown/useDropdownItem.ts +92 -0
  540. package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
  541. package/rancher-components/RcItemCard/RcItemCard.vue +430 -0
  542. package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
  543. package/rancher-components/RcItemCard/index.ts +2 -0
  544. package/rancher-components/StringList/StringList.vue +1 -1
  545. package/scripts/extension/publish +1 -1
  546. package/static/loading-indicator.html +1 -1
  547. package/store/action-menu.js +26 -56
  548. package/store/auth.js +3 -0
  549. package/store/catalog.js +85 -25
  550. package/store/features.js +0 -1
  551. package/store/growl.js +97 -8
  552. package/store/i18n.js +1 -1
  553. package/store/index.js +44 -14
  554. package/store/notifications.ts +426 -0
  555. package/store/prefs.js +2 -8
  556. package/store/slideInPanel.ts +6 -0
  557. package/store/type-map.js +35 -19
  558. package/store/type-map.utils.ts +49 -6
  559. package/store/uiplugins.ts +15 -1
  560. package/types/fleet.d.ts +60 -1
  561. package/types/kube/kube-api.ts +34 -0
  562. package/types/notifications/index.ts +74 -0
  563. package/types/resources/fleet.d.ts +43 -0
  564. package/types/resources/pod-security-admission.ts +36 -0
  565. package/types/resources/settings.d.ts +107 -0
  566. package/types/resources/userPreferences.d.ts +13 -0
  567. package/types/shell/index.d.ts +971 -745
  568. package/types/store/dashboard-store.types.ts +57 -4
  569. package/types/store/pagination.types.ts +41 -9
  570. package/types/store/subscribe.types.ts +50 -0
  571. package/utils/__mocks__/tabbable.js +13 -0
  572. package/utils/__tests__/back-off.test.ts +354 -0
  573. package/utils/__tests__/create-yaml.test.ts +235 -0
  574. package/utils/__tests__/fleet.test.ts +148 -0
  575. package/utils/__tests__/kontainer.test.ts +19 -0
  576. package/utils/__tests__/object.test.ts +54 -1
  577. package/utils/__tests__/string.test.ts +273 -1
  578. package/utils/__tests__/time.test.ts +31 -0
  579. package/utils/auth.js +41 -6
  580. package/utils/back-off.ts +176 -0
  581. package/utils/cluster.js +24 -20
  582. package/utils/create-yaml.js +103 -9
  583. package/utils/crypto/encryption.ts +103 -0
  584. package/utils/cspAdaptor.ts +51 -0
  585. package/utils/error.js +4 -5
  586. package/utils/fleet-types.ts +0 -0
  587. package/utils/fleet.ts +204 -74
  588. package/utils/grafana.js +1 -0
  589. package/utils/kontainer.ts +3 -5
  590. package/utils/object.js +36 -12
  591. package/utils/pagination-utils.ts +50 -3
  592. package/utils/pagination-wrapper.ts +132 -50
  593. package/utils/perf-setting.utils.ts +28 -0
  594. package/utils/release-notes.ts +48 -0
  595. package/utils/router.js +4 -4
  596. package/utils/selector-typed.ts +210 -0
  597. package/utils/selector.js +29 -6
  598. package/utils/settings.ts +4 -1
  599. package/utils/string.js +24 -0
  600. package/utils/style.ts +39 -0
  601. package/utils/{time.js → time.ts} +25 -6
  602. package/utils/uiplugins.ts +41 -8
  603. package/utils/v-sphere.ts +5 -1
  604. package/utils/validators/formRules/__tests__/index.test.ts +76 -6
  605. package/utils/validators/formRules/index.ts +99 -4
  606. package/utils/window.js +11 -7
  607. package/.DS_Store +0 -0
  608. package/components/AssignTo.vue +0 -199
  609. package/components/DisableAuthProviderModal.vue +0 -115
  610. package/components/MoveModal.vue +0 -167
  611. package/components/PromptChangePassword.vue +0 -123
  612. package/components/ResourceList/Masthead-btn.vue +0 -225
  613. package/components/__tests__/ApplicationCard.test.ts +0 -27
  614. package/components/cards/ApplicationCard.vue +0 -145
  615. package/components/fleet/FleetBundleResources.vue +0 -86
  616. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
  617. package/components/formatter/RKETemplateName.vue +0 -37
  618. package/config/product/legacy.js +0 -62
  619. package/config/secret.js +0 -14
  620. package/dialog/SaveAsRKETemplateDialog.vue +0 -139
  621. package/models/etcdbackup.js +0 -45
  622. package/pages/auth copy/login.vue +0 -595
  623. package/pages/auth copy/logout.vue +0 -47
  624. package/pages/auth copy/setup.vue +0 -523
  625. package/pages/auth copy/verify.vue +0 -203
  626. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
  627. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  628. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  629. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  630. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
@@ -0,0 +1,148 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ computed,
4
+ ref,
5
+ } from 'vue';
6
+ import { useStore } from 'vuex';
7
+ import Notification from './Notification.vue';
8
+ import NotificationHeader from './NotificationHeader.vue';
9
+ import {
10
+ RcDropdown,
11
+ RcDropdownSeparator,
12
+ RcDropdownTrigger
13
+ } from '@components/RcDropdown';
14
+
15
+ const store = useStore();
16
+ const allNotifications = computed(() => store.getters['notifications/all']);
17
+ const unreadLevelClass = computed(() => {
18
+ return store.getters['notifications/unreadCount'] === 0 ? '' : 'unread';
19
+ });
20
+
21
+ // There may be more notifications than we can show on screen, so the popover needs to scroll
22
+ const scroller = ref<HTMLElement>();
23
+
24
+ // Close all of the open growls when the notification center is shown, so that they do not overlap
25
+ const open = (opened: boolean) => {
26
+ if (opened) {
27
+ store.dispatch('growl/clear');
28
+ }
29
+ };
30
+ </script>
31
+
32
+ <template>
33
+ <rc-dropdown
34
+ :aria-label="t('nav.notifications.label')"
35
+ @update:open="open"
36
+ >
37
+ <rc-dropdown-trigger
38
+ tertiary
39
+ data-testid="notifications-center"
40
+ :aria-label="t('nav.notifications.button.label')"
41
+ >
42
+ <div class="level-indicator">
43
+ <i class="icon icon-lg icon-notify-bell" />
44
+ <div
45
+ :data-testid="`notifications-center-status${ unreadLevelClass }`"
46
+ class="trigger-level"
47
+ :class="unreadLevelClass"
48
+ />
49
+ </div>
50
+ </rc-dropdown-trigger>
51
+ <template #dropdownCollection>
52
+ <div
53
+ data-testid="notifications-center-panel"
54
+ class="notification-dropdown"
55
+ >
56
+ <NotificationHeader class="header" />
57
+ <div
58
+ v-if="allNotifications.length === 0"
59
+ class="no-notifications"
60
+ >
61
+ <div class="hands">
62
+ &#x1F64C;
63
+ </div>
64
+ <div>
65
+ {{ t('notificationCenter.caughtUp', {}, true) }}
66
+ </div>
67
+ </div>
68
+ <div
69
+ ref="scroller"
70
+ class="scroll-container"
71
+ >
72
+ <template
73
+ v-for="(a, index) in allNotifications"
74
+ :key="a.id"
75
+ >
76
+ <rc-dropdown-separator
77
+ v-if="index > 0"
78
+ class="notification-separator"
79
+ />
80
+ <Notification :item="a" />
81
+ </template>
82
+ </div>
83
+ </div>
84
+ </template>
85
+ </rc-dropdown>
86
+ </template>
87
+
88
+ <style lang="scss" scoped>
89
+ .notification-dropdown {
90
+ display: flex;
91
+ overflow: hidden;
92
+ flex-direction: column;
93
+
94
+ .header {
95
+ flex: 0;
96
+ }
97
+
98
+ .scroll-container {
99
+ overflow: auto;
100
+ max-height: 80vh;
101
+ padding: 3px 0; // Need padding at top and bottom in order to show the focus border for the notification
102
+ }
103
+ }
104
+
105
+ .notification-separator {
106
+ margin: 0 3px;
107
+ width: auto;
108
+ }
109
+
110
+ .no-notifications {
111
+ text-align: center;
112
+ min-width: 340px;
113
+ margin: 40px 16px;
114
+
115
+ .hands {
116
+ font-size: 53px;
117
+ padding-top: 0;
118
+ }
119
+
120
+ > div {
121
+ padding-top: 16px;
122
+ }
123
+ }
124
+
125
+ .level-indicator {
126
+ display: flex;
127
+ position: relative;
128
+ height: 20px;
129
+ width: 18px;
130
+
131
+ .trigger-level {
132
+ position: absolute;
133
+ right: -6px;
134
+ top: -4px;
135
+ border-radius: 50%;
136
+ height: 8px;
137
+ width: 8px;
138
+ background-color: var(--primary);
139
+ transition: opacity 0.5s ease-in-out;
140
+ opacity: 0;
141
+
142
+ &.unread {
143
+ opacity: 1;
144
+ background-color: var(--error);
145
+ }
146
+ }
147
+ }
148
+ </style>
@@ -1,10 +1,12 @@
1
1
  import { CAPI, MANAGEMENT } from '@shell/config/types';
2
+ import { STORE } from '@shell/store/store-types';
2
3
  import { PaginationParam, PaginationParamFilter, PaginationSort } from '@shell/types/store/pagination.types';
3
4
  import { VuexStore } from '@shell/types/store/vuex';
4
5
  import { filterHiddenLocalCluster, filterOnlyKubernetesClusters, paginationFilterClusters } from '@shell/utils/cluster';
5
6
  import PaginationWrapper from '@shell/utils/pagination-wrapper';
6
7
  import { allHash } from '@shell/utils/promise';
7
8
  import { sortBy } from '@shell/utils/sort';
9
+ import { reactive } from 'vue';
8
10
  import { LocationAsRelativeRaw } from 'vue-router';
9
11
 
10
12
  interface TopLevelMenuCluster {
@@ -86,7 +88,15 @@ export interface TopLevelMenuHelper {
86
88
  */
87
89
  clustersOthers: Array<TopLevelMenuCluster>;
88
90
 
89
- update: (args: UpdateArgs) => Promise<void>
91
+ /**
92
+ * Fetch all cluster resources
93
+ */
94
+ update: (args: UpdateArgs) => Promise<void>;
95
+
96
+ /**
97
+ * Cleanup on destroy of TopLevelMenu
98
+ */
99
+ destroy: () => Promise<void>;
90
100
  }
91
101
 
92
102
  export abstract class BaseTopLevelMenuHelper {
@@ -106,7 +116,7 @@ export abstract class BaseTopLevelMenuHelper {
106
116
  * 2. ready
107
117
  * 3. name
108
118
  */
109
- public clustersPinned: Array<TopLevelMenuCluster> = [];
119
+ public clustersPinned: Array<TopLevelMenuCluster> = reactive([]);
110
120
 
111
121
  /**
112
122
  * Filter mgmt clusters by
@@ -121,7 +131,7 @@ export abstract class BaseTopLevelMenuHelper {
121
131
  * 2. ready
122
132
  * 3. name
123
133
  */
124
- public clustersOthers: Array<TopLevelMenuCluster> = [];
134
+ public clustersOthers: Array<TopLevelMenuCluster> = reactive([]);
125
135
 
126
136
  constructor({ $store }: {
127
137
  $store: VuexStore,
@@ -141,7 +151,7 @@ export abstract class BaseTopLevelMenuHelper {
141
151
  return {
142
152
  id: mgmtCluster.id,
143
153
  label: mgmtCluster.nameDisplay,
144
- ready: mgmtCluster.isReady, // && !provCluster?.hasError,
154
+ ready: mgmtCluster.isReady,
145
155
  providerNavLogo: mgmtCluster.providerMenuLogo,
146
156
  badge: mgmtCluster.badge,
147
157
  iconColor: mgmtCluster.iconColor,
@@ -165,69 +175,64 @@ export abstract class BaseTopLevelMenuHelper {
165
175
  export class TopLevelMenuHelperPagination extends BaseTopLevelMenuHelper implements TopLevelMenuHelper {
166
176
  private args?: UpdateArgs;
167
177
 
168
- private clustersPinnedWrapper: PaginationWrapper;
169
- private clustersOthersWrapper: PaginationWrapper;
170
- private provClusterWrapper: PaginationWrapper;
171
-
172
- private commonClusterFilters: PaginationParam[];
178
+ private clustersPinnedWrapper: PaginationWrapper<any>;
179
+ private clustersOthersWrapper: PaginationWrapper<any>;
180
+ private provClusterWrapper: PaginationWrapper<any>;
173
181
 
174
182
  constructor({ $store }: {
175
183
  $store: VuexStore,
176
184
  }) {
177
185
  super({ $store });
178
186
 
179
- this.commonClusterFilters = paginationFilterClusters({ getters: this.$store.getters });
180
-
187
+ // Fetch all PINNED clusters (see `clustersPinned` description for details)
188
+ // No need to monitor for changes, the UNPINNED request will handle it
181
189
  this.clustersPinnedWrapper = new PaginationWrapper({
182
190
  $store,
183
- onUpdate: () => {
184
- // trigger on websocket update (only need 1 trigger for this cluster type)
185
- // https://github.com/rancher/rancher/issues/40773 / https://github.com/rancher/dashboard/issues/12734
186
- if (this.args) {
187
- this.update(this.args);
188
- }
189
- },
191
+ id: 'tlm-pinned-clusters',
190
192
  enabledFor: {
191
- store: 'management',
193
+ store: STORE.MANAGEMENT,
192
194
  resource: {
193
195
  id: MANAGEMENT.CLUSTER,
194
196
  context: 'side-bar',
195
197
  }
196
- }
198
+ },
199
+ formatResponse: { classify: true }
197
200
  });
201
+ // Fetch all UNPINNED clusters capped at 10 (see `clustersOthers` description for details)
198
202
  this.clustersOthersWrapper = new PaginationWrapper({
199
203
  $store,
200
- onUpdate: (res) => {
201
- // trigger on websocket update (only need 1 trigger for this cluster type)
202
- // https://github.com/rancher/rancher/issues/40773 / https://github.com/rancher/dashboard/issues/12734
204
+ id: 'tlm-unpinned-clusters',
205
+ onChange: () => {
203
206
  if (this.args) {
204
207
  this.update(this.args);
205
208
  }
206
209
  },
207
210
  enabledFor: {
208
- store: 'management',
211
+ store: STORE.MANAGEMENT,
209
212
  resource: {
210
213
  id: MANAGEMENT.CLUSTER,
211
214
  context: 'side-bar',
212
215
  }
213
- }
216
+ },
217
+ formatResponse: { classify: true }
214
218
  });
219
+ // Fetch all prov clusters for the mgmt clusters we have
215
220
  this.provClusterWrapper = new PaginationWrapper({
216
221
  $store,
217
- onUpdate: (res) => {
218
- // trigger on websocket update (only need 1 trigger for this cluster type)
219
- // https://github.com/rancher/rancher/issues/40773 / https://github.com/rancher/dashboard/issues/12734
222
+ id: 'tlm-prov-clusters',
223
+ onChange: () => {
220
224
  if (this.args) {
221
225
  this.update(this.args);
222
226
  }
223
227
  },
224
228
  enabledFor: {
225
- store: 'management',
229
+ store: STORE.MANAGEMENT,
226
230
  resource: {
227
231
  id: CAPI.RANCHER_CLUSTER,
228
232
  context: 'side-bar',
229
233
  }
230
- }
234
+ },
235
+ formatResponse: { classify: true }
231
236
  });
232
237
  }
233
238
 
@@ -258,6 +263,7 @@ export class TopLevelMenuHelperPagination extends BaseTopLevelMenuHelper impleme
258
263
  return res;
259
264
  }, {} as { [mgmtId: string]: ProvCluster});
260
265
 
266
+ // Filter out mgmt clusters that don't have matching prov cluster and convert remaining to required format
261
267
  const _clustersNotPinned = res.notPinned
262
268
  .filter((mgmtCluster) => !!provClustersByMgmtId[mgmtCluster.id])
263
269
  .map((mgmtCluster) => this.convertToCluster(mgmtCluster, provClustersByMgmtId[mgmtCluster.id]));
@@ -274,6 +280,19 @@ export class TopLevelMenuHelperPagination extends BaseTopLevelMenuHelper impleme
274
280
  this.cacheClusters();
275
281
  }
276
282
 
283
+ async destroy() {
284
+ this.clustersPinnedWrapper.onDestroy();
285
+ this.clustersOthersWrapper.onDestroy();
286
+ this.provClusterWrapper.onDestroy();
287
+ }
288
+
289
+ /**
290
+ * Helper function
291
+ *
292
+ * This extracts all the functionality previously in TopLevelMenu
293
+ *
294
+ * Construct SSP filter params
295
+ */
277
296
  private constructParams({
278
297
  pinnedIds,
279
298
  searchTerm,
@@ -289,7 +308,8 @@ export class TopLevelMenuHelperPagination extends BaseTopLevelMenuHelper impleme
289
308
  includePinned?: boolean,
290
309
  excludePinned?: boolean,
291
310
  }): PaginationParam[] {
292
- const filters: PaginationParam[] = [...this.commonClusterFilters];
311
+ const commonClusterFilters = paginationFilterClusters({ getters: this.$store.getters });
312
+ const filters: PaginationParam[] = [...commonClusterFilters];
293
313
 
294
314
  if (pinnedIds) {
295
315
  if (includePinned) {
@@ -341,7 +361,6 @@ export class TopLevelMenuHelperPagination extends BaseTopLevelMenuHelper impleme
341
361
  sort: DEFAULT_SORT,
342
362
  projectsOrNamespaces: []
343
363
  },
344
- classify: true,
345
364
  }).then((r) => r.data);
346
365
  }
347
366
 
@@ -362,7 +381,6 @@ export class TopLevelMenuHelperPagination extends BaseTopLevelMenuHelper impleme
362
381
  sort: DEFAULT_SORT,
363
382
  projectsOrNamespaces: []
364
383
  },
365
- classify: true,
366
384
  }).then((r) => r.data);
367
385
  }
368
386
 
@@ -386,7 +404,6 @@ export class TopLevelMenuHelperPagination extends BaseTopLevelMenuHelper impleme
386
404
  sort: [],
387
405
  projectsOrNamespaces: []
388
406
  },
389
- classify: true,
390
407
  }).then((r) => r.data);
391
408
  }
392
409
  }
@@ -419,6 +436,10 @@ export class TopLevelMenuHelperLegacy extends BaseTopLevelMenuHelper implements
419
436
  this.cacheClusters();
420
437
  }
421
438
 
439
+ async destroy() {
440
+ // No-op
441
+ }
442
+
422
443
  /**
423
444
  * Filter mgmt clusters by
424
445
  * 1. Harvester type 1 (filterOnlyKubernetesClusters)
@@ -260,6 +260,13 @@ export default {
260
260
  });
261
261
 
262
262
  return appBar;
263
+ },
264
+
265
+ hideLocalCluster() {
266
+ const hideLocalSetting = this.$store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.HIDE_LOCAL_CLUSTER) || {};
267
+ const value = hideLocalSetting.value || hideLocalSetting.default || 'false';
268
+
269
+ return value === 'true';
263
270
  }
264
271
  },
265
272
 
@@ -312,6 +319,9 @@ export default {
312
319
  immediate: true,
313
320
  },
314
321
 
322
+ hideLocalCluster() {
323
+ this.updateClusters(this.pinnedIds, 'slow');
324
+ }
315
325
  },
316
326
 
317
327
  mounted() {
@@ -320,6 +330,7 @@ export default {
320
330
 
321
331
  beforeUnmount() {
322
332
  document.removeEventListener('keyup', this.handler);
333
+ this.helper?.destroy();
323
334
  },
324
335
 
325
336
  methods: {
@@ -64,7 +64,10 @@ export default {
64
64
  // If the route explicitly declares the nav path that should be highlighted, then use that
65
65
  if (routeMetaNav) {
66
66
  const cluster = this.$route.params?.cluster;
67
- const navPath = routeMetaNav.replace(':cluster', cluster);
67
+ const product = this.$route.params?.product;
68
+ const navPath = routeMetaNav
69
+ .replace(':cluster', cluster)
70
+ .replace(':product', product);
68
71
 
69
72
  if (navPath === typeFullPath) {
70
73
  return true;
@@ -10,8 +10,11 @@ import AsyncButton from '@shell/components/AsyncButton';
10
10
  import Select from '@shell/components/form/Select';
11
11
  import VirtualList from 'vue3-virtual-scroll-list';
12
12
  import LogItem from '@shell/components/LogItem';
13
+ import ContainerLogsActions from '@shell/components/nav/WindowManager/ContainerLogsActions.vue';
13
14
  import { shallowRef } from 'vue';
15
+ import { useStore } from 'vuex';
14
16
  import { debounce } from 'lodash';
17
+ import { useRuntimeFlag } from '@shell/composables/useRuntimeFlag';
15
18
 
16
19
  import { escapeRegex } from '@shell/utils/string';
17
20
  import { HARVESTER_NAME as VIRTUAL } from '@shell/config/features';
@@ -91,6 +94,7 @@ export default {
91
94
  Checkbox,
92
95
  AsyncButton,
93
96
  VirtualList,
97
+ ContainerLogsActions,
94
98
  },
95
99
 
96
100
  props: {
@@ -130,6 +134,13 @@ export default {
130
134
  }
131
135
  },
132
136
 
137
+ setup() {
138
+ const store = useStore();
139
+ const { featureDropdownMenu } = useRuntimeFlag(store);
140
+
141
+ return { featureDropdownMenu };
142
+ },
143
+
133
144
  data() {
134
145
  return {
135
146
  container: this.initialContainer || this.pod?.defaultContainerName,
@@ -145,7 +156,8 @@ export default {
145
156
  lines: [],
146
157
  now: new Date(),
147
158
  logItem: shallowRef(LogItem),
148
- isContainerMenuOpen: false
159
+ isContainerMenuOpen: false,
160
+ range: '',
149
161
  };
150
162
  },
151
163
 
@@ -636,72 +648,85 @@ export default {
636
648
  </div>
637
649
 
638
650
  <div class="log-action log-action-group ml-5">
639
- <div
640
- role="menu"
641
- tabindex="0"
642
- :aria-label="t('wm.containerLogs.logActionMenu')"
643
- @click="openContainerMenu"
644
- @blur.capture="closeContainerMenu"
645
- @keyup.enter="openContainerMenu"
646
- @keyup.space="openContainerMenu"
647
- >
648
- <v-dropdown
649
- :triggers="[]"
650
- :shown="isContainerMenuOpen"
651
- placement="top"
652
- popperClass="containerLogsDropdown"
653
- :autoHide="false"
654
- :flip="false"
655
- :container="false"
656
- @focus.capture="openContainerMenu"
651
+ <template v-if="featureDropdownMenu">
652
+ <ContainerLogsActions
653
+ :range="range"
654
+ :range-options="rangeOptions"
655
+ :wrap="wrap"
656
+ :timestamps="timestamps"
657
+ @toggle-range="toggleRange"
658
+ @toggle-wrap="toggleWrap"
659
+ @toggle-timestamps="toggleTimestamps"
660
+ />
661
+ </template>
662
+ <template v-else>
663
+ <div
664
+ role="menu"
665
+ tabindex="0"
666
+ :aria-label="t('wm.containerLogs.logActionMenu')"
667
+ @click="openContainerMenu"
668
+ @blur.capture="closeContainerMenu"
669
+ @keyup.enter="openContainerMenu"
670
+ @keyup.space="openContainerMenu"
657
671
  >
658
- <button
659
- class="btn role-primary btn-cog"
660
- role="button"
661
- :aria-label="t('wm.containerLogs.options')"
672
+ <v-dropdown
673
+ :triggers="[]"
674
+ :shown="isContainerMenuOpen"
675
+ placement="top"
676
+ popperClass="containerLogsDropdown"
677
+ :autoHide="false"
678
+ :flip="false"
679
+ :container="false"
680
+ @focus.capture="openContainerMenu"
662
681
  >
663
- <i
664
- class="icon icon-gear"
665
- :alt="t('wm.containerLogs.options')"
666
- />
667
- <i
668
- class="icon icon-chevron-up"
669
- :alt="t('wm.containerLogs.expand')"
670
- />
671
- </button>
672
-
673
- <template #popper>
674
- <div class="filter-popup">
675
- <LabeledSelect
676
- v-model:value="range"
677
- class="range"
678
- :label="t('wm.containerLogs.range.label')"
679
- :options="rangeOptions"
680
- :clearable="false"
681
- placement="top"
682
- role="menuitem"
683
- @update:value="toggleRange($event)"
682
+ <button
683
+ class="btn role-primary btn-cog"
684
+ role="button"
685
+ :aria-label="t('wm.containerLogs.options')"
686
+ >
687
+ <i
688
+ class="icon icon-gear"
689
+ :alt="t('wm.containerLogs.options')"
684
690
  />
685
- <div>
686
- <Checkbox
687
- :label="t('wm.containerLogs.wrap')"
688
- :value="wrap"
689
- role="menuitem"
690
- @update:value="toggleWrap"
691
- />
692
- </div>
693
- <div>
694
- <Checkbox
695
- :label="t('wm.containerLogs.timestamps')"
696
- :value="timestamps"
691
+ <i
692
+ class="icon icon-chevron-up"
693
+ :alt="t('wm.containerLogs.expand')"
694
+ />
695
+ </button>
696
+
697
+ <template #popper>
698
+ <div class="filter-popup">
699
+ <LabeledSelect
700
+ v-model:value="range"
701
+ class="range"
702
+ :label="t('wm.containerLogs.range.label')"
703
+ :options="rangeOptions"
704
+ :clearable="false"
705
+ placement="top"
697
706
  role="menuitem"
698
- @update:value="toggleTimestamps"
707
+ @update:value="toggleRange($event)"
699
708
  />
709
+ <div>
710
+ <Checkbox
711
+ :label="t('wm.containerLogs.wrap')"
712
+ :value="wrap"
713
+ role="menuitem"
714
+ @update:value="toggleWrap"
715
+ />
716
+ </div>
717
+ <div>
718
+ <Checkbox
719
+ :label="t('wm.containerLogs.timestamps')"
720
+ :value="timestamps"
721
+ role="menuitem"
722
+ @update:value="toggleTimestamps"
723
+ />
724
+ </div>
700
725
  </div>
701
- </div>
702
- </template>
703
- </v-dropdown>
704
- </div>
726
+ </template>
727
+ </v-dropdown>
728
+ </div>
729
+ </template>
705
730
  </div>
706
731
 
707
732
  <div class="log-action log-action-group ml-5">
@@ -874,4 +899,5 @@ export default {
874
899
  }
875
900
  }
876
901
  }
902
+
877
903
  </style>
@@ -0,0 +1,76 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ RcDropdown,
4
+ RcDropdownTrigger,
5
+ RcDropdownItemCheckbox,
6
+ RcDropdownItemSelect,
7
+ } from '@components/RcDropdown';
8
+
9
+ defineProps({
10
+ range: {
11
+ type: String,
12
+ default: '',
13
+ },
14
+ rangeOptions: {
15
+ type: Array,
16
+ default() {
17
+ return [];
18
+ },
19
+ },
20
+ wrap: Boolean,
21
+ timestamps: Boolean,
22
+ });
23
+
24
+ defineEmits([
25
+ 'toggleRange',
26
+ 'toggleWrap',
27
+ 'toggleTimestamps',
28
+ ]);
29
+
30
+ </script>
31
+
32
+ <template>
33
+ <rc-dropdown>
34
+ <rc-dropdown-trigger
35
+ class="condensed"
36
+ >
37
+ <i
38
+ class="icon icon-gear"
39
+ :alt="t('wm.containerLogs.options')"
40
+ />
41
+ <template #after>
42
+ <i
43
+ class="icon icon-chevron-up"
44
+ :alt="t('wm.containerLogs.expand')"
45
+ />
46
+ </template>
47
+ </rc-dropdown-trigger>
48
+ <template #dropdownCollection>
49
+ <rc-dropdown-item-select
50
+ :model-value="range"
51
+ :options="rangeOptions"
52
+ @select="$emit('toggleRange', $event)"
53
+ />
54
+ <rc-dropdown-item-checkbox
55
+ :model-value="wrap"
56
+ @click="$emit('toggleWrap', $event)"
57
+ >
58
+ {{ t('wm.containerLogs.wrap') }}
59
+ </rc-dropdown-item-checkbox>
60
+ <rc-dropdown-item-checkbox
61
+ :model-value="timestamps"
62
+ @click="$emit('toggleTimestamps', $event)"
63
+ >
64
+ {{ t('wm.containerLogs.timestamps') }}
65
+ </rc-dropdown-item-checkbox>
66
+ </template>
67
+ </rc-dropdown>
68
+ </template>
69
+
70
+ <style lang="scss" scoped>
71
+ .condensed {
72
+ padding-left: 0.5rem;
73
+ padding-right: 0.5rem;
74
+ min-height: 30px;
75
+ }
76
+ </style>