@rancher/shell 3.0.8-rc.1 → 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 (323) 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/styles/base/_typography.scss +1 -0
  27. package/assets/styles/fonts/_fontstack.scss +53 -1
  28. package/assets/styles/global/_cards.scss +0 -3
  29. package/assets/styles/global/_layout.scss +21 -35
  30. package/assets/styles/themes/_dark.scss +1 -1
  31. package/assets/styles/themes/_light.scss +1 -1
  32. package/assets/styles/themes/_modern.scss +11 -3
  33. package/assets/styles/themes/_suse.scss +116 -24
  34. package/assets/translations/en-us.yaml +94 -10
  35. package/components/AutoscalerCard.vue +113 -0
  36. package/components/AutoscalerTab.vue +94 -0
  37. package/components/BackLink.vue +8 -0
  38. package/components/BannerGraphic.vue +36 -21
  39. package/components/BrandImage.vue +17 -6
  40. package/components/ClusterIconMenu.vue +1 -1
  41. package/components/ClusterProviderIcon.vue +1 -1
  42. package/components/Cron/CronExpressionEditor.vue +1 -1
  43. package/components/Cron/CronExpressionEditorModal.vue +1 -1
  44. package/components/Drawer/Chrome.vue +2 -6
  45. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +4 -9
  46. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +3 -8
  47. package/components/Drawer/ResourceDetailDrawer/composables.ts +3 -4
  48. package/components/Drawer/ResourceDetailDrawer/index.vue +4 -9
  49. package/components/Drawer/ResourceDetailDrawer/types.ts +17 -0
  50. package/components/Drawer/types.ts +3 -0
  51. package/components/DynamicContent/DynamicContentBanner.vue +102 -0
  52. package/components/DynamicContent/DynamicContentCloseButton.vue +42 -0
  53. package/components/DynamicContent/DynamicContentIcon.vue +132 -0
  54. package/components/DynamicContent/DynamicContentPanel.vue +112 -0
  55. package/components/DynamicContent/content.ts +78 -0
  56. package/components/EmberPage.vue +1 -1
  57. package/components/IconOrSvg.vue +2 -2
  58. package/components/PaginatedResourceTable.vue +2 -6
  59. package/components/PopoverCard.vue +192 -0
  60. package/components/Questions/__tests__/index.test.ts +159 -0
  61. package/components/Resource/Detail/CopyToClipboard.vue +4 -1
  62. package/components/Resource/Detail/FetchLoader/composables.ts +18 -4
  63. package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
  64. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +1 -1
  65. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +4 -0
  66. package/components/Resource/Detail/Metadata/KeyValueRow.vue +1 -1
  67. package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
  68. package/components/Resource/Detail/Metadata/composables.ts +9 -9
  69. package/components/Resource/Detail/Metadata/index.vue +3 -3
  70. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -19
  71. package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +0 -29
  72. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +132 -150
  73. package/components/Resource/Detail/ResourcePopover/index.vue +54 -159
  74. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +0 -2
  75. package/components/Resource/Detail/TitleBar/composables.ts +2 -1
  76. package/components/Resource/Detail/TitleBar/index.vue +10 -6
  77. package/components/Resource/Detail/composables.ts +12 -0
  78. package/components/ResourceDetail/Masthead/latest.vue +29 -0
  79. package/components/ResourceDetail/index.vue +4 -1
  80. package/components/ResourceList/Masthead.vue +1 -1
  81. package/components/SortableTable/index.vue +1 -0
  82. package/components/Tabbed/__tests__/index.test.ts +86 -0
  83. package/components/{nav/WindowManager → Window}/ContainerLogs.vue +1 -1
  84. package/components/{nav/WindowManager → Window}/ContainerLogsActions.vue +1 -0
  85. package/components/{nav/WindowManager → Window}/__tests__/ContainerLogs.test.ts +1 -1
  86. package/components/{nav/WindowManager → Window}/__tests__/ContainerShell.test.ts +2 -2
  87. package/components/__tests__/AutoscalerCard.test.ts +154 -0
  88. package/components/__tests__/AutoscalerTab.test.ts +125 -0
  89. package/components/__tests__/PopoverCard.test.ts +204 -0
  90. package/components/auth/SelectPrincipal.vue +24 -6
  91. package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
  92. package/components/formatter/Autoscaler.vue +97 -0
  93. package/components/formatter/InternalExternalIP.vue +198 -24
  94. package/components/formatter/__tests__/Autoscaler.test.ts +156 -0
  95. package/components/formatter/__tests__/InternalExternalIP.test.ts +133 -0
  96. package/components/google/util/__tests__/formatter.test.ts +47 -0
  97. package/components/google/util/formatter.ts +5 -2
  98. package/components/nav/Group.vue +12 -3
  99. package/components/nav/Header.vue +36 -16
  100. package/components/nav/NamespaceFilter.vue +13 -1
  101. package/components/nav/NotificationCenter/index.vue +2 -1
  102. package/components/nav/TopLevelMenu.helper.ts +16 -6
  103. package/components/nav/TopLevelMenu.vue +4 -2
  104. package/components/{DraggableZone.vue → nav/WindowManager/PinArea.vue} +47 -80
  105. package/components/nav/WindowManager/composables/useComponentsMount.ts +70 -0
  106. package/components/nav/WindowManager/composables/useDimensionsHandler.ts +105 -0
  107. package/components/nav/WindowManager/composables/useDragHandler.ts +99 -0
  108. package/components/nav/WindowManager/composables/usePanelHandler.ts +72 -0
  109. package/components/nav/WindowManager/composables/usePanelsHandler.ts +14 -0
  110. package/components/nav/WindowManager/composables/useResizeHandler.ts +167 -0
  111. package/components/nav/WindowManager/composables/useTabsHandler.ts +51 -0
  112. package/components/nav/WindowManager/constants.ts +23 -0
  113. package/components/nav/WindowManager/index.vue +61 -575
  114. package/components/nav/WindowManager/panels/HorizontalPanel.vue +265 -0
  115. package/components/nav/WindowManager/panels/TabBodyContainer.vue +39 -0
  116. package/components/nav/WindowManager/panels/VerticalPanel.vue +308 -0
  117. package/components/templates/default.vue +4 -40
  118. package/components/templates/home.vue +31 -5
  119. package/components/templates/plain.vue +30 -4
  120. package/components/templates/standalone.vue +1 -1
  121. package/composables/useI18n.ts +10 -1
  122. package/composables/useInterval.ts +15 -0
  123. package/config/__test__/uiplugins.test.ts +309 -0
  124. package/config/labels-annotations.js +9 -1
  125. package/config/product/explorer.js +3 -1
  126. package/config/product/manager.js +20 -9
  127. package/config/router/routes.js +10 -2
  128. package/config/settings.ts +2 -1
  129. package/config/store.js +4 -2
  130. package/config/table-headers.js +8 -0
  131. package/config/types.js +9 -0
  132. package/config/uiplugins.js +46 -2
  133. package/config/version.js +1 -1
  134. package/core/__test__/extension-manager-impl.test.js +236 -0
  135. package/core/extension-manager-impl.js +23 -6
  136. package/core/plugin-helpers.ts +2 -0
  137. package/core/types-provisioning.ts +4 -1
  138. package/detail/pod.vue +1 -0
  139. package/detail/provisioning.cattle.io.cluster.vue +13 -1
  140. package/dialog/DeveloperLoadExtensionDialog.vue +12 -3
  141. package/dialog/RollbackWorkloadDialog.vue +2 -5
  142. package/directives/ui-context.ts +103 -0
  143. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +2 -2
  144. package/edit/auth/__tests__/oidc.test.ts +26 -0
  145. package/edit/auth/github.vue +5 -0
  146. package/edit/auth/oidc.vue +5 -1
  147. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
  148. package/edit/cloudcredential.vue +1 -1
  149. package/edit/configmap.vue +1 -0
  150. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  151. package/edit/fleet.cattle.io.gitrepo.vue +0 -10
  152. package/edit/fleet.cattle.io.helmop.vue +6 -6
  153. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  154. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  155. package/edit/logging-flow/index.vue +1 -0
  156. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  157. package/edit/management.cattle.io.fleetworkspace.vue +1 -1
  158. package/edit/management.cattle.io.project.vue +1 -0
  159. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -1
  160. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +2 -1
  161. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  162. package/edit/monitoring.coreos.com.receiver/index.vue +2 -1
  163. package/edit/monitoring.coreos.com.route.vue +1 -1
  164. package/edit/namespace.vue +1 -0
  165. package/edit/networking.istio.io.destinationrule/index.vue +1 -0
  166. package/edit/networking.k8s.io.ingress/index.vue +1 -0
  167. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -0
  168. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -0
  169. package/edit/node.vue +1 -0
  170. package/edit/persistentvolume/index.vue +27 -22
  171. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +13 -14
  172. package/edit/persistentvolume/plugins/azureDisk.vue +49 -48
  173. package/edit/persistentvolume/plugins/azureFile.vue +15 -14
  174. package/edit/persistentvolume/plugins/cephfs.vue +15 -14
  175. package/edit/persistentvolume/plugins/cinder.vue +15 -14
  176. package/edit/persistentvolume/plugins/csi.vue +18 -16
  177. package/edit/persistentvolume/plugins/fc.vue +13 -14
  178. package/edit/persistentvolume/plugins/flexVolume.vue +15 -14
  179. package/edit/persistentvolume/plugins/flocker.vue +1 -3
  180. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +13 -14
  181. package/edit/persistentvolume/plugins/glusterfs.vue +15 -14
  182. package/edit/persistentvolume/plugins/hostPath.vue +40 -39
  183. package/edit/persistentvolume/plugins/iscsi.vue +13 -14
  184. package/edit/persistentvolume/plugins/local.vue +1 -3
  185. package/edit/persistentvolume/plugins/longhorn.vue +23 -22
  186. package/edit/persistentvolume/plugins/nfs.vue +15 -14
  187. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -14
  188. package/edit/persistentvolume/plugins/portworxVolume.vue +15 -14
  189. package/edit/persistentvolume/plugins/quobyte.vue +15 -14
  190. package/edit/persistentvolume/plugins/rbd.vue +15 -14
  191. package/edit/persistentvolume/plugins/scaleIO.vue +15 -14
  192. package/edit/persistentvolume/plugins/storageos.vue +15 -14
  193. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -3
  194. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +32 -5
  195. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +35 -0
  196. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +155 -0
  197. package/edit/provisioning.cattle.io.cluster/index.vue +25 -15
  198. package/edit/provisioning.cattle.io.cluster/rke2.vue +42 -8
  199. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +107 -5
  200. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +92 -4
  201. package/edit/secret/index.vue +1 -1
  202. package/edit/service.vue +9 -4
  203. package/edit/serviceaccount.vue +1 -0
  204. package/edit/storage.k8s.io.storageclass/index.vue +1 -0
  205. package/edit/workload/index.vue +2 -1
  206. package/edit/workload/mixins/workload.js +1 -1
  207. package/initialize/App.vue +4 -4
  208. package/initialize/install-directives.js +2 -0
  209. package/initialize/install-plugins.js +19 -2
  210. package/list/provisioning.cattle.io.cluster.vue +15 -2
  211. package/machine-config/amazonec2.vue +42 -135
  212. package/machine-config/components/EC2Networking.vue +490 -0
  213. package/machine-config/components/__tests__/EC2Networking.test.ts +148 -0
  214. package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +294 -0
  215. package/machine-config/digitalocean.vue +11 -0
  216. package/machine-config/google.vue +1 -1
  217. package/mixins/__tests__/brand.spec.ts +2 -2
  218. package/mixins/__tests__/chart.test.ts +21 -0
  219. package/mixins/brand.js +1 -7
  220. package/mixins/chart.js +7 -1
  221. package/mixins/create-edit-view/index.js +5 -0
  222. package/models/__tests__/chart.test.ts +33 -4
  223. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
  224. package/models/chart.js +25 -13
  225. package/models/cluster/node.js +13 -6
  226. package/models/cluster.x-k8s.io.machine.js +10 -20
  227. package/models/cluster.x-k8s.io.machinedeployment.js +5 -1
  228. package/models/management.cattle.io.cluster.js +21 -3
  229. package/models/management.cattle.io.kontainerdriver.js +1 -0
  230. package/models/provisioning.cattle.io.cluster.js +249 -33
  231. package/package.json +6 -5
  232. package/pages/auth/login.vue +38 -2
  233. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
  234. package/pages/c/_cluster/apps/charts/chart.vue +33 -15
  235. package/pages/c/_cluster/apps/charts/index.vue +11 -13
  236. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  237. package/pages/c/_cluster/explorer/index.vue +8 -6
  238. package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
  239. package/pages/c/_cluster/settings/brand.vue +1 -1
  240. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +7 -0
  241. package/pages/c/_cluster/uiplugins/catalogs.vue +147 -0
  242. package/pages/c/_cluster/uiplugins/index.vue +126 -184
  243. package/pages/home.vue +14 -4
  244. package/pkg/dynamic-importer.lib.js +4 -0
  245. package/plugins/dashboard-client-init.js +3 -0
  246. package/plugins/dashboard-store/getters.js +18 -1
  247. package/plugins/dashboard-store/resource-class.js +4 -4
  248. package/plugins/dynamic-content.js +13 -0
  249. package/plugins/i18n.js +8 -0
  250. package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
  251. package/plugins/steve/steve-pagination-utils.ts +39 -20
  252. package/plugins/steve/subscribe.js +17 -9
  253. package/plugins/subscribe-events.ts +4 -2
  254. package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
  255. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -34
  256. package/rancher-components/Pill/RcStatusBadge/index.ts +0 -1
  257. package/rancher-components/Pill/RcStatusBadge/types.ts +1 -1
  258. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +5 -28
  259. package/rancher-components/Pill/RcStatusIndicator/types.ts +2 -1
  260. package/rancher-components/Pill/types.ts +0 -1
  261. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -0
  262. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +5 -1
  263. package/rancher-components/RcIcon/RcIcon.test.ts +51 -0
  264. package/rancher-components/RcIcon/RcIcon.vue +46 -0
  265. package/rancher-components/RcIcon/index.ts +1 -0
  266. package/rancher-components/RcIcon/types.ts +160 -0
  267. package/rancher-components/utils/status.test.ts +67 -0
  268. package/rancher-components/utils/status.ts +77 -0
  269. package/scripts/typegen.sh +1 -0
  270. package/store/action-menu.js +8 -0
  271. package/store/auth.js +3 -3
  272. package/store/catalog.js +6 -0
  273. package/store/features.js +1 -0
  274. package/store/index.js +36 -17
  275. package/store/notifications.ts +51 -4
  276. package/store/plugins.js +7 -3
  277. package/store/prefs.js +6 -6
  278. package/store/type-map.js +3 -3
  279. package/store/ui-context.ts +86 -0
  280. package/store/wm.ts +244 -0
  281. package/types/notifications/index.ts +27 -3
  282. package/types/shell/index.d.ts +79 -4
  283. package/types/store/__tests__/pagination.types.spec.ts +137 -0
  284. package/types/store/pagination.types.ts +157 -9
  285. package/types/store/subscribe-events.types.ts +8 -1
  286. package/types/store/subscribe.types.ts +1 -0
  287. package/types/window-manager.ts +24 -0
  288. package/utils/__tests__/object.test.ts +19 -0
  289. package/utils/__tests__/provider.test.ts +98 -0
  290. package/utils/__tests__/selector-typed.test.ts +263 -0
  291. package/utils/__tests__/version.test.ts +19 -1
  292. package/utils/autoscaler-utils.ts +7 -0
  293. package/utils/back-off.ts +3 -3
  294. package/utils/brand.ts +29 -0
  295. package/utils/chart.js +18 -0
  296. package/utils/color.js +1 -1
  297. package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
  298. package/utils/dynamic-content/__tests__/info.test.ts +21 -9
  299. package/utils/dynamic-content/announcement.ts +142 -0
  300. package/utils/dynamic-content/example.json +40 -0
  301. package/utils/dynamic-content/index.ts +6 -2
  302. package/utils/dynamic-content/info.ts +44 -2
  303. package/utils/dynamic-content/new-release.ts +1 -1
  304. package/utils/dynamic-content/notification-handler.ts +48 -0
  305. package/utils/dynamic-content/types.d.ts +53 -1
  306. package/utils/dynamic-importer.js +2 -2
  307. package/utils/favicon.js +4 -4
  308. package/utils/object.js +20 -2
  309. package/utils/pagination-wrapper.ts +12 -8
  310. package/utils/provider.ts +14 -0
  311. package/utils/scroll.js +7 -0
  312. package/utils/selector-typed.ts +6 -2
  313. package/utils/settings.ts +15 -0
  314. package/utils/validators/machine-pool.ts +13 -3
  315. package/utils/version.js +15 -0
  316. package/assets/images/icons/document.svg +0 -3
  317. package/plugins/nuxt-client-init.js +0 -3
  318. package/store/wm.js +0 -95
  319. /package/components/{nav/WindowManager → Window}/ChartReadme.vue +0 -0
  320. /package/components/{nav/WindowManager → Window}/ContainerShell.vue +0 -0
  321. /package/components/{nav/WindowManager → Window}/KubectlShell.vue +0 -0
  322. /package/components/{nav/WindowManager → Window}/MachineSsh.vue +0 -0
  323. /package/components/{nav/WindowManager → Window}/Window.vue +0 -0
@@ -14,6 +14,7 @@ export enum NotificationLevel {
14
14
  Success, // eslint-disable-line no-unused-vars
15
15
  Warning, // eslint-disable-line no-unused-vars
16
16
  Error, // eslint-disable-line no-unused-vars
17
+ Hidden, // eslint-disable-line no-unused-vars
17
18
  }
18
19
 
19
20
  /**
@@ -29,7 +30,7 @@ export type NotificationAction = {
29
30
  * Defines the User Preference linked to a notification
30
31
  */
31
32
  export type NotificationPreference = {
32
- key: string; // User preference key to use when setting the preference when the notification is marked as read
33
+ key: string; // User preference key to use when setting the preference when the notification is marked as read/unread
33
34
  value: string; // User preference value to use when setting the preference when the notification is marked as read
34
35
  unsetValue?: string; // User preference value to use when setting the preference when the notification is marked as unread - defaults to empty string
35
36
  };
@@ -47,6 +48,13 @@ export type EncryptedNotification = {
47
48
  primaryAction?: NotificationAction;
48
49
  // Secondary to be shown in the notification (optional)
49
50
  secondaryAction?: NotificationAction;
51
+ // User Preference tied to the notification (optional) (the preference will be updated when the notification is marked read)
52
+ preference?: NotificationPreference;
53
+ // Handler to be associated with this notification that can invoke additional behaviour when the notification changes
54
+ // This is the name of the handler (the handlers are added as extensions). Notifications are persisted in the store, so can't use functions.
55
+ handlerName?: string;
56
+ // Additional data to be stored with the notification (optional)
57
+ data?: any;
50
58
  };
51
59
 
52
60
  /**
@@ -57,8 +65,6 @@ export type Notification = {
57
65
  id: string;
58
66
  // Progress (0-100) for notifications of type `Task` (optional)
59
67
  progress?: number;
60
- // User Preference tied to the notification (optional) (the preference will be updated when the notification is marked read)
61
- preference?: NotificationPreference;
62
68
  } & EncryptedNotification;
63
69
 
64
70
  /**
@@ -72,3 +78,21 @@ export type StoredNotification = {
72
78
  created: Date;
73
79
  read: Boolean;
74
80
  } & Notification;
81
+
82
+ /**
83
+ * Name to use when registering a custom notification handler
84
+ */
85
+ export const NotificationHandlerExtensionName = 'notification-handler';
86
+
87
+ /**
88
+ * Interface for notification handler
89
+ */
90
+ export interface NotificationHandler {
91
+ /**
92
+ * Called when a notification with this handler has its read status is updated (read or unread)
93
+ *
94
+ * @param notification Notification that was marked read or unread
95
+ * @param read Indicates whether the notification was updated to be read or unread
96
+ */
97
+ onReadUpdated(notification: Notification, read: boolean): void;
98
+ }
@@ -70,12 +70,16 @@ export namespace CAPI {
70
70
  let SECRET_AUTH: string;
71
71
  let SECRET_WILL_DELETE: string;
72
72
  let UI_CUSTOM_PROVIDER: string;
73
+ let AUTOSCALER_CLUSTER_PAUSE: string;
74
+ let AUTOSCALER_MACHINE_POOL_MIN_SIZE: string;
75
+ let AUTOSCALER_MACHINE_POOL_MAX_SIZE: string;
73
76
  }
74
77
  export namespace CATALOG {
75
78
  let CERTIFIED: string;
76
79
  let _RANCHER: string;
77
80
  let _PARTNER: string;
78
81
  let _OTHER: string;
82
+ let PRIME_ONLY: string;
79
83
  let EXPERIMENTAL: string;
80
84
  let NAMESPACE: string;
81
85
  let RELEASE_NAME: string;
@@ -2000,6 +2004,18 @@ export namespace PROJECT {
2000
2004
  let labelKey_124: string;
2001
2005
  export { labelKey_124 as labelKey };
2002
2006
  }
2007
+ export namespace AUTOSCALER_ENABLED {
2008
+ let name_128: string;
2009
+ export { name_128 as name };
2010
+ let labelKey_125: string;
2011
+ export { labelKey_125 as labelKey };
2012
+ let value_127: string;
2013
+ export { value_127 as value };
2014
+ let sort_116: string[];
2015
+ export { sort_116 as sort };
2016
+ let formatter_71: string;
2017
+ export { formatter_71 as formatter };
2018
+ }
2003
2019
  }
2004
2020
 
2005
2021
  // @shell/config/types
@@ -2191,6 +2207,12 @@ export namespace MANAGEMENT {
2191
2207
  export let CLUSTER_PROXY_CONFIG: string;
2192
2208
  export let OIDC_CLIENT: string;
2193
2209
  }
2210
+ export namespace BRAND {
2211
+ let SUSE: string;
2212
+ let CSP: string;
2213
+ let FEDERAL: string;
2214
+ let RGS: string;
2215
+ }
2194
2216
  export namespace EXT {
2195
2217
  let USER_ACTIVITY: string;
2196
2218
  }
@@ -2322,6 +2344,8 @@ export const ZERO_TIME: "0001-01-01T00:00:00Z";
2322
2344
  export const DEFAULT_GRAFANA_STORAGE_SIZE: "10Gi";
2323
2345
  export const DEPRECATED: "Deprecated";
2324
2346
  export const EXPERIMENTAL: "Experimental";
2347
+ export const AUTOSCALER_CONFIG_MAP_ID: "kube-system/cluster-autoscaler-status";
2348
+ export const HOSTED_PROVIDER: "hostedprovider";
2325
2349
  }
2326
2350
 
2327
2351
  // @shell/config/version
@@ -2336,7 +2360,7 @@ export function getVersionData(): {
2336
2360
  export function setVersionData(v: any): void;
2337
2361
  export function getKubeVersionData(): {};
2338
2362
  export function setKubeVersionData(v: any): void;
2339
- export const CURRENT_RANCHER_VERSION: "2.12";
2363
+ export const CURRENT_RANCHER_VERSION: "2.13";
2340
2364
  }
2341
2365
 
2342
2366
  // @shell/mixins/components/ResourceList/resource-list.config
@@ -2425,6 +2449,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2425
2449
  type: BooleanConstructor;
2426
2450
  default: any;
2427
2451
  };
2452
+ defaultTab: {
2453
+ type: StringConstructor;
2454
+ default: any;
2455
+ };
2428
2456
  }>, {}, {
2429
2457
  errors: any[];
2430
2458
  }, {
@@ -2482,6 +2510,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2482
2510
  type: BooleanConstructor;
2483
2511
  default: any;
2484
2512
  };
2513
+ defaultTab: {
2514
+ type: StringConstructor;
2515
+ default: any;
2516
+ };
2485
2517
  }>> & Readonly<{
2486
2518
  [x: `on${Capitalize<string>}`]: (...args: any[]) => any;
2487
2519
  }>, {
@@ -2492,6 +2524,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2492
2524
  liveValue: Record<string, any>;
2493
2525
  realMode: string;
2494
2526
  useTabbedHash: boolean;
2527
+ defaultTab: string;
2495
2528
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2496
2529
  export default _default;
2497
2530
  }
@@ -3298,7 +3331,7 @@ export default class Resource {
3298
3331
  weight: number;
3299
3332
  divider?: undefined;
3300
3333
  })[];
3301
- showConfiguration(returnFocusSelector: any): void;
3334
+ showConfiguration(returnFocusSelector: any, defaultTab: any): void;
3302
3335
  get _availableActions(): ({
3303
3336
  action: string;
3304
3337
  label: any;
@@ -3616,6 +3649,26 @@ export default class Resource {
3616
3649
  }
3617
3650
  }
3618
3651
 
3652
+ // @shell/plugins/i18n
3653
+
3654
+ declare module '@shell/plugins/i18n' {
3655
+ /**
3656
+ * @param {import('vuex').Store<any>} store
3657
+ * @param {string} key
3658
+ * @param {Record<string, any>} [args]
3659
+ * @param {boolean} [raw]
3660
+ * @param {boolean} [escapehtml]
3661
+ * @returns {string}
3662
+ */
3663
+ export function stringFor(store: import("vuex").Store<any>, key: string, args?: Record<string, any>, raw?: boolean, escapehtml?: boolean): string;
3664
+ export function directiveSsr(vnode: any, binding: any): void;
3665
+ export default i18n;
3666
+ declare namespace i18n {
3667
+ let name: string;
3668
+ function install(vueApp: any, _options: any): void;
3669
+ }
3670
+ }
3671
+
3619
3672
  // @shell/plugins/steve/hybrid-class
3620
3673
 
3621
3674
  declare module '@shell/plugins/steve/hybrid-class' {
@@ -3676,6 +3729,7 @@ export const UIEXTENSION: any;
3676
3729
  export const PROVISIONING_PRE_BOOTSTRAP: any;
3677
3730
  export const SCHEDULING_CUSTOMIZATION: any;
3678
3731
  export const SCC: any;
3732
+ export const AUTOSCALER: any;
3679
3733
  export namespace getters {
3680
3734
  function get(state: any, getters: any, rootState: any, rootGetters: any): (name: any) => any;
3681
3735
  }
@@ -3762,6 +3816,7 @@ export const SCALE_POOL_PROMPT: any;
3762
3816
  export const READ_NEW_RELEASE: any;
3763
3817
  export const READ_SUPPORT_NOTICE: any;
3764
3818
  export const READ_UPCOMING_SUPPORT_NOTICE: any;
3819
+ export const READ_ANNOUNCEMENTS: any;
3765
3820
  export function state(): {
3766
3821
  cookiesLoaded: boolean;
3767
3822
  data: {};
@@ -3931,6 +3986,19 @@ export function getIndividualBanners(store: any): {};
3931
3986
  export function overlayIndividualBanners(parsedBanner: any, banners: any): void;
3932
3987
  }
3933
3988
 
3989
+ // @shell/utils/chart
3990
+
3991
+ declare module '@shell/utils/chart' {
3992
+ /**
3993
+ * Get the latest chart version that is compatible with the cluster's OS and user's pre-release preference.
3994
+ * @param {Object} chart - The chart object.
3995
+ * @param {Array<string>} workerOSs - The list of worker OSs for the cluster.
3996
+ * @param {boolean} showPrerelease - Whether to include pre-release versions.
3997
+ * @returns {Object} The latest compatible chart version object.
3998
+ */
3999
+ export function getLatestCompatibleVersion(chart: any, workerOSs: Array<string>, showPrerelease: boolean): any;
4000
+ }
4001
+
3934
4002
  // @shell/utils/clipboard
3935
4003
 
3936
4004
  declare module '@shell/utils/clipboard' {
@@ -4051,7 +4119,7 @@ export function contrastColor(color: any, contrastOptions?: {
4051
4119
  dark: string;
4052
4120
  light: string;
4053
4121
  }): string;
4054
- export function parseColor(str: any): any;
4122
+ export function parseColor(str: any): import("color").ColorInstance;
4055
4123
  export function textColor(color: any): "black" | "white";
4056
4124
  export function hexToRgb(hex: any): {
4057
4125
  r: number;
@@ -4495,7 +4563,7 @@ export function isEmpty(obj: any): boolean;
4495
4563
  export function isSimpleKeyValue(obj: any): boolean;
4496
4564
  export function cleanUp(obj: any): any;
4497
4565
  export function definedKeys(obj: any): any;
4498
- export function diff(from: any, to: any): any;
4566
+ export function diff(from: any, to: any, preventNull?: boolean): any;
4499
4567
  export function changeset(from: any, to: any, parentPath?: any[]): {};
4500
4568
  export function changesetConflicts(a: any, b: any): any[];
4501
4569
  export function applyChangeset(obj: any, changeset: any): any;
@@ -4735,6 +4803,12 @@ export function routeRequiresAuthentication(to: any): boolean;
4735
4803
  export function routeRequiresInstallRedirect(to: any): boolean;
4736
4804
  }
4737
4805
 
4806
+ // @shell/utils/scroll
4807
+
4808
+ declare module '@shell/utils/scroll' {
4809
+ export function scrollToBottom(): void;
4810
+ }
4811
+
4738
4812
  // @shell/utils/select
4739
4813
 
4740
4814
  declare module '@shell/utils/select' {
@@ -5219,6 +5293,7 @@ export function parse(str: any): any;
5219
5293
  export function sortable(str: any): any;
5220
5294
  export function compare(in1: any, in2: any): any;
5221
5295
  export function isPrerelease(version?: string): boolean;
5296
+ export function isUpgradeFromPreToStable(currentVersion: any, targetVersion: any): any;
5222
5297
  export function isDevBuild(version: any): boolean;
5223
5298
  export function getVersionInfo(store: any): {
5224
5299
  displayVersion: any;
@@ -0,0 +1,137 @@
1
+ import { PaginationFilterEquality, PaginationFilterField } from '@shell/types/store/pagination.types';
2
+
3
+ describe('pagination-types', () => {
4
+ describe('class: PaginationFilterField', () => {
5
+ describe('constructor', () => {
6
+ it('should set properties correctly with default values', () => {
7
+ const field = 'testField';
8
+ const value = 'testValue';
9
+ const filterField = new PaginationFilterField({ field, value });
10
+
11
+ expect(filterField.field).toBe(field);
12
+ expect(filterField.value).toBe(value);
13
+ expect(filterField.equals).toBe(true);
14
+ expect(filterField.exact).toBe(true);
15
+ expect(filterField.exists).toBe(false);
16
+ expect(filterField.equality).toBe(PaginationFilterEquality.EQUALS);
17
+ });
18
+
19
+ it('should handle deprecated `equals` and `exact` to set `equality`', () => {
20
+ // equals: true, exact: true
21
+ let ff = new PaginationFilterField({
22
+ field: 'f', value: 'v', equals: true, exact: true
23
+ });
24
+
25
+ expect(ff.equality).toBe(PaginationFilterEquality.EQUALS);
26
+
27
+ // equals: true, exact: false
28
+ ff = new PaginationFilterField({
29
+ field: 'f', value: 'v', equals: true, exact: false
30
+ });
31
+ expect(ff.equality).toBe(PaginationFilterEquality.CONTAINS);
32
+
33
+ // equals: false, exact: true
34
+ ff = new PaginationFilterField({
35
+ field: 'f', value: 'v', equals: false, exact: true
36
+ });
37
+ expect(ff.equality).toBe(PaginationFilterEquality.NOT_EQUALS);
38
+
39
+ // equals: false, exact: false
40
+ ff = new PaginationFilterField({
41
+ field: 'f', value: 'v', equals: false, exact: false
42
+ });
43
+ expect(ff.equality).toBe(PaginationFilterEquality.NOT_CONTAINS);
44
+ });
45
+
46
+ it('should prioritize `equality` over `equals` and `exact`', () => {
47
+ const filterField = new PaginationFilterField({
48
+ field: 'f',
49
+ value: 'v',
50
+ equals: false,
51
+ exact: false,
52
+ equality: PaginationFilterEquality.GREATER_THAN
53
+ });
54
+
55
+ expect(filterField.equality).toBe(PaginationFilterEquality.GREATER_THAN);
56
+ });
57
+
58
+ it('should throw an error if no equality can be determined', () => {
59
+ expect(() => new PaginationFilterField({
60
+ field: 'f',
61
+ value: 'v',
62
+ equals: null,
63
+ exact: null
64
+ })).toThrow('A pagination filter must have either equals or equality set');
65
+ });
66
+
67
+ it('should set `exists` property', () => {
68
+ const filterField = new PaginationFilterField({ field: 'f', exists: true });
69
+
70
+ expect(filterField.exists).toBe(true);
71
+ });
72
+ });
73
+
74
+ describe('safeEquality', () => {
75
+ it('should return EQUALS for equals=true, exact=true', () => {
76
+ const equality = PaginationFilterField.safeEquality({ equals: true, exact: true });
77
+
78
+ expect(equality).toBe(PaginationFilterEquality.EQUALS);
79
+ });
80
+
81
+ it('should return CONTAINS for equals=true, exact=false', () => {
82
+ const equality = PaginationFilterField.safeEquality({ equals: true, exact: false });
83
+
84
+ expect(equality).toBe(PaginationFilterEquality.CONTAINS);
85
+ });
86
+
87
+ it('should return NOT_EQUALS for equals=false, exact=true', () => {
88
+ const equality = PaginationFilterField.safeEquality({ equals: false, exact: true });
89
+
90
+ expect(equality).toBe(PaginationFilterEquality.NOT_EQUALS);
91
+ });
92
+
93
+ it('should return NOT_CONTAINS for equals=false, exact=false', () => {
94
+ const equality = PaginationFilterField.safeEquality({ equals: false, exact: false });
95
+
96
+ expect(equality).toBe(PaginationFilterEquality.NOT_CONTAINS);
97
+ });
98
+
99
+ it('should return equality if it is provided', () => {
100
+ const equality = PaginationFilterField.safeEquality({ equality: PaginationFilterEquality.IN });
101
+
102
+ expect(equality).toBe(PaginationFilterEquality.IN);
103
+ });
104
+
105
+ it('should prioritize equality over equals/exact', () => {
106
+ const equality = PaginationFilterField.safeEquality({
107
+ equals: true,
108
+ exact: false,
109
+ equality: PaginationFilterEquality.LESS_THAN
110
+ });
111
+
112
+ expect(equality).toBe(PaginationFilterEquality.LESS_THAN);
113
+ });
114
+
115
+ it('should return undefined if no equality can be determined', () => {
116
+ const equality = PaginationFilterField.safeEquality({});
117
+
118
+ expect(equality).toBeUndefined();
119
+ });
120
+
121
+ it('should work with an instance of PaginationFilterField', () => {
122
+ const ff = new PaginationFilterField({
123
+ field: 'f',
124
+ value: 'v',
125
+ equals: false,
126
+ exact: false,
127
+ equality: PaginationFilterEquality.GREATER_THAN
128
+ });
129
+
130
+ // safeEquality will prioritize the `equality` property on the instance
131
+ const equality = PaginationFilterField.safeEquality(ff);
132
+
133
+ expect(equality).toBe(PaginationFilterEquality.GREATER_THAN);
134
+ });
135
+ });
136
+ });
137
+ });
@@ -13,6 +13,8 @@ import { KubeLabelSelector } from '@shell/types/kube/kube-api';
13
13
  // The two important / complex params are currently
14
14
  // - `filter` https://github.com/rancher/steve?tab=readme-ov-file#filter
15
15
  // - represented by `PaginationParamFilter extends PaginationParam`
16
+ // - a filter has filter fields which are made up of a field name, equality and value/s
17
+ // - filter=<field><equality><value>
16
18
  // - Examples
17
19
  // - filter=metadata.name=123
18
20
  // - filter=metadata.name=123,metadata.name=456 (name is 123 OR 456)
@@ -45,14 +47,111 @@ export interface PaginationSort {
45
47
  asc: boolean
46
48
  }
47
49
 
50
+ /**
51
+ * Equalities that can be used with a `filter` query param
52
+ *
53
+ * filter=<field><equality><values>
54
+ *
55
+ * For example
56
+ * - filter=a=b
57
+ * - filter=a!=b
58
+ * - filter=a NOT IN (b,c,d)
59
+ */
60
+ export const enum PaginationFilterEquality {
61
+ /**
62
+ * Field is in a collection of values
63
+ */
64
+ IN = ' IN ', // eslint-disable-line no-unused-vars
65
+ /**
66
+ * Field is not in a collection of values
67
+ */
68
+ NOT_IN = ' NOTIN ', // eslint-disable-line no-unused-vars
69
+ /**
70
+ * Field matches a value
71
+ */
72
+ EQUALS= '=', // eslint-disable-line no-unused-vars
73
+ /**
74
+ * Field does not match a value
75
+ */
76
+ NOT_EQUALS= '!=', // eslint-disable-line no-unused-vars
77
+ /**
78
+ * Unknown
79
+ */
80
+ STRICT_EQUALS = '==', // eslint-disable-line no-unused-vars
81
+ /**
82
+ * Field must partially match a value
83
+ */
84
+ CONTAINS= '~', // eslint-disable-line no-unused-vars
85
+ /**
86
+ * Field must not partially match a value
87
+ */
88
+ NOT_CONTAINS= '!~', // eslint-disable-line no-unused-vars
89
+ /**
90
+ * Field must be greater than a value
91
+ */
92
+ GREATER_THAN= 'gt', // eslint-disable-line no-unused-vars
93
+ /**
94
+ * Field must be less than a value
95
+ */
96
+ LESS_THAN= 'lt', // eslint-disable-line no-unused-vars
97
+ }
98
+
99
+ /**
100
+ * Ctor args for a @PaginationFilterField
101
+ */
102
+ type FilterFieldCtorArgs = {
103
+ /**
104
+ * Name of field within the object to filter by for example the x of x=y
105
+ *
106
+ * This can be optional for some (projectsornamespaces)
107
+ */
108
+ field?: string;
109
+ /**
110
+ * Value of field within the object to filter by for example the y of x=y
111
+ *
112
+ * This can be empty if `exists` is true
113
+ */
114
+ value?: string;
115
+ /**
116
+ * Equality field within the object to filter by for example the `=` or `!=` of x=y
117
+ *
118
+ * @deprecated Please use `equality` instead of equals and exact
119
+ */
120
+ equals?: boolean;
121
+ /**
122
+ * Match the field exactly. False for partial matches
123
+ *
124
+ * Value: pod1
125
+ * Exact: true. "p" no, "pod", no, "pod1" yes
126
+ * Exact: false. "p" yes, "pod", yes, "pod1" yes
127
+ *
128
+ * @deprecated Please use `equality` instead of equals and exact
129
+ */
130
+ exact?: boolean,
131
+ /**
132
+ * Check if the field/property exists, regardless of value
133
+ *
134
+ * If this is false it does not flip the expectation, just doesn't add the field
135
+ */
136
+ exists?: boolean,
137
+ /**
138
+ * Equality symbol used to compare the field with the value
139
+ */
140
+ equality?: PaginationFilterEquality
141
+ }
142
+
48
143
  /**
49
144
  * Filter the pagination result by these specific fields
50
145
  *
146
+ * In format of <field><equality><value>
147
+ *
51
148
  * For example
52
149
  *
53
150
  * - metadata.name=test
54
151
  * - metadata.namespace!=system
55
152
  *
153
+ * These are sub items for @PaginationParam, for example filter=<PaginationFilterField>
154
+ *
56
155
  * For more information regarding the API see https://github.com/rancher/steve?tab=readme-ov-file#query-parameters
57
156
  */
58
157
  export class PaginationFilterField {
@@ -70,6 +169,8 @@ export class PaginationFilterField {
70
169
  value?: string;
71
170
  /**
72
171
  * Equality field within the object to filter by for example the `=` or `!=` of x=y
172
+ *
173
+ * @deprecated Please use `equality` instead of equals and exact
73
174
  */
74
175
  equals?: boolean;
75
176
  /**
@@ -78,9 +179,14 @@ export class PaginationFilterField {
78
179
  * Value: pod1
79
180
  * Exact: true. "p" no, "pod", no, "pod1" yes
80
181
  * Exact: false. "p" yes, "pod", yes, "pod1" yes
182
+ *
183
+ * @deprecated Please use `equality` instead of equals and exact
81
184
  */
82
185
  exact?: boolean;
83
-
186
+ /**
187
+ * Equality symbol used to compare the field with the value
188
+ */
189
+ equality?: PaginationFilterEquality;
84
190
  /**
85
191
  * Check if the field/property exists, regardless of value
86
192
  *
@@ -88,17 +194,51 @@ export class PaginationFilterField {
88
194
  */
89
195
  exists?: boolean;
90
196
 
91
- constructor(
92
- {
93
- field, value = '', equals = true, exact = true, exists = false
94
- }:
95
- { field?: string; value?: string; equals?: boolean; exact?: boolean; exists?:boolean;}
96
- ) {
197
+ constructor(args: FilterFieldCtorArgs) {
198
+ const {
199
+ field, value = '', equals = true, exact = true, equality = undefined, exists = false
200
+ } = args;
201
+
97
202
  this.field = field;
98
203
  this.value = value;
99
204
  this.equals = equals;
100
205
  this.exact = exact;
101
206
  this.exists = exists;
207
+
208
+ const _equality = PaginationFilterField.safeEquality({
209
+ field, value, equals, exact, equality, exists
210
+ });
211
+
212
+ if (_equality) {
213
+ this.equality = _equality;
214
+ } else {
215
+ throw new Error('A pagination filter must have either equals or equality set');
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Determine equality for this field.
221
+ *
222
+ * Mainly to ensure legacy objects using deprecated fields instead of new equality field fall back on something sensible
223
+ */
224
+ static safeEquality(args: FilterFieldCtorArgs | PaginationFilterField): PaginationFilterEquality | undefined {
225
+ if (args.equality) {
226
+ return args.equality;
227
+ }
228
+
229
+ if (args.equals === true) {
230
+ if (args.exact === true) {
231
+ return PaginationFilterEquality.EQUALS;
232
+ } else {
233
+ return PaginationFilterEquality.CONTAINS;
234
+ }
235
+ } else if (args.equals === false) {
236
+ if (args.exact === true) {
237
+ return PaginationFilterEquality.NOT_EQUALS;
238
+ } else {
239
+ return PaginationFilterEquality.NOT_CONTAINS;
240
+ }
241
+ }
102
242
  }
103
243
  }
104
244
 
@@ -202,7 +342,15 @@ export abstract class PaginationParam {
202
342
  }
203
343
 
204
344
  /**
205
- * This is a convenience class for the `filter` param which works some magic, adds defaults and converts to the required PaginationParam format
345
+ * This is a convenience class for the `filter` param which works some magic, adds defaults and converts to the required PaginationParam format.
346
+ *
347
+ * for example
348
+ *
349
+ * - filter=???
350
+ *
351
+ * including `fields` this could be
352
+ *
353
+ * - filter=a=b
206
354
  *
207
355
  * See description for {@link PaginationParam} for how multiple of these can be combined together to AND or OR together
208
356
  *
@@ -238,7 +386,7 @@ export class PaginationParamFilter extends PaginationParam {
238
386
  /**
239
387
  * Convenience method when you just want an instance of {@link PaginationParamFilter} with a simple `filter=x=y` param
240
388
  */
241
- static createSingleField(field: { field?: string; value?: string; equals?: boolean; exact?: boolean, exists?: boolean }): PaginationParam {
389
+ static createSingleField(field: FilterFieldCtorArgs): PaginationParam {
242
390
  return new PaginationParamFilter({ fields: [new PaginationFilterField(field)] });
243
391
  }
244
392
 
@@ -12,10 +12,17 @@ export interface STEVE_WATCH_EVENT_PARAMS_COMMON {
12
12
  params: STEVE_WATCH_PARAMS,
13
13
  }
14
14
 
15
+ /**
16
+ * Args for @STEVE_WATCH_EVENT_LISTENER_CALLBACK
17
+ */
18
+ export type STEVE_WATCH_EVENT_LISTENER_CALLBACK_PARAMS = {
19
+ forceWatch?: boolean,
20
+ }
21
+
15
22
  /**
16
23
  * Executes when a watch event has a listener and it's triggered
17
24
  */
18
- export type STEVE_WATCH_EVENT_LISTENER_CALLBACK = () => void
25
+ export type STEVE_WATCH_EVENT_LISTENER_CALLBACK = (params: STEVE_WATCH_EVENT_LISTENER_CALLBACK_PARAMS) => void
19
26
 
20
27
  /**
21
28
  * Common params used when a watcher adds a listener to a watch
@@ -30,5 +30,6 @@ export interface STEVE_WATCH_PARAMS {
30
30
  namespace?: string,
31
31
  stop?: boolean,
32
32
  force?: boolean,
33
+ forceWatch?: boolean,
33
34
  mode?: STEVE_WATCH_MODE
34
35
  }
@@ -0,0 +1,24 @@
1
+ import { BOTTOM, CENTER, LEFT, RIGHT } from '@shell/utils/position';
2
+
3
+ // Defines the possible layouts where the window manager can be used.
4
+ export const enum Layout {
5
+ default = 'default', // eslint-disable-line no-unused-vars
6
+ home = 'home', // eslint-disable-line no-unused-vars
7
+ plain = 'plain', // eslint-disable-line no-unused-vars
8
+ }
9
+
10
+ export type Position = typeof BOTTOM | typeof LEFT | typeof RIGHT | typeof CENTER;
11
+
12
+ export interface Tab {
13
+ id: string,
14
+ icon: string,
15
+ label: string,
16
+ component?: string,
17
+ extensionId?: string,
18
+ position: Position,
19
+ layouts: Layout[],
20
+ showHeader: boolean,
21
+ containerHeight: number | null,
22
+ containerWidth: number | null,
23
+ attrs?: Record<string, any>,
24
+ }