@rancher/shell 3.0.5-rc.1 → 3.0.5-rc.2
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.
- package/assets/images/providers/sks.svg +1 -0
- package/assets/styles/base/_helpers.scss +4 -0
- package/assets/styles/base/_variables.scss +1 -0
- package/assets/translations/en-us.yaml +31 -15
- package/assets/translations/zh-hans.yaml +4 -3
- package/chart/monitoring/index.vue +3 -1
- package/components/ActionDropdownShell.vue +71 -0
- package/components/AppModal.vue +18 -4
- package/components/CommunityLinks.vue +3 -58
- package/components/CruResource.vue +6 -1
- package/components/ExplorerProjectsNamespaces.vue +12 -4
- package/components/GlobalRoleBindings.vue +5 -1
- package/components/GrowlManager.vue +1 -0
- package/components/LandingPagePreference.vue +2 -0
- package/components/LocaleSelector.vue +1 -1
- package/components/ModalManager.vue +55 -0
- package/components/PromptModal.vue +47 -8
- package/components/ResourceDetail/Masthead.vue +38 -12
- package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
- package/components/ResourceDetail/index.vue +47 -12
- package/components/ResourceTable.vue +54 -19
- package/components/SideNav.vue +5 -1
- package/components/SlideInPanelManager.vue +126 -0
- package/components/SortableTable/THead.vue +5 -2
- package/components/SortableTable/actions.js +1 -1
- package/components/SortableTable/index.vue +54 -40
- package/components/SortableTable/paging.js +16 -19
- package/components/SortableTable/selection.js +0 -11
- package/components/Wizard.vue +2 -2
- package/components/__tests__/ModalManager.spec.ts +176 -0
- package/components/__tests__/PromptModal.test.ts +148 -0
- package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
- package/components/auth/AuthBanner.vue +13 -11
- package/components/auth/Principal.vue +1 -0
- package/components/auth/login/ldap.vue +1 -1
- package/components/fleet/FleetResources.vue +21 -6
- package/components/form/ArrayList.vue +10 -6
- package/components/form/BannerSettings.vue +17 -2
- package/components/form/ColorInput.vue +35 -6
- package/components/form/EnvVars.vue +1 -0
- package/components/form/LabeledSelect.vue +18 -23
- package/components/form/MatchExpressions.vue +4 -1
- package/components/form/NameNsDescription.vue +5 -1
- package/components/form/NotificationSettings.vue +15 -1
- package/components/form/Password.vue +1 -0
- package/components/form/Probe.vue +1 -0
- package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +15 -34
- package/components/form/SSHKnownHosts/index.vue +14 -11
- package/components/form/Select.vue +1 -15
- package/components/form/ValueFromResource.vue +12 -12
- package/components/form/__tests__/ArrayList.test.ts +2 -2
- package/components/form/__tests__/ColorInput.test.ts +35 -0
- package/components/form/__tests__/LabeledSelect.test.ts +40 -0
- package/components/form/__tests__/SSHKnownHosts.test.ts +11 -2
- package/components/nav/Group.vue +12 -4
- package/components/nav/Header.vue +16 -43
- package/components/nav/NamespaceFilter.vue +134 -86
- package/components/nav/TopLevelMenu.vue +4 -5
- package/components/nav/WindowManager/ContainerLogs.vue +87 -61
- package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
- package/components/templates/default.vue +6 -3
- package/components/templates/home.vue +6 -0
- package/components/templates/plain.vue +6 -3
- package/composables/focusTrap.ts +12 -4
- package/config/store.js +4 -0
- package/config/uiplugins.js +5 -1
- package/core/types.ts +7 -6
- package/detail/catalog.cattle.io.app.vue +6 -1
- package/detail/fleet.cattle.io.bundle.vue +70 -6
- package/detail/fleet.cattle.io.gitrepo.vue +1 -1
- package/detail/namespace.vue +0 -3
- package/detail/node.vue +17 -13
- package/detail/provisioning.cattle.io.cluster.vue +72 -6
- package/dialog/AddCustomBadgeDialog.vue +0 -1
- package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
- package/dialog/AssignToDialog.vue +176 -0
- package/dialog/ChangePasswordDialog.vue +106 -0
- package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
- package/dialog/DisableAuthProviderDialog.vue +101 -0
- package/dialog/DrainNode.vue +1 -1
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +69 -57
- package/dialog/FeatureFlagListDialog.vue +288 -0
- package/dialog/ForceMachineRemoveDialog.vue +1 -1
- package/{components/Import.vue → dialog/ImportDialog.vue} +0 -5
- package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
- package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -62
- package/dialog/MoveNamespaceDialog.vue +157 -0
- package/dialog/ScalePoolDownDialog.vue +1 -1
- package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
- package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
- package/dialog/WechatDialog.vue +57 -0
- package/edit/auth/azuread.vue +1 -1
- package/edit/auth/github.vue +1 -1
- package/edit/auth/googleoauth.vue +1 -1
- package/edit/auth/ldap/index.vue +1 -1
- package/edit/auth/oidc.vue +1 -1
- package/edit/auth/saml.vue +1 -1
- package/edit/cloudcredential.vue +24 -10
- package/edit/management.cattle.io.user.vue +28 -3
- package/edit/namespace.vue +1 -4
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -10
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -8
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +66 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
- package/edit/provisioning.cattle.io.cluster/rke2.vue +24 -7
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +4 -1
- package/initialize/install-plugins.js +2 -1
- package/list/harvesterhci.io.management.cluster.vue +4 -1
- package/list/management.cattle.io.feature.vue +4 -288
- package/machine-config/azure.vue +16 -4
- package/mixins/vue-select-overrides.js +0 -4
- package/models/fleet.cattle.io.cluster.js +8 -2
- package/models/fleet.cattle.io.gitrepo.js +8 -34
- package/models/management.cattle.io.feature.js +7 -1
- package/models/namespace.js +7 -1
- package/package.json +1 -1
- package/pages/about.vue +13 -3
- package/pages/account/index.vue +12 -5
- package/pages/auth/login.vue +7 -4
- package/pages/auth/setup.vue +1 -0
- package/pages/auth/verify.vue +9 -7
- package/pages/c/_cluster/apps/charts/install.vue +26 -26
- package/pages/c/_cluster/auth/config/index.vue +10 -12
- package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
- package/pages/c/_cluster/explorer/index.vue +17 -15
- package/pages/c/_cluster/istio/index.vue +2 -2
- package/pages/c/_cluster/longhorn/index.vue +1 -1
- package/pages/c/_cluster/monitoring/index.vue +1 -1
- package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
- package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -1
- package/pages/c/_cluster/settings/banners.vue +4 -3
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
- package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
- package/pages/c/_cluster/uiplugins/index.vue +98 -55
- package/pages/diagnostic.vue +12 -9
- package/pages/fail-whale.vue +8 -5
- package/pages/prefs.vue +7 -6
- package/plugins/internal-api/index.ts +37 -0
- package/plugins/internal-api/shared/base-api.ts +13 -0
- package/plugins/internal-api/shell/shell.api.ts +108 -0
- package/plugins/steve/actions.js +0 -12
- package/public/index.html +1 -0
- package/rancher-components/Card/Card.vue +1 -1
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
- package/rancher-components/Form/Checkbox/Checkbox.vue +27 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +47 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +20 -2
- package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
- package/rancher-components/Form/Radio/RadioButton.vue +20 -4
- package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
- package/rancher-components/Form/Radio/RadioGroup.vue +75 -35
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +17 -0
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +5 -0
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +10 -1
- package/rancher-components/RcButton/RcButton.vue +2 -1
- package/rancher-components/RcButton/types.ts +1 -0
- package/rancher-components/RcDropdown/RcDropdown.vue +17 -6
- package/rancher-components/RcDropdown/RcDropdownItem.vue +3 -56
- package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +68 -0
- package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +92 -0
- package/rancher-components/RcDropdown/index.ts +2 -0
- package/rancher-components/RcDropdown/useDropdownItem.ts +63 -0
- package/scripts/extension/bundle +20 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helmpatch +44 -31
- package/scripts/extension/publish +12 -13
- package/scripts/typegen.sh +2 -4
- package/store/action-menu.js +26 -56
- package/store/index.js +5 -0
- package/store/modal.ts +71 -0
- package/store/slideInPanel.ts +47 -0
- package/store/type-map.js +8 -1
- package/store/type-map.utils.ts +4 -4
- package/types/global-vue.d.ts +5 -0
- package/types/internal-api/shell/growl.d.ts +25 -0
- package/types/internal-api/shell/modal.d.ts +77 -0
- package/types/internal-api/shell/slideIn.d.ts +15 -0
- package/types/resources/fleet.d.ts +0 -14
- package/types/shell/index.d.ts +35 -23
- package/types/vue-shim.d.ts +4 -1
- package/utils/__mocks__/tabbable.js +13 -0
- package/utils/__tests__/object.test.ts +38 -4
- package/utils/fleet.ts +15 -73
- package/utils/object.js +48 -5
- package/utils/validators/formRules/__tests__/index.test.ts +10 -1
- package/utils/validators/formRules/index.ts +27 -3
- package/components/AssignTo.vue +0 -199
- package/components/DisableAuthProviderModal.vue +0 -115
- package/components/MoveModal.vue +0 -167
- package/components/PromptChangePassword.vue +0 -123
- package/components/fleet/FleetBundleResources.vue +0 -86
- package/types/vue-shim.d +0 -20
|
@@ -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>
|
|
@@ -144,6 +144,7 @@ nav:
|
|
|
144
144
|
localClusterIcon: Local Cluster icon
|
|
145
145
|
clusterProvIcon: Cluster {cluster} provider icon
|
|
146
146
|
topLevelMenu: Main menu
|
|
147
|
+
sideNav: Secondary menu
|
|
147
148
|
homePage: Home page navigation menu
|
|
148
149
|
cluster: Cluster menu item
|
|
149
150
|
harvesterCluster: Harvester cluster menu item
|
|
@@ -237,9 +238,10 @@ nav:
|
|
|
237
238
|
clusters: clusters
|
|
238
239
|
ariaLabel: Filter clusters on main menu
|
|
239
240
|
resourceSearch:
|
|
240
|
-
label: Resource Search
|
|
241
|
-
|
|
242
|
-
|
|
241
|
+
label: Resource Type Search
|
|
242
|
+
prompt: Search for a Kubernetes Resource/Custom Resource type
|
|
243
|
+
toolTip: Resource Type Search {key}
|
|
244
|
+
placeholder: Type to search for a resource type...
|
|
243
245
|
filteringDescription: Using this input will immediately filter the results in the list below
|
|
244
246
|
header:
|
|
245
247
|
setLoginPage: Set as login page
|
|
@@ -328,7 +330,7 @@ layouts:
|
|
|
328
330
|
unauthenticated: unauthenticated layout
|
|
329
331
|
logout: logout layout
|
|
330
332
|
verify: verify layout
|
|
331
|
-
|
|
333
|
+
|
|
332
334
|
windowmanager:
|
|
333
335
|
closeTab: Close tab {tabId}
|
|
334
336
|
about:
|
|
@@ -497,7 +499,7 @@ authConfig:
|
|
|
497
499
|
4: 'Under Scopes for Google APIs, enable "email", "profile", and "openid".'
|
|
498
500
|
5: 'Click on "Save".'
|
|
499
501
|
topPrivateDomain: 'Top private domain of:'
|
|
500
|
-
ariaLabel:
|
|
502
|
+
ariaLabel:
|
|
501
503
|
hostname: Copy Hostname to clipboard
|
|
502
504
|
serverUrl: Copy Server URL to clipboard
|
|
503
505
|
2:
|
|
@@ -508,7 +510,7 @@ authConfig:
|
|
|
508
510
|
3: 'Authorized redirect URIs:'
|
|
509
511
|
4: 'Click "Create", and then click on the "Download JSON" button.'
|
|
510
512
|
5: 'Upload the downloaded JSON file in the OAuth credentials box.'
|
|
511
|
-
ariaLabel:
|
|
513
|
+
ariaLabel:
|
|
512
514
|
serverUrlVerify: Copy Server Auth Verfication URL to clipboard
|
|
513
515
|
3:
|
|
514
516
|
title: 'Create Service Account credentials'
|
|
@@ -871,13 +873,13 @@ asyncButton:
|
|
|
871
873
|
success: Generated
|
|
872
874
|
waiting: Generating…
|
|
873
875
|
|
|
874
|
-
backupRestoreOperator:
|
|
876
|
+
backupRestoreOperator:
|
|
875
877
|
backup:
|
|
876
878
|
label: Resource Set
|
|
877
879
|
description: The Resource Set determines which resources the backup-restore-operator collects in a backup
|
|
878
880
|
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
881
|
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:
|
|
882
|
+
resourceSetOptions:
|
|
881
883
|
'rancher-resource-set-basic': 'Basic Rancher backup resource set'
|
|
882
884
|
'rancher-resource-set-full': 'Full Rancher backup resource set'
|
|
883
885
|
custom: Custom
|
|
@@ -1365,7 +1367,7 @@ cluster:
|
|
|
1365
1367
|
registrationCommand:
|
|
1366
1368
|
label: Registration Command
|
|
1367
1369
|
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.
|
|
1370
|
+
windowsDetail: Run this command in PowerShell on each of the existing Windows machines you want to register.
|
|
1369
1371
|
windowsWorkersOnly: <b>Windows nodes can only be workers.</b>
|
|
1370
1372
|
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
1373
|
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 +1885,11 @@ cluster:
|
|
|
1883
1885
|
subGroups:
|
|
1884
1886
|
podAffinityAnti: Pod Affinity/Anti-Affinity
|
|
1885
1887
|
nodeAffinity: Node Affinity
|
|
1886
|
-
schedulingCustomization:
|
|
1888
|
+
schedulingCustomization:
|
|
1887
1889
|
label: Prevent Rancher cluster agent pod eviction
|
|
1888
1890
|
description: This ensures that the cluster agent pod is not evicted due to node pressure, resource constraints or scheduler policies.
|
|
1889
1891
|
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
|
|
1892
|
+
innerCheckbox: Apply global settings for Priority Class and Pod Disruption Budget
|
|
1891
1893
|
banners:
|
|
1892
1894
|
advanced: These are advanced configuration options. Generally, they should be left as-is.
|
|
1893
1895
|
tolerations: Additional Pod Tolerations will be added to the default Tolerations applied by Rancher.
|
|
@@ -2056,6 +2058,7 @@ cluster:
|
|
|
2056
2058
|
docker: Docker
|
|
2057
2059
|
eks: Amazon EKS
|
|
2058
2060
|
exoscale: Exoscale
|
|
2061
|
+
sks: Exoscale SKS
|
|
2059
2062
|
gcp: Google
|
|
2060
2063
|
google: Google GCE
|
|
2061
2064
|
googlegke: Google GKE
|
|
@@ -2214,7 +2217,7 @@ cluster:
|
|
|
2214
2217
|
snapshotScheduleCron:
|
|
2215
2218
|
label: Cron Schedule
|
|
2216
2219
|
snapshotRetention:
|
|
2217
|
-
label: Snapshot retention count
|
|
2220
|
+
label: Snapshot retention count
|
|
2218
2221
|
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
2222
|
exportMetric:
|
|
2220
2223
|
label: Metrics
|
|
@@ -3943,6 +3946,10 @@ namespaceFilter:
|
|
|
3943
3946
|
one {1 item selected}
|
|
3944
3947
|
other {{total} items selected}
|
|
3945
3948
|
}
|
|
3949
|
+
input: Filter namespace options
|
|
3950
|
+
button:
|
|
3951
|
+
clear: Remove applied namespace filters
|
|
3952
|
+
clearFilter: Clear namespace options filter
|
|
3946
3953
|
|
|
3947
3954
|
namespaceList:
|
|
3948
3955
|
selectLabel: Namespace
|
|
@@ -4743,6 +4750,7 @@ prefs:
|
|
|
4743
4750
|
allNamespaces: Show dynamic Namespaces managed by Rancher (not intended for editing or deletion)
|
|
4744
4751
|
themeShortcut: Enable Dark/Light Theme keyboard shortcut toggle (shift+T)
|
|
4745
4752
|
pluginDeveloper: Enable Extension developer features
|
|
4753
|
+
pluginDeveloperTooltip: Enables the ability to perform a developer load of UI extensions
|
|
4746
4754
|
hideDesc:
|
|
4747
4755
|
label: Hide Type Description banners above resource lists
|
|
4748
4756
|
helm:
|
|
@@ -4759,6 +4767,8 @@ principal:
|
|
|
4759
4767
|
name: Name
|
|
4760
4768
|
loginName: Username
|
|
4761
4769
|
type: Type
|
|
4770
|
+
alt:
|
|
4771
|
+
avatar: User avatar image
|
|
4762
4772
|
|
|
4763
4773
|
probe:
|
|
4764
4774
|
checkInterval:
|
|
@@ -5138,6 +5148,8 @@ rbac:
|
|
|
5138
5148
|
label: Login Access
|
|
5139
5149
|
clustertemplaterevisions-create:
|
|
5140
5150
|
label: Create RKE Template Revisions
|
|
5151
|
+
errors:
|
|
5152
|
+
escalation: You cannot assign Global Permissions that are higher than your own. Please verify the permissions you are attempting to assign.
|
|
5141
5153
|
|
|
5142
5154
|
resourceDetail:
|
|
5143
5155
|
detailTop:
|
|
@@ -5214,6 +5226,7 @@ resourceTable:
|
|
|
5214
5226
|
role: Group by Role
|
|
5215
5227
|
cluster: Group by Cluster
|
|
5216
5228
|
device: Group by Device
|
|
5229
|
+
pool: Group by Pool
|
|
5217
5230
|
groupLabel:
|
|
5218
5231
|
cluster: "<span>Cluster:</span> {name}"
|
|
5219
5232
|
notInACluster: Not in a Cluster
|
|
@@ -7571,6 +7584,9 @@ typeLabel:
|
|
|
7571
7584
|
}
|
|
7572
7585
|
|
|
7573
7586
|
action:
|
|
7587
|
+
ariaLabel:
|
|
7588
|
+
hidePass: Hide {area}
|
|
7589
|
+
showPass: Reveal {area}
|
|
7574
7590
|
clone: Clone
|
|
7575
7591
|
disable: Disable
|
|
7576
7592
|
download: Download YAML
|
|
@@ -7822,9 +7838,9 @@ performance:
|
|
|
7822
7838
|
banner:
|
|
7823
7839
|
label: Fixed Banners
|
|
7824
7840
|
settingName: Banners
|
|
7825
|
-
|
|
7826
|
-
|
|
7827
|
-
|
|
7841
|
+
bannerHeader: Header Banner
|
|
7842
|
+
bannerFooter: Footer Banner
|
|
7843
|
+
bannerConsent: Login Screen Banner
|
|
7828
7844
|
text: Text
|
|
7829
7845
|
buttonText: Accept Button Text
|
|
7830
7846
|
textColor: Text Color
|
|
@@ -1773,6 +1773,7 @@ cluster:
|
|
|
1773
1773
|
docker: Docker
|
|
1774
1774
|
eks: Amazon EKS
|
|
1775
1775
|
exoscale: Exoscale
|
|
1776
|
+
sks: Exoscale SKS
|
|
1776
1777
|
gcp: Google
|
|
1777
1778
|
google: Google GCE
|
|
1778
1779
|
googlegke: Google GKE
|
|
@@ -7131,9 +7132,9 @@ performance:
|
|
|
7131
7132
|
banner:
|
|
7132
7133
|
label: 固定横幅
|
|
7133
7134
|
settingName: 横幅
|
|
7134
|
-
|
|
7135
|
-
|
|
7136
|
-
|
|
7135
|
+
bannerHeader: 标题横幅
|
|
7136
|
+
bannerFooter: 页脚横幅
|
|
7137
|
+
bannerConsent: 登录屏幕横幅
|
|
7137
7138
|
text: 文本
|
|
7138
7139
|
buttonText: 同意按钮文本
|
|
7139
7140
|
textColor: 文本颜色
|
|
@@ -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
|
-
|
|
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>
|
package/components/AppModal.vue
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { defineComponent } from 'vue';
|
|
3
|
-
import {
|
|
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
|
-
|
|
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() {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import SimpleBox from '@shell/components/SimpleBox';
|
|
3
|
-
import AppModal from '@shell/components/AppModal.vue';
|
|
4
3
|
import Closeable from '@shell/mixins/closeable';
|
|
5
4
|
import { MANAGEMENT } from '@shell/config/types';
|
|
6
5
|
import { SETTING } from '@shell/config/settings';
|
|
@@ -9,11 +8,11 @@ import { isRancherPrime } from '@shell/config/version';
|
|
|
9
8
|
import { fetchLinks } from '@shell/config/home-links';
|
|
10
9
|
import { processLink } from '@shell/plugins/clean-html';
|
|
11
10
|
|
|
12
|
-
// i18n-ignore footer.wechat.title
|
|
11
|
+
// i18n-ignore footer.wechat.title
|
|
13
12
|
export default {
|
|
14
13
|
name: 'CommunityLinks',
|
|
15
14
|
|
|
16
|
-
components: { SimpleBox
|
|
15
|
+
components: { SimpleBox },
|
|
17
16
|
|
|
18
17
|
props: {
|
|
19
18
|
linkOptions: {
|
|
@@ -87,10 +86,7 @@ export default {
|
|
|
87
86
|
},
|
|
88
87
|
methods: {
|
|
89
88
|
show() {
|
|
90
|
-
this.
|
|
91
|
-
},
|
|
92
|
-
close() {
|
|
93
|
-
this.showWeChatModal = false;
|
|
89
|
+
this.$store.dispatch('management/promptModal', { component: 'WechatDialog' });
|
|
94
90
|
}
|
|
95
91
|
},
|
|
96
92
|
};
|
|
@@ -146,32 +142,6 @@ export default {
|
|
|
146
142
|
</a>
|
|
147
143
|
</div>
|
|
148
144
|
</SimpleBox>
|
|
149
|
-
<app-modal
|
|
150
|
-
v-if="showWeChatModal"
|
|
151
|
-
name="wechat-modal"
|
|
152
|
-
height="auto"
|
|
153
|
-
:width="640"
|
|
154
|
-
:trigger-focus-trap="true"
|
|
155
|
-
@close="close"
|
|
156
|
-
>
|
|
157
|
-
<div class="wechat-modal">
|
|
158
|
-
<h1>{{ t('footer.wechat.modalText') }}</h1>
|
|
159
|
-
<h1>{{ t('footer.wechat.modalText2') }}</h1>
|
|
160
|
-
<div class="qr-img" />
|
|
161
|
-
<div>
|
|
162
|
-
<button
|
|
163
|
-
class="btn role-primary"
|
|
164
|
-
tabindex="0"
|
|
165
|
-
:aria-label="t('generic.close')"
|
|
166
|
-
role="button"
|
|
167
|
-
@click="close"
|
|
168
|
-
@keydown.enter.stop
|
|
169
|
-
>
|
|
170
|
-
{{ t('generic.close') }}
|
|
171
|
-
</button>
|
|
172
|
-
</div>
|
|
173
|
-
</div>
|
|
174
|
-
</app-modal>
|
|
175
145
|
</div>
|
|
176
146
|
</template>
|
|
177
147
|
|
|
@@ -188,29 +158,4 @@ export default {
|
|
|
188
158
|
.support-link:not(:last-child) {
|
|
189
159
|
margin-bottom: 15px;
|
|
190
160
|
}
|
|
191
|
-
|
|
192
|
-
.wechat-modal {
|
|
193
|
-
margin: 60px;
|
|
194
|
-
display: flex;
|
|
195
|
-
flex-direction: column;
|
|
196
|
-
align-items: center;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
.link {
|
|
200
|
-
cursor: pointer;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
.btn {
|
|
204
|
-
margin: 20px auto 0;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
.qr-img {
|
|
208
|
-
background-image: url('../assets/images/wechat-qr-code.jpg');
|
|
209
|
-
background-repeat: no-repeat;
|
|
210
|
-
background-size: cover;
|
|
211
|
-
background-position: center center;
|
|
212
|
-
height: 128px;
|
|
213
|
-
width: 128px;
|
|
214
|
-
margin: 15px auto 10px;
|
|
215
|
-
}
|
|
216
161
|
</style>
|
|
@@ -544,7 +544,10 @@ export default {
|
|
|
544
544
|
class="flex-right"
|
|
545
545
|
>{{ t('generic.moreInfo') }} <i class="icon icon-external-link" /></a>
|
|
546
546
|
</div>
|
|
547
|
-
<hr
|
|
547
|
+
<hr
|
|
548
|
+
v-if="subtype.description"
|
|
549
|
+
role="none"
|
|
550
|
+
>
|
|
548
551
|
<div
|
|
549
552
|
v-if="subtype.description"
|
|
550
553
|
class="description"
|
|
@@ -906,6 +909,8 @@ form.create-resource-container .cru {
|
|
|
906
909
|
position: sticky;
|
|
907
910
|
bottom: 0;
|
|
908
911
|
background-color: var(--header-bg);
|
|
912
|
+
height: $footer-height;
|
|
913
|
+
box-sizing: border-box;
|
|
909
914
|
|
|
910
915
|
// Overrides outlet padding
|
|
911
916
|
margin-left: -$space-m;
|
|
@@ -9,7 +9,6 @@ import { PanelLocation, ExtensionPoint } from '@shell/core/types';
|
|
|
9
9
|
import ExtensionPanel from '@shell/components/ExtensionPanel';
|
|
10
10
|
import Masthead from '@shell/components/ResourceList/Masthead';
|
|
11
11
|
import { mapPref, GROUP_RESOURCES, ALL_NAMESPACES, DEV } from '@shell/store/prefs';
|
|
12
|
-
import MoveModal from '@shell/components/MoveModal';
|
|
13
12
|
import ButtonMultiAction from '@shell/components/ButtonMultiAction.vue';
|
|
14
13
|
import { escapeHtml } from '@shell/utils/string';
|
|
15
14
|
import { NAMESPACE_FILTER_ALL_ORPHANS } from '@shell/utils/namespace-filter';
|
|
@@ -24,7 +23,6 @@ export default {
|
|
|
24
23
|
components: {
|
|
25
24
|
ExtensionPanel,
|
|
26
25
|
Masthead,
|
|
27
|
-
MoveModal,
|
|
28
26
|
ResourceTable,
|
|
29
27
|
ButtonMultiAction,
|
|
30
28
|
ActionMenu,
|
|
@@ -89,9 +87,20 @@ export default {
|
|
|
89
87
|
}
|
|
90
88
|
};
|
|
91
89
|
},
|
|
92
|
-
|
|
90
|
+
watch: {
|
|
91
|
+
actionCb: {
|
|
92
|
+
handler(neu) {
|
|
93
|
+
if (neu?.moveNamespaceCb) {
|
|
94
|
+
this.clearSelection();
|
|
95
|
+
this.$store.dispatch('action-menu/clearCallbackData');
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
immediate: true
|
|
99
|
+
}
|
|
100
|
+
},
|
|
93
101
|
computed: {
|
|
94
102
|
...mapGetters(['currentCluster', 'currentProduct']),
|
|
103
|
+
...mapGetters({ actionCb: 'action-menu/performCallbackData' }),
|
|
95
104
|
namespaces() {
|
|
96
105
|
const inStore = this.$store.getters['currentStore'](NAMESPACE);
|
|
97
106
|
|
|
@@ -569,7 +578,6 @@ export default {
|
|
|
569
578
|
</tr>
|
|
570
579
|
</template>
|
|
571
580
|
</ResourceTable>
|
|
572
|
-
<MoveModal @moving="clearSelection" />
|
|
573
581
|
</div>
|
|
574
582
|
</template>
|
|
575
583
|
<style lang="scss" scoped>
|
|
@@ -49,6 +49,10 @@ export default {
|
|
|
49
49
|
userId: {
|
|
50
50
|
type: String,
|
|
51
51
|
default: ''
|
|
52
|
+
},
|
|
53
|
+
watchOverride: {
|
|
54
|
+
type: Boolean,
|
|
55
|
+
default: true,
|
|
52
56
|
}
|
|
53
57
|
},
|
|
54
58
|
async fetch() {
|
|
@@ -138,7 +142,7 @@ export default {
|
|
|
138
142
|
this.update();
|
|
139
143
|
},
|
|
140
144
|
userId(userId, oldUserId) {
|
|
141
|
-
if (userId === oldUserId) {
|
|
145
|
+
if (userId === oldUserId || this.watchOverride === true) {
|
|
142
146
|
return;
|
|
143
147
|
}
|
|
144
148
|
this.update();
|
|
@@ -108,6 +108,7 @@ export default {
|
|
|
108
108
|
:value="afterLoginRoute"
|
|
109
109
|
name="login-route"
|
|
110
110
|
:options="routeRadioOptions"
|
|
111
|
+
:aria-label="`${t('prefs.landing.label')} - ${ t('landing.landingPrefs.body')}`"
|
|
111
112
|
@update:value="updateLoginRoute"
|
|
112
113
|
>
|
|
113
114
|
<template #label>
|
|
@@ -119,6 +120,7 @@ export default {
|
|
|
119
120
|
<div class="custom-page">
|
|
120
121
|
<RadioButton
|
|
121
122
|
:label="option.label"
|
|
123
|
+
:radio-option-id="option.radioOptionId"
|
|
122
124
|
:val="false"
|
|
123
125
|
:value="afterLoginRoute=== 'home' || afterLoginRoute === 'last-visited'"
|
|
124
126
|
:v-bind="$attrs"
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { computed, ref } from 'vue';
|
|
3
|
+
import { useStore } from 'vuex';
|
|
4
|
+
|
|
5
|
+
import AppModal from '@shell/components/AppModal.vue';
|
|
6
|
+
|
|
7
|
+
const store = useStore();
|
|
8
|
+
|
|
9
|
+
const isOpen = computed(() => store.getters['modal/isOpen']);
|
|
10
|
+
const component = computed(() => store.getters['modal/component']);
|
|
11
|
+
const componentProps = computed(() => store.getters['modal/componentProps']);
|
|
12
|
+
const resources = computed(() => store.getters['modal/resources']);
|
|
13
|
+
const closeOnClickOutside = computed(() => store.getters['modal/closeOnClickOutside']);
|
|
14
|
+
const modalWidth = computed(() => store.getters['modal/modalWidth']);
|
|
15
|
+
// const modalSticky = computed(() => store.getters['modal/modalSticky']); // TODO: Implement sticky modals
|
|
16
|
+
|
|
17
|
+
const backgroundClosing = ref<Function | null>(null);
|
|
18
|
+
|
|
19
|
+
function close() {
|
|
20
|
+
if (!isOpen.value) return;
|
|
21
|
+
|
|
22
|
+
if (backgroundClosing.value) {
|
|
23
|
+
backgroundClosing.value();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
store.commit('modal/closeModal');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function registerBackgroundClosing(fn: Function) {
|
|
30
|
+
backgroundClosing.value = fn;
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<template>
|
|
35
|
+
<Teleport to="#modals">
|
|
36
|
+
<app-modal
|
|
37
|
+
v-if="isOpen && component"
|
|
38
|
+
:click-to-close="closeOnClickOutside"
|
|
39
|
+
:width="modalWidth"
|
|
40
|
+
:style="{ '--prompt-modal-width': modalWidth }"
|
|
41
|
+
:trigger-focus-trap="true"
|
|
42
|
+
tabindex="0"
|
|
43
|
+
@close="close"
|
|
44
|
+
>
|
|
45
|
+
<component
|
|
46
|
+
:is="component"
|
|
47
|
+
v-bind="componentProps || {}"
|
|
48
|
+
data-testid="modal-manager-component"
|
|
49
|
+
:resources="resources"
|
|
50
|
+
:register-background-closing="registerBackgroundClosing"
|
|
51
|
+
@close="close"
|
|
52
|
+
/>
|
|
53
|
+
</app-modal>
|
|
54
|
+
</Teleport>
|
|
55
|
+
</template>
|