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
@@ -4,11 +4,13 @@ import { get } from '@shell/utils/object';
4
4
  import { mapPref, GROUP_RESOURCES } from '@shell/store/prefs';
5
5
  import ButtonGroup from '@shell/components/ButtonGroup';
6
6
  import SortableTable from '@shell/components/SortableTable';
7
- import MastheadBtn from '@shell/components/ResourceList/Masthead-btn.vue';
8
7
  import { NAMESPACE, AGE } from '@shell/config/table-headers';
9
8
  import { findBy } from '@shell/utils/array';
10
9
  import { ExtensionPoint, TableColumnLocation } from '@shell/core/types';
11
10
  import { getApplicableExtensionEnhancements } from '@shell/core/plugin-helpers';
11
+ import { ToggleSwitch } from '@components/Form/ToggleSwitch';
12
+ import ResourceTableWatch from '@shell/mixins/resource-table-watch';
13
+ import paginationUtils from '@shell/utils/pagination-utils';
12
14
 
13
15
  // Default group-by in the case the group stored in the preference does not apply
14
16
  const DEFAULT_GROUP = 'namespace';
@@ -44,15 +46,22 @@ export default {
44
46
 
45
47
  emits: ['clickedActionButton'],
46
48
 
47
- components: { ButtonGroup, SortableTable, MastheadBtn },
49
+ components: {
50
+ ButtonGroup, SortableTable, ToggleSwitch
51
+ },
52
+
53
+ mixins: [
54
+ ResourceTableWatch
55
+ ],
48
56
 
49
57
  props: {
50
- schema: {
51
- type: Object,
52
- default: null,
58
+ searchPlaceholder: {
59
+ // search框内的输入提示
60
+ type: String,
61
+ default: '名称'
53
62
  },
54
-
55
- schemaBtn: {
63
+
64
+ schema: {
56
65
  type: Object,
57
66
  default: null,
58
67
  },
@@ -213,59 +222,17 @@ export default {
213
222
  type: Number,
214
223
  default: null, // Default comes from the user preference
215
224
  },
216
- searchPlaceholder: {
217
- // search框内的输入提示
218
- type: String,
219
- default: '名称'
220
- },
221
225
 
222
- resource: {
223
- type: String,
224
- required: true,
225
- },
226
-
227
- typeDisplay: {
226
+ overrideInStore: {
228
227
  type: String,
229
- default: null,
230
- },
231
- isCreatable: {
232
- type: Boolean,
233
- default: null,
234
- },
235
- isYamlCreatable: {
236
- type: Boolean,
237
- default: null,
238
- },
239
- createLocation: {
240
- type: Object,
241
- default: null,
242
- },
243
- yamlCreateLocation: {
244
- type: Object,
245
- default: null,
246
- },
247
- createButtonLabel: {
248
- type: String,
249
- default: null
250
- },
251
- /**
252
- * Inherited global identifier prefix for tests
253
- * Define a term based on the parent component to avoid conflicts on multiple components
254
- */
255
- componentTestid: {
256
- type: String,
257
- default: 'masthead'
228
+ default: undefined,
258
229
  },
259
230
 
260
- mainButtonVisible: {
261
- type: Boolean,
262
- default: false
263
- },
264
231
  },
265
232
 
266
233
  data() {
267
234
  // Confirm which store we're in, if schema isn't available we're probably showing a list with different types
268
- const inStore = this.schema?.id ? this.$store.getters['currentStore'](this.schema.id) : undefined;
235
+ const inStore = this.overrideInStore || (this.schema?.id ? this.$store.getters['currentStore'](this.schema.id) : undefined);
269
236
 
270
237
  return {
271
238
  inStore,
@@ -275,7 +242,8 @@ export default {
275
242
  * Primary purpose is to directly connect an iteration of `rows` with a sortGeneration string. This avoids
276
243
  * reactivity issues where `rows` hasn't yet changed but something like workspaces has (stale values stored against fresh key)
277
244
  */
278
- sortGeneration: undefined
245
+ sortGeneration: undefined,
246
+ listAutoRefreshToggleEnabled: paginationUtils.listAutoRefreshToggleEnabled({ rootGetters: this.$store.getters }),
279
247
  };
280
248
  },
281
249
 
@@ -291,10 +259,15 @@ export default {
291
259
  }
292
260
  },
293
261
  immediate: true
294
- }
262
+ },
263
+
295
264
  },
296
265
 
297
266
  computed: {
267
+ actionsWidth() {
268
+ return this.$store.getters['type-map/actionsWidth'] // 从 getter 里拿
269
+ },
270
+
298
271
  options() {
299
272
  return this.$store.getters[`type-map/optionsFor`](this.schema, this.externalPaginationEnabled);
300
273
  },
@@ -482,8 +455,6 @@ export default {
482
455
  return this._group;
483
456
  },
484
457
  set(value) {
485
- console.log('_group:===='+value);
486
-
487
458
  this._group = value;
488
459
  }
489
460
  },
@@ -494,12 +465,13 @@ export default {
494
465
  const customGroupable = !!this.options?.listGroups?.length;
495
466
 
496
467
  // sshkey去掉分组按钮
497
- if(this.parsedPagingParams.singularLabel === 'SSH Key' || this.parsedPagingParams.singularLabel === '负载均衡器'){
498
- return false
499
- }
468
+ if(this.parsedPagingParams.singularLabel === 'SSH Key' || this.parsedPagingParams.singularLabel === '负载均衡器'){
469
+ return false
470
+ }
500
471
 
501
472
  return namespaceGroupable || customGroupable || this.groupOptions?.length;
502
473
  }
474
+
503
475
  return this.groupable || false;
504
476
  },
505
477
 
@@ -587,7 +559,6 @@ export default {
587
559
  pluralLabel: this.$store.getters['type-map/labelFor'](this.schema, 99),
588
560
  };
589
561
  },
590
-
591
562
  },
592
563
 
593
564
  methods: {
@@ -648,8 +619,9 @@ export default {
648
619
  if (event.key === 'Enter') {
649
620
  this.keyAction('detail');
650
621
  }
651
- }
652
- },
622
+ },
623
+
624
+ }
653
625
  };
654
626
  </script>
655
627
 
@@ -692,28 +664,7 @@ export default {
692
664
  >
693
665
 
694
666
  <template #search-main-button>
695
- <MastheadBtn
696
- v-if="mainButtonVisible"
697
- :schema="schemaBtn"
698
- :resource="resource"
699
- :create-button-label="createButtonLabel"
700
- :yaml-create-button-label="yamlCreateLocation"
701
- :create-location="createLocation"
702
- :is-yaml-creatable="isYamlCreatable"
703
- :is-creatable="isCreatable"
704
- :type-display="typeDisplay"
705
- :component-testid="componentTestid"
706
- >
707
-
708
- <template #extraActions>
709
- <slot name="extraActions" />
710
- </template>
711
-
712
- <template #createButton>
713
- <slot name="createButton" />
714
- </template>
715
-
716
- </ MastheadBtn>
667
+ <div :style="{ width: actionsWidth + 'px' }"></div>
717
668
  </template>
718
669
 
719
670
  <template
@@ -733,7 +684,24 @@ export default {
733
684
  v-if="showGrouping"
734
685
  #header-right
735
686
  >
736
- <slot name="header-right" />
687
+ <slot
688
+ name="header-right"
689
+ />
690
+ </template>
691
+
692
+ <template
693
+ v-if="externalPaginationEnabled"
694
+ #watch-controls
695
+ >
696
+ <!-- See https://github.com/rancher/dashboard/issues/14359 -->
697
+ <ToggleSwitch
698
+ v-if="listAutoRefreshToggleEnabled"
699
+ class="auto-update"
700
+ :value="watching"
701
+ name="label-system-toggle"
702
+ :on-label="t('resourceTable.autoRefresh.label')"
703
+ @update:value="toggleWatch"
704
+ />
737
705
  </template>
738
706
 
739
707
  <template #group-by="{group: thisGroup}">
@@ -781,3 +749,9 @@ export default {
781
749
  </template>
782
750
  </SortableTable>
783
751
  </template>
752
+
753
+ <style lang="scss" scoped>
754
+ .auto-update {
755
+ min-width: 150px; height: 40px
756
+ }
757
+ </style>
@@ -73,6 +73,11 @@ export default {
73
73
  default: true
74
74
  },
75
75
 
76
+ showErrors: {
77
+ type: Boolean,
78
+ default: true
79
+ },
80
+
76
81
  applyHooks: {
77
82
  type: Function,
78
83
  default: null,
@@ -229,7 +234,7 @@ export default {
229
234
  }
230
235
 
231
236
  try {
232
- await this.value.saveYaml(yaml);
237
+ await this.value.saveYaml(yaml, this.initialYaml);
233
238
  } catch (err) {
234
239
  return onError.call(this, err);
235
240
  }
@@ -289,6 +294,13 @@ export default {
289
294
  }
290
295
  },
291
296
 
297
+ refresh() {
298
+ this.$refs.yamleditor.refresh();
299
+ },
300
+
301
+ closeError(index) {
302
+ this.errors = (this.errors || []).filter((_, i) => i !== index);
303
+ },
292
304
  }
293
305
  };
294
306
  </script>
@@ -318,7 +330,8 @@ export default {
318
330
  class="footer"
319
331
  :class="{ 'edit': !isView }"
320
332
  :mode="mode"
321
- :errors="errors"
333
+ :errors="showErrors ? errors : []"
334
+ @close-error="closeError"
322
335
  @save="save"
323
336
  @done="done"
324
337
  >
@@ -0,0 +1,106 @@
1
+ <script lang="ts">
2
+ import { defineComponent, h, VNode } from 'vue';
3
+ import { useStore } from 'vuex';
4
+ import { purifyHTML } from '@shell/plugins/clean-html';
5
+
6
+ const ALLOWED_TAGS = ['b', 'i', 'span', 'a']; // Add more as needed
7
+
8
+ /**
9
+ * A component for rendering translated strings with embedded HTML and custom Vue components.
10
+ *
11
+ * This component allows you to use a single translation key for a message that contains
12
+ * both standard HTML tags (like <b>, <i>, etc.) and custom Vue components (like <router-link>).
13
+ *
14
+ * @example
15
+ * // In your translation file (e.g., en-us.yaml):
16
+ * my:
17
+ * translation:
18
+ * key: 'This is a <b>bold</b> statement with a <customLink>link</customLink>.'
19
+ *
20
+ * // In your Vue component:
21
+ * <RichTranslation k="my.translation.key">
22
+ * <template #customLink="{ content }">
23
+ * <router-link to="{ name: 'some-path' }">{{ content }}</router-link>
24
+ * </template>
25
+ * </RichTranslation>
26
+ */
27
+ export default defineComponent({
28
+ name: 'RichTranslation',
29
+ props: {
30
+ /**
31
+ * The translation key for the message.
32
+ */
33
+ k: {
34
+ type: String,
35
+ required: true,
36
+ },
37
+ /**
38
+ * The HTML tag to use for the root element.
39
+ */
40
+ tag: {
41
+ type: String,
42
+ default: 'span'
43
+ },
44
+ },
45
+ setup(props, { slots }) {
46
+ const store = useStore();
47
+
48
+ return () => {
49
+ // Get the raw translation string, without any processing.
50
+ const rawStr = store.getters['i18n/t'](props.k, {}, true);
51
+
52
+ if (!rawStr || typeof rawStr !== 'string') {
53
+ return h(props.tag, {}, [rawStr]);
54
+ }
55
+
56
+ // This regex splits the string by the custom tags, keeping the tags in the resulting array.
57
+ const regex = /<([a-zA-Z0-9]+)>(.*?)<\/\1>|<([a-zA-Z0-9]+)\/>/g;
58
+ const children: (VNode | string)[] = [];
59
+ let lastIndex = 0;
60
+ let match;
61
+
62
+ // Iterate over all matches of the regex.
63
+ while ((match = regex.exec(rawStr)) !== null) {
64
+ // Add the text before the current match as a plain text node.
65
+ if (match.index > lastIndex) {
66
+ children.push(h('span', { innerHTML: purifyHTML(rawStr.substring(lastIndex, match.index)) }));
67
+ }
68
+
69
+ const enclosingTagName = match[1]; // Captures the tag name for enclosing tags (e.g., 'customLink' from <customLink>...</customLink>)
70
+ const selfClosingTagName = match[3]; // Captures the tag name for self-closing tags (e.g., 'anotherTag' from <anotherTag/>)
71
+ const tagName = enclosingTagName || selfClosingTagName;
72
+
73
+ if (tagName) {
74
+ const content = enclosingTagName ? match[2] : '';
75
+
76
+ if (slots[tagName]) {
77
+ // If a slot is provided for this tag, render the slot with the content.
78
+ children.push(slots[tagName]({ content: purifyHTML(content) }));
79
+ } else if (ALLOWED_TAGS.includes(tagName.toLowerCase())) {
80
+ // If it's an allowed HTML tag, render it directly.
81
+ if (content) {
82
+ children.push(h(tagName, { innerHTML: purifyHTML(content, { ALLOWED_TAGS }) }));
83
+ } else {
84
+ children.push(h(tagName));
85
+ }
86
+ } else {
87
+ // Otherwise, render the tag and its content as plain HTML.
88
+ children.push(h('span', { innerHTML: purifyHTML(match[0]) }));
89
+ }
90
+ }
91
+
92
+ // Update the last index to continue searching after the current match
93
+ lastIndex = regex.lastIndex;
94
+ }
95
+
96
+ // Add any remaining text after the last match.
97
+ if (lastIndex < rawStr.length) {
98
+ children.push(h('span', { innerHTML: purifyHTML(rawStr.substring(lastIndex)) }));
99
+ }
100
+
101
+ // Render the root element with the processed children.
102
+ return h(props.tag, {}, children);
103
+ };
104
+ }
105
+ });
106
+ </script>
@@ -1,15 +1,27 @@
1
1
  <script lang="ts" setup>
2
- import { computed } from 'vue';
2
+ import { computed, onBeforeUnmount, watch } from 'vue';
3
3
  import { useStore } from 'vuex';
4
+ import {
5
+ DEFAULT_FOCUS_TRAP_OPTS,
6
+ useWatcherBasedSetupFocusTrapWithDestroyIncluded
7
+ } from '@shell/composables/focusTrap';
8
+ import { isEqual } from 'lodash';
9
+ import { useRouter } from 'vue-router';
4
10
 
5
11
  const HEADER_HEIGHT = 55;
6
12
 
7
13
  const store = useStore();
8
14
  const isOpen = computed(() => store.getters['slideInPanel/isOpen']);
15
+ const isClosing = computed(() => store.getters['slideInPanel/isClosing']);
9
16
  const currentComponent = computed(() => store.getters['slideInPanel/component']);
10
17
  const currentProps = computed(() => store.getters['slideInPanel/componentProps']);
11
18
 
12
19
  const panelTop = computed(() => {
20
+ // Some components like the ResourceDetailDrawer are designed to take up the full height of the viewport so we want to be able to specify the top.
21
+ if (currentProps?.value?.top) {
22
+ return currentProps?.value?.top;
23
+ }
24
+
13
25
  const banner = document.getElementById('banner-header');
14
26
  let height = HEADER_HEIGHT;
15
27
 
@@ -20,11 +32,92 @@ const panelTop = computed(() => {
20
32
  return `${ height }px`;
21
33
  });
22
34
 
23
- const panelHeight = computed(() => `calc(100vh - ${ panelTop?.value })`);
35
+ // Some components like the ResourceDetailDrawer are designed to take up the full height of the viewport so we want to be able to specify the height.
36
+ const panelHeight = computed(() => (currentProps?.value?.height) ? (currentProps?.value?.height) : `calc(100vh - ${ panelTop?.value })`);
24
37
  const panelWidth = computed(() => currentProps?.value?.width || '33%');
25
38
  const panelRight = computed(() => (isOpen?.value ? '0' : `-${ panelWidth?.value }`));
26
39
 
27
- const panelTitle = computed(() => currentProps?.value?.title || 'Details');
40
+ const showHeader = computed(() => currentProps?.value?.showHeader ?? true);
41
+ const panelTitle = showHeader.value ? computed(() => currentProps?.value?.title || 'Details') : null;
42
+ const closeOnRouteChange = computed(() => {
43
+ const propsCloseOnRouteChange = currentProps?.value.closeOnRouteChange;
44
+
45
+ if (!propsCloseOnRouteChange) {
46
+ return ['name', 'params', 'hash', 'query'];
47
+ }
48
+
49
+ return propsCloseOnRouteChange;
50
+ });
51
+ const router = useRouter();
52
+
53
+ watch(
54
+ /**
55
+ * trigger focus trap
56
+ */
57
+ () => currentProps?.value?.triggerFocusTrap,
58
+ (neu) => {
59
+ if (neu) {
60
+ const opts = {
61
+ ...DEFAULT_FOCUS_TRAP_OPTS,
62
+ /**
63
+ * will return focus to the first iterable node of this container select
64
+ */
65
+ setReturnFocus: () => {
66
+ const returnFocusSelector = currentProps?.value?.returnFocusSelector;
67
+
68
+ if (returnFocusSelector && !document.querySelector(returnFocusSelector)) {
69
+ console.warn('SlideInPanelManager: cannot find elem with "returnFocusSelector", returning focus to main view'); // eslint-disable-line no-console
70
+
71
+ return '.dashboard-root';
72
+ }
73
+
74
+ return returnFocusSelector || '.dashboard-root';
75
+ }
76
+ };
77
+
78
+ useWatcherBasedSetupFocusTrapWithDestroyIncluded(
79
+ () => {
80
+ if (currentProps?.value?.focusTrapWatcherBasedVariable) {
81
+ return currentProps.value.focusTrapWatcherBasedVariable;
82
+ }
83
+
84
+ return isOpen?.value && !isClosing?.value;
85
+ },
86
+ '#slide-in-panel-manager',
87
+ opts,
88
+ false
89
+ );
90
+ }
91
+ }
92
+ );
93
+
94
+ watch(
95
+ () => router?.currentRoute?.value,
96
+ (newValue, oldValue) => {
97
+ if (!isOpen?.value) {
98
+ return;
99
+ }
100
+
101
+ if (closeOnRouteChange.value.includes('name') && !isEqual(newValue?.name, oldValue?.name)) {
102
+ closePanel();
103
+ }
104
+
105
+ if (closeOnRouteChange.value.includes('params') && !isEqual(newValue?.params, oldValue?.params)) {
106
+ closePanel();
107
+ }
108
+
109
+ if (closeOnRouteChange.value.includes('hash') && !isEqual(newValue?.hash, oldValue?.hash)) {
110
+ closePanel();
111
+ }
112
+
113
+ if (closeOnRouteChange.value.includes('query') && !isEqual(newValue?.query, oldValue?.query)) {
114
+ closePanel();
115
+ }
116
+ },
117
+ { deep: true }
118
+ );
119
+
120
+ onBeforeUnmount(closePanel);
28
121
 
29
122
  function closePanel() {
30
123
  store.commit('slideInPanel/close');
@@ -33,7 +126,10 @@ function closePanel() {
33
126
 
34
127
  <template>
35
128
  <Teleport to="#slides">
36
- <div id="slide-in-panel-manager">
129
+ <div
130
+ id="slide-in-panel-manager"
131
+ @keydown.escape="closePanel"
132
+ >
37
133
  <div
38
134
  v-show="isOpen"
39
135
  data-testid="slide-in-glass"
@@ -41,20 +137,27 @@ function closePanel() {
41
137
  :class="{ 'slide-in-glass-open': isOpen }"
42
138
  @click="closePanel"
43
139
  />
44
- <div
140
+ <aside
45
141
  class="slide-in"
46
142
  :class="{ 'slide-in-open': isOpen }"
47
- :style="{ width: panelWidth, right: panelRight, top: panelTop, height: panelHeight }"
143
+ :style="{
144
+ width: panelWidth,
145
+ right: panelRight,
146
+ top: panelTop,
147
+ height: panelHeight,
148
+ }"
48
149
  >
49
- <div class="header">
150
+ <div
151
+ v-if="showHeader"
152
+ class="header"
153
+ >
50
154
  <div class="title">
51
155
  {{ panelTitle }}
52
156
  </div>
53
157
  <i
54
158
  class="icon icon-close"
55
159
  data-testid="slide-in-close"
56
- :trigger-focus-trap="true"
57
- tabindex="0"
160
+ :tabindex="isOpen ? 0 : -1"
58
161
  @click="closePanel"
59
162
  />
60
163
  </div>
@@ -67,7 +170,7 @@ function closePanel() {
67
170
  class="dynamic-panel-content"
68
171
  />
69
172
  </div>
70
- </div>
173
+ </aside>
71
174
  </div>
72
175
  </Teleport>
73
176
  </template>
@@ -80,12 +183,11 @@ function closePanel() {
80
183
  left: 0;
81
184
  height: 100vh;
82
185
  width: 100vw;
186
+ z-index: z-index('slide-in');
83
187
  }
84
188
  .slide-in-glass-open {
85
- background-color: var(--body-bg);
189
+ background: var(--overlay-bg);
86
190
  display: block;
87
- opacity: 0.5;
88
- z-index: 1000;
89
191
  }
90
192
 
91
193
  .slide-in {
@@ -93,10 +195,10 @@ function closePanel() {
93
195
  flex-direction: column;
94
196
  position: fixed;
95
197
  top: 0;
96
- z-index: 2000;
97
198
  transition: right 0.5s ease;
98
199
  border-left: 1px solid var(--border);
99
200
  background-color: var(--body-bg);
201
+ z-index: calc(z-index('slide-in') + 1);
100
202
  }
101
203
 
102
204
  .slide-in-open {
@@ -27,8 +27,6 @@ import ButtonMultiAction from '@shell/components/ButtonMultiAction.vue';
27
27
  import ActionMenu from '@shell/components/ActionMenuShell.vue';
28
28
  import { useRuntimeFlag } from '@shell/composables/useRuntimeFlag';
29
29
  import ActionDropdownShell from '@shell/components/ActionDropdownShell.vue';
30
- import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
31
- import MastheadBtn from '@shell/components/ResourceList/Masthead-btn.vue'
32
30
 
33
31
  // Uncomment for table performance debugging
34
32
  // import tableDebug from './debug';
@@ -383,6 +381,16 @@ export default {
383
381
  type: String,
384
382
  default: ''
385
383
  },
384
+
385
+ /**
386
+ * Usually the manual refresh button is controlled via isTooManyItemsToAutoUpdate
387
+ *
388
+ * However this is singular on page. In some places there's more than one...
389
+ */
390
+ hideManualRefreshButton: {
391
+ type: Boolean,
392
+ default: false
393
+ },
386
394
  isBanner: {
387
395
  // Show isBanner input to filter rows
388
396
  type: Boolean,
@@ -417,7 +425,7 @@ export default {
417
425
  const isLoading = this.loading || false;
418
426
 
419
427
  let isCreatable = false;
420
- const lastPath = this.$route.path.split('/').pop();
428
+ const lastPath = this.$route?.path.split('/').pop();
421
429
 
422
430
  if (lastPath.includes('.')) {
423
431
  isCreatable = this.$store.getters['type-map/optionsFor'](lastPath).isCreatable;
@@ -1753,10 +1761,11 @@ export default {
1753
1761
  @mouseover="setBulkActionOfInterest(act)"
1754
1762
  @mouseleave="setBulkActionOfInterest(null)"
1755
1763
  >
1756
- <i
1764
+ <!-- <i
1757
1765
  v-if="act.icon"
1758
1766
  :class="act.icon"
1759
- />
1767
+ style="line-height: 12px;height: 12px;font-size: 12px;"
1768
+ /> -->
1760
1769
  <span v-clean-html="act.label" />
1761
1770
  </button>
1762
1771
  <template v-if="featureDropdownMenu">
@@ -51,6 +51,21 @@ export default {
51
51
  return this.$store.getters['i18n/t'](this.pagingLabel, opt);
52
52
  },
53
53
 
54
+ perPage() {
55
+ let out = this.rowsPerPage || 0;
56
+
57
+ if ( out <= 0 ) {
58
+ out = parseInt(this.$store.getters['prefs/get'](ROWS_PER_PAGE), 10) || 0;
59
+ }
60
+
61
+ // This should ideally never happen, but the preference value could be invalid, so return something...
62
+ if ( out <= 0 ) {
63
+ out = 10;
64
+ }
65
+
66
+ return out;
67
+ },
68
+
54
69
  pagedRows() {
55
70
  if (this.externalPaginationEnabled) {
56
71
  return this.rows;
@@ -91,22 +106,6 @@ export default {
91
106
  },
92
107
 
93
108
  methods: {
94
- // getPerPage() {
95
- // // perPage can not change while the list is displayed
96
- // let out = this.rowsPerPage || 0;
97
-
98
- // if ( out <= 0 ) {
99
- // out = parseInt(this.$store.getters['prefs/get'](ROWS_PER_PAGE), 10) || 0;
100
- // }
101
-
102
- // // This should ideally never happen, but the preference value could be invalid, so return something...
103
- // if ( out <= 0 ) {
104
- // out = 10;
105
- // }
106
-
107
- // return out;
108
- // },
109
-
110
109
 
111
110
  setgetPerPage(num) {
112
111
  this.setPage(1);