@rancher/shell 3.0.5-rc.1 → 3.0.5-rc.3

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 (280) hide show
  1. package/assets/data/aws-regions.json +2 -0
  2. package/assets/images/providers/sks.svg +1 -0
  3. package/assets/styles/base/_helpers.scss +4 -0
  4. package/assets/styles/base/_variables.scss +1 -0
  5. package/assets/styles/global/_layout.scss +0 -1
  6. package/assets/translations/en-us.yaml +92 -34
  7. package/assets/translations/zh-hans.yaml +4 -13
  8. package/chart/monitoring/index.vue +4 -2
  9. package/components/ActionDropdownShell.vue +71 -0
  10. package/components/AppModal.vue +18 -4
  11. package/components/AsyncButton.vue +2 -0
  12. package/components/CodeMirror.vue +3 -3
  13. package/components/CommunityLinks.vue +3 -58
  14. package/components/CruResource.vue +109 -16
  15. package/components/ExplorerProjectsNamespaces.vue +19 -6
  16. package/components/FixedBanner.vue +19 -5
  17. package/components/GlobalRoleBindings.vue +5 -1
  18. package/components/GrowlManager.vue +1 -0
  19. package/components/LandingPagePreference.vue +2 -0
  20. package/components/LocaleSelector.vue +1 -1
  21. package/components/ModalManager.vue +55 -0
  22. package/components/PaginatedResourceTable.vue +7 -0
  23. package/components/PromptModal.vue +47 -8
  24. package/components/ResourceDetail/Masthead.vue +38 -13
  25. package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
  26. package/components/ResourceDetail/index.vue +47 -12
  27. package/components/ResourceList/index.vue +2 -1
  28. package/components/ResourceTable.vue +54 -19
  29. package/components/SideNav.vue +5 -1
  30. package/components/SlideInPanelManager.vue +125 -0
  31. package/components/SortableTable/THead.vue +5 -2
  32. package/components/SortableTable/actions.js +1 -1
  33. package/components/SortableTable/index.vue +54 -40
  34. package/components/SortableTable/paging.js +16 -19
  35. package/components/SortableTable/selection.js +1 -12
  36. package/components/Tabbed/index.vue +6 -0
  37. package/components/Wizard.vue +2 -2
  38. package/components/__tests__/AsyncButton.test.ts +39 -0
  39. package/components/__tests__/CruResource.test.ts +63 -0
  40. package/components/__tests__/ModalManager.spec.ts +176 -0
  41. package/components/__tests__/PromptModal.test.ts +146 -0
  42. package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
  43. package/components/auth/AuthBanner.vue +13 -11
  44. package/components/auth/Principal.vue +1 -0
  45. package/components/auth/login/ldap.vue +1 -1
  46. package/components/fleet/FleetResources.vue +21 -6
  47. package/components/form/ArrayList.vue +138 -118
  48. package/components/form/BannerSettings.vue +149 -85
  49. package/components/form/ColorInput.vue +35 -6
  50. package/components/form/EnvVars.vue +1 -0
  51. package/components/form/KeyValue.vue +10 -7
  52. package/components/form/LabeledSelect.vue +25 -23
  53. package/components/form/MatchExpressions.vue +9 -2
  54. package/components/form/NameNsDescription.vue +6 -2
  55. package/components/form/NotificationSettings.vue +15 -1
  56. package/components/form/Password.vue +1 -0
  57. package/components/form/Probe.vue +1 -0
  58. package/components/form/ResourceSelector.vue +26 -23
  59. package/components/form/ResourceTabs/index.vue +2 -1
  60. package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +15 -34
  61. package/components/form/SSHKnownHosts/index.vue +14 -11
  62. package/components/form/Select.vue +8 -15
  63. package/components/form/UnitInput.vue +13 -0
  64. package/components/form/ValueFromResource.vue +12 -12
  65. package/components/form/__tests__/ArrayList.test.ts +34 -2
  66. package/components/form/__tests__/ColorInput.test.ts +35 -0
  67. package/components/form/__tests__/KeyValue.test.ts +36 -0
  68. package/components/form/__tests__/LabeledSelect.test.ts +73 -0
  69. package/components/form/__tests__/SSHKnownHosts.test.ts +11 -2
  70. package/components/form/__tests__/Select.test.ts +34 -1
  71. package/components/form/__tests__/UnitInput.test.ts +23 -1
  72. package/components/formatter/ClusterLink.vue +5 -8
  73. package/components/formatter/Description.vue +30 -0
  74. package/components/formatter/__tests__/ClusterLink.test.ts +2 -32
  75. package/components/nav/Group.vue +12 -4
  76. package/components/nav/Header.vue +16 -43
  77. package/components/nav/NamespaceFilter.vue +134 -86
  78. package/components/nav/TopLevelMenu.vue +4 -5
  79. package/components/nav/WindowManager/ContainerLogs.vue +87 -61
  80. package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
  81. package/components/nav/WindowManager/index.vue +1 -0
  82. package/components/templates/default.vue +6 -3
  83. package/components/templates/home.vue +6 -0
  84. package/components/templates/plain.vue +6 -3
  85. package/composables/focusTrap.ts +12 -4
  86. package/config/product/explorer.js +16 -13
  87. package/config/product/manager.js +1 -28
  88. package/config/settings.ts +11 -13
  89. package/config/store.js +4 -0
  90. package/config/table-headers.js +7 -5
  91. package/config/uiplugins.js +5 -1
  92. package/core/types.ts +7 -6
  93. package/detail/catalog.cattle.io.app.vue +5 -1
  94. package/detail/fleet.cattle.io.bundle.vue +70 -6
  95. package/detail/fleet.cattle.io.gitrepo.vue +1 -1
  96. package/detail/namespace.vue +0 -3
  97. package/detail/node.vue +17 -13
  98. package/detail/provisioning.cattle.io.cluster.vue +85 -9
  99. package/detail/service.vue +0 -1
  100. package/detail/workload/index.vue +21 -34
  101. package/dialog/AddCustomBadgeDialog.vue +0 -1
  102. package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
  103. package/dialog/AssignToDialog.vue +176 -0
  104. package/dialog/ChangePasswordDialog.vue +106 -0
  105. package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
  106. package/dialog/DisableAuthProviderDialog.vue +101 -0
  107. package/dialog/DrainNode.vue +1 -1
  108. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
  109. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +83 -65
  110. package/dialog/FeatureFlagListDialog.vue +288 -0
  111. package/dialog/ForceMachineRemoveDialog.vue +1 -1
  112. package/{components/Import.vue → dialog/ImportDialog.vue} +0 -5
  113. package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
  114. package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -62
  115. package/dialog/MoveNamespaceDialog.vue +157 -0
  116. package/dialog/ScalePoolDownDialog.vue +1 -1
  117. package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
  118. package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
  119. package/dialog/WechatDialog.vue +57 -0
  120. package/edit/__tests__/service.test.ts +2 -1
  121. package/edit/auth/azuread.vue +1 -1
  122. package/edit/auth/github.vue +1 -1
  123. package/edit/auth/googleoauth.vue +1 -1
  124. package/edit/auth/ldap/index.vue +1 -1
  125. package/edit/auth/oidc.vue +1 -1
  126. package/edit/auth/saml.vue +1 -1
  127. package/edit/cloudcredential.vue +24 -10
  128. package/edit/management.cattle.io.user.vue +28 -3
  129. package/edit/namespace.vue +1 -4
  130. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -14
  131. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +57 -62
  132. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +3 -14
  133. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.test.ts +72 -41
  134. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/mock.json +17 -1
  135. package/edit/networking.k8s.io.networkpolicy/index.vue +18 -30
  136. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
  137. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -10
  138. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -8
  139. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
  140. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +66 -0
  141. package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
  142. package/edit/provisioning.cattle.io.cluster/index.vue +21 -73
  143. package/edit/provisioning.cattle.io.cluster/rke2.vue +24 -7
  144. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
  145. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +4 -1
  146. package/edit/service.vue +13 -28
  147. package/initialize/install-plugins.js +2 -1
  148. package/list/harvesterhci.io.management.cluster.vue +4 -1
  149. package/list/management.cattle.io.feature.vue +4 -288
  150. package/list/workload.vue +6 -1
  151. package/machine-config/azure.vue +16 -4
  152. package/mixins/resource-fetch-api-pagination.js +55 -43
  153. package/mixins/resource-fetch.js +14 -5
  154. package/mixins/vue-select-overrides.js +0 -4
  155. package/models/__tests__/workload.test.ts +1 -0
  156. package/models/cluster/node.js +1 -0
  157. package/models/cluster.js +32 -2
  158. package/models/fleet.cattle.io.cluster.js +8 -2
  159. package/models/fleet.cattle.io.gitrepo.js +8 -34
  160. package/models/management.cattle.io.cluster.js +0 -20
  161. package/models/management.cattle.io.feature.js +7 -1
  162. package/models/management.cattle.io.node.js +7 -22
  163. package/models/management.cattle.io.nodepool.js +12 -0
  164. package/models/namespace.js +12 -1
  165. package/models/provisioning.cattle.io.cluster.js +18 -64
  166. package/models/service.js +24 -9
  167. package/models/workload.js +70 -31
  168. package/package.json +1 -1
  169. package/pages/about.vue +13 -3
  170. package/pages/account/index.vue +12 -5
  171. package/pages/auth/login.vue +7 -4
  172. package/pages/auth/setup.vue +1 -0
  173. package/pages/auth/verify.vue +9 -7
  174. package/pages/c/_cluster/apps/charts/install.vue +25 -26
  175. package/pages/c/_cluster/auth/config/index.vue +10 -12
  176. package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
  177. package/pages/c/_cluster/explorer/index.vue +28 -15
  178. package/pages/c/_cluster/istio/index.vue +2 -2
  179. package/pages/c/_cluster/longhorn/index.vue +3 -3
  180. package/pages/c/_cluster/monitoring/index.vue +1 -1
  181. package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
  182. package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
  183. package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
  184. package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
  185. package/pages/c/_cluster/neuvector/index.vue +1 -1
  186. package/pages/c/_cluster/settings/banners.vue +60 -5
  187. package/pages/c/_cluster/settings/performance.vue +7 -26
  188. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
  189. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
  190. package/pages/c/_cluster/uiplugins/index.vue +98 -55
  191. package/pages/diagnostic.vue +12 -9
  192. package/pages/fail-whale.vue +8 -5
  193. package/pages/home.vue +11 -52
  194. package/pages/prefs.vue +7 -6
  195. package/plugins/clean-html.js +2 -0
  196. package/plugins/dashboard-store/__tests__/actions.test.ts +4 -1
  197. package/plugins/dashboard-store/actions.js +122 -21
  198. package/plugins/dashboard-store/getters.js +74 -3
  199. package/plugins/dashboard-store/mutations.js +10 -5
  200. package/plugins/dashboard-store/resource-class.js +23 -3
  201. package/plugins/internal-api/index.ts +37 -0
  202. package/plugins/internal-api/shared/base-api.ts +13 -0
  203. package/plugins/internal-api/shell/shell.api.ts +108 -0
  204. package/plugins/steve/__tests__/getters.test.ts +18 -11
  205. package/plugins/steve/__tests__/steve-class.test.ts +1 -0
  206. package/plugins/steve/actions.js +34 -24
  207. package/plugins/steve/getters.js +39 -10
  208. package/plugins/steve/steve-class.js +5 -0
  209. package/plugins/steve/steve-pagination-utils.ts +199 -37
  210. package/plugins/steve/worker/web-worker.advanced.js +3 -1
  211. package/public/index.html +1 -0
  212. package/rancher-components/Banner/Banner.test.ts +51 -3
  213. package/rancher-components/Banner/Banner.vue +28 -6
  214. package/rancher-components/Card/Card.vue +1 -1
  215. package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
  216. package/rancher-components/Form/Checkbox/Checkbox.vue +27 -3
  217. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +51 -0
  218. package/rancher-components/Form/LabeledInput/LabeledInput.vue +20 -2
  219. package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
  220. package/rancher-components/Form/Radio/RadioButton.vue +20 -4
  221. package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
  222. package/rancher-components/Form/Radio/RadioGroup.vue +75 -35
  223. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +17 -0
  224. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +26 -1
  225. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +10 -1
  226. package/rancher-components/RcButton/RcButton.vue +2 -1
  227. package/rancher-components/RcButton/types.ts +1 -0
  228. package/rancher-components/RcDropdown/RcDropdown.vue +17 -6
  229. package/rancher-components/RcDropdown/RcDropdownItem.vue +3 -56
  230. package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +68 -0
  231. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +92 -0
  232. package/rancher-components/RcDropdown/index.ts +2 -0
  233. package/rancher-components/RcDropdown/useDropdownItem.ts +63 -0
  234. package/scripts/extension/bundle +20 -0
  235. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
  236. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  237. package/scripts/extension/helmpatch +44 -31
  238. package/scripts/extension/publish +12 -13
  239. package/scripts/typegen.sh +2 -4
  240. package/store/action-menu.js +26 -56
  241. package/store/features.js +0 -1
  242. package/store/index.js +5 -0
  243. package/store/modal.ts +71 -0
  244. package/store/slideInPanel.ts +47 -0
  245. package/store/type-map.js +8 -1
  246. package/store/type-map.utils.ts +49 -6
  247. package/types/fleet.d.ts +1 -1
  248. package/types/global-vue.d.ts +5 -0
  249. package/types/internal-api/shell/growl.d.ts +25 -0
  250. package/types/internal-api/shell/modal.d.ts +77 -0
  251. package/types/internal-api/shell/slideIn.d.ts +15 -0
  252. package/types/kube/kube-api.ts +22 -0
  253. package/types/resources/fleet.d.ts +0 -14
  254. package/types/resources/settings.d.ts +0 -4
  255. package/types/shell/index.d.ts +375 -306
  256. package/types/store/dashboard-store.types.ts +24 -1
  257. package/types/store/pagination.types.ts +19 -2
  258. package/types/vue-shim.d.ts +4 -1
  259. package/utils/__mocks__/tabbable.js +13 -0
  260. package/utils/__tests__/object.test.ts +38 -4
  261. package/utils/cluster.js +24 -20
  262. package/utils/fleet.ts +15 -73
  263. package/utils/grafana.js +1 -0
  264. package/utils/object.js +36 -5
  265. package/utils/pagination-utils.ts +6 -2
  266. package/utils/perf-setting.utils.ts +28 -0
  267. package/utils/selector-typed.ts +205 -0
  268. package/utils/selector.js +29 -6
  269. package/utils/uiplugins.ts +10 -6
  270. package/utils/v-sphere.ts +5 -1
  271. package/utils/validators/formRules/__tests__/index.test.ts +10 -1
  272. package/utils/validators/formRules/index.ts +27 -3
  273. package/components/AssignTo.vue +0 -199
  274. package/components/DisableAuthProviderModal.vue +0 -115
  275. package/components/MoveModal.vue +0 -167
  276. package/components/PromptChangePassword.vue +0 -123
  277. package/components/fleet/FleetBundleResources.vue +0 -86
  278. package/components/formatter/RKETemplateName.vue +0 -37
  279. package/dialog/SaveAsRKETemplateDialog.vue +0 -139
  280. package/types/vue-shim.d +0 -20
@@ -11,6 +11,7 @@
11
11
  "ap-southeast-3",
12
12
  "ap-southeast-4",
13
13
  "ap-southeast-5",
14
+ "ap-southeast-7",
14
15
  "ca-central-1",
15
16
  "ca-west-1",
16
17
  "cn-north-1",
@@ -26,6 +27,7 @@
26
27
  "il-central-1",
27
28
  "me-central-1",
28
29
  "me-south-1",
30
+ "mx-central-1",
29
31
  "sa-east-1",
30
32
  "us-east-1",
31
33
  "us-east-2",
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 66 57" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round"><use xlink:href="#A" x=".5" y=".5"/><symbol id="A" overflow="visible"><path d="M32 0L0 55.426h4.44L32 7.963v7.8L9.033 55.426h4.593L32 23.733v7.962l-13.78 23.73h4.593L32 39.656v7.8l-4.593 7.962H64z" stroke="none" fill="#da291c" fill-rule="nonzero"/></symbol></svg>
@@ -131,6 +131,10 @@ $spacing-property-map: (
131
131
  color: var(--input-label);
132
132
  }
133
133
 
134
+ .text-no-break {
135
+ white-space: nowrap;
136
+ }
137
+
134
138
  .hide {
135
139
  display: none !important;
136
140
  }
@@ -8,6 +8,7 @@ $min-width: 75% !default;
8
8
  $input-height: 61px;
9
9
  $unlabeled-input-height: 40px;
10
10
  $unlabaled-select-padding: 3px 0;
11
+ $footer-height: 60px;
11
12
 
12
13
  $input-padding-lg: 18px;
13
14
  $input-padding-sm: 10px;
@@ -69,7 +69,6 @@ HEADER {
69
69
  display: grid;
70
70
  position: relative;
71
71
  flex: 1 1 auto;
72
- overflow-y: auto;
73
72
  min-height: 0px;
74
73
 
75
74
  &.dashboard-padding-left {
@@ -7,6 +7,9 @@ generic:
7
7
  userMenu: user menu
8
8
  actionMenu: action menu
9
9
  namespaceFilter: namespace filter menu
10
+ banners:
11
+ altCloseBanner: Close banner icon
12
+ bannerIcon: Banner icon
10
13
  filterNamespaces: filter namespaces
11
14
  clearSearch: clear search
12
15
  clearFilters: clear filters
@@ -129,8 +132,16 @@ generic:
129
132
  }
130
133
  basic: Basic
131
134
  ariaLabel:
132
- key: Key {index}
133
- value: Value {index}
135
+ keyValue: Key-Value input
136
+ key: Key for row {index}
137
+ value: Value for row {index}
138
+ remove: remove row {index}
139
+ addKeyValue: Add a new Key-Value row
140
+ readKeyValue: read Key-Values from file
141
+ genericAddRow: Add a new row
142
+ arrayList: Array list input
143
+ genericRow: row {index}
144
+
134
145
 
135
146
  locale:
136
147
  menu: Locale selector menu
@@ -144,6 +155,7 @@ nav:
144
155
  localClusterIcon: Local Cluster icon
145
156
  clusterProvIcon: Cluster {cluster} provider icon
146
157
  topLevelMenu: Main menu
158
+ sideNav: Secondary menu
147
159
  homePage: Home page navigation menu
148
160
  cluster: Cluster menu item
149
161
  harvesterCluster: Harvester cluster menu item
@@ -180,7 +192,6 @@ nav:
180
192
  restoreSnapshot: Restore Snapshot
181
193
  rotateCertificates: Rotate Certificates
182
194
  rotateEncryptionKeys: Rotate Encryption Keys
183
- saveAsRKETemplate: Save as RKE Template
184
195
  takeSnapshot: Take Snapshot
185
196
  seeAllClusters: See all clusters
186
197
  seeAllClustersCollapsed: See all
@@ -237,9 +248,10 @@ nav:
237
248
  clusters: clusters
238
249
  ariaLabel: Filter clusters on main menu
239
250
  resourceSearch:
240
- label: Resource Search
241
- toolTip: Resource Search {key}
242
- placeholder: Type to search for a resource...
251
+ label: Resource Type Search
252
+ prompt: Search for a Kubernetes Resource/Custom Resource type
253
+ toolTip: Resource Type Search {key}
254
+ placeholder: Type to search for a resource type...
243
255
  filteringDescription: Using this input will immediately filter the results in the list below
244
256
  header:
245
257
  setLoginPage: Set as login page
@@ -328,7 +340,7 @@ layouts:
328
340
  unauthenticated: unauthenticated layout
329
341
  logout: logout layout
330
342
  verify: verify layout
331
-
343
+
332
344
  windowmanager:
333
345
  closeTab: Close tab {tabId}
334
346
  about:
@@ -497,7 +509,7 @@ authConfig:
497
509
  4: 'Under Scopes for Google APIs, enable "email", "profile", and "openid".'
498
510
  5: 'Click on "Save".'
499
511
  topPrivateDomain: 'Top private domain of:'
500
- ariaLabel:
512
+ ariaLabel:
501
513
  hostname: Copy Hostname to clipboard
502
514
  serverUrl: Copy Server URL to clipboard
503
515
  2:
@@ -508,7 +520,7 @@ authConfig:
508
520
  3: 'Authorized redirect URIs:'
509
521
  4: 'Click "Create", and then click on the "Download JSON" button.'
510
522
  5: 'Upload the downloaded JSON file in the OAuth credentials box.'
511
- ariaLabel:
523
+ ariaLabel:
512
524
  serverUrlVerify: Copy Server Auth Verfication URL to clipboard
513
525
  3:
514
526
  title: 'Create Service Account credentials'
@@ -715,6 +727,8 @@ assignTo:
715
727
  workspace: Workspace
716
728
 
717
729
  asyncButton:
730
+ alt:
731
+ iconAlt: Async button icon
718
732
  apply:
719
733
  action: Apply
720
734
  success: Applied
@@ -871,13 +885,13 @@ asyncButton:
871
885
  success: Generated
872
886
  waiting: Generating&hellip;
873
887
 
874
- backupRestoreOperator:
888
+ backupRestoreOperator:
875
889
  backup:
876
890
  label: Resource Set
877
891
  description: The Resource Set determines which resources the backup-restore-operator collects in a backup
878
892
  enableEncryptionWarning: 'Enabling encryption is highly recommended when using <b><i>Full Rancher backup resource set</i></b>, otherwise sensitive information will be backed up as plain-text. <a target="_blank" rel="noopener noreferrer nofollow" href="https://ranchermanager.docs.rancher.com/reference-guides/backup-restore-configuration/backup-configuration#resourcesets">Read more</a>.'
879
893
  missingResourceSetWarning: The <b><i>{resourceSet}</i></b> resource set doesn't exist, it's possible it has been deleted. Please select a different option.
880
- resourceSetOptions:
894
+ resourceSetOptions:
881
895
  'rancher-resource-set-basic': 'Basic Rancher backup resource set'
882
896
  'rancher-resource-set-full': 'Full Rancher backup resource set'
883
897
  custom: Custom
@@ -1365,7 +1379,7 @@ cluster:
1365
1379
  registrationCommand:
1366
1380
  label: Registration Command
1367
1381
  linuxDetail: Run this command on each of the existing Linux machines you want to register.
1368
- windowsDetail: Run this command in PowerShell on each of the existing Windows machines you want to register.
1382
+ windowsDetail: Run this command in PowerShell on each of the existing Windows machines you want to register.
1369
1383
  windowsWorkersOnly: <b>Windows nodes can only be workers.</b>
1370
1384
  windowsNotReady: The cluster must be up and running with Linux etcd, control plane, and worker nodes before the registration command for adding Windows workers will display.<br /> <br /><b>Windows nodes can only be workers.</b>
1371
1385
  windowsWarning: Workload pods, including some deployed by Rancher charts, will be scheduled on both Linux and Windows nodes by default. Edit NodeSelector in the chart to direct them to be placed onto a compatible node.
@@ -1883,11 +1897,11 @@ cluster:
1883
1897
  subGroups:
1884
1898
  podAffinityAnti: Pod Affinity/Anti-Affinity
1885
1899
  nodeAffinity: Node Affinity
1886
- schedulingCustomization:
1900
+ schedulingCustomization:
1887
1901
  label: Prevent Rancher cluster agent pod eviction
1888
1902
  description: This ensures that the cluster agent pod is not evicted due to node pressure, resource constraints or scheduler policies.
1889
1903
  banner: This feature has been enabled with settings that are different from the global default settings.
1890
- innerCheckbox: Apply global settings for Priority Class and Pod Disruption Budget
1904
+ innerCheckbox: Apply global settings for Priority Class and Pod Disruption Budget
1891
1905
  banners:
1892
1906
  advanced: These are advanced configuration options. Generally, they should be left as-is.
1893
1907
  tolerations: Additional Pod Tolerations will be added to the default Tolerations applied by Rancher.
@@ -1934,9 +1948,8 @@ cluster:
1934
1948
  =1 { {pool_name}: The provided value for {fields} was not found in the list of expected values. This can happen with clusters provisioned outside of Rancher or when options for the provider have changed. }
1935
1949
  other { {pool_name}: The provided values for {fields} were not found in the list of expected values. This can happen with clusters provisioned outside of Rancher or when options for the provider have changed. }
1936
1950
  }
1937
- rke1DeprecationMessage: 'Rancher Kubernetes Engine (RKE / RKE1) will reach end of life on July 31, 2025. Rancher 2.12.0 and later will no longer support provisioning or managing downstream RKE1 clusters. We recommend replatforming RKE1 clusters to RKE2 to ensure continued support and security updates. Learn more about the transition <a href="https://www.suse.com/support/kb/doc/?id=000021518" target="_blank" rel="noopener noreferrer nofollow">here</a>.'
1938
- rke1DeprecationShortMessage: Rancher Kubernetes Engine (RKE / RKE1) will reach end of life on July 31, 2025. Rancher 2.12.0 and later will no longer support provisioning or managing downstream RKE1 clusters.
1939
- rkeTemplateUpgrade: Template revision {name} available for upgrade
1951
+ rke1DeprecationMessage: 'Rancher Kubernetes Engine (RKE / RKE1) has reached end of life and these clusters are no longer supported. We recommend replatforming RKE1 clusters to RKE2 to ensure continued support and security updates. Learn more about the transition <a href="https://www.suse.com/support/kb/doc/?id=000021518" target="_blank" rel="noopener noreferrer nofollow">here</a>.'
1952
+ rke1Unsupported: RKE1 Clusters are no longer supported
1940
1953
  cloudCredentials:
1941
1954
  renew: Renew Cloud Credentials
1942
1955
  expired: Cloud Credential expired, please Renew Cloud Credentials
@@ -2056,6 +2069,7 @@ cluster:
2056
2069
  docker: Docker
2057
2070
  eks: Amazon EKS
2058
2071
  exoscale: Exoscale
2072
+ sks: Exoscale SKS
2059
2073
  gcp: Google
2060
2074
  google: Google GCE
2061
2075
  googlegke: Google GKE
@@ -2214,7 +2228,7 @@ cluster:
2214
2228
  snapshotScheduleCron:
2215
2229
  label: Cron Schedule
2216
2230
  snapshotRetention:
2217
- label: Snapshot retention count
2231
+ label: Snapshot retention count
2218
2232
  tooltip: Each backup records 1 snapshot per etcd node. If you specify 3 snapshots and you have 3 etcd nodes you will only retain 1 full backup.
2219
2233
  exportMetric:
2220
2234
  label: Metrics
@@ -3206,8 +3220,6 @@ landing:
3206
3220
  title: Commercial Support
3207
3221
  body: Learn about commercial support
3208
3222
  landingPrefs:
3209
- title: You can change what you see when you login via preferences
3210
- userPrefs: Preferences
3211
3223
  body: "You can change where you land when you login"
3212
3224
  ariaLabelTakeMeToCluster: Select which cluster to take me to after login
3213
3225
  options:
@@ -3905,6 +3917,7 @@ nameNsDescription:
3905
3917
  placeholder: Any text you want that better describes this resource
3906
3918
 
3907
3919
  namespace:
3920
+ cancelCreateAriaLabel: Cancel create namespace
3908
3921
  containerResourceLimit: Container Resource Limit
3909
3922
  resourceQuotas: Resource Quotas
3910
3923
  project:
@@ -3943,6 +3956,10 @@ namespaceFilter:
3943
3956
  one {1 item selected}
3944
3957
  other {{total} items selected}
3945
3958
  }
3959
+ input: Filter namespace options
3960
+ button:
3961
+ clear: Remove applied namespace filters
3962
+ clearFilter: Clear namespace options filter
3946
3963
 
3947
3964
  namespaceList:
3948
3965
  selectLabel: Namespace
@@ -4743,6 +4760,7 @@ prefs:
4743
4760
  allNamespaces: Show dynamic Namespaces managed by Rancher (not intended for editing or deletion)
4744
4761
  themeShortcut: Enable Dark/Light Theme keyboard shortcut toggle (shift+T)
4745
4762
  pluginDeveloper: Enable Extension developer features
4763
+ pluginDeveloperTooltip: Enables the ability to perform a developer load of UI extensions
4746
4764
  hideDesc:
4747
4765
  label: Hide Type Description banners above resource lists
4748
4766
  helm:
@@ -4759,6 +4777,8 @@ principal:
4759
4777
  name: Name
4760
4778
  loginName: Username
4761
4779
  type: Type
4780
+ alt:
4781
+ avatar: User avatar image
4762
4782
 
4763
4783
  probe:
4764
4784
  checkInterval:
@@ -4971,12 +4991,6 @@ promptRollback:
4971
4991
  multipleWorkloadError: "Only one workload can be rolled back at a time."
4972
4992
  singleRevisionBanner: There are no revisions to roll back to.
4973
4993
 
4974
- promptSaveAsRKETemplate:
4975
- title: Convert {cluster} to new RKE Template
4976
- name: Cluster Template Name
4977
- description: Create a new RKE cluster template and initial revision from the current cluster configuration.
4978
- warning: This will modify the cluster, setting it up to use the newly created cluster template and revision. This can not be undone.
4979
-
4980
4994
  promptRotateEncryptionKey:
4981
4995
  title: Rotate Encryption Keys
4982
4996
  description: The last backup {name} was performed on {date}
@@ -5138,6 +5152,8 @@ rbac:
5138
5152
  label: Login Access
5139
5153
  clustertemplaterevisions-create:
5140
5154
  label: Create RKE Template Revisions
5155
+ errors:
5156
+ escalation: You cannot assign Global Permissions that are higher than your own. Please verify the permissions you are attempting to assign.
5141
5157
 
5142
5158
  resourceDetail:
5143
5159
  detailTop:
@@ -5214,6 +5230,7 @@ resourceTable:
5214
5230
  role: Group by Role
5215
5231
  cluster: Group by Cluster
5216
5232
  device: Group by Device
5233
+ pool: Group by Pool
5217
5234
  groupLabel:
5218
5235
  cluster: "<span>Cluster:</span> {name}"
5219
5236
  notInACluster: Not in a Cluster
@@ -7571,6 +7588,9 @@ typeLabel:
7571
7588
  }
7572
7589
 
7573
7590
  action:
7591
+ ariaLabel:
7592
+ hidePass: Hide {area}
7593
+ showPass: Reveal {area}
7574
7594
  clone: Clone
7575
7595
  disable: Disable
7576
7596
  download: Download YAML
@@ -7810,21 +7830,18 @@ performance:
7810
7830
  authUserTTL: This timeout cannot be higher than the user session timeout auth-user-session-ttl-minutes, which is currently {current} minutes.
7811
7831
  serverPagination:
7812
7832
  label: Server-side Pagination
7813
- description: By default Lists will fetch all resources and paginate in the browser (create the page given sorting and filtering settings). Change this setting to enable pagination server-side. This should help the responsiveness of the UI in systems with a lot of resources.
7814
- checkboxLabel: Enable Server-side Pagination
7833
+ description: By default Lists will fetch all resources and paginate (create the page given sort and filter settings) locally in the browser. Server-Side Pagination moves this out from the browser to the server. This improves performance of the UI, especially in systems with lots of resources.
7815
7834
  applicable: "Server-side pagination applies to Resource Types"
7816
- incompatibleDescription: "Server-side Pagination is incompatible with Manual Refresh and Incremental Loading. Enabling this will disable them."
7817
- featureFlag: The&nbsp;<a href="{ffUrl}">Feature Flag</a>&nbsp;`ui-sql-cache` must be enabled to use this feature
7835
+ featureFlag: Enabling/Disabling <i class="mr-5">"Server-side Pagination"</i> is now solely done so via the <i class="mr-5">ui-sql-cache</i>&nbsp;<a href="{ffUrl}">Feature Flag</a>
7818
7836
  resources:
7819
7837
  generic: most resources in the cluster's 'More Resources' section
7820
7838
  all: All Resources
7821
- experimental: This setting is experimental and may be removed or updated in future versions. We do not recommend enabling this setting in production environments.
7822
7839
  banner:
7823
7840
  label: Fixed Banners
7824
7841
  settingName: Banners
7825
- headerBanner: Header Banner
7826
- footerBanner: Footer Banner
7827
- loginScreenBanner: Login Screen Banner
7842
+ bannerHeader: Header Banner
7843
+ bannerFooter: Footer Banner
7844
+ bannerConsent: Login Screen Banner
7828
7845
  text: Text
7829
7846
  buttonText: Accept Button Text
7830
7847
  textColor: Text Color
@@ -7851,6 +7868,12 @@ banner:
7851
7868
  consent: Consent Banner
7852
7869
  consentFootnote: "Tip: Use \\n character for line break"
7853
7870
  individualSetting: 'This banner is managed by the setting "{name}" and can not be modified in the UI'
7871
+ type:
7872
+ html: HTML
7873
+ text: Text
7874
+ htmlWarning: 'Not all HTML elements or attriutes are permitted and the HTML entered here will be sanitized before display. For HTML anchor elements, it is recommended to use the target attribute to have links open in a blank tab.'
7875
+ htmlContent: HTML Content
7876
+ toggleTextHtml: Toggle between text and html
7854
7877
 
7855
7878
  branding:
7856
7879
  label: Branding
@@ -8151,3 +8174,38 @@ gitPicker:
8151
8174
  networkAttachmentDefinition:
8152
8175
  tabs:
8153
8176
  config: Config
8177
+
8178
+ errors:
8179
+ actionNotAvailable: This action is not currently available
8180
+ missingRequired: is required
8181
+ notUnique: is not unique
8182
+ notNullable: must be set
8183
+ invalidOption: is not a valid option
8184
+ invalidCharacters: contains invalid characters
8185
+ minLengthExceeded: is not long enough
8186
+ maxLengthExceeded: is too long
8187
+ minLimitExceeded: is too small
8188
+ maxLimitExceded: is too big
8189
+ messageAndDetail: '{message} ({detail})'
8190
+ messageOrDetail: '{val}'
8191
+ failedInApi:
8192
+ withName:
8193
+ withCodeExplanation:
8194
+ withMessageDetail: 'Validation failed in API: {name} {codeExplanation}: {messageDetail}'
8195
+ withoutMessageDetail: 'Validation failed in API: {name} {codeExplanation}'
8196
+ withMessageDetail: 'Validation failed in API: {name} {messageDetail}'
8197
+ withoutAnythingElse: 'Validation failed in API: {name} '
8198
+ withoutName:
8199
+ withMessageDetail:
8200
+ withCodeExplanation: 'Validation failed in API: {codeExplanation}: {messageDetail}'
8201
+ withoutCodeExplanation: 'Validation failed in API: {messageDetail}'
8202
+ withCode:
8203
+ withCodeExplanation: 'Validation failed in API: {code} {codeExplanation}'
8204
+ withoutCodeExplanation: 'Validation failed in API: {code}'
8205
+ withoutAnything: Validation failed in API.
8206
+ notFound:
8207
+ withUrl: '{msg}: {url}'
8208
+ withoutUrl: '{msg}'
8209
+
8210
+
8211
+
@@ -137,7 +137,6 @@ nav:
137
137
  restoreSnapshot: 还原快照
138
138
  rotateCertificates: 轮换证书
139
139
  rotateEncryptionKeys: 轮换加密密钥
140
- saveAsRKETemplate: 保存为 RKE 模板
141
140
  takeSnapshot: 拍摄快照
142
141
  group:
143
142
  cluster: 集群
@@ -1669,7 +1668,6 @@ cluster:
1669
1668
  rke2-k3-reprovisioning: '更改集群配置可能导致节点重新配置。详情请参见 <a target="blank" href="{docsBase}/how-to-guides/new-user-guides/launch-kubernetes-with-rancher/rke1-vs-rke2-differences#cluster-api" target="_blank" rel="noopener nofollow">文档</a>。'
1670
1669
  desiredNodeGroupWarning: 没有可用于运行 Cluster Agent 的节点。要让集群变为 Active 状态,至少需要有 1 个可用的节点。
1671
1670
  haveArgInfo: 所选 Kubernetes 版本的配置信息不可用。此屏幕中可用的选项将受到限制,你可能需要使用 YAML 编辑器。
1672
- rkeTemplateUpgrade: 模板修订版 {name} 可用于升级
1673
1671
 
1674
1672
  availabilityWarnings:
1675
1673
  node: 节点 {name} 处于非活动状态
@@ -1773,6 +1771,7 @@ cluster:
1773
1771
  docker: Docker
1774
1772
  eks: Amazon EKS
1775
1773
  exoscale: Exoscale
1774
+ sks: Exoscale SKS
1776
1775
  gcp: Google
1777
1776
  google: Google GCE
1778
1777
  googlegke: Google GKE
@@ -2730,8 +2729,6 @@ landing:
2730
2729
  title: 商业支持
2731
2730
  body: 了解商业支持
2732
2731
  landingPrefs:
2733
- title: 更改登录后显示的页面:
2734
- userPrefs: 偏好设置
2735
2732
  body: "登录后显示:"
2736
2733
  options:
2737
2734
  homePage: 主页
@@ -4446,12 +4443,6 @@ promptRollback:
4446
4443
  multipleWorkloadError: "一次只能回滚一个工作负载。"
4447
4444
  singleRevisionBanner: 没有可用于回滚的修订版本。
4448
4445
 
4449
- promptSaveAsRKETemplate:
4450
- title: 将 {cluster} 转换为新的 RKE 模板
4451
- name: 集群模板名称
4452
- description: 创建新的集群模板,并使用当前集群配置发起修改。
4453
- warning: 此操作将对集群进行修改,即把新创建的集群模板和修改应用到集群中。此操作不能撤销。
4454
-
4455
4446
  promptRotateEncryptionKey:
4456
4447
  title: 轮换加密密钥
4457
4448
  description: 上次备份 {name} 的备份时间为 {date}
@@ -7131,9 +7122,9 @@ performance:
7131
7122
  banner:
7132
7123
  label: 固定横幅
7133
7124
  settingName: 横幅
7134
- headerBanner: 标题横幅
7135
- footerBanner: 页脚横幅
7136
- loginScreenBanner: 登录屏幕横幅
7125
+ bannerHeader: 标题横幅
7126
+ bannerFooter: 页脚横幅
7127
+ bannerConsent: 登录屏幕横幅
7137
7128
  text: 文本
7138
7129
  buttonText: 同意按钮文本
7139
7130
  textColor: 文本颜色
@@ -55,7 +55,7 @@ export default {
55
55
  async fetch() {
56
56
  const { $store } = this;
57
57
 
58
- // Fetch all the resources required for all the tabs asyncronously up front
58
+ // Fetch all the resources required for all the tabs asynchronously up front
59
59
  const hashPromises = {
60
60
  namespaces: $store.getters['namespaces'](),
61
61
  pvcs: $store.dispatch('cluster/findAll', { type: PVC }),
@@ -72,7 +72,9 @@ export default {
72
72
  const { existing = false } = this.$attrs;
73
73
 
74
74
  // If needed, fetch all the workloads that have prometheus operator like containers
75
- this.workloadTypes = !existing ? Object.values(WORKLOAD_TYPES) : [];
75
+ const { CRON_JOB, ...validWorkloads } = WORKLOAD_TYPES;
76
+
77
+ this.workloadTypes = !existing ? Object.values(validWorkloads) : [];
76
78
 
77
79
  this.workloadTypes.forEach((type) => {
78
80
  // We'll use a filter to fetch the results. Atm there's no neat way to differentiate between ALL results and JUST filtered
@@ -0,0 +1,71 @@
1
+ <script setup lang="ts">
2
+ import { RcDropdown, RcDropdownTrigger, RcDropdownItem } from '@components/RcDropdown';
3
+ type HiddenAction = {
4
+ action: string;
5
+ enabled: boolean;
6
+ icon: string;
7
+ label: string;
8
+ bulkable: boolean;
9
+ bulkAction: string;
10
+ allEnabled: boolean;
11
+ anyEnabled: boolean;
12
+ }
13
+
14
+ defineProps<{
15
+ disabled: boolean,
16
+ hiddenActions: HiddenAction[],
17
+ actionTooltip: unknown,
18
+ }>();
19
+
20
+ const emit = defineEmits(['click', 'mouseover', 'mouseleave']);
21
+
22
+ const applyTableAction = (act: HiddenAction, args: unknown, event: Event) => {
23
+ emit('click', act, args, event);
24
+ };
25
+
26
+ const setBulkActionOfInterest = (act: HiddenAction | null, event: 'mouseover' | 'mouseleave' = 'mouseover') => {
27
+ emit(event, act);
28
+ };
29
+ </script>
30
+
31
+ <template>
32
+ <rc-dropdown
33
+ :distance="14"
34
+ placement="bottom"
35
+ >
36
+ <rc-dropdown-trigger
37
+ class="bulk-actions-dropdown"
38
+ :disabled="disabled"
39
+ >
40
+ <template #before>
41
+ <i class="icon icon-gear" />
42
+ </template>
43
+ <span>{{ t('sortableTable.bulkActions.collapsed.label') }}</span>
44
+ <template #after>
45
+ <i class="ml-10 icon icon-chevron-down" />
46
+ </template>
47
+ </rc-dropdown-trigger>
48
+ <template #dropdownCollection>
49
+ <rc-dropdown-item
50
+ v-for="(act, i) in hiddenActions"
51
+ :key="i"
52
+ v-clean-tooltip="{
53
+ content: actionTooltip,
54
+ placement: 'right'
55
+ }"
56
+ :disabled="!act.enabled"
57
+ @click="applyTableAction(act, null, $event)"
58
+ @mouseover="setBulkActionOfInterest(act)"
59
+ @mouseleave="setBulkActionOfInterest(null, 'mouseleave')"
60
+ >
61
+ <template #before>
62
+ <i
63
+ v-if="act.icon"
64
+ :class="act.icon"
65
+ />
66
+ </template>
67
+ <span v-clean-html="act.label" />
68
+ </rc-dropdown-item>
69
+ </template>
70
+ </rc-dropdown>
71
+ </template>
@@ -1,6 +1,10 @@
1
1
  <script lang="ts">
2
- import { defineComponent } from 'vue';
3
- import { DEFAULT_FOCUS_TRAP_OPTS, useBasicSetupFocusTrap, getFirstFocusableElement } from '@shell/composables/focusTrap';
2
+ import { defineComponent, ref } from 'vue';
3
+ import {
4
+ DEFAULT_FOCUS_TRAP_OPTS,
5
+ getFirstFocusableElement,
6
+ useWatcherBasedSetupFocusTrapWithDestroyIncluded
7
+ } from '@shell/composables/focusTrap';
4
8
 
5
9
  export const DEFAULT_ITERABLE_NODE_SELECTOR = 'body;';
6
10
 
@@ -80,6 +84,13 @@ export default defineComponent({
80
84
  returnFocusFirstIterableNodeSelector: {
81
85
  type: String,
82
86
  default: DEFAULT_ITERABLE_NODE_SELECTOR,
87
+ },
88
+ /**
89
+ * watcher-based focus trap variable to watch
90
+ */
91
+ focusTrapWatcherBasedVariable: {
92
+ type: Boolean,
93
+ default: undefined,
83
94
  }
84
95
  },
85
96
  computed: {
@@ -107,7 +118,7 @@ export default defineComponent({
107
118
  width: this.modalWidth,
108
119
  ...this.stylesPropToObj,
109
120
  };
110
- },
121
+ }
111
122
  },
112
123
  setup(props) {
113
124
  if (props.triggerFocusTrap) {
@@ -131,7 +142,10 @@ export default defineComponent({
131
142
  };
132
143
  }
133
144
 
134
- useBasicSetupFocusTrap('#modal-container-element', opts);
145
+ // prop used to immediately trigger the focus trap when a proper watch variable is not required
146
+ const autoTriggerFocusTrapWatcher = ref(true);
147
+
148
+ useWatcherBasedSetupFocusTrapWithDestroyIncluded(() => props.focusTrapWatcherBasedVariable ?? autoTriggerFocusTrapWatcher, '#modal-container-element', opts, true);
135
149
  }
136
150
  },
137
151
  mounted() {
@@ -314,11 +314,13 @@ export default defineComponent({
314
314
  v-if="displayIcon"
315
315
  v-clean-tooltip="tooltip"
316
316
  :class="{icon: true, 'icon-lg': true, [displayIcon]: true, 'mr-0': isManualRefresh}"
317
+ :alt="t('asyncButton.alt.iconAlt')"
317
318
  />
318
319
  <span
319
320
  v-if="labelAs === 'text' && displayLabel"
320
321
  v-clean-tooltip="tooltip"
321
322
  v-clean-html="displayLabel"
323
+ data-testid="async-btn-display-label"
322
324
  />
323
325
  </button>
324
326
  </template>
@@ -88,7 +88,7 @@ export default {
88
88
 
89
89
  // fixes https://github.com/rancher/dashboard/issues/13653
90
90
  // we can't use the inert HTML prop on the parent because it disables all interaction
91
- out.readOnly = this.isDisabled ? 'nocursor' : false;
91
+ out.readOnly = !!this.isDisabled;
92
92
 
93
93
  return out;
94
94
  },
@@ -227,8 +227,8 @@ export default {
227
227
  },
228
228
 
229
229
  onFocus() {
230
- this.isCodeMirrorFocused = true;
231
- this.$emit('onFocus', true);
230
+ this.isCodeMirrorFocused = !this.isDisabled;
231
+ this.$emit('onFocus', this.isCodeMirrorFocused);
232
232
  },
233
233
 
234
234
  onBlur() {