@rancher/shell 0.5.3 → 1.2.0
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/.DS_Store +0 -0
- package/assets/images/providers/aks-black.svg +28 -0
- package/assets/images/providers/aks.svg +31 -0
- package/assets/styles/global/_labeled-input.scss +1 -0
- package/assets/styles/global/_layout.scss +0 -99
- package/assets/translations/en-us.yaml +76 -74
- package/assets/translations/zh-hans.yaml +25 -23
- package/babel.config.js +1 -7
- package/chart/gatekeeper.vue +11 -2
- package/chart/istio.vue +10 -1
- package/chart/logging/index.vue +11 -2
- package/chart/monitoring/alerting/index.vue +21 -7
- package/chart/monitoring/grafana/index.vue +2 -57
- package/chart/monitoring/index.vue +26 -52
- package/chart/monitoring/prometheus/index.vue +43 -37
- package/chart/rancher-backup/index.vue +10 -3
- package/cloud-credential/azure.vue +17 -4
- package/components/AsyncButton.vue +0 -9
- package/components/Carousel.vue +0 -1
- package/components/ChartPsp.vue +76 -0
- package/components/ClusterIconMenu.vue +9 -24
- package/components/CodeMirror.vue +16 -75
- package/components/CopyCode.vue +2 -6
- package/components/CopyToClipboard.vue +1 -2
- package/components/CopyToClipboardText.vue +9 -14
- package/components/CruResource.vue +0 -1
- package/components/EtcdInfoBanner.vue +5 -5
- package/components/ExplorerProjectsNamespaces.vue +1 -25
- package/components/FixedBanner.vue +0 -1
- package/components/IconOrSvg.vue +1 -1
- package/components/Markdown.vue +12 -16
- package/components/Questions/index.vue +1 -1
- package/components/ResourceDetail/Masthead.vue +9 -25
- package/components/ResourceDetail/index.vue +4 -1
- package/components/ResourceList/Masthead.vue +18 -1
- package/components/ResourceTable.vue +2 -14
- package/components/ResourceYaml.vue +5 -34
- package/components/SideNav.vue +65 -43
- package/components/SortableTable/THead.vue +9 -7
- package/components/SortableTable/index.vue +2 -1
- package/components/StatusTable.vue +1 -5
- package/components/TabTitle.vue +84 -0
- package/components/Tabbed/index.vue +0 -12
- package/components/YamlEditor.vue +0 -1
- package/components/__tests__/ChartPsp.test.ts +75 -0
- package/components/__tests__/CopyCode.test.ts +4 -5
- package/components/fleet/FleetBundles.vue +11 -5
- package/components/fleet/FleetRepos.vue +27 -62
- package/components/fleet/FleetResources.vue +1 -6
- package/components/fleet/FleetStatus.vue +3 -3
- package/components/fleet/FleetSummary.vue +30 -35
- package/components/form/ArrayList.vue +8 -1
- package/components/form/ArrayListSelect.vue +9 -9
- package/components/form/BannerSettings.vue +0 -3
- package/components/form/FileSelector.vue +0 -1
- package/components/form/KeyValue.vue +0 -2
- package/components/form/LabeledSelect.vue +0 -4
- package/components/form/Password.vue +1 -3
- package/components/form/Select.vue +1 -1
- package/components/form/SelectOrCreateAuthSecret.vue +4 -4
- package/components/form/__tests__/KeyValue.test.ts +1 -1
- package/components/formatter/Checked.vue +3 -11
- package/components/formatter/ClusterProvider.vue +18 -1
- package/components/formatter/FleetSummaryGraph.vue +11 -23
- package/components/formatter/LiveDate.vue +16 -0
- package/components/formatter/LiveDuration.vue +1 -1
- package/components/formatter/PercentageBar.vue +1 -1
- package/components/formatter/WorkloadDetailEndpoints.vue +22 -12
- package/components/formatter/__tests__/ClusterProvider.test.ts +28 -0
- package/components/nav/Group.vue +2 -2
- package/components/nav/Header.vue +2 -2
- package/components/nav/Jump.vue +9 -19
- package/components/nav/TopLevelMenu.vue +18 -66
- package/components/nav/Type.vue +7 -16
- package/components/nav/WindowManager/ContainerLogs.vue +19 -120
- package/components/nav/WindowManager/ContainerShell.vue +1 -6
- package/components/nav/WindowManager/index.vue +10 -11
- package/components/nav/__tests__/TopLevelMenu.test.ts +1 -34
- package/components/nav/__tests__/Type.test.ts +1 -31
- package/components/nuxt/nuxt-child.js +78 -14
- package/components/nuxt/nuxt.js +1 -1
- package/components/user.retention/user-retention-header.vue +34 -0
- package/composables/useI18n.ts +26 -0
- package/composables/useStore.ts +16 -0
- package/config/harvester-manager-types.js +0 -2
- package/config/home-links.js +32 -2
- package/config/private-label.js +0 -22
- package/config/product/explorer.js +4 -4
- package/config/product/fleet.js +1 -6
- package/config/product/legacy.js +1 -84
- package/config/product/manager.js +15 -8
- package/config/query-params.js +0 -1
- package/config/router.js +368 -385
- package/config/settings.ts +9 -2
- package/config/store.js +1 -1
- package/config/system-namespaces.js +0 -3
- package/config/table-headers.js +27 -47
- package/config/types.js +5 -0
- package/config/uiplugins.js +1 -1
- package/core/plugin-helpers.js +5 -3
- package/core/plugin-routes.ts +114 -56
- package/core/plugin.ts +10 -16
- package/core/plugins-loader.js +9 -7
- package/core/plugins.js +3 -0
- package/core/types-provisioning.ts +0 -7
- package/creators/app/init +0 -19
- package/detail/fleet.cattle.io.bundle.vue +1 -1
- package/detail/fleet.cattle.io.cluster.vue +1 -11
- package/detail/node.vue +0 -42
- package/detail/pod.vue +1 -68
- package/detail/provisioning.cattle.io.cluster.vue +8 -25
- package/detail/workload/index.vue +1 -15
- package/dialog/ScaleMachineDownDialog.vue +17 -34
- package/edit/auth/googleoauth.vue +5 -1
- package/edit/catalog.cattle.io.clusterrepo.vue +7 -20
- package/edit/cloudcredential.vue +0 -2
- package/edit/fleet.cattle.io.gitrepo.vue +4 -3
- package/edit/management.cattle.io.project.vue +52 -1
- package/edit/management.cattle.io.setting.vue +2 -32
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -12
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +1 -2
- package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/{tabs/Basics.vue → Basics.vue} +125 -106
- package/edit/provisioning.cattle.io.cluster/{tabs/MachinePool.vue → MachinePool.vue} +7 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +7 -15
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +237 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.test.ts → CustomCommand.tests.ts} +0 -6
- package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +1 -7
- package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/index.vue +40 -109
- package/edit/provisioning.cattle.io.cluster/rke2.vue +689 -152
- package/edit/service.vue +0 -12
- package/edit/token.vue +0 -1
- package/edit/workload/Upgrading.vue +2 -3
- package/edit/workload/index.vue +1 -2
- package/edit/workload/mixins/workload.js +1 -1
- package/initialize/App.js +71 -25
- package/initialize/client.js +162 -21
- package/initialize/index.js +124 -47
- package/initialize/layouts.ts +26 -0
- package/{components/templates → layouts}/blank.vue +1 -1
- package/{components/templates → layouts}/default.vue +98 -8
- package/{components/templates → layouts}/error.vue +19 -10
- package/{components/templates → layouts}/home.vue +1 -4
- package/{components/templates → layouts}/plain.vue +1 -4
- package/{components/templates → layouts}/standalone.vue +1 -1
- package/{components/templates → layouts}/unauthenticated.vue +1 -1
- package/list/catalog.cattle.io.app.vue +0 -1
- package/list/management.cattle.io.feature.vue +7 -1
- package/list/management.cattle.io.setting.vue +0 -1
- package/list/management.cattle.io.user.vue +25 -1
- package/list/node.vue +0 -1
- package/machine-config/__tests__/vmwarevsphere.test.ts +161 -56
- package/machine-config/azure.vue +37 -21
- package/machine-config/vmwarevsphere.vue +47 -42
- package/middleware/authenticated.js +19 -14
- package/mixins/auth-config.js +7 -2
- package/mixins/brand.js +41 -29
- package/mixins/fetch.server.js +73 -0
- package/mixins/labeled-form-element.ts +1 -6
- package/models/__tests__/management.cattle.io.node.ts +0 -85
- package/models/__tests__/namespace.test.ts +9 -49
- package/models/cluster/node.js +4 -4
- package/models/cluster.x-k8s.io.machine.js +1 -1
- package/models/cluster.x-k8s.io.machinedeployment.js +0 -14
- package/models/fleet.cattle.io.cluster.js +0 -4
- package/models/fleet.cattle.io.gitrepo.js +13 -56
- package/models/management.cattle.io.cluster.js +3 -11
- package/models/management.cattle.io.kontainerdriver.js +0 -1
- package/models/management.cattle.io.node.js +14 -18
- package/models/management.cattle.io.nodepool.js +0 -17
- package/models/management.cattle.io.project.js +36 -0
- package/models/management.cattle.io.setting.js +7 -11
- package/models/management.cattle.io.user.js +65 -0
- package/models/namespace.js +1 -1
- package/models/pod.js +0 -20
- package/models/provisioning.cattle.io.cluster.js +9 -91
- package/models/secret.js +18 -126
- package/models/storage.k8s.io.storageclass.js +1 -1
- package/models/workload.js +0 -16
- package/models/workload.service.js +0 -18
- package/package.json +10 -12
- package/pages/about.vue +1 -0
- package/pages/account/create-key.vue +1 -0
- package/pages/account/index.vue +1 -0
- package/pages/auth/login.vue +1 -0
- package/pages/auth/logout.vue +2 -0
- package/pages/auth/setup.vue +4 -37
- package/pages/auth/verify.vue +8 -14
- package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +17 -2
- package/pages/c/_cluster/apps/charts/index.vue +58 -64
- package/pages/c/_cluster/apps/charts/install.helpers.js +13 -2
- package/pages/c/_cluster/apps/charts/install.vue +5 -5
- package/pages/c/_cluster/apps/index.vue +2 -0
- package/pages/c/_cluster/auth/index.vue +2 -0
- package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
- package/pages/c/_cluster/ecm/index.vue +2 -0
- package/pages/c/_cluster/explorer/index.vue +53 -56
- package/pages/c/_cluster/explorer/tools/index.vue +3 -171
- package/pages/c/_cluster/fleet/index.vue +1 -1
- package/pages/c/_cluster/index.vue +2 -0
- package/pages/c/_cluster/manager/pages/_page.vue +5 -4
- package/pages/c/_cluster/monitoring/index.vue +1 -17
- package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -1
- package/pages/c/_cluster/settings/banners.vue +2 -0
- package/pages/c/_cluster/settings/brand.vue +2 -3
- package/pages/c/_cluster/settings/index.vue +2 -0
- package/pages/c/_cluster/settings/links.vue +3 -2
- package/pages/c/_cluster/settings/performance.vue +1 -0
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +1 -2
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +46 -10
- package/pages/c/_cluster/uiplugins/index.vue +2 -0
- package/pages/c/index.vue +9 -0
- package/pages/diagnostic.vue +2 -1
- package/pages/fail-whale.vue +1 -0
- package/pages/prefs.vue +1 -0
- package/pages/rio/mesh.vue +508 -0
- package/pages/support/index.vue +8 -2
- package/pkg/auto-import.js +1 -1
- package/plugins/axios.js +36 -0
- package/plugins/back-button.js +5 -3
- package/plugins/clean-html-directive.js +19 -1
- package/plugins/clean-tooltip-directive.js +1 -1
- package/plugins/codemirror-loader.js +1 -1
- package/plugins/codemirror.js +0 -41
- package/plugins/dashboard-store/__tests__/{mutations.test.ts → mutations.spec.ts} +1 -1
- package/plugins/dashboard-store/actions.js +17 -16
- package/plugins/dashboard-store/classify.js +18 -1
- package/plugins/dashboard-store/getters.js +7 -70
- package/plugins/dashboard-store/index.js +12 -0
- package/plugins/dashboard-store/mutations.js +4 -0
- package/plugins/dashboard-store/resource-class.js +20 -65
- package/plugins/i18n.js +1 -1
- package/plugins/steve/__tests__/getters.spec.ts +48 -26
- package/plugins/steve/__tests__/subscribe.spec.ts +106 -0
- package/plugins/steve/actions.js +37 -3
- package/plugins/steve/getters.js +24 -7
- package/plugins/steve/mutations.js +5 -2
- package/plugins/steve/norman-class.js +0 -19
- package/plugins/steve/steve-class.js +0 -22
- package/plugins/steve/subscribe.js +34 -13
- package/plugins/transitions.js +4 -0
- package/plugins/vue-clipboard2.js +4 -0
- package/rancher-components/Accordion/Accordion.vue +3 -2
- package/rancher-components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/Banner/Banner.test.ts +1 -5
- package/rancher-components/Banner/Banner.vue +2 -2
- package/rancher-components/Card/Card.vue +4 -4
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +55 -24
- package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.vue +8 -8
- package/rancher-components/components/Accordion/Accordion.vue +3 -2
- package/rancher-components/components/BadgeState/BadgeState.test.ts +12 -0
- package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +2 -19
- package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +14 -11
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -1
- package/rancher-components/components/StringList/StringList.test.ts +0 -270
- package/rancher-components/components/StringList/StringList.vue +18 -57
- package/scripts/extension/bundle +7 -19
- package/scripts/extension/helm/scripts/package +3 -11
- package/scripts/extension/parse-tag-name +4 -4
- package/scripts/extension/publish +9 -20
- package/scripts/publish-shell.sh +1 -11
- package/scripts/test-plugins-build.sh +9 -85
- package/store/catalog.js +1 -1
- package/store/features.js +0 -1
- package/store/i18n.js +0 -11
- package/store/index.js +13 -11
- package/store/prefs.js +38 -33
- package/store/type-map.js +82 -157
- package/tsconfig.default.json +46 -0
- package/tsconfig.json +9 -35
- package/types/shell/index.d.ts +404 -465
- package/utils/axios.js +19 -0
- package/utils/create-yaml.js +1 -5
- package/utils/custom-validators.js +2 -0
- package/utils/error.js +1 -16
- package/utils/monitoring.js +2 -37
- package/utils/nuxt.js +39 -18
- package/utils/object.js +0 -24
- package/utils/router.scrollBehavior.js +14 -12
- package/utils/socket.js +1 -0
- package/utils/time.js +1 -1
- package/utils/title.ts +3 -0
- package/utils/url.ts +1 -1
- package/utils/validators/formRules/__tests__/index.test.ts +4 -49
- package/utils/validators/formRules/index.ts +9 -12
- package/utils/validators/setting.js +10 -6
- package/vue.config.js +3 -24
- package/chart/monitoring/steps/uninstall-v1.vue +0 -135
- package/components/Certificates.vue +0 -164
- package/components/__tests__/CodeMirror.spec.ts +0 -99
- package/components/fleet/__tests__/FleetSummary.test.ts +0 -316
- package/components/formatter/FleetClusterSummaryGraph.vue +0 -27
- package/components/formatter/__tests__/Checked.test.ts +0 -19
- package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +0 -81
- package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +0 -186
- package/composables/useCompactInput.ts +0 -20
- package/composables/useLabeledFormElement.ts +0 -138
- package/creators/app/files/.gitlab-ci.yml +0 -14
- package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +0 -77
- package/edit/__tests__/service.test.ts +0 -89
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +0 -112
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +0 -473
- package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +0 -73
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +0 -386
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +0 -137
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +0 -157
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +0 -135
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +0 -189
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +0 -147
- package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +0 -76
- package/mixins/v1-workload-metrics.js +0 -43
- package/models/__tests__/management.cattle.io.cluster.test.ts +0 -23
- package/models/__tests__/management.cattle.io.nodepool.ts +0 -83
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -241
- package/models/__tests__/secret.test.ts +0 -37
- package/models/__tests__/storage.k8s.io.storageclass.test.ts +0 -22
- package/models/__tests__/workload.test.ts +0 -91
- package/plugins/clean-html.js +0 -53
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +0 -49
- package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +0 -7
- package/plugins/index.js +0 -11
- package/plugins/steve/__tests__/resource-utils.test.ts +0 -159
- package/plugins/steve/__tests__/steve-class.spec.ts +0 -59
- package/plugins/steve/__tests__/utils/steve-mocks.ts +0 -31
- package/plugins/steve/resource-utils.ts +0 -38
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +0 -50
- package/server/har-file.js +0 -183
- package/store/__tests__/type-map.test.ts +0 -1122
- package/tsconfig.paths.json +0 -18
- package/utils/azure.js +0 -24
- package/utils/clipboard.js +0 -5
- /package/components/form/__tests__/{NameNsDescription.test.ts → NameNsDescription.ts} +0 -0
- /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.test.ts → selectors.ts} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/networking/ACE.vue → ACE.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/AgentConfiguration.vue → AgentConfiguration.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/upgrade/DrainOptions.vue → DrainOptions.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/MemberRoles.vue → MemberRoles.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryConfigs.vue → RegistryConfigs.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryMirrors.vue → RegistryMirrors.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{tabs/etcd/S3Config.vue → S3Config.vue} +0 -0
- /package/plugins/dashboard-store/__tests__/{actions.test.ts → actions.spec.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{getters.test.ts → getters.spec.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
package/pages/auth/setup.vue
CHANGED
|
@@ -18,10 +18,6 @@ import Password from '@shell/components/form/Password';
|
|
|
18
18
|
import { applyProducts } from '@shell/store/type-map';
|
|
19
19
|
import BrandImage from '@shell/components/BrandImage';
|
|
20
20
|
import { waitFor } from '@shell/utils/async';
|
|
21
|
-
import { Banner } from '@components/Banner';
|
|
22
|
-
import FormValidation from '@shell/mixins/form-validation';
|
|
23
|
-
import isUrl from 'is-url';
|
|
24
|
-
import { isLocalhost } from '@shell/utils/validators/setting';
|
|
25
21
|
|
|
26
22
|
const calcIsFirstLogin = (store) => {
|
|
27
23
|
const firstLoginSetting = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.FIRST_LOGIN);
|
|
@@ -38,18 +34,13 @@ const calcMustChangePassword = async(store) => {
|
|
|
38
34
|
};
|
|
39
35
|
|
|
40
36
|
export default {
|
|
41
|
-
|
|
37
|
+
layout: 'unauthenticated',
|
|
42
38
|
|
|
43
39
|
data() {
|
|
44
40
|
return {
|
|
45
41
|
passwordOptions: [
|
|
46
42
|
{ label: this.t('setup.useRandom'), value: true },
|
|
47
43
|
{ label: this.t('setup.useManual'), value: false }],
|
|
48
|
-
fvFormRuleSets: [{
|
|
49
|
-
path: 'serverUrl',
|
|
50
|
-
rootObject: this,
|
|
51
|
-
rules: ['required', 'https', 'url', 'trailingForwardSlash']
|
|
52
|
-
}]
|
|
53
44
|
};
|
|
54
45
|
},
|
|
55
46
|
|
|
@@ -87,7 +78,7 @@ export default {
|
|
|
87
78
|
},
|
|
88
79
|
|
|
89
80
|
components: {
|
|
90
|
-
AsyncButton, LabeledInput, CopyToClipboard, Checkbox, RadioGroup, Password, BrandImage
|
|
81
|
+
AsyncButton, LabeledInput, CopyToClipboard, Checkbox, RadioGroup, Password, BrandImage
|
|
91
82
|
},
|
|
92
83
|
|
|
93
84
|
async asyncData({ route, req, store }) {
|
|
@@ -144,6 +135,8 @@ export default {
|
|
|
144
135
|
|
|
145
136
|
if (serverUrlSetting?.value) {
|
|
146
137
|
serverUrl = serverUrlSetting.value;
|
|
138
|
+
} else if ( process.server ) {
|
|
139
|
+
serverUrl = req.headers.host;
|
|
147
140
|
} else {
|
|
148
141
|
serverUrl = window.location.origin;
|
|
149
142
|
}
|
|
@@ -198,10 +191,6 @@ export default {
|
|
|
198
191
|
}
|
|
199
192
|
}
|
|
200
193
|
|
|
201
|
-
if (!isUrl(this.serverUrl) || this.fvGetPathErrors(['serverUrl']).length > 0) {
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
194
|
return true;
|
|
206
195
|
},
|
|
207
196
|
|
|
@@ -209,10 +198,6 @@ export default {
|
|
|
209
198
|
const out = findBy(this.principals, 'me', true);
|
|
210
199
|
|
|
211
200
|
return out;
|
|
212
|
-
},
|
|
213
|
-
|
|
214
|
-
showLocalhostWarning() {
|
|
215
|
-
return isLocalhost(this.serverUrl);
|
|
216
201
|
}
|
|
217
202
|
},
|
|
218
203
|
|
|
@@ -280,10 +265,6 @@ export default {
|
|
|
280
265
|
done() {
|
|
281
266
|
this.$router.replace('/');
|
|
282
267
|
},
|
|
283
|
-
|
|
284
|
-
onServerUrlChange(value) {
|
|
285
|
-
this.serverUrl = value.trim();
|
|
286
|
-
},
|
|
287
268
|
},
|
|
288
269
|
};
|
|
289
270
|
</script>
|
|
@@ -387,24 +368,10 @@ export default {
|
|
|
387
368
|
/>
|
|
388
369
|
</p>
|
|
389
370
|
<div class="mt-20">
|
|
390
|
-
<Banner
|
|
391
|
-
v-if="showLocalhostWarning"
|
|
392
|
-
color="warning"
|
|
393
|
-
:label="t('validation.setting.serverUrl.localhost')"
|
|
394
|
-
/>
|
|
395
|
-
<Banner
|
|
396
|
-
v-for="(err, i) in fvGetPathErrors(['serverUrl'])"
|
|
397
|
-
:key="i"
|
|
398
|
-
color="error"
|
|
399
|
-
:label="err"
|
|
400
|
-
/>
|
|
401
371
|
<LabeledInput
|
|
402
372
|
v-model="serverUrl"
|
|
403
373
|
:label="t('setup.serverUrl.label')"
|
|
404
374
|
data-testid="setup-server-url"
|
|
405
|
-
:rules="fvGetAndReportPathRules('serverUrl')"
|
|
406
|
-
:required="true"
|
|
407
|
-
@input="onServerUrlChange"
|
|
408
375
|
/>
|
|
409
376
|
</div>
|
|
410
377
|
</template>
|
package/pages/auth/verify.vue
CHANGED
|
@@ -17,14 +17,9 @@ function reply(err, code) {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
function isSaml($route) {
|
|
21
|
-
const { query } = $route;
|
|
22
|
-
const configQuery = get(query, 'config');
|
|
23
|
-
|
|
24
|
-
return samlProviders.includes(configQuery);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
20
|
export default {
|
|
21
|
+
layout: 'unauthenticated',
|
|
22
|
+
|
|
28
23
|
async fetch({ store, route, redirect }) {
|
|
29
24
|
const code = route.query[GITHUB_CODE];
|
|
30
25
|
const stateStr = route.query[GITHUB_NONCE];
|
|
@@ -48,14 +43,9 @@ export default {
|
|
|
48
43
|
try {
|
|
49
44
|
parsed = JSON.parse(base64Decode((stateStr)));
|
|
50
45
|
} catch (err) {
|
|
51
|
-
if (isSaml(route)) {
|
|
52
|
-
// This is an ok failure. SAML has no state string so a failure is fine (see similar check in mounted).
|
|
53
|
-
// This whole file could be re-written with that in mind, but this change keeps things simple and fixes a breaking addition
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
46
|
const out = store.getters['i18n/t'](`login.error`);
|
|
57
47
|
|
|
58
|
-
console.error('Failed to parse nonce'
|
|
48
|
+
console.error('Failed to parse nonce'); // eslint-disable-line no-console
|
|
59
49
|
|
|
60
50
|
redirect(`/auth/login?err=${ escape(out) }`);
|
|
61
51
|
|
|
@@ -127,8 +117,12 @@ export default {
|
|
|
127
117
|
window.close();
|
|
128
118
|
}
|
|
129
119
|
} else {
|
|
120
|
+
const { query } = this.$route;
|
|
121
|
+
|
|
130
122
|
if ( window.opener ) {
|
|
131
|
-
|
|
123
|
+
const configQuery = get(query, 'config');
|
|
124
|
+
|
|
125
|
+
if ( samlProviders.includes(configQuery) ) {
|
|
132
126
|
if ( window.opener.window.onAuthTest ) {
|
|
133
127
|
reply(null, null);
|
|
134
128
|
} else {
|
|
@@ -2,15 +2,30 @@ import { ignoreVariables } from '@shell/pages/c/_cluster/apps/charts/install.hel
|
|
|
2
2
|
|
|
3
3
|
describe('fX: ignoreVariables', () => {
|
|
4
4
|
describe.each([['epinio', 'global.rbac.pspEnabled']])('given chart %p with path %p', (name, path) => {
|
|
5
|
+
it.each([
|
|
6
|
+
['v1.24.11+rke2r1'],
|
|
7
|
+
])('should not return variable path list if cluster has k8s version %p', (version) => {
|
|
8
|
+
const cluster = { kubernetesVersion: version };
|
|
9
|
+
const data = {
|
|
10
|
+
chart: { name },
|
|
11
|
+
values: { global: { rbac: { pspEnabled: undefined } } }
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const paths = ignoreVariables(cluster, data);
|
|
15
|
+
|
|
16
|
+
expect(paths).toStrictEqual([]);
|
|
17
|
+
});
|
|
18
|
+
|
|
5
19
|
it.each([
|
|
6
20
|
['v1.25.11+rke2r1'],
|
|
7
|
-
])('should return questions', () => {
|
|
21
|
+
])('should return questions if cluster has k8s version %p', (version) => {
|
|
22
|
+
const cluster = { kubernetesVersion: version };
|
|
8
23
|
const data = {
|
|
9
24
|
chart: { name },
|
|
10
25
|
values: { global: { rbac: { pspEnabled: undefined } } }
|
|
11
26
|
};
|
|
12
27
|
|
|
13
|
-
const paths = ignoreVariables(data);
|
|
28
|
+
const paths = ignoreVariables(cluster, data);
|
|
14
29
|
|
|
15
30
|
expect(paths).toStrictEqual([path]);
|
|
16
31
|
});
|
|
@@ -54,6 +54,7 @@ export default {
|
|
|
54
54
|
searchQuery: null,
|
|
55
55
|
showDeprecated: null,
|
|
56
56
|
showHidden: null,
|
|
57
|
+
isPspLegacy: false,
|
|
57
58
|
chartOptions: [
|
|
58
59
|
{
|
|
59
60
|
label: 'Browse',
|
|
@@ -138,11 +139,6 @@ export default {
|
|
|
138
139
|
return reducedRepos;
|
|
139
140
|
},
|
|
140
141
|
|
|
141
|
-
/**
|
|
142
|
-
* Filter allll charts by invalid entries (deprecated, hidden and ui plugin).
|
|
143
|
-
*
|
|
144
|
-
* This does not include any user provided filters (like selected repos, categories and text query)
|
|
145
|
-
*/
|
|
146
142
|
enabledCharts() {
|
|
147
143
|
return (this.allCharts || []).filter((c) => {
|
|
148
144
|
if ( c.deprecated && !this.showDeprecated ) {
|
|
@@ -153,6 +149,10 @@ export default {
|
|
|
153
149
|
return false;
|
|
154
150
|
}
|
|
155
151
|
|
|
152
|
+
if ( this.hideRepos.includes(c.repoKey) ) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
156
|
if (isUIPlugin(c)) {
|
|
157
157
|
return false;
|
|
158
158
|
}
|
|
@@ -161,28 +161,26 @@ export default {
|
|
|
161
161
|
});
|
|
162
162
|
},
|
|
163
163
|
|
|
164
|
-
/**
|
|
165
|
-
* Filter enabled charts allll filters. These are what the user will see in the list
|
|
166
|
-
*/
|
|
167
164
|
filteredCharts() {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
165
|
+
const enabledCharts = (this.enabledCharts || []);
|
|
166
|
+
const clusterProvider = this.currentCluster.status.provider || 'other';
|
|
167
|
+
|
|
168
|
+
return filterAndArrangeCharts(enabledCharts, {
|
|
169
|
+
clusterProvider,
|
|
170
|
+
category: this.category,
|
|
171
|
+
searchQuery: this.searchQuery,
|
|
172
|
+
showDeprecated: this.showDeprecated,
|
|
173
|
+
showHidden: this.showHidden,
|
|
174
|
+
hideRepos: this.hideRepos,
|
|
175
|
+
hideTypes: [CATALOG._CLUSTER_TPL],
|
|
176
|
+
showPrerelease: this.$store.getters['prefs/get'](SHOW_PRE_RELEASE),
|
|
172
177
|
});
|
|
173
178
|
},
|
|
174
179
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
*
|
|
178
|
-
* This will power the carousel
|
|
179
|
-
*/
|
|
180
|
-
featuredCharts() {
|
|
181
|
-
const filteredCharts = this.filterCharts({});
|
|
180
|
+
getFeaturedCharts() {
|
|
181
|
+
const allCharts = (this.filteredCharts || []);
|
|
182
182
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
const featuredCharts = filteredCharts.filter((value) => value.featured).sort((a, b) => a.featured - b.featured);
|
|
183
|
+
const featuredCharts = allCharts.filter((value) => value.featured).sort((a, b) => a.featured - b.featured);
|
|
186
184
|
|
|
187
185
|
return featuredCharts.slice(0, 5);
|
|
188
186
|
},
|
|
@@ -190,13 +188,7 @@ export default {
|
|
|
190
188
|
categories() {
|
|
191
189
|
const map = {};
|
|
192
190
|
|
|
193
|
-
|
|
194
|
-
const charts = this.filterCharts({
|
|
195
|
-
searchQuery: this.searchQuery,
|
|
196
|
-
hideRepos: this.hideRepos
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
for ( const chart of charts ) {
|
|
191
|
+
for ( const chart of this.enabledCharts ) {
|
|
200
192
|
for ( const c of chart.categories ) {
|
|
201
193
|
if ( !map[c] ) {
|
|
202
194
|
const labelKey = `catalog.charts.categories.${ lcFirst(c) }`;
|
|
@@ -217,14 +209,14 @@ export default {
|
|
|
217
209
|
out.unshift({
|
|
218
210
|
label: this.t('catalog.charts.categories.all'),
|
|
219
211
|
value: '',
|
|
220
|
-
count:
|
|
212
|
+
count: this.enabledCharts.length
|
|
221
213
|
});
|
|
222
214
|
|
|
223
|
-
return
|
|
215
|
+
return out;
|
|
224
216
|
},
|
|
225
217
|
|
|
226
218
|
showCarousel() {
|
|
227
|
-
return this.chartMode === 'featured' && this.
|
|
219
|
+
return this.chartMode === 'featured' && this.getFeaturedCharts.length;
|
|
228
220
|
}
|
|
229
221
|
|
|
230
222
|
},
|
|
@@ -249,6 +241,14 @@ export default {
|
|
|
249
241
|
}
|
|
250
242
|
},
|
|
251
243
|
|
|
244
|
+
created() {
|
|
245
|
+
const release = this.currentCluster?.status?.version?.gitVersion || '';
|
|
246
|
+
const isRKE2 = release.includes('rke2');
|
|
247
|
+
const version = release.match(/\d+/g);
|
|
248
|
+
|
|
249
|
+
this.isPspLegacy = version?.length ? isRKE2 && (+version[0] === 1 && +version[1] < 25) : false;
|
|
250
|
+
},
|
|
251
|
+
|
|
252
252
|
methods: {
|
|
253
253
|
colorForChart(chart) {
|
|
254
254
|
const repos = this.repoOptions;
|
|
@@ -343,22 +343,6 @@ export default {
|
|
|
343
343
|
btnCb(false);
|
|
344
344
|
}
|
|
345
345
|
},
|
|
346
|
-
|
|
347
|
-
filterCharts({ category, searchQuery, hideRepos }) {
|
|
348
|
-
const enabledCharts = (this.enabledCharts || []);
|
|
349
|
-
const clusterProvider = this.currentCluster.status.provider || 'other';
|
|
350
|
-
|
|
351
|
-
return filterAndArrangeCharts(enabledCharts, {
|
|
352
|
-
clusterProvider,
|
|
353
|
-
category,
|
|
354
|
-
searchQuery,
|
|
355
|
-
showDeprecated: this.showDeprecated,
|
|
356
|
-
showHidden: this.showHidden,
|
|
357
|
-
hideRepos,
|
|
358
|
-
hideTypes: [CATALOG._CLUSTER_TPL],
|
|
359
|
-
showPrerelease: this.$store.getters['prefs/get'](SHOW_PRE_RELEASE),
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
346
|
},
|
|
363
347
|
};
|
|
364
348
|
</script>
|
|
@@ -376,7 +360,7 @@ export default {
|
|
|
376
360
|
</h1>
|
|
377
361
|
</div>
|
|
378
362
|
<div
|
|
379
|
-
v-if="
|
|
363
|
+
v-if="getFeaturedCharts.length > 0"
|
|
380
364
|
class="actions-container"
|
|
381
365
|
>
|
|
382
366
|
<ButtonGroup
|
|
@@ -388,11 +372,17 @@ export default {
|
|
|
388
372
|
<div v-if="showCarousel">
|
|
389
373
|
<h3>{{ t('catalog.charts.featuredCharts') }}</h3>
|
|
390
374
|
<Carousel
|
|
391
|
-
:sliders="
|
|
375
|
+
:sliders="getFeaturedCharts"
|
|
392
376
|
@clicked="(row) => selectChart(row)"
|
|
393
377
|
/>
|
|
394
378
|
</div>
|
|
395
379
|
|
|
380
|
+
<Banner
|
|
381
|
+
v-if="isPspLegacy"
|
|
382
|
+
color="warning"
|
|
383
|
+
:label="t('catalog.chart.banner.legacy')"
|
|
384
|
+
/>
|
|
385
|
+
|
|
396
386
|
<TypeDescription resource="chart" />
|
|
397
387
|
<div class="left-right-split">
|
|
398
388
|
<Select
|
|
@@ -539,21 +529,22 @@ export default {
|
|
|
539
529
|
}
|
|
540
530
|
}
|
|
541
531
|
}
|
|
542
|
-
}
|
|
532
|
+
}
|
|
543
533
|
|
|
544
534
|
.checkbox-select {
|
|
545
|
-
|
|
535
|
+
.vs__search {
|
|
546
536
|
position: absolute;
|
|
547
537
|
right: 0
|
|
548
538
|
}
|
|
549
539
|
|
|
550
|
-
|
|
540
|
+
.vs__selected-options {
|
|
551
541
|
overflow: hidden;
|
|
552
542
|
white-space: nowrap;
|
|
553
543
|
text-overflow: ellipsis;
|
|
554
544
|
display: inline-block;
|
|
555
545
|
line-height: 2.4rem;
|
|
556
546
|
}
|
|
547
|
+
|
|
557
548
|
}
|
|
558
549
|
|
|
559
550
|
.checkbox-outer-container.in-select {
|
|
@@ -561,7 +552,7 @@ export default {
|
|
|
561
552
|
padding: 7px 0 6px 13px;
|
|
562
553
|
width: calc(100% + 10px);
|
|
563
554
|
|
|
564
|
-
::v-deep
|
|
555
|
+
::v-deep.checkbox-label {
|
|
565
556
|
display: flex;
|
|
566
557
|
align-items: center;
|
|
567
558
|
|
|
@@ -576,7 +567,7 @@ export default {
|
|
|
576
567
|
}
|
|
577
568
|
}
|
|
578
569
|
|
|
579
|
-
&:hover ::v-deep
|
|
570
|
+
&:hover ::v-deep.checkbox-label {
|
|
580
571
|
color: var(--body-text);
|
|
581
572
|
}
|
|
582
573
|
|
|
@@ -584,7 +575,7 @@ export default {
|
|
|
584
575
|
&:hover {
|
|
585
576
|
background: var(--app-rancher-accent);
|
|
586
577
|
}
|
|
587
|
-
&:hover ::v-deep
|
|
578
|
+
&:hover ::v-deep.checkbox-label {
|
|
588
579
|
color: var(--app-rancher-accent-text);
|
|
589
580
|
}
|
|
590
581
|
& i {
|
|
@@ -596,7 +587,7 @@ export default {
|
|
|
596
587
|
&:hover {
|
|
597
588
|
background: var(--app-partner-accent);
|
|
598
589
|
}
|
|
599
|
-
&:hover ::v-deep
|
|
590
|
+
&:hover ::v-deep.checkbox-label {
|
|
600
591
|
color: var(--app-partner-accent-text);
|
|
601
592
|
}
|
|
602
593
|
& i {
|
|
@@ -608,7 +599,7 @@ export default {
|
|
|
608
599
|
&:hover {
|
|
609
600
|
background: var(--app-color1-accent);
|
|
610
601
|
}
|
|
611
|
-
&:hover ::v-deep
|
|
602
|
+
&:hover ::v-deep.checkbox-label {
|
|
612
603
|
color: var(--app-color1-accent-text);
|
|
613
604
|
}
|
|
614
605
|
& i {
|
|
@@ -619,10 +610,10 @@ export default {
|
|
|
619
610
|
&:hover {
|
|
620
611
|
background: var(--app-color2-accent);
|
|
621
612
|
}
|
|
622
|
-
&:hover ::v-deep
|
|
613
|
+
&:hover ::v-deep.checkbox-label {
|
|
623
614
|
color: var(--app-color2-accent-text);
|
|
624
615
|
}
|
|
625
|
-
|
|
616
|
+
& i {
|
|
626
617
|
color: var(--app-color2-accent)
|
|
627
618
|
}
|
|
628
619
|
}
|
|
@@ -630,7 +621,7 @@ export default {
|
|
|
630
621
|
&:hover {
|
|
631
622
|
background: var(--app-color3-accent);
|
|
632
623
|
}
|
|
633
|
-
&:hover ::v-deep
|
|
624
|
+
&:hover ::v-deep.checkbox-label {
|
|
634
625
|
color: var(--app-color3-accent-text);
|
|
635
626
|
}
|
|
636
627
|
& i {
|
|
@@ -652,7 +643,7 @@ export default {
|
|
|
652
643
|
&:hover {
|
|
653
644
|
background: var(--app-color5-accent);
|
|
654
645
|
}
|
|
655
|
-
&:hover ::v-deep
|
|
646
|
+
&:hover ::v-deep.checkbox-label {
|
|
656
647
|
color: var(--app-color5-accent-text);
|
|
657
648
|
}
|
|
658
649
|
& i {
|
|
@@ -663,7 +654,7 @@ export default {
|
|
|
663
654
|
&:hover {
|
|
664
655
|
background: var(--app-color6-accent);
|
|
665
656
|
}
|
|
666
|
-
&:hover ::v-deep
|
|
657
|
+
&:hover ::v-deep.checkbox-label {
|
|
667
658
|
color: var(--app-color6-accent-text);
|
|
668
659
|
}
|
|
669
660
|
& i {
|
|
@@ -674,7 +665,7 @@ export default {
|
|
|
674
665
|
&:hover {
|
|
675
666
|
background: var(--app-color7-accent);
|
|
676
667
|
}
|
|
677
|
-
&:hover ::v-deep
|
|
668
|
+
&:hover ::v-deep.checkbox-label {
|
|
678
669
|
color: var(--app-color7-accent-text);
|
|
679
670
|
}
|
|
680
671
|
& i {
|
|
@@ -685,6 +676,9 @@ export default {
|
|
|
685
676
|
&:hover {
|
|
686
677
|
background: var(--app-color8-accent);
|
|
687
678
|
}
|
|
679
|
+
&:hover ::v-deep.checkbox-label {
|
|
680
|
+
color: var(--app-color8-accent-text);
|
|
681
|
+
}
|
|
688
682
|
& i {
|
|
689
683
|
color: var(--app-color8-accent)
|
|
690
684
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Return list of variables to filter chart questions
|
|
3
3
|
*/
|
|
4
|
-
export const ignoreVariables = (data) => {
|
|
4
|
+
export const ignoreVariables = (cluster, data) => {
|
|
5
5
|
const pspChartMap = {
|
|
6
6
|
epinio: 'global.rbac.pspEnabled',
|
|
7
7
|
longhorn: 'enablePSP',
|
|
@@ -11,5 +11,16 @@ export const ignoreVariables = (data) => {
|
|
|
11
11
|
};
|
|
12
12
|
const path = pspChartMap[data.chart.name];
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
if (path) {
|
|
15
|
+
const clusterVersion = cluster?.kubernetesVersion || '';
|
|
16
|
+
const version = clusterVersion.match(/\d+/g);
|
|
17
|
+
const isRequiredVersion = version?.length ? +version[0] === 1 && +version[1] < 25 : false;
|
|
18
|
+
|
|
19
|
+
// Provide path as question variable to be ignored
|
|
20
|
+
if (!isRequiredVersion) {
|
|
21
|
+
return [path];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return [];
|
|
15
26
|
};
|
|
@@ -248,7 +248,7 @@ export default {
|
|
|
248
248
|
return;
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
if ( this.version ) {
|
|
251
|
+
if ( this.version && process.client ) {
|
|
252
252
|
/*
|
|
253
253
|
Check if the Helm chart has provided the name
|
|
254
254
|
of a Vue component to use for configuring
|
|
@@ -473,7 +473,7 @@ export default {
|
|
|
473
473
|
* Return list of variables to filter chart questions
|
|
474
474
|
*/
|
|
475
475
|
ignoreVariables() {
|
|
476
|
-
return ignoreVariables(this.versionInfo);
|
|
476
|
+
return ignoreVariables(this.currentCluster, this.versionInfo);
|
|
477
477
|
},
|
|
478
478
|
|
|
479
479
|
namespaceIsNew() {
|
|
@@ -857,9 +857,11 @@ export default {
|
|
|
857
857
|
}
|
|
858
858
|
|
|
859
859
|
if (provCluster?.isRke2) { // isRke2 returns true for both RKE2 and K3s clusters.
|
|
860
|
+
const agentConfig = provCluster.spec?.rkeConfig?.machineSelectorConfig?.find((x) => !x.machineLabelSelector).config;
|
|
861
|
+
|
|
860
862
|
// If a cluster scoped registry exists,
|
|
861
863
|
// it should be used by default.
|
|
862
|
-
const clusterRegistry =
|
|
864
|
+
const clusterRegistry = agentConfig?.['system-default-registry'] || '';
|
|
863
865
|
|
|
864
866
|
if (clusterRegistry) {
|
|
865
867
|
return clusterRegistry;
|
|
@@ -1601,7 +1603,6 @@ export default {
|
|
|
1601
1603
|
v-if="componentHasTabs"
|
|
1602
1604
|
ref="tabs"
|
|
1603
1605
|
:side-tabs="true"
|
|
1604
|
-
:hide-single-tab="true"
|
|
1605
1606
|
:class="{'with-name': showNameEditor}"
|
|
1606
1607
|
class="step__values__content"
|
|
1607
1608
|
@changed="tabChanged($event)"
|
|
@@ -1646,7 +1647,6 @@ export default {
|
|
|
1646
1647
|
v-else-if="hasQuestions && showQuestions"
|
|
1647
1648
|
ref="tabs"
|
|
1648
1649
|
:side-tabs="true"
|
|
1649
|
-
:hide-single-tab="true"
|
|
1650
1650
|
:class="{'with-name': showNameEditor}"
|
|
1651
1651
|
class="step__values__content"
|
|
1652
1652
|
@changed="tabChanged($event)"
|