dashboard-shell-shell 3.0.2-test.20250913 → 3.0.5-logTest.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 (759) hide show
  1. package/assets/brand/csp/favicon.png +0 -0
  2. package/assets/data/aws-regions.json +3 -0
  3. package/assets/icons/demo.css:Zone.Identifier +0 -0
  4. package/assets/icons/demo_index.html:Zone.Identifier +0 -0
  5. package/assets/icons/iconfont.css +4 -1
  6. package/assets/icons/iconfont.css:Zone.Identifier +0 -0
  7. package/assets/icons/iconfont.js:Zone.Identifier +0 -0
  8. package/assets/icons/iconfont.json:Zone.Identifier +0 -0
  9. package/assets/icons/iconfont.ttf:Zone.Identifier +0 -0
  10. package/assets/icons/iconfont.woff2:Zone.Identifier +0 -0
  11. package/assets/icons/iconfont.woff:Zone.Identifier +0 -0
  12. package/assets/iconsNew/demo.css +539 -0
  13. package/assets/iconsNew/demo.css:Zone.Identifier +0 -0
  14. package/assets/iconsNew/demo_index.html +303 -0
  15. package/assets/iconsNew/demo_index.html:Zone.Identifier +0 -0
  16. package/assets/iconsNew/iconfont.css +43 -0
  17. package/assets/iconsNew/iconfont.css:Zone.Identifier +0 -0
  18. package/assets/iconsNew/iconfont.js +1 -0
  19. package/assets/iconsNew/iconfont.js:Zone.Identifier +0 -0
  20. package/assets/iconsNew/iconfont.json +44 -0
  21. package/assets/iconsNew/iconfont.json:Zone.Identifier +0 -0
  22. package/assets/iconsNew/iconfont.ttf +0 -0
  23. package/assets/iconsNew/iconfont.ttf:Zone.Identifier +0 -0
  24. package/assets/iconsNew/iconfont.woff +0 -0
  25. package/assets/iconsNew/iconfont.woff2 +0 -0
  26. package/assets/iconsNew/iconfont.woff2:Zone.Identifier +0 -0
  27. package/assets/iconsNew/iconfont.woff:Zone.Identifier +0 -0
  28. package/assets/images/icons/document.svg +3 -0
  29. package/assets/images/key.svg +17 -0
  30. package/assets/images/pl/dark/logo.png +0 -0
  31. package/assets/images/providers/sks.svg +1 -0
  32. package/assets/images/vendor/cognito.svg +1 -0
  33. package/assets/styles/all.scss +23 -3
  34. package/assets/styles/app.scss +4 -0
  35. package/assets/styles/base/_basic.scss +10 -0
  36. package/assets/styles/base/_helpers.scss +1 -1
  37. package/assets/styles/base/_spacing.scss +29 -0
  38. package/assets/styles/base/_variables.scss +21 -15
  39. package/assets/styles/fonts/_icons.scss +3 -2
  40. package/assets/styles/global/_button.scss +8 -8
  41. package/assets/styles/global/_form.scss +1 -0
  42. package/assets/styles/global/_labeled-input.scss +1 -1
  43. package/assets/styles/global/_layout.scss +1 -1
  44. package/assets/styles/global/_select.scss +1 -1
  45. package/assets/styles/global/_tooltip.scss +9 -5
  46. package/assets/styles/themes/_dark.scss +30 -0
  47. package/assets/styles/themes/_light.scss +85 -5
  48. package/assets/styles/vendor/vue-select.scss +2 -1
  49. package/assets/translations/en-us.yaml +886 -105
  50. package/assets/translations/zh-hans.yaml +298 -25
  51. package/chart/__tests__/S3.test.ts +2 -1
  52. package/chart/monitoring/index.vue +1 -1
  53. package/cloud-credential/gcp.vue +9 -1
  54. package/components/ActionDropdown.vue +1 -1
  55. package/components/ActionMenuShell.vue +3 -7
  56. package/components/AppModal.vue +9 -28
  57. package/components/AsyncButton.vue +2 -0
  58. package/components/BrandImage.vue +0 -21
  59. package/components/ButtonDropdown.vue +3 -1
  60. package/components/Certificates.vue +5 -0
  61. package/components/ClusterIconMenu.vue +1 -1
  62. package/components/CodeMirror.vue +9 -7
  63. package/components/CommunityLinks.vue +3 -58
  64. package/components/ConfigMapSettings/Settings.vue +377 -0
  65. package/components/ConfigMapSettings/index.vue +354 -0
  66. package/components/ConsumptionGauge.vue +1 -1
  67. package/components/ContainerResourceLimit.vue +2 -2
  68. package/components/CopyToClipboard.vue +15 -0
  69. package/components/CruResource.vue +106 -18
  70. package/components/DetailText.vue +61 -11
  71. package/components/Drawer/Chrome.vue +115 -0
  72. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +64 -0
  73. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  74. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  75. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  76. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
  77. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  78. package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
  79. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  80. package/components/Drawer/ResourceDetailDrawer/index.vue +124 -0
  81. package/components/ExplorerMembers.vue +28 -4
  82. package/components/ExplorerProjectsNamespaces.vue +46 -29
  83. package/components/FilterPanel.vue +156 -0
  84. package/components/FixedBanner.vue +19 -5
  85. package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
  86. package/components/GlobalRoleBindings.vue +69 -114
  87. package/components/GrowlManager.vue +16 -15
  88. package/components/IconOrSvg.vue +19 -35
  89. package/components/KeyValueView.vue +1 -1
  90. package/components/LandingPagePreference.vue +2 -0
  91. package/components/Loading.vue +1 -1
  92. package/components/LocaleSelector.vue +10 -2
  93. package/components/PaginatedResourceTable.vue +53 -1
  94. package/components/PodSecurityAdmission.vue +2 -2
  95. package/components/ProgressBarMulti.vue +1 -0
  96. package/components/PromptModal.vue +38 -7
  97. package/components/PromptRemove.vue +28 -2
  98. package/components/PromptRestore.vue +22 -44
  99. package/components/RelatedResources.vue +7 -12
  100. package/components/Resource/Detail/Additional.vue +46 -0
  101. package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
  102. package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
  103. package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
  104. package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
  105. package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
  106. package/components/Resource/Detail/Card/Scaler.vue +89 -0
  107. package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
  108. package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
  109. package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
  110. package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
  111. package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
  112. package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
  113. package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
  114. package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
  115. package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
  116. package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
  117. package/components/Resource/Detail/Card/index.vue +56 -0
  118. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
  119. package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
  120. package/components/Resource/Detail/Metadata/Annotations/index.vue +31 -0
  121. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  122. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
  123. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +72 -0
  124. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
  125. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +138 -0
  126. package/components/Resource/Detail/Metadata/KeyValue.vue +144 -0
  127. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
  128. package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
  129. package/components/Resource/Detail/Metadata/Labels/index.vue +31 -0
  130. package/components/Resource/Detail/Metadata/Rectangle.vue +34 -0
  131. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
  132. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
  133. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  134. package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
  135. package/components/Resource/Detail/Metadata/composables.ts +81 -0
  136. package/components/Resource/Detail/Metadata/index.vue +90 -0
  137. package/components/Resource/Detail/Page.vue +37 -0
  138. package/components/Resource/Detail/PercentageBar.vue +40 -0
  139. package/components/Resource/Detail/ResourceRow.vue +138 -0
  140. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  141. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  142. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  143. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  144. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  145. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  146. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  147. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  148. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  149. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  150. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  151. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  152. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  153. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  154. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  155. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  156. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  157. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  158. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  159. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  160. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  161. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  162. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  163. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  164. package/components/Resource/Detail/SpacedRow.vue +14 -0
  165. package/components/Resource/Detail/StatusBar.vue +59 -0
  166. package/components/Resource/Detail/StatusRow.vue +61 -0
  167. package/components/Resource/Detail/TitleBar/Title.vue +15 -0
  168. package/components/Resource/Detail/TitleBar/Top.vue +16 -0
  169. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
  170. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
  171. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  172. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
  173. package/components/Resource/Detail/TitleBar/composables.ts +61 -0
  174. package/components/Resource/Detail/TitleBar/index.vue +302 -0
  175. package/components/Resource/Detail/Top/index.vue +34 -0
  176. package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
  177. package/components/Resource/Detail/composables.ts +45 -0
  178. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  179. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  180. package/components/ResourceDetail/Masthead/index.vue +65 -0
  181. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  182. package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +240 -169
  183. package/components/ResourceDetail/__tests__/index.test.ts +135 -0
  184. package/components/ResourceDetail/index.vue +75 -575
  185. package/components/ResourceDetail/legacy.vue +580 -0
  186. package/components/ResourceList/Masthead.vue +74 -29
  187. package/components/ResourceList/index.vue +3 -2
  188. package/components/ResourceTable.vue +75 -85
  189. package/components/ResourceYaml.vue +15 -2
  190. package/components/RichTranslation.vue +106 -0
  191. package/components/SideNav.vue +21 -21
  192. package/components/SingleClusterInfo.vue +2 -1
  193. package/components/SlideInPanelManager.vue +116 -14
  194. package/components/SortableTable/THead.vue +46 -1
  195. package/components/SortableTable/index.vue +66 -22
  196. package/components/SortableTable/paging.js +15 -16
  197. package/components/SortableTable/selection.js +22 -10
  198. package/components/StateDot/index.vue +28 -0
  199. package/components/StatusBadge.vue +6 -4
  200. package/components/SubtleLink.vue +25 -0
  201. package/components/Tabbed/index.vue +43 -22
  202. package/components/Wizard.vue +16 -3
  203. package/components/YamlEditor.vue +1 -2
  204. package/components/__tests__/AsyncButton.test.ts +39 -0
  205. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  206. package/components/__tests__/CruResource.test.ts +63 -0
  207. package/components/__tests__/FilterPanel.test.ts +81 -0
  208. package/components/__tests__/GrowlManager.test.ts +0 -25
  209. package/components/__tests__/PromptModal.test.ts +146 -0
  210. package/components/__tests__/PromptRestore.test.ts +1 -65
  211. package/components/__tests__/RichTranslation.test.ts +115 -0
  212. package/components/auth/AuthBanner.vue +15 -14
  213. package/components/auth/Principal.vue +50 -19
  214. package/components/auth/RoleDetailEdit.vue +55 -11
  215. package/components/auth/login/ldap.vue +2 -2
  216. package/components/auth/login/oidc.vue +6 -1
  217. package/components/breadcrumb/index.vue +119 -0
  218. package/components/fleet/FleetApplications.vue +174 -0
  219. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  220. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  221. package/components/fleet/FleetClusters.vue +25 -6
  222. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  223. package/components/fleet/FleetHelmOps.vue +123 -0
  224. package/components/fleet/FleetIntro.vue +58 -28
  225. package/components/fleet/FleetNoWorkspaces.vue +5 -1
  226. package/components/fleet/FleetOCIStorageSecret.vue +171 -0
  227. package/components/fleet/FleetRepos.vue +37 -80
  228. package/components/fleet/FleetResources.vue +69 -27
  229. package/components/fleet/FleetSummary.vue +26 -51
  230. package/components/fleet/FleetValuesFrom.vue +295 -0
  231. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  232. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  233. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
  234. package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
  235. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  236. package/components/fleet/dashboard/Empty.vue +73 -0
  237. package/components/fleet/dashboard/ResourceCard.vue +184 -0
  238. package/components/fleet/dashboard/ResourceCardSummary.vue +195 -0
  239. package/components/fleet/dashboard/ResourceDetails.vue +194 -0
  240. package/components/fleet/dashboard/ResourcePanel.vue +384 -0
  241. package/components/form/ArrayList.vue +187 -142
  242. package/components/form/ArrayListGrouped.vue +5 -3
  243. package/components/form/BannerSettings.vue +117 -50
  244. package/components/form/ChangePassword.vue +4 -2
  245. package/components/form/ClusterAppearance.vue +4 -3
  246. package/components/form/ColorInput.vue +35 -6
  247. package/components/form/Command.vue +4 -5
  248. package/components/form/Conditions.vue +15 -1
  249. package/components/form/FileImageSelector.vue +1 -1
  250. package/components/form/Footer.vue +11 -4
  251. package/components/form/HealthCheck.vue +0 -2
  252. package/components/form/HookOption.vue +87 -58
  253. package/components/form/InputWithSelect.vue +8 -7
  254. package/components/form/KeyValue.vue +112 -53
  255. package/components/form/LabeledSelect.vue +76 -55
  256. package/components/form/Labels.vue +92 -22
  257. package/components/form/MatchExpressions.vue +59 -12
  258. package/components/form/Members/ClusterMembershipEditor.vue +1 -1
  259. package/components/form/Members/ClusterPermissionsEditor.vue +60 -41
  260. package/components/form/Members/MembershipEditor.vue +4 -4
  261. package/components/form/Members/ProjectMembershipEditor.vue +1 -1
  262. package/components/form/NameNsDescription.vue +15 -10
  263. package/components/form/Networking.vue +30 -28
  264. package/components/form/NodeAffinity.vue +29 -28
  265. package/components/form/NotificationSettings.vue +15 -1
  266. package/components/form/PodAffinity.vue +23 -23
  267. package/components/form/Probe.vue +15 -11
  268. package/components/form/ProjectMemberEditor.vue +66 -48
  269. package/components/form/ResourceLabeledSelect.vue +22 -8
  270. package/components/form/ResourceQuota/Namespace.vue +4 -4
  271. package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
  272. package/components/form/ResourceQuota/Project.vue +4 -4
  273. package/components/form/ResourceQuota/ProjectRow.vue +36 -30
  274. package/components/form/ResourceSelector.vue +28 -24
  275. package/components/form/ResourceTabs/index.vue +7 -1
  276. package/components/form/SSHKnownHosts/index.vue +14 -11
  277. package/components/form/SecretSelector.vue +40 -23
  278. package/components/form/Security.vue +1 -3
  279. package/components/form/Select.vue +64 -27
  280. package/components/form/SelectOrCreateAuthSecret.vue +6 -3
  281. package/components/form/ServiceNameSelect.vue +2 -5
  282. package/components/form/ServicePorts.vue +149 -75
  283. package/components/form/SimpleSecretSelector.vue +17 -4
  284. package/components/form/Taints.vue +23 -3
  285. package/components/form/Tolerations.vue +13 -9
  286. package/components/form/UnitInput.vue +21 -0
  287. package/components/form/ValueFromResource.vue +136 -110
  288. package/components/form/WorkloadPorts.vue +143 -123
  289. package/components/form/__tests__/ArrayList.test.ts +32 -0
  290. package/components/form/__tests__/ColorInput.test.ts +35 -0
  291. package/components/form/__tests__/KeyValue.test.ts +36 -0
  292. package/components/form/__tests__/LabeledSelect.test.ts +79 -2
  293. package/components/form/__tests__/Labels.test.ts +360 -0
  294. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  295. package/components/form/__tests__/Networking.test.ts +116 -0
  296. package/components/form/__tests__/SSHKnownHosts.test.ts +11 -2
  297. package/components/form/__tests__/Select.test.ts +37 -1
  298. package/components/form/__tests__/UnitInput.test.ts +23 -1
  299. package/components/form/labeled-select-utils/labeled-select-pagination.ts +3 -38
  300. package/components/formatter/ClusterLink.vue +5 -8
  301. package/components/formatter/Description.vue +30 -0
  302. package/components/formatter/FleetApplicationClustersReady.vue +77 -0
  303. package/components/formatter/FleetApplicationSource.vue +79 -0
  304. package/components/formatter/FleetSummaryGraph.vue +7 -0
  305. package/components/formatter/PodImages.vue +1 -1
  306. package/components/formatter/WorkloadHealthScale.vue +5 -4
  307. package/components/formatter/__tests__/ClusterLink.test.ts +2 -32
  308. package/components/formatter/__tests__/LiveDate.test.ts +10 -2
  309. package/components/google/AccountAccess.vue +209 -0
  310. package/components/google/types/gcp.d.ts +136 -0
  311. package/components/google/types/index.d.ts +101 -0
  312. package/components/google/util/__mocks__/gcp.ts +465 -0
  313. package/components/google/util/formatter.ts +82 -0
  314. package/components/google/util/gcp.ts +134 -0
  315. package/components/google/util/index.d.ts +11 -0
  316. package/components/nav/Favorite.vue +1 -1
  317. package/components/nav/Group.vue +13 -1
  318. package/components/nav/Header.vue +44 -179
  319. package/components/nav/NamespaceFilter.vue +126 -75
  320. package/components/nav/NotificationCenter/Notification.vue +484 -0
  321. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  322. package/components/nav/NotificationCenter/index.vue +148 -0
  323. package/components/nav/TopLevelMenu.helper.ts +55 -34
  324. package/components/nav/TopLevelMenu.vue +110 -125
  325. package/components/nav/Type.vue +15 -4
  326. package/components/nav/WindowManager/ContainerLogs.vue +87 -61
  327. package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
  328. package/components/nav/WindowManager/index.vue +3 -2
  329. package/components/templates/default.vue +0 -3
  330. package/components/templates/plain.vue +0 -3
  331. package/composables/drawer.ts +26 -0
  332. package/composables/focusTrap.ts +3 -3
  333. package/composables/resources.test.ts +63 -0
  334. package/composables/resources.ts +38 -0
  335. package/composables/useI18n.ts +12 -11
  336. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  337. package/config/labels-annotations.js +22 -11
  338. package/config/menuRouteMap.js +10 -0
  339. package/config/pagination-table-headers.js +8 -1
  340. package/config/private-label.js +0 -1
  341. package/config/product/auth.js +20 -3
  342. package/config/product/{cis.js → compliance.js} +23 -26
  343. package/config/product/explorer.js +80 -26
  344. package/config/product/fleet.js +77 -17
  345. package/config/product/manager.js +29 -46
  346. package/config/product/settings.js +23 -11
  347. package/config/product/uiplugins.js +13 -10
  348. package/config/query-params.js +16 -1
  349. package/config/roles.ts +2 -1
  350. package/config/router/navigation-guards/authentication.js +51 -2
  351. package/config/router/navigation-guards/index.js +16 -20
  352. package/config/router/routes.js +65 -31
  353. package/config/secret.ts +15 -0
  354. package/config/settings.ts +33 -16
  355. package/config/store.js +2 -0
  356. package/config/system-namespaces.js +1 -1
  357. package/config/table-headers.js +91 -30
  358. package/config/types.js +18 -7
  359. package/config/version.js +1 -1
  360. package/core/plugin-helpers.ts +3 -2
  361. package/core/plugin.ts +32 -7
  362. package/core/types.ts +25 -7
  363. package/detail/catalog.cattle.io.app.vue +5 -1
  364. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  365. package/detail/fleet.cattle.io.bundle.vue +70 -6
  366. package/detail/fleet.cattle.io.cluster.vue +28 -15
  367. package/detail/fleet.cattle.io.gitrepo.vue +11 -2
  368. package/detail/fleet.cattle.io.helmop.vue +157 -0
  369. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  370. package/detail/management.cattle.io.oidcclient.vue +369 -0
  371. package/detail/namespace.vue +0 -3
  372. package/detail/node.vue +48 -39
  373. package/detail/pod.vue +2 -2
  374. package/detail/provisioning.cattle.io.cluster.vue +16 -50
  375. package/detail/service.vue +10 -2
  376. package/detail/workload/index.vue +48 -39
  377. package/dialog/AddCustomBadgeDialog.vue +17 -10
  378. package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
  379. package/dialog/AddonConfigConfirmationDialog.vue +1 -1
  380. package/dialog/AssignToDialog.vue +176 -0
  381. package/dialog/ChangePasswordDialog.vue +106 -0
  382. package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
  383. package/dialog/DisableAuthProviderDialog.vue +101 -0
  384. package/dialog/DrainNode.vue +1 -1
  385. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
  386. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +87 -66
  387. package/dialog/FeatureFlagListDialog.vue +288 -0
  388. package/dialog/ForceMachineRemoveDialog.vue +1 -1
  389. package/dialog/GenericPrompt.vue +1 -1
  390. package/dialog/HelmOpForceUpdateDialog.vue +132 -0
  391. package/{components/Import.vue → dialog/ImportDialog.vue} +8 -13
  392. package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
  393. package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -62
  394. package/dialog/MoveNamespaceDialog.vue +157 -0
  395. package/dialog/OidcClientSecretDialog.vue +117 -0
  396. package/dialog/RedeployWorkloadDialog.vue +164 -0
  397. package/dialog/RollbackWorkloadDialog.vue +1 -1
  398. package/dialog/RotateEncryptionKeyDialog.vue +10 -30
  399. package/dialog/ScalePoolDownDialog.vue +1 -1
  400. package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
  401. package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
  402. package/dialog/WechatDialog.vue +57 -0
  403. package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +15 -34
  404. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  405. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +60 -68
  406. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  407. package/edit/__tests__/service.test.ts +2 -1
  408. package/edit/auth/ldap/__tests__/config.test.ts +14 -0
  409. package/edit/auth/ldap/config.vue +24 -0
  410. package/edit/auth/oidc.vue +159 -93
  411. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  412. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
  413. package/edit/autoscaling.horizontalpodautoscaler/index.vue +7 -2
  414. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  415. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  416. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  417. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  418. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  419. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  420. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  421. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  422. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  423. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  424. package/edit/configmap.vue +12 -2
  425. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  426. package/edit/fleet.cattle.io.gitrepo.vue +70 -256
  427. package/edit/fleet.cattle.io.helmop.vue +786 -0
  428. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  429. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  430. package/edit/logging-flow/index.vue +2 -2
  431. package/edit/logging.banzaicloud.io.output/index.vue +2 -1
  432. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +8 -9
  433. package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +19 -19
  434. package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +23 -23
  435. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +19 -19
  436. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +14 -14
  437. package/edit/logging.banzaicloud.io.output/providers/forward.vue +12 -12
  438. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +23 -23
  439. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +6 -6
  440. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +10 -10
  441. package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +8 -8
  442. package/edit/logging.banzaicloud.io.output/providers/logdna.vue +17 -17
  443. package/edit/logging.banzaicloud.io.output/providers/logz.vue +7 -7
  444. package/edit/logging.banzaicloud.io.output/providers/loki.vue +12 -12
  445. package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +3 -3
  446. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +14 -14
  447. package/edit/logging.banzaicloud.io.output/providers/redis.vue +6 -6
  448. package/edit/logging.banzaicloud.io.output/providers/s3.vue +23 -23
  449. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +13 -13
  450. package/edit/logging.banzaicloud.io.output/providers/sumologic.vue +2 -2
  451. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +54 -54
  452. package/edit/management.cattle.io.fleetworkspace.vue +44 -10
  453. package/edit/management.cattle.io.oidcclient.vue +162 -0
  454. package/edit/management.cattle.io.project.vue +4 -1
  455. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  456. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  457. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  458. package/edit/monitoring.coreos.com.receiver/auth.vue +3 -3
  459. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  460. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  461. package/edit/monitoring.coreos.com.route.vue +1 -0
  462. package/edit/namespace.vue +2 -4
  463. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  464. package/edit/networking.k8s.io.ingress/Certificate.vue +25 -8
  465. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  466. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  467. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  468. package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +37 -0
  469. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  470. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +6 -17
  471. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  472. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +69 -73
  473. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +10 -16
  474. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.test.ts +72 -41
  475. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/mock.json +17 -1
  476. package/edit/networking.k8s.io.networkpolicy/index.vue +24 -32
  477. package/edit/node.vue +1 -0
  478. package/edit/persistentvolume/index.vue +7 -2
  479. package/edit/persistentvolumeclaim.vue +2 -0
  480. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
  481. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +69 -2
  482. package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
  483. package/edit/provisioning.cattle.io.cluster/index.vue +21 -73
  484. package/edit/provisioning.cattle.io.cluster/rke2.vue +535 -428
  485. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +49 -40
  486. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
  487. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  488. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
  489. package/edit/resources.cattle.io.restore.vue +1 -1
  490. package/edit/secret/basic.vue +1 -0
  491. package/edit/secret/index.vue +129 -17
  492. package/edit/service.vue +21 -30
  493. package/edit/serviceaccount.vue +4 -1
  494. package/edit/storage.k8s.io.storageclass/index.vue +14 -9
  495. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  496. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  497. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  498. package/edit/workload/Job.vue +31 -34
  499. package/edit/workload/Upgrading.vue +5 -5
  500. package/edit/workload/index.vue +32 -32
  501. package/edit/workload/mixins/workload.js +0 -2
  502. package/edit/workload/storage/Mount.vue +1 -0
  503. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  504. package/edit/workload/storage/azureDisk.vue +14 -10
  505. package/edit/workload/storage/azureFile.vue +9 -7
  506. package/edit/workload/storage/csi/index.vue +6 -9
  507. package/edit/workload/storage/emptyDir.vue +7 -5
  508. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  509. package/edit/workload/storage/hostPath.vue +7 -5
  510. package/edit/workload/storage/nfs.vue +8 -6
  511. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  512. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
  513. package/edit/workload/storage/secret.vue +9 -6
  514. package/edit/workload/storage/vsphereVolume.vue +11 -7
  515. package/initialize/app-extended.js +7 -1
  516. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  517. package/list/fleet.cattle.io.gitrepo.vue +1 -1
  518. package/list/fleet.cattle.io.helmop.vue +108 -0
  519. package/list/harvesterhci.io.management.cluster.vue +0 -17
  520. package/list/management.cattle.io.feature.vue +4 -288
  521. package/list/management.cattle.io.oidcclient.vue +108 -0
  522. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +8 -6
  523. package/list/management.cattle.io.user.vue +13 -20
  524. package/list/namespace.vue +6 -2
  525. package/list/node.vue +2 -0
  526. package/list/projectsecret.vue +345 -0
  527. package/list/secret.vue +109 -0
  528. package/list/workload.vue +6 -2
  529. package/machine-config/__tests__/vmwarevsphere.test.ts +5 -7
  530. package/machine-config/amazonec2.vue +3 -24
  531. package/machine-config/components/GCEImage.vue +374 -0
  532. package/machine-config/google.vue +617 -0
  533. package/machine-config/vmwarevsphere.vue +7 -17
  534. package/mixins/__tests__/brand.spec.ts +170 -0
  535. package/mixins/auth-config.js +8 -1
  536. package/mixins/brand.js +16 -17
  537. package/mixins/create-edit-view/impl.js +20 -1
  538. package/mixins/create-edit-view/index.js +5 -0
  539. package/mixins/preset.js +100 -0
  540. package/mixins/resource-fetch-api-pagination.js +73 -44
  541. package/mixins/resource-fetch.js +18 -8
  542. package/mixins/resource-table-watch.js +45 -0
  543. package/mixins/vue-select-overrides.js +1 -4
  544. package/models/__tests__/chart.test.ts +296 -0
  545. package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
  546. package/models/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  547. package/models/__tests__/node.test.ts +7 -63
  548. package/models/__tests__/workload.test.ts +1 -0
  549. package/models/chart.js +157 -2
  550. package/models/cluster/node.js +2 -1
  551. package/models/cluster.js +32 -2
  552. package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
  553. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  554. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  555. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  556. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  557. package/models/fleet-application.js +297 -0
  558. package/models/fleet.cattle.io.bundle.js +9 -8
  559. package/models/fleet.cattle.io.cluster.js +21 -4
  560. package/models/fleet.cattle.io.gitrepo.js +46 -382
  561. package/models/fleet.cattle.io.helmop.js +202 -0
  562. package/models/management.cattle.io.authconfig.js +1 -0
  563. package/models/management.cattle.io.cluster.js +0 -20
  564. package/models/management.cattle.io.feature.js +7 -1
  565. package/models/management.cattle.io.fleetworkspace.js +14 -1
  566. package/models/management.cattle.io.node.js +7 -22
  567. package/models/management.cattle.io.nodepool.js +12 -0
  568. package/models/management.cattle.io.oidcclient.js +18 -0
  569. package/models/management.cattle.io.registration.js +3 -0
  570. package/models/management.cattle.io.setting.js +0 -1
  571. package/models/namespace.js +12 -1
  572. package/models/provisioning.cattle.io.cluster.js +79 -115
  573. package/models/secret.js +157 -2
  574. package/models/service.js +28 -9
  575. package/models/storage.k8s.io.storageclass.js +2 -2
  576. package/models/workload.js +93 -53
  577. package/package.json +6 -5
  578. package/pages/about.vue +17 -61
  579. package/pages/account/index.vue +105 -116
  580. package/pages/auth/login.vue +2 -3
  581. package/pages/auth/setup.vue +36 -17
  582. package/pages/auth/verify.vue +13 -1
  583. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +36 -0
  584. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
  585. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +57 -0
  586. package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
  587. package/pages/c/_cluster/apps/charts/index.vue +501 -468
  588. package/pages/c/_cluster/apps/charts/install.vue +0 -1
  589. package/pages/c/_cluster/auth/roles/index.vue +72 -44
  590. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  591. package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
  592. package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
  593. package/pages/c/_cluster/explorer/index.vue +16 -4
  594. package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
  595. package/pages/c/_cluster/explorer/tools/index.vue +6 -6
  596. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  597. package/pages/c/_cluster/fleet/__tests__/index.test.ts +720 -0
  598. package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
  599. package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
  600. package/pages/c/_cluster/fleet/application/create.vue +341 -0
  601. package/pages/c/_cluster/fleet/application/index.vue +139 -0
  602. package/pages/c/_cluster/fleet/graph/config.js +277 -0
  603. package/pages/c/_cluster/fleet/index.vue +866 -328
  604. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  605. package/pages/c/_cluster/longhorn/index.vue +5 -2
  606. package/pages/c/_cluster/settings/banners.vue +56 -2
  607. package/pages/c/_cluster/settings/brand.vue +2 -1
  608. package/pages/c/_cluster/settings/performance.vue +7 -26
  609. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  610. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  611. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
  612. package/pages/c/_cluster/uiplugins/index.vue +98 -55
  613. package/pages/explorer/resource/detail/configmap.vue +42 -0
  614. package/pages/explorer/resource/detail/projectsecret.vue +9 -0
  615. package/pages/explorer/resource/detail/secret.vue +63 -0
  616. package/pages/home.vue +63 -117
  617. package/pages/prefs.vue +0 -1
  618. package/pages/support/index.vue +4 -6
  619. package/pkg/tsconfig.json +9 -9
  620. package/pkg/vue.config.js +1 -1
  621. package/plugins/clean-html.js +2 -0
  622. package/plugins/dashboard-store/__tests__/actions.test.ts +4 -1
  623. package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
  624. package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
  625. package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
  626. package/plugins/dashboard-store/actions.js +213 -56
  627. package/plugins/dashboard-store/getters.js +112 -24
  628. package/plugins/dashboard-store/mutations.js +61 -12
  629. package/plugins/dashboard-store/normalize.js +29 -19
  630. package/plugins/dashboard-store/resource-class.js +105 -21
  631. package/plugins/steve/__tests__/getters.test.ts +19 -12
  632. package/plugins/steve/__tests__/steve-class.test.ts +1 -0
  633. package/plugins/steve/__tests__/subscribe.spec.ts +324 -1
  634. package/plugins/steve/actions.js +37 -24
  635. package/plugins/steve/getters.js +47 -12
  636. package/plugins/steve/resourceWatcher.js +10 -3
  637. package/plugins/steve/steve-class.js +5 -0
  638. package/plugins/steve/steve-pagination-utils.ts +225 -43
  639. package/plugins/steve/subscribe.js +418 -53
  640. package/plugins/steve/worker/web-worker.advanced.js +5 -1
  641. package/rancher-components/BadgeState/BadgeState.vue +33 -52
  642. package/rancher-components/Banner/Banner.test.ts +51 -3
  643. package/rancher-components/Banner/Banner.vue +53 -10
  644. package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
  645. package/rancher-components/Form/Checkbox/Checkbox.vue +27 -9
  646. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +51 -0
  647. package/rancher-components/Form/LabeledInput/LabeledInput.vue +21 -3
  648. package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
  649. package/rancher-components/Form/Radio/RadioButton.vue +21 -5
  650. package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
  651. package/rancher-components/Form/Radio/RadioGroup.vue +90 -39
  652. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +4 -0
  653. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +22 -1
  654. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +32 -2
  655. package/rancher-components/RcButton/RcButton.vue +1 -1
  656. package/rancher-components/RcDropdown/RcDropdown.test.ts +98 -0
  657. package/rancher-components/RcDropdown/RcDropdown.vue +6 -0
  658. package/rancher-components/RcDropdown/RcDropdownItem.vue +8 -55
  659. package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +69 -0
  660. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +93 -0
  661. package/rancher-components/RcDropdown/index.ts +2 -0
  662. package/rancher-components/RcDropdown/useDropdownContext.ts +21 -0
  663. package/rancher-components/RcDropdown/useDropdownItem.ts +92 -0
  664. package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
  665. package/rancher-components/RcItemCard/RcItemCard.vue +430 -0
  666. package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
  667. package/rancher-components/RcItemCard/index.ts +2 -0
  668. package/rancher-components/StringList/StringList.vue +1 -1
  669. package/scripts/build-pkg.sh +18 -23
  670. package/scripts/extension/publish +1 -1
  671. package/scripts/publish-shell.sh +1 -1
  672. package/static/loading-indicator.html +1 -1
  673. package/store/action-menu.js +26 -56
  674. package/store/auth.js +3 -0
  675. package/store/catalog.js +85 -25
  676. package/store/features.js +0 -1
  677. package/store/growl.js +97 -8
  678. package/store/i18n.js +5 -1
  679. package/store/index.js +48 -18
  680. package/store/notifications.ts +426 -0
  681. package/store/prefs.js +2 -8
  682. package/store/slideInPanel.ts +6 -0
  683. package/store/type-map.js +35 -20
  684. package/store/type-map.utils.ts +49 -6
  685. package/store/uiplugins.ts +15 -1
  686. package/types/fleet.d.ts +60 -1
  687. package/types/kube/kube-api.ts +34 -0
  688. package/types/notifications/index.ts +74 -0
  689. package/types/resources/fleet.d.ts +43 -0
  690. package/types/resources/pod-security-admission.ts +36 -0
  691. package/types/resources/settings.d.ts +107 -0
  692. package/types/resources/userPreferences.d.ts +13 -0
  693. package/types/shell/index.d.ts +949 -741
  694. package/types/store/dashboard-store.types.ts +57 -4
  695. package/types/store/pagination.types.ts +41 -9
  696. package/types/store/subscribe.types.ts +50 -0
  697. package/utils/__mocks__/tabbable.js +13 -0
  698. package/utils/__tests__/back-off.test.ts +354 -0
  699. package/utils/__tests__/create-yaml.test.ts +235 -0
  700. package/utils/__tests__/fleet.test.ts +148 -0
  701. package/utils/__tests__/kontainer.test.ts +19 -0
  702. package/utils/__tests__/object.test.ts +54 -1
  703. package/utils/__tests__/string.test.ts +273 -1
  704. package/utils/__tests__/time.test.ts +31 -0
  705. package/utils/auth.js +41 -6
  706. package/utils/back-off.ts +176 -0
  707. package/utils/cluster.js +24 -20
  708. package/utils/create-yaml.js +103 -9
  709. package/utils/crypto/encryption.ts +103 -0
  710. package/utils/cspAdaptor.ts +51 -0
  711. package/utils/error.js +26 -9
  712. package/utils/errorTranslate.json +410 -6
  713. package/utils/errorTranslateNew.json +39 -0
  714. package/utils/fleet-types.ts +0 -0
  715. package/utils/fleet.ts +204 -74
  716. package/utils/grafana.js +1 -0
  717. package/utils/kontainer.ts +3 -5
  718. package/utils/object.js +36 -12
  719. package/utils/pagination-utils.ts +50 -3
  720. package/utils/pagination-wrapper.ts +132 -50
  721. package/utils/perf-setting.utils.ts +28 -0
  722. package/utils/release-notes.ts +48 -0
  723. package/utils/roleFiltering.js +33 -0
  724. package/utils/selector-typed.ts +210 -0
  725. package/utils/selector.js +29 -6
  726. package/utils/settings.ts +4 -1
  727. package/utils/string.js +24 -0
  728. package/utils/style.ts +39 -0
  729. package/utils/{time.js → time.ts} +25 -6
  730. package/utils/uiplugins.ts +41 -8
  731. package/utils/v-sphere.ts +5 -1
  732. package/utils/validators/formRules/__tests__/index.test.ts +76 -6
  733. package/utils/validators/formRules/index.ts +99 -4
  734. package/utils/window.js +11 -7
  735. package/vue.config.js +1 -1
  736. package/.DS_Store +0 -0
  737. package/components/AssignTo.vue +0 -199
  738. package/components/DisableAuthProviderModal.vue +0 -115
  739. package/components/MoveModal.vue +0 -167
  740. package/components/PromptChangePassword.vue +0 -123
  741. package/components/ResourceList/Masthead-btn.vue +0 -225
  742. package/components/__tests__/ApplicationCard.test.ts +0 -27
  743. package/components/cards/ApplicationCard.vue +0 -145
  744. package/components/fleet/FleetBundleResources.vue +0 -86
  745. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
  746. package/components/formatter/RKETemplateName.vue +0 -37
  747. package/config/product/legacy.js +0 -62
  748. package/config/secret.js +0 -14
  749. package/dialog/SaveAsRKETemplateDialog.vue +0 -139
  750. package/models/etcdbackup.js +0 -45
  751. package/pages/auth copy/login.vue +0 -595
  752. package/pages/auth copy/logout.vue +0 -47
  753. package/pages/auth copy/setup.vue +0 -523
  754. package/pages/auth copy/verify.vue +0 -203
  755. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
  756. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  757. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  758. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  759. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
@@ -7,8 +7,11 @@ import { classify } from '@shell/plugins/dashboard-store/classify';
7
7
  import { normalizeType } from './normalize';
8
8
  import garbageCollect from '@shell/utils/gc/gc';
9
9
  import { addSchemaIndexFields } from '@shell/plugins/steve/schema.utils';
10
- import { addParam } from '@shell/utils/url';
10
+ import { addParam, parse } from '@shell/utils/url';
11
11
  import { conditionalDepaginate } from '@shell/store/type-map.utils';
12
+ import { STEVE_WATCH_MODE } from '@shell/types/store/subscribe.types';
13
+ import { FilterArgs } from '@shell/types/store/pagination.types';
14
+ import { isLabelSelectorEmpty, labelSelectorToSelector } from '@shell/utils/selector-typed';
12
15
 
13
16
  export const _ALL = 'all';
14
17
  export const _MERGE = 'merge';
@@ -52,7 +55,7 @@ export async function loadSchemas(ctx, watch = true) {
52
55
  }
53
56
 
54
57
  res.data.forEach(addSchemaIndexFields);
55
-
58
+
56
59
  commit('loadAll', {
57
60
  ctx,
58
61
  type: SCHEMA,
@@ -76,6 +79,29 @@ const findAllGetter = (getters, type, opt) => {
76
79
  return opt.namespaced ? getters.matching(type, null, opt.namespaced, { skipSelector: true }) : getters.all(type);
77
80
  };
78
81
 
82
+ const createFindWatchArg = ({
83
+ type, id, opt, res
84
+ }) => {
85
+ const revision = typeof opt.revision !== 'undefined' ? opt.revision : res?.metadata?.resourceVersion;
86
+ const watchMsg = {
87
+ type,
88
+ id,
89
+ // Although not used by sockets, we need this for when resyncWatch calls find... which needs namespace to construct the url
90
+ namespace: opt.namespaced,
91
+ revision: revision || '',
92
+ force: opt.forceWatch === true,
93
+ };
94
+
95
+ const idx = id.indexOf('/');
96
+
97
+ if ( idx > 0 ) {
98
+ watchMsg.namespace = id.substr(0, idx);
99
+ watchMsg.id = id.substr(idx + 1);
100
+ }
101
+
102
+ return watchMsg;
103
+ };
104
+
79
105
  export default {
80
106
  request() {
81
107
  throw new Error('Not Implemented');
@@ -83,9 +109,17 @@ export default {
83
109
 
84
110
  loadSchemas,
85
111
 
86
- // Load a page of data for a given type
87
- // Used for incremental loading when enabled
88
- async loadDataPage(ctx, { type, opt }) {
112
+ /**
113
+ * Load a page of data for a given type. Given the response will continue until there are no pages left to fetch
114
+ *
115
+ * Used for incremental loading when enabled
116
+ *
117
+ * If we're in the non-vai world paginate via native limit/next (pageByLimit)
118
+ * If we're in the vai world paginate via page number (pageByNumber)
119
+ */
120
+ async loadDataPage(ctx, {
121
+ type, opt, pageByLimit, pageByNumber
122
+ }) {
89
123
  const { getters, commit, dispatch } = ctx;
90
124
 
91
125
  type = getters.normalizeType(type);
@@ -99,6 +133,17 @@ export default {
99
133
  const loadCount = getters['loadCounter'](type);
100
134
 
101
135
  try {
136
+ if (pageByLimit) {
137
+ opt.url = pageByLimit.next;
138
+ } else if (pageByNumber) {
139
+ const { url, page, pageSize } = pageByNumber;
140
+
141
+ opt.url = addParam(url, 'page', `${ page }`);
142
+ opt.url = addParam(opt.url, 'pagesize', `${ pageSize }`);
143
+ } else {
144
+ throw Error('loadDataPage requires either pageByLimit or pageByNumber');
145
+ }
146
+
102
147
  const res = await dispatch('request', { opt, type });
103
148
 
104
149
  const newLoadCount = getters['loadCounter'](type);
@@ -115,12 +160,19 @@ export default {
115
160
  data: res.data,
116
161
  });
117
162
 
118
- if (res.pagination?.next) {
163
+ if (pageByLimit && res.pagination?.next) {
164
+ dispatch('loadDataPage', {
165
+ type,
166
+ opt,
167
+ pageByLimit: { next: res.pagination.next },
168
+ });
169
+ } else if (pageByNumber && pageByNumber.page !== pageByNumber.pages) {
119
170
  dispatch('loadDataPage', {
120
171
  type,
121
- opt: {
122
- ...opt,
123
- url: res.pagination?.next
172
+ opt,
173
+ pageByNumber: {
174
+ ...pageByNumber,
175
+ page: pageByNumber.page + 1,
124
176
  }
125
177
  });
126
178
  } else {
@@ -155,7 +207,6 @@ export default {
155
207
 
156
208
  opt = opt || {};
157
209
  type = getters.normalizeType(type);
158
-
159
210
  if ( !getters.typeRegistered(type) ) {
160
211
  commit('registerType', type);
161
212
  }
@@ -193,6 +244,7 @@ export default {
193
244
 
194
245
  console.log(`Find All: [${ ctx.state.config.namespace }] ${ type }`); // eslint-disable-line no-console
195
246
  opt = opt || {};
247
+ opt.isCollection = true;
196
248
  opt.url = getters.urlFor(type, null, opt);
197
249
  opt.stream = opt.stream !== false && load !== _NONE;
198
250
  opt.depaginate = conditionalDepaginate(typeOptions?.depaginate, { ctx, args: { type, opt } });
@@ -200,10 +252,10 @@ export default {
200
252
  let skipHaveAll = false;
201
253
 
202
254
  // if it's incremental loading, we do two parallel requests
203
- // on for a limit of 100, to quickly show data
255
+ // one for a limit of 100, to quickly show data
204
256
  // another one with 1st page of the subset of the resource we are fetching
205
257
  // the default is 4 pages, but it can be changed on mixin/resource-fetch.js
206
- let pageFetchOpts;
258
+ let pageByLimit, pageByNumber;
207
259
 
208
260
  if (opt.incremental) {
209
261
  commit('incrementLoadCounter', type);
@@ -212,14 +264,23 @@ export default {
212
264
  dispatch('resource-fetch/updateManualRefreshIsLoading', true, { root: true });
213
265
  }
214
266
 
215
- pageFetchOpts = {
216
- ...opt,
217
- url: addParam(opt.url, 'limit', `${ opt.incremental }`),
218
- };
267
+ if (opt.incremental.pageByNumber && getters.isSteveCacheUrl(parse(opt.url).path)) {
268
+ // Set the configuration for the rest of the incremental requests
269
+ pageByNumber = {
270
+ url: opt.url,
271
+ page: 1,
272
+ pages: opt.incremental.increments,
273
+ pageSize: opt.incremental.resourcesPerIncrement,
274
+ };
275
+ // this is where we "hijack" the limit for the dispatch('request') some lines below and therefore have 2 initial requests in parallel
276
+ opt.url = addParam(opt.url, 'pagesize', `${ opt.incremental.quickLoadCount }`);
277
+ } else {
278
+ // Set the configuration for the rest of the incremental requests
279
+ pageByLimit = { next: addParam(opt.url, 'limit', `${ opt.incremental.resourcesPerIncrement }`) };
280
+ // this is where we "hijack" the limit for the dispatch('request') some lines below and therefore have 2 initial requests in parallel
281
+ opt.url = addParam(opt.url, 'limit', `${ opt.incremental.quickLoadCount }`);
282
+ }
219
283
 
220
- // this is where we "hijack" the limit for the dispatch('request') some lines below
221
- // and therefore have 2 initial requests in parallel
222
- opt.url = addParam(opt.url, 'limit', '100');
223
284
  skipHaveAll = true;
224
285
 
225
286
  // since we are forcing a request, clear the haveAll
@@ -333,7 +394,9 @@ export default {
333
394
 
334
395
  if (opt.incremental) {
335
396
  // This needs to come after the loadAll (which resets state) so supplements via loadDataPage aren't lost
336
- dispatch('loadDataPage', { type, opt: pageFetchOpts });
397
+ dispatch('loadDataPage', {
398
+ type, opt, pageByLimit, pageByNumber
399
+ });
337
400
  }
338
401
  }
339
402
 
@@ -362,13 +425,18 @@ export default {
362
425
  },
363
426
 
364
427
  /**
428
+ * If result not already cached, make a http request to fetch a specific set of resources
429
+ *
430
+ * This accepts all the new sql-cache backed api features (sort, filter, etc)
365
431
  *
366
432
  * @param {*} ctx
367
433
  * @param { {type: string, opt: ActionFindPageArgs} } opt
434
+ * @returns @ActionFindPageResponse
368
435
  */
369
436
  async findPage(ctx, { type, opt }) {
370
437
  const { getters, commit, dispatch } = ctx;
371
438
 
439
+ // of type @ActionFindPageArgs
372
440
  opt = opt || {};
373
441
 
374
442
  if (!opt.pagination) {
@@ -383,12 +451,24 @@ export default {
383
451
  commit('registerType', type);
384
452
  }
385
453
 
454
+ // of type @STEVE_WATCH_PARAMS
455
+ const watchArgs = {
456
+ type,
457
+ namespace: opt.watchNamespace || opt.namespaced, // it could be either apparently
458
+ force: opt.forceWatch === true,
459
+ mode: STEVE_WATCH_MODE.RESOURCE_CHANGES,
460
+ };
461
+
386
462
  // No need to request the resources if we have them already
387
463
  if (!opt.transient && !opt.force && getters['havePaginatedPage'](type, opt)) {
464
+ if (opt.watch !== false ) {
465
+ dispatch('watch', watchArgs);
466
+ }
467
+
388
468
  return findAllGetter(getters, type, opt);
389
469
  }
390
470
 
391
- console.log(`Find Page: [${ ctx.state.config.namespace }] ${ type }. Page: ${ opt.pagination.page }. Size: ${ opt.pagination.pageSize }`); // eslint-disable-line no-console
471
+ console.log(`Find Page: [${ ctx.state.config.namespace }] ${ type }. Page: ${ opt.pagination.page }. Size: ${ opt.pagination.pageSize }. Sort: ${ opt.pagination.sort.map((s) => s.field).join(', ') }`); // eslint-disable-line no-console
392
472
  opt = opt || {};
393
473
  opt.url = getters.urlFor(type, null, opt);
394
474
 
@@ -408,11 +488,7 @@ export default {
408
488
  return Promise.reject(e);
409
489
  }
410
490
 
411
- await dispatch('unwatch', {
412
- type,
413
- all: true,
414
- });
415
-
491
+ // Of type @StorePagination
416
492
  const pagination = opt.pagination ? {
417
493
  request: {
418
494
  namespace: opt.namespaced,
@@ -429,11 +505,16 @@ export default {
429
505
  commit('loadPage', {
430
506
  ctx,
431
507
  type,
432
- data: out.data,
508
+ data: out.data,
433
509
  pagination,
510
+ revision: out.revision,
434
511
  });
435
512
  }
436
513
 
514
+ if ( !opt.transient && opt.watch !== false ) {
515
+ dispatch('watch', watchArgs);
516
+ }
517
+
437
518
  if (opt.hasManualRefresh) {
438
519
  dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
439
520
  }
@@ -441,11 +522,73 @@ export default {
441
522
  garbageCollect.gcUpdateLastAccessed(ctx, type);
442
523
 
443
524
  return opt.transient ? {
444
- data: out.data,
525
+ data: await dispatch('createMany', out.data), // Return classified objects
445
526
  pagination
446
527
  } : findAllGetter(getters, type, opt);
447
528
  },
448
529
 
530
+ /**
531
+ * Find results matching a kube `labelSelector` object
532
+ *
533
+ * If result not already cached, make a http request to fetch resources matching the selector/s
534
+ *
535
+ * This is different if vai based pagination is on
536
+ * a) Pagination Enabled - use the new sql-cache backed api - findPage
537
+ * b) Pagination Disabled - use the old 'native kube api' - findMatching
538
+ *
539
+ * Filter is defined via the kube labelSelector object (see KubeLabelSelector)
540
+ *
541
+ * opt: @ActionFindLabelSelectorArgs
542
+ * @returns @ActionFindMatchingResponse (resources[], or if transient { data: resources[], pagination: StorePagination })
543
+ */
544
+ async findLabelSelector(ctx, {
545
+ type,
546
+ context,
547
+ matching: {
548
+ namespace,
549
+ labelSelector
550
+ },
551
+ opt
552
+ }) {
553
+ const { getters, dispatch } = ctx;
554
+ const args = {
555
+ id: type,
556
+ context,
557
+ };
558
+
559
+ opt = opt || {};
560
+
561
+ if (getters[`paginationEnabled`]?.(args)) {
562
+ if (isLabelSelectorEmpty(labelSelector)) {
563
+ throw new Error(`labelSelector must not be empty when using findLabelSelector (avoid fetching all resources)`);
564
+ }
565
+
566
+ // opt of type ActionFindPageArgs
567
+ return dispatch('findPage', {
568
+ type,
569
+ opt: {
570
+ ...opt,
571
+ namespaced: namespace,
572
+ pagination: new FilterArgs({ labelSelector }),
573
+ transient: opt?.transient !== undefined ? opt.transient : false // Call this out explicitly here, as by default findX methods ar eusually be cached AND watched
574
+ }
575
+ });
576
+ }
577
+
578
+ // opt of type ActionFindPageArgs
579
+ const findMatching = await dispatch('findMatching', {
580
+ type,
581
+ selector: labelSelectorToSelector(labelSelector),
582
+ opt,
583
+ namespace,
584
+ });
585
+
586
+ return opt.transient ? { data: findMatching } : findMatching;
587
+ },
588
+
589
+ /**
590
+ * opt: @ActionFindMatchingArgs
591
+ */
449
592
  async findMatching(ctx, {
450
593
  type,
451
594
  selector,
@@ -463,7 +606,13 @@ export default {
463
606
  if ( !getters.typeRegistered(type) ) {
464
607
  commit('registerType', type);
465
608
  }
466
- if ( opt.force !== true && getters['haveSelector'](type, selector) ) {
609
+
610
+ if ( opt.force !== true && getters['haveSelector'](type, selector)) {
611
+ return getters.all(type);
612
+ }
613
+
614
+ // Optimisation - We can pretend like we've fetched a specific selectors worth instead of replacing ALL pods with only SOME
615
+ if ( opt.force !== true && getters['haveAll'](type)) {
467
616
  return getters.matching( type, selector, namespace );
468
617
  }
469
618
 
@@ -471,6 +620,8 @@ export default {
471
620
 
472
621
  opt = opt || {};
473
622
  opt.labelSelector = selector;
623
+ opt.isCollection = true;
624
+ opt.namespaced = namespace;
474
625
  opt.url = getters.urlFor(type, null, opt);
475
626
  opt.depaginate = conditionalDepaginate(typeOptions?.depaginate, { ctx, args: { type, opt } });
476
627
 
@@ -499,7 +650,7 @@ export default {
499
650
 
500
651
  garbageCollect.gcUpdateLastAccessed(ctx, type);
501
652
 
502
- return getters.matching( type, selector, namespace );
653
+ return getters.all(type);
503
654
  },
504
655
 
505
656
  // opt:
@@ -529,6 +680,12 @@ export default {
529
680
  out = getters.byId(type, id);
530
681
 
531
682
  if ( out ) {
683
+ if ( opt.watch !== false ) {
684
+ dispatch('watch', createFindWatchArg({
685
+ type, id, opt, res: undefined
686
+ }));
687
+ }
688
+
532
689
  return out;
533
690
  }
534
691
  }
@@ -541,26 +698,9 @@ export default {
541
698
  await dispatch('load', { data: res });
542
699
 
543
700
  if ( opt.watch !== false ) {
544
- const watchMsg = {
545
- type,
546
- id,
547
- // Although not used by sockets, we need this for when resyncWatch calls find... which needs namespace to construct the url
548
- namespace: opt.namespaced,
549
- // Override the revision. Used in cases where we need to avoid using the resource's own revision which would be `too old`.
550
- // For the above case opt.revision will be `null`. If left as `undefined` the subscribe mechanism will try to determine a revision
551
- // from resources in store (which would be this one, with the too old revision)
552
- revision: typeof opt.revision !== 'undefined' ? opt.revision : res?.metadata?.resourceVersion,
553
- force: opt.forceWatch === true,
554
- };
555
-
556
- const idx = id.indexOf('/');
557
-
558
- if ( idx > 0 ) {
559
- watchMsg.namespace = id.substr(0, idx);
560
- watchMsg.id = id.substr(idx + 1);
561
- }
562
-
563
- dispatch('watch', watchMsg);
701
+ dispatch('watch', createFindWatchArg({
702
+ type, id, opt, res
703
+ }));
564
704
  }
565
705
 
566
706
  out = getters.byId(type, id);
@@ -570,7 +710,15 @@ export default {
570
710
  return out;
571
711
  },
572
712
 
573
- load(ctx, { data, existing }) {
713
+ /**
714
+ * Add or update the given resource in the store
715
+ *
716
+ * invalidatePageCache
717
+ * - if something calls `load` then the cache no longer has a page so we invalidate it
718
+ * - however on resource create or remove this can lead to lists showing nothing... before the new page is fetched
719
+ * - for those cases avoid invaliding the page cache
720
+ */
721
+ load(ctx, { data, existing, invalidatePageCache }) {
574
722
  const { getters, commit } = ctx;
575
723
 
576
724
  let type = normalizeType(data.type);
@@ -603,7 +751,8 @@ export default {
603
751
  commit('load', {
604
752
  ctx,
605
753
  data,
606
- existing
754
+ existing,
755
+ invalidatePageCache // Avoid havePage invalidation
607
756
  });
608
757
 
609
758
  if ( type === SCHEMA ) {
@@ -671,13 +820,21 @@ export default {
671
820
  return classify(ctx, resource.toJSON(), true);
672
821
  },
673
822
 
674
- // Forget a type in the store
675
- // Remove all entries for that type and stop watching it
676
- forgetType({ commit, dispatch, state }, type) {
823
+ /**
824
+ * Remove all cached entries for a resource and stop watches
825
+ */
826
+ forgetType({ commit, dispatch, state }, type, compareWatches) {
827
+ // Stop all known watches
677
828
  state.started
678
- .filter((entry) => entry.type === type)
829
+ .filter((entry) => compareWatches ? compareWatches(entry) : entry.type === type)
679
830
  .forEach((entry) => dispatch('unwatch', entry));
680
831
 
832
+ // Stop all known back-off watch processes for this type
833
+ dispatch('resetWatchBackOff', {
834
+ type, compareWatches, resetStarted: false
835
+ });
836
+
837
+ // Remove entries from store
681
838
  commit('forgetType', type);
682
839
  },
683
840
 
@@ -1,5 +1,5 @@
1
1
 
2
- import { SCHEMA, COUNT } from '@shell/config/types';
2
+ import { SCHEMA, COUNT, POD } from '@shell/config/types';
3
3
 
4
4
  import { matches } from '@shell/utils/selector';
5
5
  import { typeMunge, typeRef, SIMPLE_TYPES } from '@shell/utils/create-yaml';
@@ -9,7 +9,11 @@ import { keyFieldFor, normalizeType } from './normalize';
9
9
  import { lookup } from './model-loader';
10
10
  import garbageCollect from '@shell/utils/gc/gc';
11
11
  import paginationUtils from '@shell/utils/pagination-utils';
12
+ import { labelSelectorToSelector } from '@shell/utils/selector-typed';
12
13
 
14
+ /**
15
+ * opt: ActionFindPageArgs
16
+ */
13
17
  export const urlFor = (state, getters) => (type, id, opt) => {
14
18
  opt = opt || {};
15
19
  type = getters.normalizeType(type);
@@ -46,6 +50,33 @@ export const urlFor = (state, getters) => (type, id, opt) => {
46
50
  return url;
47
51
  };
48
52
 
53
+ function resourceCount(rootGetters, getters, typeObj) {
54
+ let _typeObj = typeObj;
55
+ const { name: type, count } = _typeObj;
56
+
57
+ if (!type) {
58
+ throw new Error(`Resource type required to calc count: ${ JSON.stringify(typeObj) }`);
59
+ }
60
+
61
+ if (!count) {
62
+ const schema = getters.schemaFor(type);
63
+ const counts = getters.all(COUNT)?.[0]?.counts || {};
64
+ const count = counts[type];
65
+
66
+ // This object aligns with `Type.vue` `type`
67
+ _typeObj = {
68
+ count: count ? count.summary.count || 0 : null,
69
+ byNamespace: count ? count.namespaces : {},
70
+ revision: count ? count.revision : null,
71
+ namespaced: schema?.attributes?.namespaced
72
+ };
73
+ }
74
+
75
+ const namespaces = _typeObj?.namespaced && !rootGetters.isAllNamespaces ? Object.keys(rootGetters.activeNamespaceCache || {}) : [];
76
+
77
+ return matchingCounts(_typeObj, namespaces.length ? namespaces : null);
78
+ }
79
+
49
80
  /**
50
81
  * Find the number of resources given
51
82
  * - if the type is namespaced
@@ -91,12 +122,59 @@ export default {
91
122
  return state.types[type].list;
92
123
  },
93
124
 
125
+ /**
126
+ * This is a _manual_ application of the selector against whatever is in the store
127
+ *
128
+ * The store must be populated with enough resources to make this valid
129
+ *
130
+ * It's like `matching` except
131
+ * - it accepts a kube labelSelector object (see KubeLabelSelector)
132
+ * - if the store already has the selector and only the selector just return it, otherwise run through `matching`
133
+ */
134
+ matchingLabelSelector: (state, getters, rootState) => (type, labelSelector, namespace) => {
135
+ type = getters.normalizeType(type);
136
+ const selector = labelSelectorToSelector(labelSelector);
137
+ const page = getters['havePage'](type, selector)?.request;
138
+
139
+ // Does the store contain the result of a vai backed api request?
140
+ if (
141
+ page?.namespace === namespace &&
142
+ page?.pagination?.filters?.length === 0 &&
143
+ page?.pagination.labelSelector &&
144
+ selector === labelSelectorToSelector(page?.pagination.labelSelector
145
+ )
146
+ ) {
147
+ return getters.all(type);
148
+ }
149
+
150
+ // Does the store contain the result of a specific labelSelector request?
151
+ if (getters['haveSelector'](type, selector)) {
152
+ return getters.all(type);
153
+ }
154
+
155
+ if (getters['havePage'](type)) {
156
+ return getters.all(type);
157
+ }
158
+
159
+ // Does the store have all and we can pretend like it contains a result of a labelSelector?
160
+ if (getters['haveAll'](type)) {
161
+ return getters.matching( type, selector, namespace );
162
+ }
163
+
164
+ return [];
165
+ },
166
+
167
+ /**
168
+ * This is a _manual_ application of the selector against whatever is in the store
169
+ *
170
+ * The store must be populated with enough resources to make this valid
171
+ */
94
172
  matching: (state, getters, rootState) => (type, selector, namespace, config = { skipSelector: false }) => {
95
173
  let matching = getters['all'](type);
96
174
 
97
175
  // Filter first by namespace if one is provided, since this is efficient
98
176
  if (namespace && typeof namespace === 'string') {
99
- matching = matching.filter((obj) => obj.namespace === namespace);
177
+ matching = type === POD ? getters['podsByNamespace'](namespace) : matching.filter((obj) => obj.namespace === namespace);
100
178
  }
101
179
 
102
180
  garbageCollect.gcUpdateLastAccessed({
@@ -327,6 +405,9 @@ export default {
327
405
  return state.types[type]?.haveNamespace || null;
328
406
  },
329
407
 
408
+ /**
409
+ * Returns (type: string ) => StorePagination
410
+ */
330
411
  havePage: (state, getters) => (type) => {
331
412
  type = getters.normalizeType(type);
332
413
 
@@ -408,30 +489,13 @@ export default {
408
489
  *
409
490
  */
410
491
  count: (state, getters, rootState, rootGetters) => (typeObj) => {
411
- let _typeObj = typeObj;
412
- const { name: type, count } = _typeObj;
492
+ const subTypes = rootGetters['type-map/optionsFor'](typeObj.name).subTypes || [];
413
493
 
414
- if (!type) {
415
- throw new Error(`Resource type required to calc count: ${ JSON.stringify(typeObj) }`);
494
+ if (subTypes.length) {
495
+ return subTypes.reduce((acc, type) => acc + resourceCount(rootGetters, getters, { name: type }), 0);
416
496
  }
417
497
 
418
- if (!count) {
419
- const schema = getters.schemaFor(type);
420
- const counts = getters.all(COUNT)?.[0]?.counts || {};
421
- const count = counts[type];
422
-
423
- // This object aligns with `Type.vue` `type`
424
- _typeObj = {
425
- count: count ? count.summary.count || 0 : null,
426
- byNamespace: count ? count.namespaces : {},
427
- revision: count ? count.revision : null,
428
- namespaced: schema?.attributes?.namespaced
429
- };
430
- }
431
-
432
- const namespaces = _typeObj?.namespaced && !rootGetters.isAllNamespaces ? Object.keys(rootGetters.activeNamespaceCache || {}) : [];
433
-
434
- return matchingCounts(_typeObj, namespaces.length ? namespaces : null);
498
+ return resourceCount(rootGetters, getters, typeObj);
435
499
  },
436
500
 
437
501
  generation: (state, getters) => (type) => {
@@ -445,7 +509,17 @@ export default {
445
509
  return undefined;
446
510
  },
447
511
 
512
+ /**
513
+ * Determine if server-side pagination (SSP) is enabled
514
+ *
515
+ * If args is falsy just check the Feature Flag
516
+ *
517
+ * Otherwise args should reference a resource who's compatibility with SSP will also be checked
518
+ */
448
519
  paginationEnabled: (state, getters, rootState, rootGetters) => (args) => {
520
+ if (!args) {
521
+ return paginationUtils.isSteveCacheEnabled({ rootGetters });
522
+ }
449
523
  const id = typeof args === 'object' ? args.id : args;
450
524
  const context = typeof args === 'object' ? args.context : undefined;
451
525
 
@@ -453,5 +527,19 @@ export default {
453
527
  const resource = id || context ? { id, context } : null;
454
528
 
455
529
  return paginationUtils.isEnabled({ rootGetters }, { store, resource });
456
- }
530
+ },
531
+
532
+ /**
533
+ * Is the url path a rancher steve one?
534
+ *
535
+ * Can be used to change behaviour given steve api
536
+ */
537
+ isSteveUrl: (state) => () => false,
538
+
539
+ /**
540
+ * Is the url path a rancher steve one AND the steve cache is enabled?
541
+ *
542
+ * Can be used to change behaviour given steve cache api functionality
543
+ */
544
+ isSteveCacheUrl: (state) => () => false,
457
545
  };