@rancher/shell 3.0.7 → 3.0.8-rc.10

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 (375) hide show
  1. package/assets/brand/suse/banner.svg +1 -0
  2. package/assets/brand/suse/dark/banner.svg +1 -0
  3. package/assets/brand/suse/dark/login-landscape.svg +1 -0
  4. package/assets/brand/suse/dark/rancher-logo.svg +1 -1
  5. package/assets/brand/suse/favicon.png +0 -0
  6. package/assets/brand/suse/login-landscape.svg +1 -0
  7. package/assets/brand/suse/metadata.json +11 -1
  8. package/assets/brand/suse/rancher-logo.svg +1 -1
  9. package/assets/fonts/suse/suse-v2-latin-300.woff +0 -0
  10. package/assets/fonts/suse/suse-v2-latin-300.woff2 +0 -0
  11. package/assets/fonts/suse/suse-v2-latin-600.woff +0 -0
  12. package/assets/fonts/suse/suse-v2-latin-600.woff2 +0 -0
  13. package/assets/fonts/suse/suse-v2-latin-700.woff +0 -0
  14. package/assets/fonts/suse/suse-v2-latin-700.woff2 +0 -0
  15. package/assets/fonts/suse/suse-v2-latin-800.woff +0 -0
  16. package/assets/fonts/suse/suse-v2-latin-800.woff2 +0 -0
  17. package/assets/fonts/suse/suse-v2-latin-regular.woff +0 -0
  18. package/assets/fonts/suse/suse-v2-latin-regular.woff2 +0 -0
  19. package/assets/images/content/README.md +5 -0
  20. package/assets/images/content/cloud-native.svg +84 -0
  21. package/assets/images/content/dark/cloud-native.svg +21 -0
  22. package/assets/images/content/dark/shield.svg +59 -0
  23. package/assets/images/content/dark/suse.svg +10 -0
  24. package/assets/images/content/shield.svg +59 -0
  25. package/assets/images/content/suse.svg +10 -0
  26. package/assets/images/vendor/githubapp.svg +13 -0
  27. package/assets/styles/base/_typography.scss +2 -1
  28. package/assets/styles/fonts/_fontstack.scss +53 -1
  29. package/assets/styles/global/_cards.scss +0 -3
  30. package/assets/styles/global/_layout.scss +21 -35
  31. package/assets/styles/themes/_dark.scss +1 -1
  32. package/assets/styles/themes/_light.scss +1 -1
  33. package/assets/styles/themes/_modern.scss +16 -8
  34. package/assets/styles/themes/_suse.scss +116 -24
  35. package/assets/translations/en-us.yaml +185 -21
  36. package/assets/translations/zh-hans.yaml +0 -4
  37. package/components/AutoscalerCard.vue +113 -0
  38. package/components/AutoscalerTab.vue +94 -0
  39. package/components/BackLink.vue +8 -0
  40. package/components/BannerGraphic.vue +36 -21
  41. package/components/BrandImage.vue +17 -6
  42. package/components/ClusterIconMenu.vue +1 -1
  43. package/components/ClusterProviderIcon.vue +1 -1
  44. package/components/Cron/CronExpressionEditor.vue +1 -1
  45. package/components/Cron/CronExpressionEditorModal.vue +1 -1
  46. package/components/Drawer/Chrome.vue +2 -6
  47. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +4 -9
  48. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +3 -8
  49. package/components/Drawer/ResourceDetailDrawer/composables.ts +3 -4
  50. package/components/Drawer/ResourceDetailDrawer/index.vue +4 -9
  51. package/components/Drawer/ResourceDetailDrawer/types.ts +17 -0
  52. package/components/Drawer/types.ts +3 -0
  53. package/components/DynamicContent/DynamicContentBanner.vue +102 -0
  54. package/components/DynamicContent/DynamicContentCloseButton.vue +42 -0
  55. package/components/DynamicContent/DynamicContentIcon.vue +132 -0
  56. package/components/DynamicContent/DynamicContentPanel.vue +112 -0
  57. package/components/DynamicContent/content.ts +78 -0
  58. package/components/EmberPage.vue +1 -1
  59. package/components/IconOrSvg.vue +2 -2
  60. package/components/Inactivity.vue +222 -106
  61. package/components/InstallHelmCharts.vue +2 -2
  62. package/components/PaginatedResourceTable.vue +2 -6
  63. package/components/PopoverCard.vue +192 -0
  64. package/components/Questions/__tests__/index.test.ts +159 -0
  65. package/components/Resource/Detail/CopyToClipboard.vue +4 -1
  66. package/components/Resource/Detail/FetchLoader/composables.ts +18 -4
  67. package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
  68. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +1 -1
  69. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +4 -0
  70. package/components/Resource/Detail/Metadata/KeyValueRow.vue +1 -1
  71. package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
  72. package/components/Resource/Detail/Metadata/composables.ts +9 -9
  73. package/components/Resource/Detail/Metadata/index.vue +3 -3
  74. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -19
  75. package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +0 -29
  76. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +132 -150
  77. package/components/Resource/Detail/ResourcePopover/index.vue +54 -159
  78. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +0 -2
  79. package/components/Resource/Detail/TitleBar/composables.ts +2 -1
  80. package/components/Resource/Detail/TitleBar/index.vue +10 -6
  81. package/components/Resource/Detail/composables.ts +12 -0
  82. package/components/ResourceDetail/Masthead/latest.vue +29 -0
  83. package/components/ResourceDetail/index.vue +5 -2
  84. package/components/ResourceList/Masthead.vue +1 -1
  85. package/components/SortableTable/index.vue +18 -2
  86. package/components/Tabbed/__tests__/index.test.ts +86 -0
  87. package/components/{nav/WindowManager → Window}/ContainerLogs.vue +1 -1
  88. package/components/{nav/WindowManager → Window}/ContainerLogsActions.vue +1 -0
  89. package/components/{nav/WindowManager → Window}/__tests__/ContainerLogs.test.ts +1 -1
  90. package/components/{nav/WindowManager → Window}/__tests__/ContainerShell.test.ts +2 -2
  91. package/components/__tests__/AutoscalerCard.test.ts +154 -0
  92. package/components/__tests__/AutoscalerTab.test.ts +125 -0
  93. package/components/__tests__/PopoverCard.test.ts +204 -0
  94. package/components/auth/SelectPrincipal.vue +24 -6
  95. package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
  96. package/components/fleet/FleetConfigMapSelector.vue +117 -0
  97. package/components/fleet/FleetSecretSelector.vue +127 -0
  98. package/components/fleet/__tests__/FleetConfigMapSelector.test.ts +125 -0
  99. package/components/fleet/__tests__/FleetSecretSelector.test.ts +82 -0
  100. package/components/form/FileImageSelector.vue +13 -4
  101. package/components/form/FileSelector.vue +11 -2
  102. package/components/form/ResourceLabeledSelect.vue +1 -0
  103. package/components/form/__tests__/ResourceLabeledSelect.test.ts +90 -0
  104. package/components/formatter/Autoscaler.vue +97 -0
  105. package/components/formatter/InternalExternalIP.vue +198 -24
  106. package/components/formatter/__tests__/Autoscaler.test.ts +156 -0
  107. package/components/formatter/__tests__/InternalExternalIP.test.ts +133 -0
  108. package/components/google/util/__tests__/formatter.test.ts +47 -0
  109. package/components/google/util/formatter.ts +5 -2
  110. package/components/nav/Group.vue +12 -3
  111. package/components/nav/Header.vue +37 -16
  112. package/components/nav/NamespaceFilter.vue +13 -1
  113. package/components/nav/NotificationCenter/index.vue +2 -1
  114. package/components/nav/TopLevelMenu.helper.ts +16 -6
  115. package/components/nav/TopLevelMenu.vue +4 -2
  116. package/components/{DraggableZone.vue → nav/WindowManager/PinArea.vue} +47 -80
  117. package/components/nav/WindowManager/composables/useComponentsMount.ts +70 -0
  118. package/components/nav/WindowManager/composables/useDimensionsHandler.ts +105 -0
  119. package/components/nav/WindowManager/composables/useDragHandler.ts +99 -0
  120. package/components/nav/WindowManager/composables/usePanelHandler.ts +72 -0
  121. package/components/nav/WindowManager/composables/usePanelsHandler.ts +14 -0
  122. package/components/nav/WindowManager/composables/useResizeHandler.ts +167 -0
  123. package/components/nav/WindowManager/composables/useTabsHandler.ts +51 -0
  124. package/components/nav/WindowManager/constants.ts +23 -0
  125. package/components/nav/WindowManager/index.vue +61 -575
  126. package/components/nav/WindowManager/panels/HorizontalPanel.vue +265 -0
  127. package/components/nav/WindowManager/panels/TabBodyContainer.vue +39 -0
  128. package/components/nav/WindowManager/panels/VerticalPanel.vue +308 -0
  129. package/components/templates/default.vue +4 -40
  130. package/components/templates/home.vue +31 -5
  131. package/components/templates/plain.vue +30 -4
  132. package/components/templates/standalone.vue +1 -1
  133. package/composables/useI18n.ts +10 -1
  134. package/composables/useInterval.ts +15 -0
  135. package/config/__test__/uiplugins.test.ts +309 -0
  136. package/config/labels-annotations.js +9 -1
  137. package/config/product/auth.js +1 -0
  138. package/config/product/explorer.js +3 -1
  139. package/config/product/manager.js +20 -9
  140. package/config/query-params.js +1 -0
  141. package/config/router/routes.js +10 -2
  142. package/config/settings.ts +10 -2
  143. package/config/store.js +4 -2
  144. package/config/table-headers.js +8 -0
  145. package/config/types.js +11 -0
  146. package/config/uiplugins.js +46 -2
  147. package/config/version.js +1 -1
  148. package/core/__test__/extension-manager-impl.test.js +236 -0
  149. package/core/extension-manager-impl.js +23 -6
  150. package/core/plugin-helpers.ts +2 -0
  151. package/core/types-provisioning.ts +4 -1
  152. package/detail/pod.vue +1 -0
  153. package/detail/provisioning.cattle.io.cluster.vue +13 -1
  154. package/dialog/AddonConfigConfirmationDialog.vue +45 -1
  155. package/dialog/DeveloperLoadExtensionDialog.vue +12 -3
  156. package/dialog/RollbackWorkloadDialog.vue +2 -5
  157. package/directives/ui-context.ts +103 -0
  158. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +52 -11
  159. package/edit/auth/AuthProviderWarningBanners.vue +14 -1
  160. package/edit/auth/__tests__/oidc.test.ts +26 -0
  161. package/edit/auth/github-app-steps.vue +97 -0
  162. package/edit/auth/github-steps.vue +75 -0
  163. package/edit/auth/github.vue +99 -65
  164. package/edit/auth/oidc.vue +5 -1
  165. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
  166. package/edit/cloudcredential.vue +1 -1
  167. package/edit/configmap.vue +1 -0
  168. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  169. package/edit/fleet.cattle.io.gitrepo.vue +0 -10
  170. package/edit/fleet.cattle.io.helmop.vue +51 -2
  171. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  172. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  173. package/edit/logging-flow/index.vue +1 -0
  174. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  175. package/edit/management.cattle.io.fleetworkspace.vue +1 -1
  176. package/edit/management.cattle.io.project.vue +1 -0
  177. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -1
  178. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +2 -1
  179. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  180. package/edit/monitoring.coreos.com.receiver/index.vue +2 -1
  181. package/edit/monitoring.coreos.com.route.vue +1 -1
  182. package/edit/namespace.vue +1 -0
  183. package/edit/networking.istio.io.destinationrule/index.vue +1 -0
  184. package/edit/networking.k8s.io.ingress/index.vue +1 -0
  185. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +15 -5
  186. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -0
  187. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -0
  188. package/edit/node.vue +1 -0
  189. package/edit/persistentvolume/index.vue +27 -22
  190. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +13 -14
  191. package/edit/persistentvolume/plugins/azureDisk.vue +49 -48
  192. package/edit/persistentvolume/plugins/azureFile.vue +15 -14
  193. package/edit/persistentvolume/plugins/cephfs.vue +15 -14
  194. package/edit/persistentvolume/plugins/cinder.vue +15 -14
  195. package/edit/persistentvolume/plugins/csi.vue +18 -16
  196. package/edit/persistentvolume/plugins/fc.vue +13 -14
  197. package/edit/persistentvolume/plugins/flexVolume.vue +15 -14
  198. package/edit/persistentvolume/plugins/flocker.vue +1 -3
  199. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +13 -14
  200. package/edit/persistentvolume/plugins/glusterfs.vue +15 -14
  201. package/edit/persistentvolume/plugins/hostPath.vue +40 -39
  202. package/edit/persistentvolume/plugins/iscsi.vue +13 -14
  203. package/edit/persistentvolume/plugins/local.vue +1 -3
  204. package/edit/persistentvolume/plugins/longhorn.vue +23 -22
  205. package/edit/persistentvolume/plugins/nfs.vue +15 -14
  206. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -14
  207. package/edit/persistentvolume/plugins/portworxVolume.vue +15 -14
  208. package/edit/persistentvolume/plugins/quobyte.vue +15 -14
  209. package/edit/persistentvolume/plugins/rbd.vue +15 -14
  210. package/edit/persistentvolume/plugins/scaleIO.vue +15 -14
  211. package/edit/persistentvolume/plugins/storageos.vue +15 -14
  212. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -3
  213. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +32 -5
  214. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +35 -0
  215. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +155 -0
  216. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +11 -9
  217. package/edit/provisioning.cattle.io.cluster/index.vue +25 -15
  218. package/edit/provisioning.cattle.io.cluster/rke2.vue +98 -17
  219. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +28 -2
  220. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +107 -5
  221. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +92 -4
  222. package/edit/secret/index.vue +1 -1
  223. package/edit/service.vue +9 -4
  224. package/edit/serviceaccount.vue +1 -0
  225. package/edit/storage.k8s.io.storageclass/index.vue +1 -0
  226. package/edit/workload/index.vue +2 -1
  227. package/edit/workload/mixins/workload.js +1 -1
  228. package/initialize/App.vue +4 -4
  229. package/initialize/install-directives.js +2 -0
  230. package/initialize/install-plugins.js +19 -2
  231. package/list/projectsecret.vue +1 -1
  232. package/list/provisioning.cattle.io.cluster.vue +15 -2
  233. package/machine-config/amazonec2.vue +42 -135
  234. package/machine-config/azure.vue +1 -1
  235. package/machine-config/components/EC2Networking.vue +490 -0
  236. package/machine-config/components/__tests__/EC2Networking.test.ts +148 -0
  237. package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +294 -0
  238. package/machine-config/digitalocean.vue +11 -0
  239. package/machine-config/google.vue +1 -1
  240. package/mixins/__tests__/brand.spec.ts +2 -2
  241. package/mixins/__tests__/chart.test.ts +21 -0
  242. package/mixins/brand.js +1 -7
  243. package/mixins/chart.js +8 -2
  244. package/mixins/create-edit-view/index.js +5 -0
  245. package/models/__tests__/chart.test.ts +49 -12
  246. package/models/__tests__/compliance.cattle.io.clusterscanprofile.spec.js +30 -0
  247. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
  248. package/models/catalog.cattle.io.app.js +1 -1
  249. package/models/chart.js +28 -14
  250. package/models/cluster/node.js +13 -6
  251. package/models/cluster.x-k8s.io.machine.js +10 -20
  252. package/models/cluster.x-k8s.io.machinedeployment.js +5 -1
  253. package/models/compliance.cattle.io.clusterscanprofile.js +1 -1
  254. package/models/management.cattle.io.authconfig.js +1 -0
  255. package/models/management.cattle.io.cluster.js +21 -3
  256. package/models/management.cattle.io.kontainerdriver.js +1 -0
  257. package/models/provisioning.cattle.io.cluster.js +249 -33
  258. package/package.json +6 -5
  259. package/pages/auth/login.vue +43 -4
  260. package/pages/auth/verify.vue +1 -1
  261. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +3 -2
  262. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
  263. package/pages/c/_cluster/apps/charts/chart.vue +35 -17
  264. package/pages/c/_cluster/apps/charts/index.vue +11 -13
  265. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  266. package/pages/c/_cluster/explorer/EventsTable.vue +89 -3
  267. package/pages/c/_cluster/explorer/index.vue +8 -6
  268. package/pages/c/_cluster/explorer/tools/index.vue +3 -3
  269. package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
  270. package/pages/c/_cluster/settings/brand.vue +1 -1
  271. package/pages/c/_cluster/settings/performance.vue +12 -25
  272. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +7 -0
  273. package/pages/c/_cluster/uiplugins/catalogs.vue +147 -0
  274. package/pages/c/_cluster/uiplugins/index.vue +126 -184
  275. package/pages/home.vue +327 -16
  276. package/pkg/dynamic-importer.lib.js +4 -0
  277. package/plugins/axios.js +2 -1
  278. package/plugins/dashboard-client-init.js +3 -0
  279. package/plugins/dashboard-store/actions.js +1 -1
  280. package/plugins/dashboard-store/getters.js +18 -1
  281. package/plugins/dashboard-store/resource-class.js +21 -6
  282. package/plugins/dynamic-content.js +13 -0
  283. package/plugins/i18n.js +8 -0
  284. package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
  285. package/plugins/steve/steve-pagination-utils.ts +41 -22
  286. package/plugins/steve/subscribe.js +17 -9
  287. package/plugins/subscribe-events.ts +4 -2
  288. package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
  289. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -34
  290. package/rancher-components/Pill/RcStatusBadge/index.ts +0 -1
  291. package/rancher-components/Pill/RcStatusBadge/types.ts +1 -1
  292. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +5 -28
  293. package/rancher-components/Pill/RcStatusIndicator/types.ts +2 -1
  294. package/rancher-components/Pill/types.ts +0 -1
  295. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -0
  296. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +5 -1
  297. package/rancher-components/RcIcon/RcIcon.test.ts +51 -0
  298. package/rancher-components/RcIcon/RcIcon.vue +46 -0
  299. package/rancher-components/RcIcon/index.ts +1 -0
  300. package/rancher-components/RcIcon/types.ts +160 -0
  301. package/rancher-components/utils/status.test.ts +67 -0
  302. package/rancher-components/utils/status.ts +77 -0
  303. package/scripts/extension/publish +1 -1
  304. package/scripts/typegen.sh +1 -0
  305. package/store/action-menu.js +8 -0
  306. package/store/auth.js +11 -6
  307. package/store/aws.js +8 -6
  308. package/store/catalog.js +6 -0
  309. package/store/features.js +2 -0
  310. package/store/index.js +45 -20
  311. package/store/notifications.ts +51 -4
  312. package/store/plugins.js +7 -3
  313. package/store/prefs.js +12 -6
  314. package/store/type-map.js +3 -3
  315. package/store/ui-context.ts +86 -0
  316. package/store/wm.ts +244 -0
  317. package/types/kube/kube-api.ts +2 -1
  318. package/types/notifications/index.ts +27 -3
  319. package/types/rancher/index.d.ts +1 -0
  320. package/types/resources/settings.d.ts +29 -7
  321. package/types/shell/index.d.ts +138 -4
  322. package/types/store/__tests__/pagination.types.spec.ts +137 -0
  323. package/types/store/pagination.types.ts +157 -9
  324. package/types/store/subscribe-events.types.ts +8 -1
  325. package/types/store/subscribe.types.ts +1 -0
  326. package/types/window-manager.ts +24 -0
  327. package/utils/__tests__/cluster.test.ts +379 -1
  328. package/utils/__tests__/object.test.ts +19 -0
  329. package/utils/__tests__/provider.test.ts +98 -0
  330. package/utils/__tests__/selector-typed.test.ts +263 -0
  331. package/utils/__tests__/version.test.ts +19 -1
  332. package/utils/autoscaler-utils.ts +7 -0
  333. package/utils/back-off.ts +3 -3
  334. package/utils/brand.ts +29 -0
  335. package/utils/chart.js +18 -0
  336. package/utils/cluster.js +157 -3
  337. package/utils/color.js +1 -1
  338. package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
  339. package/utils/dynamic-content/__tests__/config.test.ts +187 -0
  340. package/utils/dynamic-content/__tests__/index.test.ts +390 -0
  341. package/utils/dynamic-content/__tests__/info.test.ts +275 -0
  342. package/utils/dynamic-content/__tests__/new-release.test.ts +216 -0
  343. package/utils/dynamic-content/__tests__/support-notice.test.ts +262 -0
  344. package/utils/dynamic-content/__tests__/util.test.ts +235 -0
  345. package/utils/dynamic-content/announcement.ts +142 -0
  346. package/utils/dynamic-content/config.ts +55 -0
  347. package/utils/dynamic-content/example.json +40 -0
  348. package/utils/dynamic-content/index.ts +277 -0
  349. package/utils/dynamic-content/info.ts +261 -0
  350. package/utils/dynamic-content/new-release.ts +126 -0
  351. package/utils/dynamic-content/notification-handler.ts +48 -0
  352. package/utils/dynamic-content/support-notice.ts +169 -0
  353. package/utils/dynamic-content/types.d.ts +153 -0
  354. package/utils/dynamic-content/util.ts +122 -0
  355. package/utils/dynamic-importer.js +2 -2
  356. package/utils/favicon.js +4 -4
  357. package/utils/inactivity.ts +104 -0
  358. package/utils/object.js +20 -2
  359. package/utils/pagination-utils.ts +19 -4
  360. package/utils/pagination-wrapper.ts +12 -8
  361. package/utils/provider.ts +14 -0
  362. package/utils/release-notes.ts +1 -1
  363. package/utils/scroll.js +7 -0
  364. package/utils/selector-typed.ts +6 -2
  365. package/utils/settings.ts +15 -0
  366. package/utils/validators/machine-pool.ts +13 -3
  367. package/utils/version.js +15 -0
  368. package/assets/images/icons/document.svg +0 -3
  369. package/plugins/nuxt-client-init.js +0 -3
  370. package/store/wm.js +0 -95
  371. /package/components/{nav/WindowManager → Window}/ChartReadme.vue +0 -0
  372. /package/components/{nav/WindowManager → Window}/ContainerShell.vue +0 -0
  373. /package/components/{nav/WindowManager → Window}/KubectlShell.vue +0 -0
  374. /package/components/{nav/WindowManager → Window}/MachineSsh.vue +0 -0
  375. /package/components/{nav/WindowManager → Window}/Window.vue +0 -0
@@ -0,0 +1,333 @@
1
+
2
+ import { PaginationFilterEquality, PaginationFilterField, PaginationParamFilter, PaginationParamProjectOrNamespace } from '@shell/types/store/pagination.types';
3
+ import { NAMESPACE_FILTER_P_FULL_PREFIX } from '@shell/utils/namespace-filter';
4
+ import stevePaginationUtils from '../steve-pagination-utils';
5
+ import Schema from '@shell/models/schema';
6
+
7
+ /**
8
+ * The `NamespaceProjectFilters` class is a protected class within `steve-pagination-utils.ts`.
9
+ * To test its protected methods, we extend it with a test class that exposes them.
10
+ */
11
+ class TestNamespaceProjectFilters {
12
+ public handlePrefAndSettingFilter(args: any) {
13
+ return stevePaginationUtils.handlePrefAndSettingFilter(args);
14
+ }
15
+
16
+ public handleSystemOrUserFilter(args: any) {
17
+ return stevePaginationUtils.handleSystemOrUserFilter(args);
18
+ }
19
+
20
+ public handleSelectionFilter(neu: string[], isLocalCluster: boolean) {
21
+ return stevePaginationUtils.handleSelectionFilter(neu, isLocalCluster);
22
+ }
23
+ }
24
+
25
+ describe('class: NamespaceProjectFilters', () => {
26
+ const testNamespaceProjectFilters = new TestNamespaceProjectFilters();
27
+
28
+ const normalNs = {
29
+ id: 'normal', name: 'normal', isObscure: false, isSystem: false
30
+ };
31
+ const obscureNs = {
32
+ id: 'obscure', name: 'obscure', isObscure: true, isSystem: false
33
+ };
34
+ const systemNs = {
35
+ id: 'system', name: 'system', isObscure: false, isSystem: true
36
+ };
37
+ const obscureAndSystemNs = {
38
+ id: 'obscure-system', name: 'obscure-system', isObscure: true, isSystem: true
39
+ };
40
+
41
+ const allNamespaces = [normalNs, obscureNs, systemNs, obscureAndSystemNs];
42
+
43
+ describe('method: handlePrefAndSettingFilter', () => {
44
+ it('should return no filters if all namespaces are shown', () => {
45
+ const result = testNamespaceProjectFilters.handlePrefAndSettingFilter({
46
+ allNamespaces,
47
+ showReservedRancherNamespaces: true,
48
+ productHidesSystemNamespaces: false,
49
+ });
50
+
51
+ expect(result).toStrictEqual([]);
52
+ });
53
+
54
+ it('should filter obscure namespaces if showReservedRancherNamespaces is false', () => {
55
+ const result = testNamespaceProjectFilters.handlePrefAndSettingFilter({
56
+ allNamespaces,
57
+ showReservedRancherNamespaces: false,
58
+ productHidesSystemNamespaces: false,
59
+ });
60
+
61
+ expect(result).toHaveLength(1);
62
+ expect(result).toContainEqual(expect.objectContaining({
63
+ fields: [expect.objectContaining({
64
+ value: 'obscure,obscure-system', equality: ' NOTIN ', field: `metadata.namespace`
65
+ })]
66
+ }));
67
+ });
68
+
69
+ it('should filter system namespaces if productHidesSystemNamespaces is true', () => {
70
+ const result = testNamespaceProjectFilters.handlePrefAndSettingFilter({
71
+ allNamespaces,
72
+ showReservedRancherNamespaces: true,
73
+ productHidesSystemNamespaces: true,
74
+ });
75
+
76
+ expect(result).toHaveLength(1);
77
+ expect(result).toContainEqual(expect.objectContaining({
78
+ fields: [expect.objectContaining({
79
+ value: 'system,obscure-system', equality: ' NOTIN ', field: `metadata.namespace`
80
+ })]
81
+ }));
82
+ });
83
+
84
+ it('should filter both obscure and system namespaces when both settings are active', () => {
85
+ const result = testNamespaceProjectFilters.handlePrefAndSettingFilter({
86
+ allNamespaces,
87
+ showReservedRancherNamespaces: false,
88
+ productHidesSystemNamespaces: true,
89
+ });
90
+
91
+ expect(result).toHaveLength(1);
92
+ expect(result).toContainEqual(expect.objectContaining({
93
+ fields: [expect.objectContaining({
94
+ value: 'obscure,system,obscure-system', equality: ' NOTIN ', field: `metadata.namespace`
95
+ })]
96
+ }));
97
+ });
98
+ });
99
+
100
+ describe('method: handleSystemOrUserFilter', () => {
101
+ it('should create an OR filter for system namespaces when isAllSystem is true', () => {
102
+ const result = testNamespaceProjectFilters.handleSystemOrUserFilter({
103
+ allNamespaces,
104
+ isAllSystem: true,
105
+ isAllUser: false,
106
+ });
107
+
108
+ expect(result).toHaveLength(1);
109
+ const filter = result[0] as PaginationParamFilter;
110
+
111
+ expect(filter.fields).toHaveLength(2);
112
+ expect(filter.fields).toContainEqual(expect.objectContaining({
113
+ value: 'system', equality: '=', field: 'metadata.namespace'
114
+ }));
115
+ expect(filter.fields).toContainEqual(expect.objectContaining({
116
+ value: 'obscure-system', equality: '=', field: 'metadata.namespace'
117
+ }));
118
+ });
119
+
120
+ it('should create AND filters to exclude system namespaces when isAllUser is true', () => {
121
+ const result = testNamespaceProjectFilters.handleSystemOrUserFilter({
122
+ allNamespaces,
123
+ isAllSystem: false,
124
+ isAllUser: true,
125
+ });
126
+
127
+ expect(result).toHaveLength(2);
128
+ expect(result).toContainEqual(expect.objectContaining({
129
+ fields: [expect.objectContaining({
130
+ value: 'system', equality: '!=', field: 'metadata.namespace'
131
+ })]
132
+ }));
133
+ expect(result).toContainEqual(expect.objectContaining({
134
+ fields: [expect.objectContaining({
135
+ value: 'obscure-system', equality: '!=', field: 'metadata.namespace'
136
+ })]
137
+ }));
138
+ });
139
+ });
140
+
141
+ describe('method: handleSelectionFilter', () => {
142
+ const selection = ['ns-1', `${ NAMESPACE_FILTER_P_FULL_PREFIX }p-1`];
143
+
144
+ it('should create projectsOrNamespaces filter for a selection in a non-local cluster', () => {
145
+ const result = testNamespaceProjectFilters.handleSelectionFilter(selection, false);
146
+
147
+ expect(result.projectsOrNamespaces).toHaveLength(1);
148
+ const pnsFilter = result.projectsOrNamespaces[0] as PaginationParamProjectOrNamespace;
149
+
150
+ expect(pnsFilter.param).toBe('projectsornamespaces');
151
+ expect(pnsFilter.fields).toHaveLength(2);
152
+ expect(pnsFilter.fields).toContainEqual(expect.objectContaining({ value: 'ns-1' }));
153
+ expect(pnsFilter.fields).toContainEqual(expect.objectContaining({ value: 'p-1' }));
154
+ expect(result.filters).toStrictEqual([]);
155
+ });
156
+
157
+ it('should create projectsOrNamespaces and an exclusion filter for a selection in a local cluster', () => {
158
+ const result = testNamespaceProjectFilters.handleSelectionFilter(selection, true);
159
+
160
+ // projectsOrNamespaces part
161
+ expect(result.projectsOrNamespaces).toHaveLength(1);
162
+ const pnsFilter = result.projectsOrNamespaces[0] as PaginationParamProjectOrNamespace;
163
+
164
+ expect(pnsFilter.param).toBe('projectsornamespaces');
165
+ expect(pnsFilter.fields).toHaveLength(2);
166
+ expect(pnsFilter.fields).toContainEqual(expect.objectContaining({ value: 'ns-1' }));
167
+ expect(pnsFilter.fields).toContainEqual(expect.objectContaining({ value: 'p-1' }));
168
+
169
+ // filters part
170
+ expect(result.filters).toHaveLength(1);
171
+ const filter = result.filters[0] as PaginationParamFilter;
172
+
173
+ expect(filter.fields).toHaveLength(1);
174
+ expect(filter.fields).toContainEqual(expect.objectContaining({
175
+ field: 'metadata.namespace',
176
+ equality: '!=',
177
+ value: 'p-1',
178
+ }));
179
+ });
180
+
181
+ it('should handle selections with only namespaces in a local cluster', () => {
182
+ const nsSelection = ['ns-1', 'ns-2'];
183
+ const result = testNamespaceProjectFilters.handleSelectionFilter(nsSelection, true);
184
+
185
+ expect(result.projectsOrNamespaces).toHaveLength(1);
186
+ const pnsFilter = result.projectsOrNamespaces[0] as PaginationParamProjectOrNamespace;
187
+
188
+ expect(pnsFilter.fields).toHaveLength(2);
189
+ expect(pnsFilter.fields).toContainEqual(expect.objectContaining({ value: 'ns-1' }));
190
+ expect(pnsFilter.fields).toContainEqual(expect.objectContaining({ value: 'ns-2' }));
191
+ expect(result.filters).toStrictEqual([]);
192
+ });
193
+
194
+ it('should handle selections with only projects in a local cluster', () => {
195
+ const projectSelection = [`${ NAMESPACE_FILTER_P_FULL_PREFIX }p-1`, `${ NAMESPACE_FILTER_P_FULL_PREFIX }p-2`];
196
+ const result = testNamespaceProjectFilters.handleSelectionFilter(projectSelection, true);
197
+
198
+ expect(result.projectsOrNamespaces).toHaveLength(1);
199
+ const pnsFilter = result.projectsOrNamespaces[0] as PaginationParamProjectOrNamespace;
200
+
201
+ expect(pnsFilter.fields).toHaveLength(2);
202
+ expect(pnsFilter.fields).toContainEqual(expect.objectContaining({ value: 'p-1' }));
203
+ expect(pnsFilter.fields).toContainEqual(expect.objectContaining({ value: 'p-2' }));
204
+
205
+ expect(result.filters).toHaveLength(2);
206
+ expect(result.filters).toContainEqual(expect.objectContaining({
207
+ fields: [expect.objectContaining({
208
+ field: 'metadata.namespace',
209
+ equality: '!=',
210
+ value: 'p-1'
211
+ })],
212
+ }));
213
+ expect(result.filters).toContainEqual(expect.objectContaining({
214
+ fields: [expect.objectContaining({
215
+ field: 'metadata.namespace',
216
+ equality: '!=',
217
+ value: 'p-2'
218
+ })],
219
+ }));
220
+ });
221
+ });
222
+ });
223
+
224
+ class TestStevePaginationUtils {
225
+ public convertPaginationParams(args: any) {
226
+ return stevePaginationUtils.convertPaginationParams(args);
227
+ }
228
+ }
229
+
230
+ describe('class StevePaginationUtils', () => {
231
+ const testStevePaginationUtils = new TestStevePaginationUtils();
232
+ const schema = { id: 'pod' } as unknown as Schema;
233
+
234
+ it('should return an empty string for no filters', () => {
235
+ const result = testStevePaginationUtils.convertPaginationParams({ schema, filters: [] });
236
+
237
+ expect(result).toBe('');
238
+ });
239
+
240
+ it('should handle a single filter with a single field', () => {
241
+ const filters = [
242
+ new PaginationParamFilter({ fields: [new PaginationFilterField({ field: 'metadata.name', value: 'test' })] }),
243
+ ];
244
+ const result = testStevePaginationUtils.convertPaginationParams({ schema, filters });
245
+
246
+ expect(result).toBe('filter=metadata.name=test');
247
+ });
248
+
249
+ it('should handle a single filter with a single field with encoded char', () => {
250
+ const filters = [
251
+ new PaginationParamFilter({ fields: [new PaginationFilterField({ field: 'metadata.name', value: 'te/st' })] }),
252
+ ];
253
+ const result = testStevePaginationUtils.convertPaginationParams({ schema, filters });
254
+
255
+ expect(result).toBe('filter=metadata.name="te%2Fst"');
256
+ });
257
+
258
+ it('should handle a single filter with multiple fields (OR)', () => {
259
+ const filters = [
260
+ new PaginationParamFilter({
261
+ fields: [
262
+ new PaginationFilterField({ field: 'metadata.name', value: 'test1' }),
263
+ new PaginationFilterField({ field: 'metadata.namespace', value: 'ns1' }),
264
+ ],
265
+ }),
266
+ ];
267
+ const result = testStevePaginationUtils.convertPaginationParams({ schema, filters });
268
+
269
+ expect(result).toBe('filter=metadata.name=test1,metadata.namespace=ns1');
270
+ });
271
+
272
+ it('should handle multiple filters (AND)', () => {
273
+ const filters = [
274
+ new PaginationParamFilter({ fields: [new PaginationFilterField({ field: 'metadata.name', value: 'test1' })] }),
275
+ new PaginationParamFilter({ fields: [new PaginationFilterField({ field: 'metadata.namespace', value: 'ns1' })] }),
276
+ ];
277
+ const result = testStevePaginationUtils.convertPaginationParams({ schema, filters });
278
+
279
+ expect(result).toBe('filter=metadata.name=test1&filter=metadata.namespace=ns1');
280
+ });
281
+
282
+ it('should handle different equality operators', () => {
283
+ const filters = [
284
+ new PaginationParamFilter({
285
+ fields: [
286
+ new PaginationFilterField({
287
+ field: 'spec.containers.image',
288
+ value: 'nginx',
289
+ equality: PaginationFilterEquality.CONTAINS,
290
+ }),
291
+ ],
292
+ }),
293
+ new PaginationParamFilter({
294
+ fields: [
295
+ new PaginationFilterField({
296
+ field: 'metadata.name',
297
+ value: 'test',
298
+ equality: PaginationFilterEquality.NOT_EQUALS,
299
+ }),
300
+ ],
301
+ }),
302
+ ];
303
+ const result = testStevePaginationUtils.convertPaginationParams({ schema, filters });
304
+
305
+ expect(result).toBe('filter=spec.containers.image~nginx&filter=metadata.name!=test');
306
+ });
307
+
308
+ it('should handle IN and NOT_IN operators', () => {
309
+ const filters = [
310
+ new PaginationParamFilter({
311
+ fields: [
312
+ new PaginationFilterField({
313
+ field: 'metadata.name',
314
+ value: 'test1,test2',
315
+ equality: PaginationFilterEquality.IN,
316
+ }),
317
+ ],
318
+ }),
319
+ new PaginationParamFilter({
320
+ fields: [
321
+ new PaginationFilterField({
322
+ field: 'metadata.namespace',
323
+ value: 'ns1,ns2',
324
+ equality: PaginationFilterEquality.NOT_IN,
325
+ }),
326
+ ],
327
+ }),
328
+ ];
329
+ const result = testStevePaginationUtils.convertPaginationParams({ schema, filters });
330
+
331
+ expect(result).toBe('filter=metadata.name IN (test1,test2)&filter=metadata.namespace NOTIN (ns1,ns2)');
332
+ });
333
+ });
@@ -1,5 +1,7 @@
1
1
  import { ActionFindPageArgs } from '@shell/types/store/dashboard-store.types';
2
- import { PaginationParam, PaginationFilterField, PaginationParamProjectOrNamespace, PaginationParamFilter } from '@shell/types/store/pagination.types';
2
+ import {
3
+ PaginationParam, PaginationFilterField, PaginationParamProjectOrNamespace, PaginationParamFilter, PaginationFilterEquality
4
+ } from '@shell/types/store/pagination.types';
3
5
  import { NAMESPACE_FILTER_ALL_SYSTEM, NAMESPACE_FILTER_ALL_USER, NAMESPACE_FILTER_P_FULL_PREFIX } from '@shell/utils/namespace-filter';
4
6
  import ModelNamespace from '@shell/models/namespace';
5
7
  import { uniq } from '@shell/utils/array';
@@ -48,7 +50,7 @@ class NamespaceProjectFilters {
48
50
 
49
51
  // These are AND'd together
50
52
  // Not ns 1 AND ns 2
51
- return allNamespaces.reduce((res, ns) => {
53
+ const filterNamespaces = allNamespaces.reduce((res, ns) => {
52
54
  // Links to ns.isObscure and covers things like `c-`, `user-`, etc (see OBSCURE_NAMESPACE_PREFIX)
53
55
  const hideObscure = showReservedRancherNamespaces ? false : ns.isObscure;
54
56
 
@@ -56,13 +58,23 @@ class NamespaceProjectFilters {
56
58
  const hideSystem = productHidesSystemNamespaces ? ns.isSystem : false;
57
59
 
58
60
  if (hideObscure || hideSystem) {
59
- res.push(PaginationParamFilter.createSingleField({
60
- field: 'metadata.namespace', value: ns.name, equals: false
61
- }));
61
+ res.push(ns.name);
62
62
  }
63
63
 
64
64
  return res;
65
- }, [] as PaginationParamFilter[]);
65
+ }, [] as String[]);
66
+
67
+ if (filterNamespaces.length) {
68
+ return [new PaginationParamFilter({
69
+ fields: [{
70
+ value: filterNamespaces.join(','),
71
+ equality: PaginationFilterEquality.NOT_IN,
72
+ field: 'metadata.namespace',
73
+ }],
74
+ })];
75
+ }
76
+
77
+ return [];
66
78
  }
67
79
 
68
80
  /**
@@ -502,29 +514,36 @@ class StevePaginationUtils extends NamespaceProjectFilters {
502
514
  // Check if the API supports filtering by this field
503
515
  this.validateField(validateFields, schema, field.field);
504
516
 
505
- // we're just checking that the field exists, so there's no value
517
+ // we're just checking that the field exists, so there's no equality or value
506
518
  if (field.exists) {
507
519
  return field.field;
508
520
  }
509
- const encodedValue = encodeURIComponent(field.value || '');
510
521
 
511
- // = exact match (equals + exact)
512
- // ~ partial match (equals + !exact)
513
- // != not exact match (!equals + exact)
514
- // !~ not partial match (!equals + !exact)
515
- const operator = `${ field.equals ? '' : '!' }${ field.exact ? '=' : '~' }`;
522
+ // If field was created by PaginationFilterField ctor equality will be set. If field created by json (legacy) it might not
523
+ const equality = field.equality || PaginationFilterField.safeEquality(field);
524
+
525
+ if (!equality) {
526
+ throw new Error(`A pagination filter must contain an equality. ${ JSON.stringify(field) }`);
527
+ }
528
+
516
529
  let safeValue;
517
530
 
518
- if (StevePaginationUtils.VALID_FIELD_VALUE_REGEX.test(field.value || '')) {
519
- // Does not contain any protected characters, send as is
520
- safeValue = encodedValue;
531
+ if ([PaginationFilterEquality.IN, PaginationFilterEquality.NOT_IN].includes(equality)) {
532
+ safeValue = `(${ field.value })`;
521
533
  } else {
522
- // Contains protected characters, wrap in quotes to ensure backend doesn't fail
523
- // - replace reserver `"`/`%22` with empty string - see https://github.com/rancher/dashboard/issues/14549 for improvement
524
- safeValue = `"${ encodedValue.replaceAll('%22', '') }"`;
534
+ const encodedValue = encodeURIComponent(field.value || '');
535
+
536
+ if (StevePaginationUtils.VALID_FIELD_VALUE_REGEX.test(field.value || '')) {
537
+ // Does not contain any protected characters, send as is
538
+ safeValue = encodedValue;
539
+ } else {
540
+ // Contains protected characters, wrap in quotes to ensure backend doesn't fail
541
+ // - replace reserver `"`/`%22` with empty string - see https://github.com/rancher/dashboard/issues/14549 for improvement
542
+ safeValue = `"${ encodedValue.replaceAll('%22', '') }"`;
543
+ }
525
544
  }
526
545
 
527
- return `${ this.convertArrayPath(field.field) }${ operator }${ safeValue }`;
546
+ return `${ this.convertArrayPath(field.field) }${ equality }${ safeValue }`;
528
547
  }
529
548
 
530
549
  return field.value;
@@ -676,8 +695,8 @@ export const PAGINATION_SETTINGS_STORE_DEFAULTS: PaginationSettingsStores = {
676
695
  enableAll: false,
677
696
  enableSome: {
678
697
  enabled: [
679
- // { resource: CAPI.RANCHER_CLUSTER, context: ['home', 'side-bar'] },
680
- // { resource: MANAGEMENT.CLUSTER, context: ['side-bar'] },
698
+ { resource: CAPI.RANCHER_CLUSTER, context: ['side-bar'] },
699
+ { resource: MANAGEMENT.CLUSTER, context: ['side-bar'] },
681
700
  { resource: CATALOG.APP, context: ['branding'] },
682
701
  SECRET
683
702
  ],
@@ -888,16 +888,20 @@ const defaultActions = {
888
888
  }
889
889
  });
890
890
  }
891
-
892
891
  // Should any listeners be notified of this request for them to kick off their own event handling?
893
- getters.listenerManager.triggerEventListener({ event: STEVE_WATCH_MODE.RESOURCE_CHANGES, params });
892
+ getters.listenerManager.triggerEventListener({
893
+ event: STEVE_WATCH_MODE.RESOURCE_CHANGES,
894
+ params: {
895
+ ...params,
896
+ forceWatch: opt.forceWatch
897
+ }
898
+ });
894
899
  } else {
895
900
  have = getters['all'](resourceType).slice();
896
901
 
897
902
  if ( namespace ) {
898
903
  have = have.filter((x) => x.metadata?.namespace === namespace);
899
904
  }
900
-
901
905
  want = await dispatch('findAll', {
902
906
  type: resourceType,
903
907
  watchNamespace: namespace,
@@ -1181,12 +1185,16 @@ const defaultActions = {
1181
1185
  });
1182
1186
 
1183
1187
  if (hasEventListeners) {
1184
- // If there's event listeners always kick them off
1185
- // - The re-watch associated with normal watches will watch from a revision from it's own cache
1186
- // - The revision in that cache might be ahead of the state the listeners have, so the watch won't ping something for the listeners to trigger on
1187
- // - so to work around this whenever we start the watches again trigger off the changes for it
1188
- // Improvement - we only do one event here (currently the only one supported), could expand to others
1189
- getters.listenerManager.triggerEventListener({ event: STEVE_WATCH_EVENT_TYPES.CHANGES, params: obj });
1188
+ const inError = getters.inError(obj); // We don't want to force listeners to resync if the socket is in error (handled by resource.error mechanism)
1189
+
1190
+ if (!inError) {
1191
+ // If there's event listeners kick them off
1192
+ // - The re-watch associated with normal watches will watch from a revision from it's own cache
1193
+ // - The revision in that cache might be ahead of the state the listeners have, so the watch won't ping something for the listeners to trigger on
1194
+ // - so to work around this whenever we start the watches again trigger off the changes for it
1195
+ // Improvement - we only do one event here (currently the only one supported), could expand to others
1196
+ getters.listenerManager.triggerEventListener({ event: STEVE_WATCH_EVENT_TYPES.CHANGES, params: obj });
1197
+ }
1190
1198
  }
1191
1199
  }
1192
1200
  },
@@ -167,7 +167,7 @@ export class SteveWatchEventListenerManager {
167
167
 
168
168
  if (eventWatcher) {
169
169
  Object.values(eventWatcher.callbacks).forEach((cb) => {
170
- cb();
170
+ cb({ forceWatch: params.forceWatch }); // eslint-disable-line node/no-callback-literal
171
171
  });
172
172
  }
173
173
  }
@@ -176,7 +176,9 @@ export class SteveWatchEventListenerManager {
176
176
  const watch = this.getWatch({ params });
177
177
 
178
178
  watch.listeners.forEach((l) => {
179
- Object.values(l.callbacks || {}).forEach((cb) => cb());
179
+ Object.values(l.callbacks || {}).forEach((cb) => {
180
+ cb({ forceWatch: params.forceWatch });// eslint-disable-line node/no-callback-literal
181
+ });
180
182
  });
181
183
  }
182
184
 
@@ -445,7 +445,7 @@ $fontColor: var(--input-label);
445
445
  -ms-transform: rotate(0deg) scale(1);
446
446
  transform: rotate(0deg) scale(1);
447
447
  opacity:1;
448
- border: 1px solid var(--active, var(--primary));
448
+ border: 1px solid var(--checkbox-border, var(--primary));
449
449
  }
450
450
 
451
451
  // Custom Checkbox tick
@@ -1,7 +1,10 @@
1
1
  <script setup lang="ts">
2
2
  import { RcStatusBadgeProps } from './types';
3
+ import { useStatusColors } from '@components/utils/status';
3
4
 
4
5
  const props = defineProps<RcStatusBadgeProps>();
6
+
7
+ const { backgroundColor, borderColor, textColor } = useStatusColors(props, 'outlined');
5
8
  </script>
6
9
 
7
10
  <template>
@@ -27,39 +30,8 @@ const props = defineProps<RcStatusBadgeProps>();
27
30
  font-size: 12px;
28
31
  line-height: 19px;
29
32
 
30
- &.info {
31
- background-color: var(--rc-info-secondary);
32
- border-color: var(--rc-info-secondary);
33
- color: var(--rc-info);
34
- }
35
-
36
- &.success {
37
- background-color: var(--rc-success-secondary);
38
- border-color: var(--rc-success-secondary);
39
- color: var(--rc-success);
40
- }
41
-
42
- &.warning {
43
- background-color: var(--rc-warning);
44
- border-color: var(--rc-warning);
45
- color: var(--rc-warning-secondary);
46
- }
47
-
48
- &.error {
49
- background-color: var(--rc-error);
50
- border-color: var(--rc-error);
51
- color: var(--rc-error-secondary);
52
- }
53
-
54
- &.unknown {
55
- background-color: var(--rc-unknown);
56
- border-color: var(--rc-unknown);
57
- color: var(--rc-unknown-secondary);
58
- }
59
-
60
- &.none {
61
- border-color: var(--rc-none);
62
- color: var(--rc-none-secondary);
63
- }
33
+ background-color: v-bind(backgroundColor);
34
+ border-color: v-bind(borderColor);
35
+ color: v-bind(textColor);
64
36
  }
65
37
  </style>
@@ -1,2 +1 @@
1
1
  export { default } from './RcStatusBadge.vue';
2
- export type { Status } from '../types';
@@ -1,4 +1,4 @@
1
- import { Status } from '@components/Pill/types';
1
+ import { Status } from '@components/utils/status';
2
2
 
3
3
  export interface RcStatusBadgeProps {
4
4
  status: Status;
@@ -1,7 +1,10 @@
1
1
  <script setup lang="ts">
2
2
  import { RcStatusIndicatorProps } from './types';
3
+ import { useStatusColors } from '@components/utils/status';
3
4
 
4
5
  const props = defineProps<RcStatusIndicatorProps>();
6
+
7
+ const { backgroundColor, borderColor } = useStatusColors(props, 'solid');
5
8
  </script>
6
9
 
7
10
  <template>
@@ -42,34 +45,8 @@ const props = defineProps<RcStatusIndicatorProps>();
42
45
  border-radius: 2px;
43
46
  }
44
47
 
45
- &.info {
46
- background-color: var(--rc-info);
47
- border-color: var(--rc-info);
48
- }
49
-
50
- &.success {
51
- background-color: var(--rc-success);
52
- border-color: var(--rc-success);
53
- }
54
-
55
- &.warning {
56
- background-color: var(--rc-warning);
57
- border-color: var(--rc-warning);
58
- }
59
-
60
- &.error {
61
- background-color: var(--rc-error);
62
- border-color: var(--rc-error);
63
- }
64
-
65
- &.unknown {
66
- background-color: var(--rc-unknown);
67
- border-color: var(--rc-unknown);
68
- }
69
-
70
- &.none {
71
- border-color: var(--rc-none);
72
- }
48
+ background-color: v-bind(backgroundColor);
49
+ border-color: v-bind(borderColor);
73
50
  }
74
51
  }
75
52
  </style>
@@ -1,4 +1,5 @@
1
- import { Status } from '../types';
1
+ import { Status } from '@components/utils/status';
2
+
2
3
  export type Shape = 'disc' | 'horizontal-bar' | 'vertical-bar';
3
4
 
4
5
  export interface RcStatusIndicatorProps {
@@ -1,3 +1,2 @@
1
1
  export type Shape = 'disc' | 'horizontal-bar' | 'vertical-bar';
2
- export type Status = 'info' | 'success' | 'warning' | 'error' | 'unknown' | 'none';
3
2
  export type Type = 'active' | 'inactive';
@@ -36,6 +36,7 @@ const handleClick = (e: MouseEvent) => {
36
36
  @click.stop="handleClick"
37
37
  @keydown.enter.space="handleActivate"
38
38
  @keydown.up.down.prevent.stop="handleKeydown"
39
+ @mousedown.prevent="() => {/*We use this to prevent clicks from triggering the @focusin below. When we scroll on a click it prevents the action from occurring on the first click.*/}"
39
40
  @focusin="scrollIntoView"
40
41
  >
41
42
  <slot name="before">
@@ -22,6 +22,10 @@ defineProps({
22
22
  return [];
23
23
  }
24
24
  },
25
+ label: {
26
+ type: String,
27
+ default: ''
28
+ }
25
29
  });
26
30
  const emits = defineEmits(['click', 'select']);
27
31
 
@@ -55,7 +59,7 @@ const focusMenuItem = () => {
55
59
  <LabeledSelect
56
60
  ref="menuItemSelect"
57
61
  :value="modelValue"
58
- :label="t('wm.containerLogs.range.label')"
62
+ :label="label"
59
63
  :options="options"
60
64
  :clearable="false"
61
65
  placement="top"