dashboard-shell-shell 1.0.122 → 1.0.1000000081
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/brand/harvester/favicon.png +0 -0
- package/assets/brand/suse/favicon.png +0 -0
- package/assets/icons/iconfont.css +19 -3
- package/assets/icons/iconfont.js +1 -1
- package/assets/icons/iconfont.json +28 -0
- package/assets/icons/iconfont.ttf +0 -0
- package/assets/icons/iconfont.woff +0 -0
- package/assets/icons/iconfont.woff2 +0 -0
- package/assets/images/pl/half-logo.svg +2 -23
- package/assets/styles/base/_functions.scss +0 -0
- package/assets/styles/base/_mixins.scss +0 -0
- package/assets/styles/base/_variables.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +0 -1
- package/assets/styles/global/_layout.scss +1 -1
- package/assets/styles/global/_select.scss +4 -2
- package/assets/styles/global/_table.scss +5 -0
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/assets/translations/en-us.yaml +1 -1
- package/assets/translations/zh-hans.yaml +25 -15
- package/chart/monitoring/index.vue +3 -1
- package/chart/monitoring/prometheus/index.vue +13 -10
- package/cloud-credential/aws.vue +2 -0
- package/components/ActionDropdown.vue +1 -1
- package/components/ActionDropdownShell.vue +71 -0
- package/components/ActionMenu.vue +2 -2
- package/components/ActionMenuShell.vue +3 -0
- package/components/AppModal.vue +84 -8
- package/components/AssignTo.vue +25 -11
- package/components/AsyncButton.vue +24 -7
- package/components/BannerGraphic.vue +1 -0
- package/components/ButtonDropdown.vue +26 -4
- package/components/ButtonGroup.vue +4 -0
- package/components/ButtonMultiAction.vue +1 -0
- package/components/CodeMirror.vue +19 -6
- package/components/CommunityLinks.vue +3 -3
- package/components/ConsumptionGauge.vue +24 -5
- package/components/CopyToClipboardText.vue +2 -1
- package/components/CruResource.vue +13 -7
- package/components/CruResourceFooter.vue +2 -2
- package/components/DashboardOptions.vue +29 -17
- package/components/DetailText.vue +5 -0
- package/components/DisableAuthProviderModal.vue +1 -0
- package/components/DotState.vue +84 -0
- package/components/ExplorerMembers.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +89 -16
- package/components/FixedBanner.vue +19 -12
- package/components/GlobalRoleBindings.vue +5 -1
- package/components/GrafanaDashboard.vue +4 -4
- package/components/GrowlManager.vue +4 -1
- package/components/HardwareResourceGauge.vue +39 -3
- package/components/InfoBox.vue +3 -3
- package/components/InputOrDisplay.vue +28 -2
- package/components/LabelValue.vue +20 -1
- package/components/LandingPagePreference.vue +5 -3
- package/components/LocaleSelector.vue +39 -93
- package/components/ModalManager.vue +55 -0
- package/components/ModalWithCard.vue +13 -3
- package/components/MoveModal.vue +1 -0
- package/components/PodSecurityAdmission.vue +1 -1
- package/components/PromptChangePassword.vue +1 -1
- package/components/PromptModal.vue +16 -3
- package/components/PromptRemove.vue +29 -9
- package/components/PromptRestore.vue +1 -0
- package/components/ResourceCancelModal.vue +1 -0
- package/components/ResourceDetail/Masthead.vue +52 -17
- package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
- package/components/ResourceDetail/index.vue +54 -16
- package/components/ResourceList/Masthead.vue +9 -4
- package/components/ResourceList/index.vue +4 -3
- package/components/ResourceTable.vue +1 -0
- package/components/SideNav.vue +20 -15
- package/components/SlideInPanelManager.vue +126 -0
- package/components/SortableTable/THead.vue +10 -4
- package/components/SortableTable/actions.js +1 -1
- package/components/SortableTable/index.vue +540 -553
- package/components/SortableTable/selection.js +2 -13
- package/components/StatusBadge.vue +77 -0
- package/components/Tabbed/Tab.vue +3 -3
- package/components/Tabbed/index.vue +47 -29
- package/components/Wizard.vue +2 -2
- package/components/YamlEditor.vue +1 -1
- package/components/__tests__/AsyncButton.test.ts +2 -2
- package/components/__tests__/FixedBanner.test.ts +3 -3
- package/components/__tests__/ModalManager.spec.ts +176 -0
- package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
- package/components/auth/Principal.vue +10 -3
- package/components/auth/RoleDetailEdit.vue +1 -1
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/form/ArrayList.vue +123 -85
- package/components/form/ArrayListGrouped.vue +10 -2
- package/components/form/ArrayListSelect.vue +1 -1
- package/components/form/Command.vue +6 -15
- package/components/form/EnvVars.vue +16 -8
- package/components/form/Footer.vue +10 -7
- package/components/form/HealthCheck.vue +3 -3
- package/components/form/HookOption.vue +11 -16
- package/components/form/InputWithSelect.vue +6 -5
- package/components/form/KeyValue.vue +39 -10
- package/components/form/LabeledSelect.vue +73 -77
- package/components/form/Labels.vue +6 -3
- package/components/form/LifecycleHooks.vue +3 -3
- package/components/form/MatchExpressions.vue +42 -17
- package/components/form/NameNsDescription.vue +163 -116
- package/components/form/Networking.vue +20 -12
- package/components/form/NodeAffinity.vue +31 -23
- package/components/form/NodeScheduling.vue +13 -3
- package/components/form/Password.vue +11 -5
- package/components/form/PodAffinity.vue +47 -48
- package/components/form/Probe.vue +68 -66
- package/components/form/ResourceQuota/Namespace.vue +4 -4
- package/components/form/ResourceQuota/NamespaceRow.vue +5 -7
- package/components/form/ResourceQuota/Project.vue +9 -5
- package/components/form/ResourceQuota/ProjectRow.vue +4 -6
- package/components/form/ResourceSelector.vue +7 -9
- package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +6 -3
- package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +12 -1
- package/components/form/SSHKnownHosts/index.vue +16 -2
- package/components/form/Security.vue +54 -56
- package/components/form/Select.vue +44 -7
- package/components/form/ShellInput.vue +5 -1
- package/components/form/SimpleSecretSelector.vue +29 -9
- package/components/form/Tolerations.vue +5 -1
- package/components/form/UnitInput.vue +10 -5
- package/components/form/ValueFromResource.vue +134 -121
- package/components/form/WorkloadPorts.vue +18 -18
- package/components/form/__tests__/ArrayList.test.ts +5 -2
- package/components/form/__tests__/MatchExpressions.test.ts +12 -12
- package/components/form/__tests__/NameNsDescription.test.ts +115 -14
- package/components/form/__tests__/Probe.test.ts +12 -8
- package/components/form/__tests__/SSHKnownHosts.test.ts +11 -0
- package/components/form/__tests__/Select.test.ts +37 -0
- package/components/form/__tests__/UnitInput.test.ts +4 -5
- package/components/formatter/BadgeStateFormatter.vue +8 -5
- package/components/formatter/InternalExternalIP.vue +2 -0
- package/components/formatter/LiveDate.vue +3 -3
- package/components/formatter/SecretData.vue +20 -7
- package/components/nav/Favorite.vue +5 -1
- package/components/nav/Group.vue +18 -4
- package/components/nav/Header.vue +39 -13
- package/components/nav/Jump.vue +7 -0
- package/components/nav/NamespaceFilter.vue +21 -11
- package/components/nav/Pinned.vue +1 -1
- package/components/nav/TopLevelMenu.vue +5 -17
- package/components/nav/Type.vue +30 -33
- package/components/nav/__tests__/TopLevelMenu.test.ts +0 -40
- package/components/rancherResourceDetail/Masthead.vue +769 -0
- package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
- package/components/rancherResourceDetail/index.vue +591 -0
- package/components/rancherResourceList/Masthead-btn.vue +225 -0
- package/components/rancherResourceList/Masthead.vue +375 -0
- package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
- package/components/rancherResourceList/index.vue +307 -0
- package/components/rancherResourceList/resource-list.config.js +7 -0
- package/components/rancherResourceTable.vue +783 -0
- package/components/rancherSortableTable/THead.vue +561 -0
- package/components/rancherSortableTable/actions.js +153 -0
- package/components/rancherSortableTable/advanced-filtering.js +272 -0
- package/components/rancherSortableTable/debug.js +117 -0
- package/components/rancherSortableTable/filtering.js +290 -0
- package/components/rancherSortableTable/grouping.js +48 -0
- package/components/rancherSortableTable/index.vue +2712 -0
- package/components/rancherSortableTable/paging.js +155 -0
- package/components/rancherSortableTable/selection.js +629 -0
- package/components/rancherSortableTable/sortable-config.ts +4 -0
- package/components/rancherSortableTable/sorting.js +129 -0
- package/components/templates/blank.vue +4 -1
- package/components/templates/default.vue +8 -0
- package/components/templates/home.vue +10 -1
- package/components/templates/plain.vue +10 -1
- package/composables/focusTrap.ts +11 -3
- package/composables/useRuntimeFlag.ts +29 -0
- package/config/private-label.js +15 -10
- package/config/router/routes.js +21 -13
- package/config/store.js +4 -0
- package/config/table-headers.js +3 -2
- package/config/uiplugins.js +5 -1
- package/core/plugin-routes.ts +5 -115
- package/core/plugins.js +1 -1
- package/core/types.ts +23 -2
- package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +84 -23
- package/detail/autoscaling.horizontalpodautoscaler/index.vue +13 -3
- package/detail/provisioning.cattle.io.cluster.vue +72 -6
- package/dialog/AddCustomBadgeDialog.vue +1 -0
- package/dialog/DeactivateDriverDialog.vue +5 -4
- package/dialog/ForceMachineRemoveDialog.vue +6 -3
- package/dialog/GitRepoForceUpdateDialog.vue +1 -1
- package/dialog/ScalePoolDownDialog.vue +2 -2
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
- package/edit/auth/__tests__/oidc.test.ts +162 -88
- package/edit/auth/azuread.vue +2 -1
- package/edit/auth/github.vue +1 -1
- package/edit/auth/googleoauth.vue +5 -1
- package/edit/auth/ldap/__tests__/config.test.ts +0 -14
- package/edit/auth/ldap/config.vue +0 -24
- package/edit/auth/ldap/index.vue +1 -1
- package/edit/auth/oidc.vue +39 -6
- package/edit/auth/saml.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +5 -2
- package/edit/cloudcredential.vue +24 -9
- package/edit/fleet.cattle.io.clustergroup.vue +5 -3
- package/edit/fleet.cattle.io.gitrepo.vue +2 -0
- package/edit/logging-flow/Match.vue +1 -1
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +40 -9
- package/edit/management.cattle.io.user.vue +28 -3
- package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +31 -31
- package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +36 -12
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
- package/edit/monitoring.coreos.com.receiver/auth.vue +29 -29
- package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
- package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
- package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
- package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
- package/edit/namespace.vue +1 -2
- package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
- package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
- package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
- package/edit/persistentvolume/__tests__/persistentvolume.test.ts +14 -2
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -9
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -10
- package/edit/provisioning.cattle.io.cluster/rke2.vue +31 -40
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +5 -2
- package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +3 -3
- package/edit/service.vue +0 -3
- package/edit/token.vue +32 -11
- package/edit/workload/Job.vue +6 -6
- package/edit/workload/__tests__/Job.test.ts +0 -1
- package/edit/workload/index.vue +1 -0
- package/edit/workload/mixins/workload.js +3 -3
- package/initialize/install-plugins.js +2 -1
- package/list/harvesterhci.io.management.cluster.vue +4 -1
- package/list/management.cattle.io.feature.vue +1 -0
- package/list/namespace.vue +3 -1
- package/list/provisioning.cattle.io.cluster.vue +20 -12
- package/list/workload.vue +7 -6
- package/machine-config/__tests__/vmwarevsphere.test.ts +48 -3
- package/machine-config/azure.vue +16 -4
- package/machine-config/vmwarevsphere.vue +16 -0
- package/mixins/resource-fetch.js +2 -1
- package/models/__tests__/logging.banzaicloud.io.flow.test.ts +88 -0
- package/models/__tests__/namespace.test.ts +25 -1
- package/models/cloudcredential.js +5 -0
- package/models/kontainerdriver.js +6 -3
- package/models/logging.banzaicloud.io.flow.js +2 -1
- package/models/management.cattle.io.node.js +3 -3
- package/models/management.cattle.io.setting.js +2 -1
- package/models/namespace.js +4 -5
- package/models/nodedriver.js +6 -3
- package/models/storage.k8s.io.storageclass.js +2 -2
- package/models/workload.js +4 -1
- package/package.json +1 -1
- package/pages/about.vue +16 -8
- package/pages/account/index.vue +80 -24
- package/pages/account/pri.vue +229 -0
- package/pages/auth/login.vue +195 -44
- package/pages/auth/logout.vue +4 -1
- package/pages/auth/setup.vue +144 -19
- package/pages/auth/verify.vue +13 -8
- package/pages/auth copy/login.vue +595 -0
- package/pages/auth copy/logout.vue +47 -0
- package/pages/auth copy/setup.vue +523 -0
- package/pages/auth copy/verify.vue +203 -0
- package/pages/c/_cluster/_product/namespaces.vue +5 -5
- package/pages/c/_cluster/apps/charts/chart.vue +1 -1
- 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/monitor/index.vue +2 -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/brand.vue +3 -3
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
- package/pages/diagnostic.vue +59 -11
- package/pages/fail-whale.vue +14 -8
- package/pages/home.vue +24 -18
- package/pages/prefs.vue +9 -7
- package/pages/support/index.vue +4 -1
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/plugins/dashboard-store/normalize.js +3 -1
- package/plugins/dashboard-store/resource-class.js +31 -29
- 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/promptRemove/management.cattle.io.fleetworkspace.vue +1 -1
- package/promptRemove/management.cattle.io.globalrole.vue +1 -1
- package/promptRemove/management.cattle.io.project.vue +2 -2
- package/promptRemove/management.cattle.io.roletemplate.vue +1 -1
- package/promptRemove/pod.vue +1 -1
- package/public/index.html +2 -1
- package/rancher-components/BadgeState/BadgeState.vue +5 -1
- package/rancher-components/Banner/Banner.vue +8 -2
- package/rancher-components/Card/Card.vue +3 -6
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +5 -2
- package/rancher-components/Form/Radio/RadioButton.vue +3 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -5
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -2
- package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -3
- package/rancher-components/RcDropdown/types.ts +1 -0
- package/scripts/clean +0 -0
- package/scripts/extension/bundle +20 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +2 -2
- 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/helm/scripts/package +0 -0
- package/scripts/extension/helm/scripts/patch +0 -0
- package/scripts/extension/helm/scripts/version +0 -0
- package/scripts/extension/helmpatch +44 -31
- package/scripts/extension/parse-tag-name +0 -0
- package/scripts/extension/publish +12 -12
- package/scripts/publish-shell.sh +18 -23
- package/scripts/serve-pkgs +0 -0
- package/scripts/sync-shell-deps +0 -0
- package/scripts/test-plugins-build.sh +4 -6
- package/scripts/typegen.sh +28 -46
- package/server/har-file.js +25 -3
- package/static/favicon.ico +0 -0
- package/static/favicon.png +0 -0
- package/static/loading-indicator.html +2 -2
- package/store/aws.js +9 -2
- package/store/features.js +2 -1
- package/store/i18n.js +3 -3
- package/store/modal.ts +71 -0
- package/store/slideInPanel.ts +47 -0
- package/store/type-map.js +2 -1
- package/types/cloud-shell/index.d.ts +11014 -0
- 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/shell/index.d.ts +118 -128
- package/types/vue-shim.d.ts +4 -1
- package/utils/__tests__/object.test.ts +38 -4
- package/utils/__tests__/string.test.ts +2 -2
- package/utils/auth.js +1 -0
- package/utils/banners.js +0 -45
- package/utils/cluster.js +35 -0
- package/utils/color.js +9 -8
- package/utils/error.js +61 -3
- package/utils/errorTranslate.json +450 -30
- package/utils/object.js +46 -6
- package/utils/router.js +22 -1
- package/utils/select.js +26 -3
- package/utils/string.js +9 -8
- package/utils/title.ts +1 -1
- package/utils/validators/machine-pool.ts +20 -0
- package/vue.config.js +7 -2
- package/components/formatter/ExtensionCache.vue +0 -74
- package/components/formatter/Port.vue +0 -24
- package/components/formatter/SecretType.vue +0 -41
- package/types/resources/fleet.d.ts +0 -57
- package/types/resources/pod-security-admission.ts +0 -36
- package/types/resources/settings.d.ts +0 -93
- package/types/resources/userPreferences.d.ts +0 -13
- package/types/vue-shim.d +0 -20
package/cloud-credential/aws.vue
CHANGED
|
@@ -78,6 +78,7 @@ export default {
|
|
|
78
78
|
:rules="fvGetAndReportPathRules('decodedData.accessKey')"
|
|
79
79
|
:mode="mode"
|
|
80
80
|
:required="true"
|
|
81
|
+
data-testid="access-key"
|
|
81
82
|
@update:value="$emit('valueChanged', 'accessKey', $event)"
|
|
82
83
|
/>
|
|
83
84
|
<LabeledInput
|
|
@@ -89,6 +90,7 @@ export default {
|
|
|
89
90
|
:rules="fvGetAndReportPathRules('decodedData.secretKey')"
|
|
90
91
|
:mode="mode"
|
|
91
92
|
:required="true"
|
|
93
|
+
data-testid="secret-key"
|
|
92
94
|
@update:value="$emit('valueChanged', 'secretKey', $event)"
|
|
93
95
|
/>
|
|
94
96
|
<LabeledSelect
|
|
@@ -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>
|
|
@@ -305,7 +305,7 @@ export default {
|
|
|
305
305
|
color: var(--dropdown-text);
|
|
306
306
|
background-color: var(--dropdown-bg);
|
|
307
307
|
border: 1px solid var(--dropdown-border);
|
|
308
|
-
border-radius:
|
|
308
|
+
border-radius: 3px;
|
|
309
309
|
box-shadow: 0 5px 20px var(--shadow);
|
|
310
310
|
|
|
311
311
|
LI {
|
|
@@ -326,7 +326,7 @@ export default {
|
|
|
326
326
|
|
|
327
327
|
&.divider {
|
|
328
328
|
padding: 0;
|
|
329
|
-
border-bottom:
|
|
329
|
+
border-bottom: 0px solid var(--dropdown-divider);
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
&:not(.divider):hover {
|
|
@@ -18,6 +18,7 @@ type RcDropdownMenuComponentProps = {
|
|
|
18
18
|
dataTestid?: string;
|
|
19
19
|
resource: Object;
|
|
20
20
|
customActions?: DropdownOption[];
|
|
21
|
+
showIcon?: Boolean;
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
const props = defineProps <RcDropdownMenuComponentProps>();
|
|
@@ -89,6 +90,7 @@ const menuOptions = () => {
|
|
|
89
90
|
|
|
90
91
|
return options.value;
|
|
91
92
|
};
|
|
93
|
+
|
|
92
94
|
</script>
|
|
93
95
|
|
|
94
96
|
<template>
|
|
@@ -99,6 +101,7 @@ const menuOptions = () => {
|
|
|
99
101
|
:dropdown-aria-label="dropdownAriaLabel"
|
|
100
102
|
:options="menuOptions()"
|
|
101
103
|
:data-testid="dataTestid"
|
|
104
|
+
:showIcon="showIcon"
|
|
102
105
|
@update:open="openChanged"
|
|
103
106
|
@select="(e: MouseEvent, option: object) => execute(option, e)"
|
|
104
107
|
/>
|
package/components/AppModal.vue
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { defineComponent } from 'vue';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
DEFAULT_FOCUS_TRAP_OPTS,
|
|
5
|
+
useBasicSetupFocusTrap,
|
|
6
|
+
getFirstFocusableElement,
|
|
7
|
+
useWatcherBasedSetupFocusTrapWithDestroyIncluded
|
|
8
|
+
} from '@shell/composables/focusTrap';
|
|
4
9
|
|
|
5
10
|
export const DEFAULT_ITERABLE_NODE_SELECTOR = 'body;';
|
|
6
11
|
|
|
@@ -26,7 +31,7 @@ export default defineComponent({
|
|
|
26
31
|
*/
|
|
27
32
|
width: {
|
|
28
33
|
type: [Number, String],
|
|
29
|
-
default:
|
|
34
|
+
default: 610,
|
|
30
35
|
validator(value) {
|
|
31
36
|
if (typeof value === 'number') {
|
|
32
37
|
return value > 0;
|
|
@@ -80,7 +85,21 @@ export default defineComponent({
|
|
|
80
85
|
returnFocusFirstIterableNodeSelector: {
|
|
81
86
|
type: String,
|
|
82
87
|
default: DEFAULT_ITERABLE_NODE_SELECTOR,
|
|
83
|
-
}
|
|
88
|
+
},
|
|
89
|
+
/**
|
|
90
|
+
* trigger focus trap - but watcher based
|
|
91
|
+
*/
|
|
92
|
+
triggerFocusTrapWatcherBased: {
|
|
93
|
+
type: Boolean,
|
|
94
|
+
default: false,
|
|
95
|
+
},
|
|
96
|
+
/**
|
|
97
|
+
* watcher-based focus trap variable to watch
|
|
98
|
+
*/
|
|
99
|
+
focusTrapWatcherBasedVariable: {
|
|
100
|
+
type: Boolean,
|
|
101
|
+
default: false,
|
|
102
|
+
},
|
|
84
103
|
},
|
|
85
104
|
computed: {
|
|
86
105
|
modalWidth(): string {
|
|
@@ -90,7 +109,7 @@ export default defineComponent({
|
|
|
90
109
|
return `${ this.width }${ uom }`;
|
|
91
110
|
}
|
|
92
111
|
|
|
93
|
-
return '
|
|
112
|
+
return '610px';
|
|
94
113
|
},
|
|
95
114
|
stylesPropToObj(): object {
|
|
96
115
|
return this.styles.split(';')
|
|
@@ -131,7 +150,19 @@ export default defineComponent({
|
|
|
131
150
|
};
|
|
132
151
|
}
|
|
133
152
|
|
|
134
|
-
|
|
153
|
+
if (!props.triggerFocusTrapWatcherBased) {
|
|
154
|
+
useBasicSetupFocusTrap('#modal-container-element', opts);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
created() {
|
|
159
|
+
// This usecase is to cover the PromptModal scenario where it's renders a generic component inside.
|
|
160
|
+
// Due to the architecture of the PromptModal it needs to be handled with a watcher based focus trap
|
|
161
|
+
// but with a dedicated unmount hook
|
|
162
|
+
if (this.triggerFocusTrapWatcherBased) {
|
|
163
|
+
const opts:any = DEFAULT_FOCUS_TRAP_OPTS;
|
|
164
|
+
|
|
165
|
+
useWatcherBasedSetupFocusTrapWithDestroyIncluded(() => this.focusTrapWatcherBasedVariable, '#modal-container-element', opts, true);
|
|
135
166
|
}
|
|
136
167
|
},
|
|
137
168
|
mounted() {
|
|
@@ -150,6 +181,18 @@ export default defineComponent({
|
|
|
150
181
|
this.$emit('close');
|
|
151
182
|
}
|
|
152
183
|
},
|
|
184
|
+
close(event: MouseEvent) {
|
|
185
|
+
console.log('close');
|
|
186
|
+
|
|
187
|
+
if (
|
|
188
|
+
this.$refs.modalRef
|
|
189
|
+
) {
|
|
190
|
+
console.log('clickcolse');
|
|
191
|
+
|
|
192
|
+
this.$emit('close');
|
|
193
|
+
}
|
|
194
|
+
// this.$emit('close');
|
|
195
|
+
},
|
|
153
196
|
handleEscapeKey(event: KeyboardEvent) {
|
|
154
197
|
if (this.clickToClose && event.key === 'Escape') {
|
|
155
198
|
this.$emit('close');
|
|
@@ -190,8 +233,20 @@ export default defineComponent({
|
|
|
190
233
|
:style="modalStyles"
|
|
191
234
|
@click.stop
|
|
192
235
|
>
|
|
236
|
+
<div
|
|
237
|
+
class="close-dailog-icon"
|
|
238
|
+
>
|
|
239
|
+
<button
|
|
240
|
+
class="btn btn-sm role-link hide-bar"
|
|
241
|
+
@click="close"
|
|
242
|
+
>
|
|
243
|
+
<i class="icon icon-x" />
|
|
244
|
+
</button>
|
|
245
|
+
</div>
|
|
246
|
+
<div>
|
|
193
247
|
<slot><!--Empty content--></slot>
|
|
194
248
|
</div>
|
|
249
|
+
</div>
|
|
195
250
|
</div>
|
|
196
251
|
</transition>
|
|
197
252
|
</teleport>
|
|
@@ -204,18 +259,21 @@ export default defineComponent({
|
|
|
204
259
|
left: 0;
|
|
205
260
|
width: 100vw;
|
|
206
261
|
height: 100vh;
|
|
207
|
-
background-color: var(--overlay-bg);
|
|
262
|
+
/* background-color: var(--overlay-bg); */
|
|
263
|
+
background-color: var(--overlay-model-bg);
|
|
208
264
|
display: flex;
|
|
209
265
|
justify-content: center;
|
|
210
266
|
align-items: center;
|
|
211
|
-
z-index: z-index('modalOverlay');
|
|
267
|
+
/* z-index: z-index('modalOverlay'); */
|
|
268
|
+
z-index: 50;
|
|
212
269
|
|
|
213
270
|
.modal-container {
|
|
214
271
|
background-color: var(--modal-bg);
|
|
215
272
|
border-radius: var(--border-radius);
|
|
216
273
|
max-height: 95vh;
|
|
217
274
|
overflow: auto;
|
|
218
|
-
border:
|
|
275
|
+
border: 0px;
|
|
276
|
+
position: relative;
|
|
219
277
|
}
|
|
220
278
|
}
|
|
221
279
|
|
|
@@ -228,4 +286,22 @@ export default defineComponent({
|
|
|
228
286
|
.modal-fade-leave-to {
|
|
229
287
|
opacity: 0;
|
|
230
288
|
}
|
|
289
|
+
.hide-bar{
|
|
290
|
+
width: 32px;
|
|
291
|
+
min-width: 32px !important;
|
|
292
|
+
}
|
|
293
|
+
.close-dailog-icon{
|
|
294
|
+
position: absolute;
|
|
295
|
+
right: 13px;
|
|
296
|
+
top: 18px;
|
|
297
|
+
& > button{
|
|
298
|
+
color:var(--body-text) !important;
|
|
299
|
+
min-width: 32px !important;
|
|
300
|
+
width: 32px !important;
|
|
301
|
+
& > button:hover{
|
|
302
|
+
color:var(--body-text) !important;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
}
|
|
231
307
|
</style>
|
package/components/AssignTo.vue
CHANGED
|
@@ -115,6 +115,7 @@ export default {
|
|
|
115
115
|
styles="background-color: var(--nav-bg); border-radius: var(--border-radius); max-height: 100vh;"
|
|
116
116
|
height="auto"
|
|
117
117
|
:scrollable="true"
|
|
118
|
+
:trigger-focus-trap="true"
|
|
118
119
|
@close="close"
|
|
119
120
|
>
|
|
120
121
|
<Card
|
|
@@ -157,17 +158,20 @@ export default {
|
|
|
157
158
|
</template>
|
|
158
159
|
|
|
159
160
|
<template #actions>
|
|
160
|
-
<
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
161
|
+
<div class="actions-container">
|
|
162
|
+
<button
|
|
163
|
+
class="btn role-secondary"
|
|
164
|
+
@click="close"
|
|
165
|
+
>
|
|
166
|
+
{{ t('generic.cancel') }}
|
|
167
|
+
</button>
|
|
168
|
+
|
|
169
|
+
<AsyncButton
|
|
170
|
+
class="apply-btn"
|
|
171
|
+
mode="apply"
|
|
172
|
+
@click="apply"
|
|
173
|
+
/>
|
|
174
|
+
</div>
|
|
171
175
|
</template>
|
|
172
176
|
</Card>
|
|
173
177
|
</app-modal>
|
|
@@ -181,5 +185,15 @@ export default {
|
|
|
181
185
|
& ::-webkit-scrollbar-corner {
|
|
182
186
|
background: rgba(0,0,0,0);
|
|
183
187
|
}
|
|
188
|
+
|
|
189
|
+
.actions-container {
|
|
190
|
+
display: flex;
|
|
191
|
+
justify-content: flex-end;
|
|
192
|
+
width: 100%;
|
|
193
|
+
|
|
194
|
+
.apply-btn {
|
|
195
|
+
margin-left: 20px;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
184
198
|
}
|
|
185
199
|
</style>
|
|
@@ -11,6 +11,7 @@ export const ASYNC_BUTTON_STATES = {
|
|
|
11
11
|
|
|
12
12
|
const TEXT = 'text';
|
|
13
13
|
const TOOLTIP = 'tooltip';
|
|
14
|
+
const DISABLED_CLASS_STYLE = 'btn-disabled';
|
|
14
15
|
|
|
15
16
|
export type AsyncButtonCallback = (success: boolean) => void;
|
|
16
17
|
|
|
@@ -152,9 +153,29 @@ export default defineComponent({
|
|
|
152
153
|
out[`btn-${ this.size }`] = true;
|
|
153
154
|
}
|
|
154
155
|
|
|
156
|
+
// while we are waiting for the async button to get
|
|
157
|
+
// it's callback we want to the button to appear as disabled
|
|
158
|
+
// but not being actually disabled as need it to be
|
|
159
|
+
// able to return the keyboard navigation focus back to it
|
|
160
|
+
// which can't be done while actually disabled, as per
|
|
161
|
+
// https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#focusabilityofdisabledcontrols
|
|
162
|
+
if (this.phase === ASYNC_BUTTON_STATES.WAITING) {
|
|
163
|
+
out[DISABLED_CLASS_STYLE] = true;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// used to assist e2e testing mostly when waiting for button to return
|
|
167
|
+
// to it's normal state/phase
|
|
168
|
+
if (this.phase === ASYNC_BUTTON_STATES.ACTION) {
|
|
169
|
+
out['ready-for-action'] = true;
|
|
170
|
+
}
|
|
171
|
+
|
|
155
172
|
return out;
|
|
156
173
|
},
|
|
157
174
|
|
|
175
|
+
appearsDisabled(): boolean {
|
|
176
|
+
return this.disabled || this.phase === ASYNC_BUTTON_STATES.WAITING;
|
|
177
|
+
},
|
|
178
|
+
|
|
158
179
|
displayIcon(): string {
|
|
159
180
|
const exists = this.$store.getters['i18n/exists'];
|
|
160
181
|
const t = this.$store.getters['i18n/t'];
|
|
@@ -204,10 +225,6 @@ export default defineComponent({
|
|
|
204
225
|
return this.phase === ASYNC_BUTTON_STATES.WAITING;
|
|
205
226
|
},
|
|
206
227
|
|
|
207
|
-
isDisabled(): boolean {
|
|
208
|
-
return this.disabled || this.phase === ASYNC_BUTTON_STATES.WAITING;
|
|
209
|
-
},
|
|
210
|
-
|
|
211
228
|
isManualRefresh() {
|
|
212
229
|
return this.mode === 'manual-refresh';
|
|
213
230
|
},
|
|
@@ -232,7 +249,7 @@ export default defineComponent({
|
|
|
232
249
|
|
|
233
250
|
methods: {
|
|
234
251
|
clicked() {
|
|
235
|
-
if ( this.
|
|
252
|
+
if ( this.appearsDisabled ) {
|
|
236
253
|
return;
|
|
237
254
|
}
|
|
238
255
|
|
|
@@ -283,8 +300,8 @@ export default defineComponent({
|
|
|
283
300
|
:class="classes"
|
|
284
301
|
:name="name"
|
|
285
302
|
:type="type"
|
|
286
|
-
:disabled="
|
|
287
|
-
:aria-disabled="
|
|
303
|
+
:disabled="disabled"
|
|
304
|
+
:aria-disabled="appearsDisabled"
|
|
288
305
|
:tab-index="tabIndex"
|
|
289
306
|
:data-testid="componentTestid + '-async-button'"
|
|
290
307
|
@click="clicked"
|
|
@@ -196,7 +196,8 @@ export default {
|
|
|
196
196
|
@update:modelValue="$emit('click-action', $event)"
|
|
197
197
|
>
|
|
198
198
|
<template #no-options>
|
|
199
|
-
|
|
199
|
+
暂无数据
|
|
200
|
+
<!-- <slot name="no-options" /> -->
|
|
200
201
|
</template>
|
|
201
202
|
|
|
202
203
|
<template #selected-option="option">
|
|
@@ -247,16 +248,35 @@ export default {
|
|
|
247
248
|
}
|
|
248
249
|
}
|
|
249
250
|
.button-dropdown {
|
|
250
|
-
background: var(--accent-btn);
|
|
251
|
+
/* background: var(--accent-btn); */
|
|
252
|
+
background: var(--accent-btn-hover);
|
|
251
253
|
border: solid 1px var(--link);
|
|
252
254
|
color: var(--link);
|
|
253
255
|
padding: 0;
|
|
254
256
|
|
|
257
|
+
&{
|
|
258
|
+
:deep() .vs__dropdown-toggle .vs__actions,
|
|
259
|
+
:deep() .vs__selected-options {
|
|
260
|
+
background: var(--accent-btn-hover);
|
|
261
|
+
}
|
|
262
|
+
:deep() .vs__selected-options .vs__selected button {
|
|
263
|
+
background-color: transparent;
|
|
264
|
+
color: var(--accent-btn-hover-text);
|
|
265
|
+
}
|
|
266
|
+
:deep() .vs__dropdown-toggle .vs__actions {
|
|
267
|
+
&:after {
|
|
268
|
+
color: var(--accent-btn-hover-text);
|
|
269
|
+
padding-top: 10px;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
255
274
|
&.vs--open :deep() {
|
|
256
275
|
outline: none;
|
|
257
276
|
box-shadow: none;
|
|
258
277
|
}
|
|
259
278
|
|
|
279
|
+
|
|
260
280
|
&:hover {
|
|
261
281
|
:deep() .vs__dropdown-toggle .vs__actions,
|
|
262
282
|
:deep() .vs__selected-options {
|
|
@@ -275,6 +295,7 @@ export default {
|
|
|
275
295
|
|
|
276
296
|
:deep() > .vs__dropdown-toggle {
|
|
277
297
|
width: 100%;
|
|
298
|
+
width: 100px;
|
|
278
299
|
display: grid;
|
|
279
300
|
grid-template-columns: 75% 25%;
|
|
280
301
|
border: none;
|
|
@@ -283,7 +304,7 @@ export default {
|
|
|
283
304
|
.vs__actions {
|
|
284
305
|
|
|
285
306
|
&:after {
|
|
286
|
-
color: var(--
|
|
307
|
+
color: var(--accent-btn-hover-text);
|
|
287
308
|
line-height: 1;
|
|
288
309
|
}
|
|
289
310
|
}
|
|
@@ -297,7 +318,8 @@ export default {
|
|
|
297
318
|
button {
|
|
298
319
|
border: none;
|
|
299
320
|
background: transparent;
|
|
300
|
-
color: var(--
|
|
321
|
+
color: var(--accent-btn-hover-text);
|
|
322
|
+
min-width: 83px;
|
|
301
323
|
}
|
|
302
324
|
}
|
|
303
325
|
.vs__search {
|
|
@@ -77,6 +77,9 @@ export default {
|
|
|
77
77
|
const tooltip = opt.tooltipKey ? this.t(opt.tooltipKey) : opt.tooltip;
|
|
78
78
|
|
|
79
79
|
return ariaLabel || tooltip || label || undefined;
|
|
80
|
+
},
|
|
81
|
+
isPressed(opt) {
|
|
82
|
+
return this.value === opt.value;
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
};
|
|
@@ -97,6 +100,7 @@ export default {
|
|
|
97
100
|
:disabled="disabled || opt.disabled"
|
|
98
101
|
role="button"
|
|
99
102
|
:aria-label="actionAriaLabel(opt)"
|
|
103
|
+
:aria-pressed="isPressed(opt)"
|
|
100
104
|
@click="change(opt.value)"
|
|
101
105
|
>
|
|
102
106
|
<slot
|
|
@@ -5,7 +5,7 @@ import { _EDIT, _VIEW } from '@shell/config/query-params';
|
|
|
5
5
|
export default {
|
|
6
6
|
name: 'CodeMirror',
|
|
7
7
|
|
|
8
|
-
emits: ['onReady', 'onInput', 'onChanges', 'onFocus'
|
|
8
|
+
emits: ['onReady', 'onInput', 'onChanges', 'onFocus'],
|
|
9
9
|
|
|
10
10
|
props: {
|
|
11
11
|
/**
|
|
@@ -140,9 +140,9 @@ export default {
|
|
|
140
140
|
},
|
|
141
141
|
|
|
142
142
|
watch: {
|
|
143
|
-
hasLintErrors(neu) {
|
|
144
|
-
|
|
145
|
-
},
|
|
143
|
+
// hasLintErrors(neu) {
|
|
144
|
+
// this.$emit('validationChanged', !neu);
|
|
145
|
+
// },
|
|
146
146
|
|
|
147
147
|
isCodeMirrorContainerFocused: {
|
|
148
148
|
handler(neu) {
|
|
@@ -209,7 +209,7 @@ export default {
|
|
|
209
209
|
},
|
|
210
210
|
|
|
211
211
|
onReady(codeMirrorRef) {
|
|
212
|
-
this.$emit('validationChanged', true);
|
|
212
|
+
// this.$emit('validationChanged', true);
|
|
213
213
|
|
|
214
214
|
this.$nextTick(() => {
|
|
215
215
|
codeMirrorRef.refresh();
|
|
@@ -279,7 +279,7 @@ export default {
|
|
|
279
279
|
id="code-mirror-el"
|
|
280
280
|
ref="codeMirrorRef"
|
|
281
281
|
:value="value"
|
|
282
|
-
|
|
282
|
+
|
|
283
283
|
:disabled="isDisabled"
|
|
284
284
|
:original-style="true"
|
|
285
285
|
@ready="onReady"
|
|
@@ -288,6 +288,19 @@ export default {
|
|
|
288
288
|
@focus="onFocus"
|
|
289
289
|
@blur="onBlur"
|
|
290
290
|
/>
|
|
291
|
+
<!-- <Codemirror
|
|
292
|
+
id="code-mirror-el"
|
|
293
|
+
ref="codeMirrorRef"
|
|
294
|
+
:value="value"
|
|
295
|
+
:options="combinedOptions"
|
|
296
|
+
:disabled="isDisabled"
|
|
297
|
+
:original-style="true"
|
|
298
|
+
@ready="onReady"
|
|
299
|
+
@input="onInput"
|
|
300
|
+
@changes="onChanges"
|
|
301
|
+
@focus="onFocus"
|
|
302
|
+
@blur="onBlur"
|
|
303
|
+
/> -->
|
|
291
304
|
<span
|
|
292
305
|
v-show="isCodeMirrorFocused"
|
|
293
306
|
class="escape-text"
|
|
@@ -140,7 +140,7 @@ export default {
|
|
|
140
140
|
:aria-label="t('footer.wechat.title')"
|
|
141
141
|
role="link"
|
|
142
142
|
@click="show"
|
|
143
|
-
@
|
|
143
|
+
@keydown.enter="show"
|
|
144
144
|
>
|
|
145
145
|
{{ t('footer.wechat.title') }}
|
|
146
146
|
</a>
|
|
@@ -151,6 +151,7 @@ export default {
|
|
|
151
151
|
name="wechat-modal"
|
|
152
152
|
height="auto"
|
|
153
153
|
:width="640"
|
|
154
|
+
:trigger-focus-trap="true"
|
|
154
155
|
@close="close"
|
|
155
156
|
>
|
|
156
157
|
<div class="wechat-modal">
|
|
@@ -164,8 +165,7 @@ export default {
|
|
|
164
165
|
:aria-label="t('generic.close')"
|
|
165
166
|
role="button"
|
|
166
167
|
@click="close"
|
|
167
|
-
@
|
|
168
|
-
@keyup.space="close"
|
|
168
|
+
@keydown.enter.stop
|
|
169
169
|
>
|
|
170
170
|
{{ t('generic.close') }}
|
|
171
171
|
</button>
|
|
@@ -59,7 +59,11 @@ export default {
|
|
|
59
59
|
usedAsResourceName: {
|
|
60
60
|
type: Boolean,
|
|
61
61
|
defaut: false
|
|
62
|
-
}
|
|
62
|
+
},
|
|
63
|
+
reserveText: {
|
|
64
|
+
type: String,
|
|
65
|
+
defaut: '预留'
|
|
66
|
+
},
|
|
63
67
|
},
|
|
64
68
|
computed: {
|
|
65
69
|
displayUnits() {
|
|
@@ -91,13 +95,13 @@ export default {
|
|
|
91
95
|
</script>
|
|
92
96
|
|
|
93
97
|
<template>
|
|
94
|
-
<div class="consumption-gauge">
|
|
98
|
+
<!-- <div class="consumption-gauge">
|
|
95
99
|
<h3 v-if="resourceName && !usedAsResourceName">
|
|
96
100
|
{{ resourceName }}
|
|
97
101
|
</h3>
|
|
98
|
-
<div class="numbers">
|
|
102
|
+
<div class="numbers"> -->
|
|
99
103
|
<!-- @slot Optional slot to use as the title rather than showing the resource name -->
|
|
100
|
-
<slot
|
|
104
|
+
<!-- <slot
|
|
101
105
|
name="title"
|
|
102
106
|
:amountTemplateValues="amountTemplateValues"
|
|
103
107
|
:formattedPercentage="formattedPercentage"
|
|
@@ -118,7 +122,22 @@ export default {
|
|
|
118
122
|
:color-stops="colorStops"
|
|
119
123
|
/>
|
|
120
124
|
</div>
|
|
121
|
-
</div>
|
|
125
|
+
</div> -->
|
|
126
|
+
<div class="consumption-gauge">
|
|
127
|
+
<div
|
|
128
|
+
v-if="resourceName && !usedAsResourceName"
|
|
129
|
+
class="mb-20"
|
|
130
|
+
>
|
|
131
|
+
{{ resourceName }}
|
|
132
|
+
</div>
|
|
133
|
+
<slot
|
|
134
|
+
name="content"
|
|
135
|
+
:amountTemplateValues="amountTemplateValues"
|
|
136
|
+
:formattedPercentage="formattedPercentage"
|
|
137
|
+
>
|
|
138
|
+
<p>{{ formattedPercentage + '(共' + amountTemplateValues.total + ' ' + amountTemplateValues.unit + ',' + reserveText + ' ' + amountTemplateValues.used + ' ' + amountTemplateValues.unit + ')' }}</p>
|
|
139
|
+
</slot>
|
|
140
|
+
</div>
|
|
122
141
|
</template>
|
|
123
142
|
|
|
124
143
|
<style lang="scss">
|
|
@@ -49,9 +49,10 @@ export default {
|
|
|
49
49
|
v-if="text"
|
|
50
50
|
class="copy-to-clipboard-text"
|
|
51
51
|
role="button"
|
|
52
|
-
:aria-label="t('generic.copyToClipboard')"
|
|
53
52
|
:class="{ 'copied': copied, 'plain': plain}"
|
|
54
53
|
href="#"
|
|
54
|
+
:aria-label="t('generic.copyToClipboard')"
|
|
55
|
+
v-bind="$attrs"
|
|
55
56
|
@click="clicked"
|
|
56
57
|
@keyup.space="clicked"
|
|
57
58
|
>
|