From ec5eb448d5046cfe485c8d3c693341ec1d479f7e Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Mon, 18 Jul 2022 17:15:36 -0400 Subject: [PATCH] [Security Solution][Endpoint] UX adjustment and improvement for Responder (#136347) - Remove the word "ENDPOINT" from the console's header information - Add additional spacing between the Host name and the "Last seen" information that is shown in the console's header - Change console header area to be same color as page background (white in light theme) - adjust the header area (and other primary console containers) to have 16px padding - Change input area placeholder text - increase the bottom border of the input area, when focused, to 2px (`euiBorderThick`) - adjust the footer hint test area to have 4px padding at top/bottom. - adjust padding and spacing for the command output area - change behaviour around the focusing on the input area: - it no longer auto-focuses on the input area every time the user clicks on the page. It now behaves more like how other UI interfaces work (original intent was more for when the POC was done where it was attempting to mirror a "real" CLI terminal) - The input area now also support "tab"'ing into it - The input area will continue to receive focus when Responder is initially opened --- .../components/command_execution_output.tsx | 2 + .../components/command_execution_result.tsx | 6 +- .../command_input/command_input.test.tsx | 2 +- .../command_input/command_input.tsx | 12 +++- .../command_input/hooks/use_input_hints.ts | 55 +++++++++++++------ .../console/components/command_list.tsx | 2 + .../components/console_page_overlay.tsx | 2 +- .../handle_execute_command.test.tsx | 2 +- .../handle_input_area_state.ts | 3 +- .../console/components/unknown_comand.tsx | 2 +- .../components/console/console.test.tsx | 2 +- .../management/components/console/console.tsx | 24 ++++++-- .../console/service/parsed_command_input.ts | 4 +- .../management/components/console/types.ts | 11 +++- .../endpoint_responder/action_error.tsx | 4 +- .../header_endpoint_info.test.tsx | 2 +- .../header_endpoint_info.tsx | 18 +++--- .../endpoint_responder/isolate_action.tsx | 15 +---- .../kill_process_action.tsx | 25 +-------- .../endpoint_responder/release_action.tsx | 15 +---- .../suspend_process_action.tsx | 25 +-------- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 24 files changed, 112 insertions(+), 127 deletions(-) diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_execution_output.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_execution_output.tsx index d8134769db4c3..b72e601e2a8b0 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_execution_output.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_execution_output.tsx @@ -95,7 +95,9 @@ export const CommandExecutionOutput = memo(
+ {/* UX desire for 12px (current theme): achieved with EuiSpace sizes - s (8px) + xs (4px) */} + { expect(getUserInputText()).toEqual('c'); expect(getRightOfCursorText()).toEqual('md1 '); - expect(getFooterText()).toEqual('cmd1 '); + expect(getFooterText()).toEqual('Hit enter to execute'); }); // FIXME:PT uncomment once task OLM task #4384 is implemented diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx index a4ff5b03b45e8..1287c54e2931d 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_input/command_input.tsx @@ -33,8 +33,8 @@ const CommandInputContainer = styled.div` } &.active { - border-bottom: solid ${({ theme: { eui } }) => eui.euiBorderWidthThin} - ${({ theme: { eui } }) => eui.euiColorPrimary}; + border-bottom: ${({ theme: { eui } }) => eui.euiBorderThick}; + border-bottom-color: ${({ theme: { eui } }) => eui.euiColorPrimary}; } .textEntered { @@ -256,6 +256,12 @@ export const CommandInput = memo(({ prompt = '', focusRef, .. [dispatch, rightOfCursor.text] ); + const handleOnFocus = useCallback(() => { + if (!isKeyInputBeingCaptured) { + dispatch({ type: 'addFocusToKeyCapture' }); + } + }, [dispatch, isKeyInputBeingCaptured]); + // Execute the command if one was ENTER'd. useEffect(() => { if (commandToExecute) { @@ -271,6 +277,8 @@ export const CommandInput = memo(({ prompt = '', focusRef, .. className={focusClassName} onClick={handleTypingAreaClick} ref={containerRef} + tabIndex={0} + onFocus={handleOnFocus} > values: { commandName }, }); -const COMMAND_USAGE_HINT = (usage: string) => - i18n.translate('xpack.securitySolution.useInputHints.commandUsage', { - defaultMessage: '{usage}', - values: { - usage, - }, - }); +const NO_ARGUMENTS_HINT = i18n.translate('xpack.securitySolution.useInputHints.noArguments', { + defaultMessage: 'Hit enter to execute', +}); /** * Auto-generates console footer "hints" while user is interacting with the input area @@ -48,18 +44,43 @@ export const useInputHints = () => { if (commandEntered && !isInputPopoverOpen) { // Is valid command name? ==> show usage if (commandEnteredDefinition) { + const exampleInstruction = commandEnteredDefinition?.exampleInstruction ?? ''; + const exampleUsage = commandEnteredDefinition?.exampleUsage ?? ''; + + let hint = exampleInstruction ?? ''; + + if (exampleUsage) { + if (exampleInstruction) { + // leading space below is intentional + hint += ` ${i18n.translate('xpack.securitySolution.useInputHints.exampleInstructions', { + defaultMessage: 'Ex: [ {exampleUsage} ]', + values: { + exampleUsage, + }, + })}`; + } else { + hint += exampleUsage; + } + } + + // If the command did not define any hint, then generate the command useage from the definition. + // If the command did define `exampleInstruction` but not `exampleUsage`, then generate the + // usage from the command definition and then append it. + // + // Generated usage is only created if the command has arguments. + if (!hint || !exampleUsage) { + const commandArguments = getArgumentsForCommand(commandEnteredDefinition); + + if (commandArguments.length > 0) { + hint += `${commandEnteredDefinition.name} ${commandArguments}`; + } else { + hint += NO_ARGUMENTS_HINT; + } + } + dispatch({ type: 'updateFooterContent', - payload: { - value: - commandEnteredDefinition.exampleUsage && commandEnteredDefinition.exampleInstruction - ? `${commandEnteredDefinition.exampleInstruction} Ex: [${commandEnteredDefinition.exampleUsage}]` - : COMMAND_USAGE_HINT( - `${commandEnteredDefinition.name} ${getArgumentsForCommand( - commandEnteredDefinition - )}` - ), - }, + payload: { value: hint }, }); } else { dispatch({ diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx index 13e0d06d7a41c..bdccd319235ce 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/command_list.tsx @@ -93,6 +93,8 @@ export const CommandList = memo(({ commands, display = 'defaul }; }, }); + + dispatch({ type: 'addFocusToKeyCapture' }); }, [dispatch] ); diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/console_manager/components/console_page_overlay.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/console_manager/components/console_page_overlay.tsx index 38e6a53437fe2..d9fbc2941ddb6 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/console_manager/components/console_page_overlay.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/console_manager/components/console_page_overlay.tsx @@ -17,7 +17,7 @@ import { PageOverlay } from '../../../../page_overlay/page_overlay'; import { ConsoleExitModal } from './console_exit_modal'; const BACK_LABEL = i18n.translate('xpack.securitySolution.consolePageOverlay.backButtonLabel', { - defaultMessage: 'Return to page content', + defaultMessage: 'Back', }); export interface ConsolePageOverlayProps { diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_execute_command.test.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_execute_command.test.tsx index 2bb52f04109c9..b1f50e941fdea 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_execute_command.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_execute_command.test.tsx @@ -111,7 +111,7 @@ describe('When a Console command is entered by the user', () => { await waitFor(() => { expect(renderResult.getByTestId('test-unknownCommandError').textContent).toEqual( - 'Unsupported text/commandThe text you entered foo-foo is unsupported! Click or type help for assistance.' + 'Unsupported text/commandThe text you entered foo-foo is unsupported! Click Help or type help for assistance.' ); }); }); diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_input_area_state.ts b/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_input_area_state.ts index 763ee487438de..271b11d1a96dd 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_input_area_state.ts +++ b/x-pack/plugins/security_solution/public/management/components/console/components/console_state/state_update_handlers/handle_input_area_state.ts @@ -13,8 +13,7 @@ import type { ConsoleDataAction, ConsoleStoreReducer } from '../types'; export const INPUT_DEFAULT_PLACEHOLDER_TEXT = i18n.translate( 'xpack.securitySolution.handleInputAreaState.inputPlaceholderText', { - defaultMessage: - 'Click here to type and submit an action. For assistance, use the "help" action', + defaultMessage: 'Submit response action', } ); diff --git a/x-pack/plugins/security_solution/public/management/components/console/components/unknown_comand.tsx b/x-pack/plugins/security_solution/public/management/components/console/components/unknown_comand.tsx index 1ca6bf3f64053..a988afe635458 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/components/unknown_comand.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/components/unknown_comand.tsx @@ -22,7 +22,7 @@ export const UnknownCommand = memo(({ command, s diff --git a/x-pack/plugins/security_solution/public/management/components/console/console.test.tsx b/x-pack/plugins/security_solution/public/management/components/console/console.test.tsx index 5510c180feb4c..54d2202d25524 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/console.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/console.test.tsx @@ -34,7 +34,7 @@ describe('When using Console component', () => { it('should focus on input area when it gains focus', () => { render(); - userEvent.click(renderResult.getByTestId('test-mainPanel')); + userEvent.click(renderResult.getByTestId('test-mainPanel-inputArea')); expect(document.activeElement!.classList.contains('invisible-input')).toBe(true); }); diff --git a/x-pack/plugins/security_solution/public/management/components/console/console.tsx b/x-pack/plugins/security_solution/public/management/components/console/console.tsx index 37850e888b126..a0996432273aa 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/console.tsx +++ b/x-pack/plugins/security_solution/public/management/components/console/console.tsx @@ -40,19 +40,28 @@ const ConsoleWindow = styled.div` &-container { padding: ${({ theme: { eui } }) => eui.euiSizeL} ${({ theme: { eui } }) => eui.euiSizeL} - ${({ theme: { eui } }) => eui.euiSizeS} ${({ theme: { eui } }) => eui.euiSizeM}; + ${({ theme: { eui } }) => eui.euiSizeL} ${({ theme: { eui } }) => eui.euiSizeL}; } &-header { + background-color: ${({ theme: { eui } }) => eui.euiColorEmptyShade}; border-bottom: 1px solid ${({ theme: { eui } }) => eui.euiColorLightShade}; + border-top-left-radius: ${({ theme: { eui } }) => eui.euiBorderRadiusSmall}; + border-top-right-radius: ${({ theme: { eui } }) => eui.euiBorderRadiusSmall}; + padding: ${({ theme: { eui } }) => eui.euiSize} ${({ theme: { eui } }) => eui.euiSize} + ${({ theme: { eui } }) => eui.euiSize} ${({ theme: { eui } }) => eui.euiSize}; } - &-footer, &-commandInput { padding-top: ${({ theme: { eui } }) => eui.euiSizeXS}; padding-bottom: ${({ theme: { eui } }) => eui.euiSizeXS}; } + &-footer { + padding-top: 0; + padding-bottom: ${({ theme: { eui } }) => eui.euiSizeXS}; + } + &-rightPanel { width: 35%; background-color: ${({ theme: { eui } }) => eui.euiFormBackgroundColor}; @@ -138,7 +147,7 @@ export const Console = memo( HelpComponent={HelpComponent} dataTestSubj={commonProps['data-test-subj']} > - + ( responsive={false} data-test-subj={getTestId('mainPanel')} > - + @@ -173,7 +182,12 @@ export const Console = memo(
- + diff --git a/x-pack/plugins/security_solution/public/management/components/console/service/parsed_command_input.ts b/x-pack/plugins/security_solution/public/management/components/console/service/parsed_command_input.ts index 420d95517a4b7..984dd77eb4786 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/service/parsed_command_input.ts +++ b/x-pack/plugins/security_solution/public/management/components/console/service/parsed_command_input.ts @@ -181,7 +181,9 @@ export const getArgumentsForCommand = (command: CommandDefinition): string[] => optional: optionalArgs, }); }) - : [buildArgumentText({ required: requiredArgs, optional: optionalArgs })]; + : requiredArgs || optionalArgs + ? [buildArgumentText({ required: requiredArgs, optional: optionalArgs })] + : []; }; export const parsedPidOrEntityIdParameter = (parameters: { diff --git a/x-pack/plugins/security_solution/public/management/components/console/types.ts b/x-pack/plugins/security_solution/public/management/components/console/types.ts index d929a8a4b4984..f5ee45733f860 100644 --- a/x-pack/plugins/security_solution/public/management/components/console/types.ts +++ b/x-pack/plugins/security_solution/public/management/components/console/types.ts @@ -63,9 +63,18 @@ export interface CommandDefinition { /** If all args are optional, but at least one must be defined, set to true */ mustHaveArgs?: boolean; - exampleUsage?: string; + /** + * Displayed in the input hint area when the user types the command. The Command usage will be + * appended to this value + */ exampleInstruction?: string; + /** + * Displayed in the input hint area when the user types the command. This value will override + * the command usage generated by the console from the Command Definition + */ + exampleUsage?: string; + /** * Validate the command entered by the user. This is called only after the Console has ran * through all of its builtin validations (based on `CommandDefinition`). diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/action_error.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/action_error.tsx index 2e9ad0bd42959..0f199e175a235 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/action_error.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/action_error.tsx @@ -12,10 +12,10 @@ import type { CommandExecutionResultComponent } from '../console/components/comm import type { ImmutableArray } from '../../../../common/endpoint/types'; export const ActionError = memo<{ - title: string; - dataTestSubj?: string; errors: ImmutableArray; + title?: string; ResultComponent: CommandExecutionResultComponent; + dataTestSubj?: string; }>(({ title, dataTestSubj, errors, ResultComponent }) => { return ( diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/header_endpoint_info.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/header_endpoint_info.test.tsx index 215e7554cc5bf..550b677d4d938 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/header_endpoint_info.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/header_endpoint_info.test.tsx @@ -50,7 +50,7 @@ describe('Responder header endpoint info', () => { }); it('should show endpoint name', async () => { const name = await renderResult.findByTestId('responderHeaderEndpointName'); - expect(name.textContent).toBe(`ENDPOINT ${endpointDetails.metadata.host.name}`); + expect(name.textContent).toBe(`${endpointDetails.metadata.host.name}`); }); it('should show agent and isolation status', async () => { const agentStatus = await renderResult.findByTestId( diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/header_endpoint_info.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/header_endpoint_info.tsx index c9c6ab9e1097c..2da620fb833b7 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/header_endpoint_info.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/header_endpoint_info.tsx @@ -6,7 +6,14 @@ */ import React, { memo, useMemo } from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiText, EuiLoadingContent, EuiToolTip } from '@elastic/eui'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiText, + EuiLoadingContent, + EuiToolTip, + EuiSpacer, +} from '@elastic/eui'; import { FormattedMessage, FormattedRelative } from '@kbn/i18n-react'; import { useGetEndpointDetails } from '../../hooks/endpoint/use_get_endpoint_details'; import { useGetEndpointPendingActionsSummary } from '../../hooks/endpoint/use_get_endpoint_pending_actions_summary'; @@ -60,13 +67,7 @@ export const HeaderEndpointInfo = memo(({ endpointId }) anchorClassName="eui-textTruncate" > -
- -
+
{endpointDetails.metadata.host.name}
@@ -81,6 +82,7 @@ export const HeaderEndpointInfo = memo(({ endpointId })
+ - ); + return ; }); IsolateActionResult.displayName = 'IsolateActionResult'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/kill_process_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/kill_process_action.tsx index e1dbc922bcdb1..684887617b5f0 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/kill_process_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/kill_process_action.tsx @@ -6,8 +6,6 @@ */ import React, { memo, useEffect } from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; import type { ActionDetails } from '../../../../common/endpoint/types'; import { useGetActionDetails } from '../../hooks/endpoint/use_get_action_details'; import type { EndpointCommandDefinitionMeta } from './types'; @@ -84,24 +82,13 @@ export const KillProcessActionResult = memo< // Show nothing if still pending if (isPending) { - return ( - - - - ); + return ; } // Show errors if (completedActionDetails?.errors) { return ( - ); + return ; }); KillProcessActionResult.displayName = 'KillProcessActionResult'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/release_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/release_action.tsx index c4cacd6d03b78..1a12c1538caa4 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/release_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/release_action.tsx @@ -6,7 +6,6 @@ */ import React, { memo, useEffect } from 'react'; -import { i18n } from '@kbn/i18n'; import type { ActionDetails } from '../../../../common/endpoint/types'; import { useGetActionDetails } from '../../hooks/endpoint/use_get_action_details'; import type { EndpointCommandDefinitionMeta } from './types'; @@ -81,10 +80,6 @@ export const ReleaseActionResult = memo< if (completedActionDetails?.errors) { return ( - ); + return ; }); ReleaseActionResult.displayName = 'ReleaseActionResult'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/suspend_process_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/suspend_process_action.tsx index b18060a3d2776..448d26daaae7b 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/suspend_process_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/suspend_process_action.tsx @@ -6,8 +6,6 @@ */ import React, { memo, useEffect } from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; import type { ActionDetails } from '../../../../common/endpoint/types'; import { useGetActionDetails } from '../../hooks/endpoint/use_get_action_details'; import type { EndpointCommandDefinitionMeta } from './types'; @@ -78,24 +76,13 @@ export const SuspendProcessActionResult = memo< // Show nothing if still pending if (isPending) { - return ( - - - - ); + return ; } // Show errors if (completedActionDetails?.errors) { return ( - ); + return ; }); SuspendProcessActionResult.displayName = 'SuspendProcessActionResult'; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 0f5c4ea5ea800..b272f8fee6c7b 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -26444,8 +26444,6 @@ "xpack.securitySolution.endpointManagemnet.noPermissionsText": "Vous ne disposez pas des autorisations Kibana requises pour utiliser Elastic Security Administration", "xpack.securitySolution.endpointPolicyStatus.revisionNumber": "rév. {revNumber}", "xpack.securitySolution.endpointPolicyStatus.tooltipTitleLabel": "Politique appliquée", - "xpack.securitySolution.endpointResponseActions.isolate.errorMessageTitle": "Échec", - "xpack.securitySolution.endpointResponseActions.isolate.successMessageTitle": "Réussite", "xpack.securitySolution.endpointResponseActions.status.agentStatus": "Statut de l'agent", "xpack.securitySolution.endpointResponseActions.status.lastActive": "Dernière activité", "xpack.securitySolution.endpointResponseActions.status.policyStatus": "Statut de la politique", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 5ecfa373923e5..afb5d2a1d9405 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -26429,8 +26429,6 @@ "xpack.securitySolution.endpointManagemnet.noPermissionsText": "Elastic Security Administrationを使用するために必要なKibana権限がありません。", "xpack.securitySolution.endpointPolicyStatus.revisionNumber": "rev. {revNumber}", "xpack.securitySolution.endpointPolicyStatus.tooltipTitleLabel": "ポリシーが適用されました", - "xpack.securitySolution.endpointResponseActions.isolate.errorMessageTitle": "失敗", - "xpack.securitySolution.endpointResponseActions.isolate.successMessageTitle": "成功", "xpack.securitySolution.endpointResponseActions.status.agentStatus": "エージェントステータス", "xpack.securitySolution.endpointResponseActions.status.lastActive": "前回のアーカイブ", "xpack.securitySolution.endpointResponseActions.status.policyStatus": "ポリシーステータス", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index e700da7e067e5..0a608fde9f976 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -26456,8 +26456,6 @@ "xpack.securitySolution.endpointManagemnet.noPermissionsText": "您没有所需的 Kibana 权限,无法使用 Elastic Security 管理", "xpack.securitySolution.endpointPolicyStatus.revisionNumber": "修订版 {revNumber}", "xpack.securitySolution.endpointPolicyStatus.tooltipTitleLabel": "已应用策略", - "xpack.securitySolution.endpointResponseActions.isolate.errorMessageTitle": "失败", - "xpack.securitySolution.endpointResponseActions.isolate.successMessageTitle": "成功", "xpack.securitySolution.endpointResponseActions.status.agentStatus": "代理状态", "xpack.securitySolution.endpointResponseActions.status.lastActive": "上次活动时间", "xpack.securitySolution.endpointResponseActions.status.policyStatus": "策略状态",