From 4c278803cdc356cd0d1f121e8597ff66f29e820e Mon Sep 17 00:00:00 2001 From: albinAppsmith <87797149+albinAppsmith@users.noreply.github.com> Date: Mon, 3 Feb 2025 11:12:29 +0530 Subject: [PATCH] =?UTF-8?q?fix:=20Revert=20"Revert=20"feat:=20Added=20focu?= =?UTF-8?q?s=20ring=20for=20focus=20visible=20(#37700)"=20(#=E2=80=A6=20(#?= =?UTF-8?q?38655)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …38650)" This reverts commit e1b3b0df00ddb97bc0ef39b8f9e09155bff9b378. ## Description > [!TIP] > _Add a TL;DR when the description is longer than 500 words or extremely technical (helps the content, marketing, and DevRel team)._ > > _Please also include relevant motivation and context. List any dependencies that are required for this change. Add links to Notion, Figma or any other documents that might be relevant to the PR._ Fixes #`Issue Number` _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: > Commit: 7f7dcd2f14650de40864e2d80f02a1528d7562bc > Cypress dashboard. > Tags: `@tag.All` > Spec: >
Mon, 03 Feb 2025 05:27:48 UTC ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No ## Summary by CodeRabbit - **Style Updates** - Enhanced focus visibility across multiple design system components. - Updated focus styles to use `outline` with `!important` flag. - Improved focus ring and outline handling for better accessibility. - **Design System Refinements** - Modified focus handling in buttons, inputs, links, and other interactive elements. - Standardized focus state styling across components. - Introduced more consistent visual feedback for keyboard navigation. - **CSS Improvements** - Removed outline-disabling styles from global CSS. - Added more precise focus indication mechanisms. - Adjusted padding and outline properties for various components. - Simplified styling and structure of the `PropertyPaneSearchInput` component. - Introduced new focus styles for the select component to enhance visual distinction. - Enhanced the focus state for the `ColorPickerComponent` and `IconSelectControl` components. --- .../PropertyPane/PropertyPane_Search_spec.ts | 6 +++-- .../formattedJSONBodyAfterSave.snap.png | Bin 23696 -> 23713 bytes .../ads-old/src/SearchComponent/index.tsx | 7 +++--- .../ads/src/Button/Button.styles.tsx | 16 ++++++++----- .../design-system/ads/src/Button/Button.tsx | 18 ++++++++++---- .../ads/src/Input/Input.styles.tsx | 22 ++++++++---------- .../design-system/ads/src/Input/Input.tsx | 16 ++++++------- .../ads/src/Link/Link.styles.tsx | 4 ++-- .../SegmentedControl.styles.tsx | 4 ++-- .../design-system/ads/src/Select/styles.css | 12 +++++++--- .../ads/src/Switch/Switch.styles.tsx | 5 ++-- .../design-system/ads/src/Tab/Tab.styles.tsx | 4 ++-- .../ads/src/Text/Text.styles.tsx | 8 +++++-- .../ads/src/__theme__/default/index.css | 17 +++++++++----- .../editorComponents/CodeEditor/index.tsx | 1 + .../CodeEditor/styledComponents.ts | 21 +++++++++++++---- .../ColorPickerComponentV2.tsx | 5 ++-- .../propertyControls/IconSelectControl.tsx | 4 ++-- .../propertyControls/IconSelectControlV2.tsx | 4 ++-- app/client/src/index.css | 17 -------------- .../PropertyPane/PropertyPaneSearchInput.tsx | 17 +------------- 21 files changed, 108 insertions(+), 100 deletions(-) diff --git a/app/client/cypress/e2e/Regression/ClientSide/PropertyPane/PropertyPane_Search_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/PropertyPane/PropertyPane_Search_spec.ts index 8ca7b1b45e69..95a260cb5b13 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/PropertyPane/PropertyPane_Search_spec.ts +++ b/app/client/cypress/e2e/Regression/ClientSide/PropertyPane/PropertyPane_Search_spec.ts @@ -12,14 +12,15 @@ describe("Property Pane Search", { tags: ["@tag.PropertyPane"] }, function () { agHelper.AddDsl("swtchTableV2Dsl"); }); - it("1. Verify if the search Input is getting focused when a widget is selected", function () { + // skipping this because this feature is not + it.skip("1. Verify if the search Input is getting focused when a widget is selected", function () { EditorNavigation.SelectEntityByName("Table1", EntityType.Widget); // Initially the search input will only be soft focused // We need to press Enter to properly focus it agHelper.AssertElementFocus(propPane._propertyPaneSearchInputWrapper); agHelper.PressEnter(); - agHelper.AssertElementFocus(propPane._propertyPaneSearchInput); + agHelper.AssertElementFocus(propPane._propertyPaneSearchInputWrapper); // Pressing Escape should soft focus the search input agHelper.PressEscape(); @@ -40,6 +41,7 @@ describe("Property Pane Search", { tags: ["@tag.PropertyPane"] }, function () { }); it("2. Search for Properties", function () { + EditorNavigation.SelectEntityByName("Table1", EntityType.Widget); // Search for a property inside CONTENT tab propPane.Search("visible"); propPane.AssertIfPropertyOrSectionExists("general", "CONTENT", "visible"); diff --git a/app/client/cypress/snapshots/Regression/ClientSide/VisualTests/JSEditorIndent_spec.js/formattedJSONBodyAfterSave.snap.png b/app/client/cypress/snapshots/Regression/ClientSide/VisualTests/JSEditorIndent_spec.js/formattedJSONBodyAfterSave.snap.png index d89e63b9f8297cd404962875bae2ae38f14e97b3..57987e31c7bda04fadd0fdbc355cc8f5e838530e 100644 GIT binary patch literal 23713 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 Trm?W~_#}+y!9C-&DgM6!slqWu literal 23696 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 ${Variables} /* Kind style */ @@ -269,11 +270,14 @@ export const StyledButton = styled.button<{ } } - /* Focus styles */ - &:focus-visible { - outline: var(--ads-v2-border-width-outline) solid - var(--ads-v2-color-outline); - outline-offset: var(--ads-v2-offset-outline); - } + ${({ isFocusVisible }) => + isFocusVisible && + css` + :focus-visible { + outline: var(--ads-v2-border-width-outline) solid + var(--ads-v2-color-outline) !important; + outline-offset: var(--ads-v2-offset-outline) !important; + } + `} } `; diff --git a/app/client/packages/design-system/ads/src/Button/Button.tsx b/app/client/packages/design-system/ads/src/Button/Button.tsx index ca98873225e4..4fe30a4265b6 100644 --- a/app/client/packages/design-system/ads/src/Button/Button.tsx +++ b/app/client/packages/design-system/ads/src/Button/Button.tsx @@ -1,5 +1,6 @@ import React, { forwardRef } from "react"; import clsx from "classnames"; +import { useFocusRing } from "@react-aria/focus"; import { StyledButton, ButtonContent } from "./Button.styles"; import type { ButtonProps } from "./Button.types"; @@ -16,6 +17,11 @@ import { } from "./Button.constants"; import { Spinner } from "../Spinner"; +// Add this before the Button component definition +const SPINNER_ICON_PROPS = { + className: ButtonLoadingIconClassName, +}; + /** * TODO: * - if both left and right icon is used, disregard left icon and print a warning in the console. @@ -37,21 +43,25 @@ const Button = forwardRef( ...rest } = props; - // disable button when loading - rest.onClick = + // Replace the direct mutation of rest.onClick with this + const handleClick = props.isLoading || props.isDisabled ? undefined : props.onClick; const buttonRef = useDOMRef(ref); + const { focusProps, isFocusVisible } = useFocusRing(); return ( ( {isLoading === true && ( )} diff --git a/app/client/packages/design-system/ads/src/Input/Input.styles.tsx b/app/client/packages/design-system/ads/src/Input/Input.styles.tsx index 5c2bf55e5f16..2b33df832085 100644 --- a/app/client/packages/design-system/ads/src/Input/Input.styles.tsx +++ b/app/client/packages/design-system/ads/src/Input/Input.styles.tsx @@ -164,7 +164,7 @@ export const StyledInput = styled.input<{ renderer === "input" && css` padding-left: calc((var(--input-padding-x) * 2) + var(--icon-size) - 1px); - `}; + `} /* adjust padding end according to icon present or not */ ${({ hasEndIcon, renderer }) => @@ -174,20 +174,13 @@ export const StyledInput = styled.input<{ padding-right: calc( (var(--input-padding-x) * 2) + var(--icon-size) - 1px ); - `}; - - &:focus:enabled:not(:read-only) { - outline: var(--ads-v2-border-width-outline) solid - var(--ads-v2-color-outline); - outline-offset: var(--ads-v2-offset-outline); - } + `} &:hover:enabled:not(:read-only) { --input-color-border: var(--ads-v2-colors-control-field-hover-border); } - &:active:enabled:not(:read-only), - &:focus:enabled:not(:read-only) { + &:active:enabled:not(:read-only) { --input-color-border: var(--ads-v2-colors-control-field-active-border); } @@ -203,11 +196,16 @@ export const StyledInput = styled.input<{ --input-color-border: var(--ads-v2-colors-control-field-error-border); } - &:active:enabled:not(:read-only), - &:focus:enabled:not(:read-only) { + &:active:enabled:not(:read-only) { --input-color-border: var(--ads-v2-colors-control-field-error-border); } } + + &:focus { + outline: var(--ads-v2-border-width-outline) solid + var(--ads-v2-color-outline) !important; + outline-offset: var(--ads-v2-offset-outline) !important; + } `; export const Description = styled(Text)` diff --git a/app/client/packages/design-system/ads/src/Input/Input.tsx b/app/client/packages/design-system/ads/src/Input/Input.tsx index c196c17e1655..c3c57afda23f 100644 --- a/app/client/packages/design-system/ads/src/Input/Input.tsx +++ b/app/client/packages/design-system/ads/src/Input/Input.tsx @@ -1,5 +1,4 @@ -import React, { forwardRef } from "react"; -import { useFocusRing } from "@react-aria/focus"; +import React, { forwardRef, useCallback } from "react"; import { useTextField } from "@react-aria/textfield"; import clsx from "classnames"; @@ -55,7 +54,7 @@ const Input = forwardRef( const { descriptionProps, errorMessageProps, inputProps, labelProps } = // @ts-expect-error fix this the next time the file is edited useTextField(props, inputRef); - const { focusProps, isFocusVisible } = useFocusRing(); + const { className: startIconClassName, onClick: startIconOnClick, @@ -67,9 +66,12 @@ const Input = forwardRef( ...restOfEndIconProps } = endIconProps || {}; - const handleOnChange = (event: React.ChangeEvent) => { - onChange?.(event.target.value); - }; + const handleOnChange = useCallback( + (event: React.ChangeEvent) => { + onChange?.(event.target.value); + }, + [onChange], + ); isValid = isValid === undefined ? !errorMessage : isValid; @@ -116,7 +118,6 @@ const Input = forwardRef( ( hasEndIcon={!!endIcon} hasStartIcon={!!startIcon} inputSize={size} - isFocusVisible={isFocusVisible} onChange={handleOnChange} readOnly={isReadOnly} ref={inputRef} diff --git a/app/client/packages/design-system/ads/src/Link/Link.styles.tsx b/app/client/packages/design-system/ads/src/Link/Link.styles.tsx index 357316fd4d7b..8c853d0e4ba1 100644 --- a/app/client/packages/design-system/ads/src/Link/Link.styles.tsx +++ b/app/client/packages/design-system/ads/src/Link/Link.styles.tsx @@ -91,8 +91,8 @@ export const Styles = css<{ kind?: LinkKind }>` :focus-visible { outline: var(--ads-v2-border-width-outline) solid - var(--ads-v2-color-outline); - outline-offset: var(--ads-v2-offset-outline); + var(--ads-v2-color-outline) !important; + outline-offset: var(--ads-v2-offset-outline) !important; border-radius: var(--ads-v2-border-radius); } `; diff --git a/app/client/packages/design-system/ads/src/SegmentedControl/SegmentedControl.styles.tsx b/app/client/packages/design-system/ads/src/SegmentedControl/SegmentedControl.styles.tsx index df71f94da913..ce6db61c5535 100644 --- a/app/client/packages/design-system/ads/src/SegmentedControl/SegmentedControl.styles.tsx +++ b/app/client/packages/design-system/ads/src/SegmentedControl/SegmentedControl.styles.tsx @@ -67,8 +67,8 @@ export const StyledControlContainer = styled.div` &:focus-visible { outline: var(--ads-v2-border-width-outline) solid - var(--ads-v2-color-outline); - outline-offset: var(--ads-v2-offset-outline); + var(--ads-v2-color-outline) !important; + outline-offset: var(--ads-v2-offset-outline) !important; } &[data-disabled="true"] { diff --git a/app/client/packages/design-system/ads/src/Select/styles.css b/app/client/packages/design-system/ads/src/Select/styles.css index 44ceccaffa0c..723192f68ac2 100644 --- a/app/client/packages/design-system/ads/src/Select/styles.css +++ b/app/client/packages/design-system/ads/src/Select/styles.css @@ -1,7 +1,9 @@ .ads-v2-select { --select-color-border: var(--ads-v2-colors-control-field-default-border); - --select-padding-x: var(--ads-v2-spaces-2); /* padding left and right */ - --select-padding-y: var(--ads-v2-spaces-2); /* padding top and bottom */ + --select-padding-x: var(--ads-v2-spaces-2); + /* padding left and right */ + --select-padding-y: var(--ads-v2-spaces-2); + /* padding top and bottom */ --select-font-size: var(--ads-v2-font-size-2); --select-height: 24px; --select-search-input-padding-right: 0; @@ -51,7 +53,6 @@ .ads-v2-select.rc-select-focused { outline: var(--ads-v2-border-width-outline) solid var(--ads-v2-color-outline); outline-offset: var(--ads-v2-offset-outline); - --select-color-border: var(--ads-v2-colors-control-field-active-border); } /* Error */ @@ -87,6 +88,7 @@ /* padding x + icon size + gap */ --select-search-input-padding-right: calc(var(--select-padding-x) + 16px); } + .ads-v2-select.rc-select-allow-clear.rc-select-show-arrow.rc-select-selection-search-input, .ads-v2-select.rc-select-allow-clear.rc-select-show-arrow .rc-select-selection-overflow { @@ -113,6 +115,10 @@ overflow: hidden; } +.ads-v2-select.rc-select-focused > .rc-select-selector { + border-color: transparent; +} + /* Placeholder */ .ads-v2-select > .rc-select-selector > .rc-select-selection-placeholder, .ads-v2-select > .rc-select-selector > .rc-select-selection-item { diff --git a/app/client/packages/design-system/ads/src/Switch/Switch.styles.tsx b/app/client/packages/design-system/ads/src/Switch/Switch.styles.tsx index 2b0358ffeee2..f4459720fc52 100644 --- a/app/client/packages/design-system/ads/src/Switch/Switch.styles.tsx +++ b/app/client/packages/design-system/ads/src/Switch/Switch.styles.tsx @@ -72,8 +72,9 @@ export const StyledSwitchInput = styled.input<{ ${({ isFocusVisible }) => isFocusVisible && ` - outline: var(--ads-v2-border-width-outline) solid var(--ads-v2-color-outline); - outline-offset: var(--ads-v2-offset-outline); + outline: var(--ads-v2-border-width-outline) solid + var(--ads-v2-color-outline) !important; + outline-offset: var(--ads-v2-offset-outline) !important; `} &:hover { diff --git a/app/client/packages/design-system/ads/src/Tab/Tab.styles.tsx b/app/client/packages/design-system/ads/src/Tab/Tab.styles.tsx index 082c272ceba1..1abc54866a9b 100644 --- a/app/client/packages/design-system/ads/src/Tab/Tab.styles.tsx +++ b/app/client/packages/design-system/ads/src/Tab/Tab.styles.tsx @@ -88,7 +88,7 @@ export const StyledTab = styled(RadixTabs.TabsTrigger)` &:focus-visible { --tab-color: var(--ads-v2-colors-content-label-default-fg); outline: var(--ads-v2-border-width-outline) solid - var(--ads-v2-color-outline); - outline-offset: var(--ads-v2-offset-outline); + var(--ads-v2-color-outline) !important; + outline-offset: var(--ads-v2-offset-outline) !important; } `; diff --git a/app/client/packages/design-system/ads/src/Text/Text.styles.tsx b/app/client/packages/design-system/ads/src/Text/Text.styles.tsx index 55f278fa7b1d..ded9e7b74a2e 100644 --- a/app/client/packages/design-system/ads/src/Text/Text.styles.tsx +++ b/app/client/packages/design-system/ads/src/Text/Text.styles.tsx @@ -190,7 +190,6 @@ export const StyledEditableInput = styled.input` background-color: transparent; border: 1px solid transparent; border-radius: var(--ads-v2-border-radius); - outline: none; margin: 0; position: absolute; top: -3px; @@ -201,8 +200,13 @@ export const StyledEditableInput = styled.input` border-color: var(--ads-v2-colors-control-field-hover-border); } - &:focus, &:active { border-color: var(--ads-v2-colors-control-field-active-border); } + + &:focus { + outline: var(--ads-v2-border-width-outline) solid + var(--ads-v2-color-outline) !important; + outline-offset: var(--ads-v2-offset-outline) !important; + } `; diff --git a/app/client/packages/design-system/ads/src/__theme__/default/index.css b/app/client/packages/design-system/ads/src/__theme__/default/index.css index ad6c149f68c3..8ade0c331b89 100644 --- a/app/client/packages/design-system/ads/src/__theme__/default/index.css +++ b/app/client/packages/design-system/ads/src/__theme__/default/index.css @@ -239,9 +239,9 @@ /* --ads-v2-color-outline: var(--ads-v2-color-blue-300); --ads-v2-border-width-outline: 2px; */ /* TODO: fix focus issue across the platform */ - --ads-v2-color-outline: transparent; - --ads-v2-border-width-outline: 0; - --ads-v2-offset-outline: 0; + --ads-v2-color-outline: var(--ads-v2-color-blue-300); + --ads-v2-border-width-outline: 2px; + --ads-v2-offset-outline: -2px; /** * ===========================================* @@ -251,17 +251,22 @@ --ads-v2-opacity-disabled: 0.6; } +:focus { + outline: none !important; +} + /* react-aria useFocusRing helper class*/ .ads-v2-focus-ring { - outline: var(--ads-v2-border-width-outline) solid var(--ads-v2-color-outline); - outline-offset: var(--ads-v2-offset-outline); + outline: var(--ads-v2-border-width-outline) solid var(--ads-v2-color-outline) !important; + outline-offset: var(--ads-v2-offset-outline) !important; } /* Placeholder color */ ::placeholder { /* This needs to be important to override the placeholder color on main repo */ color: var(--ads-v2-colors-control-placeholder-default-fg) !important; - opacity: 1; /* Firefox */ + opacity: 1; + /* Firefox */ } :-ms-input-placeholder { diff --git a/app/client/src/components/editorComponents/CodeEditor/index.tsx b/app/client/src/components/editorComponents/CodeEditor/index.tsx index b05ccaf9cc28..0885844b753a 100644 --- a/app/client/src/components/editorComponents/CodeEditor/index.tsx +++ b/app/client/src/components/editorComponents/CodeEditor/index.tsx @@ -1793,6 +1793,7 @@ class CodeEditor extends Component { onMouseOver={this.handleMouseMove} ref={this.editorWrapperRef} removeHoverAndFocusStyle={this.props?.removeHoverAndFocusStyle} + showFocusVisible={!this.props.isJSObject} size={size} > {this.state.peekOverlayProps && ( diff --git a/app/client/src/components/editorComponents/CodeEditor/styledComponents.ts b/app/client/src/components/editorComponents/CodeEditor/styledComponents.ts index 5c4cd413679a..c26b3eec794e 100644 --- a/app/client/src/components/editorComponents/CodeEditor/styledComponents.ts +++ b/app/client/src/components/editorComponents/CodeEditor/styledComponents.ts @@ -54,6 +54,7 @@ export const EditorWrapper = styled.div<{ AIEnabled?: boolean; mode: string; maxHeight?: string | number; + showFocusVisible?: boolean; }>` // Bottom border was getting clipped .CodeMirror.cm-s-duotone-light.CodeMirror-wrap { @@ -83,6 +84,17 @@ export const EditorWrapper = styled.div<{ text-transform: none; && { + ${(props) => + props.showFocusVisible && + ` + .CodeMirror-focused { + outline: var(--ads-v2-border-width-outline) solid + var(--ads-v2-color-outline) !important; + outline-offset: var(--ads-v2-offset-outline) !important; + z-index: 1 !important; + } + `} + .CodeMirror-cursor { border-right: none; border-left-width: 2px; @@ -390,12 +402,11 @@ export const EditorWrapper = styled.div<{ } } - &:focus { + &:focus-visible { .CodeMirror.cm-s-duotone-light { - border-color: ${(props) => - props.borderLess - ? "none" - : "var(--ads-v2-color-border-emphasis-plus)"}; + outline: var(--ads-v2-border-width-outline) solid + var(--ads-v2-color-outline); + outline-offset: var(--ads-v2-offset-outline); } } diff --git a/app/client/src/components/propertyControls/ColorPickerComponentV2.tsx b/app/client/src/components/propertyControls/ColorPickerComponentV2.tsx index f275b74469fe..c80ad0ee8ad6 100644 --- a/app/client/src/components/propertyControls/ColorPickerComponentV2.tsx +++ b/app/client/src/components/propertyControls/ColorPickerComponentV2.tsx @@ -95,14 +95,13 @@ export const StyledInputGroup = styled(InputGroup)<{ props.theme.colors.propertyPane.multiDropdownBoxHoverBg}; color: ${(props) => props.theme.colors.propertyPane.label}; - &:focus { + &:focus-visible { outline: var(--ads-v2-border-width-outline) solid var(--ads-v2-color-outline); outline-offset: var(--ads-v2-offset-outline); } - &:hover, - &:focus { + &:hover { border-color: ${({ $isValid }) => $isValid ? "var(--ads-v2-color-border-emphasis)" diff --git a/app/client/src/components/propertyControls/IconSelectControl.tsx b/app/client/src/components/propertyControls/IconSelectControl.tsx index d968d0dc61d8..e4d8379ddba5 100644 --- a/app/client/src/components/propertyControls/IconSelectControl.tsx +++ b/app/client/src/components/propertyControls/IconSelectControl.tsx @@ -52,10 +52,10 @@ const StyledButton = styled(Button)` border: 1px solid var(--ads-v2-color-border-emphasis); } - &:focus { + &:focus-visible { outline: var(--ads-v2-border-width-outline) solid var(--ads-v2-color-outline); - border: 1px solid var(--ads-v2-color-border-emphasis); + outline-offset: var(--ads-v2-offset-outline); } `; diff --git a/app/client/src/components/propertyControls/IconSelectControlV2.tsx b/app/client/src/components/propertyControls/IconSelectControlV2.tsx index bdcdcc2e0b10..4d51f1de7203 100644 --- a/app/client/src/components/propertyControls/IconSelectControlV2.tsx +++ b/app/client/src/components/propertyControls/IconSelectControlV2.tsx @@ -53,10 +53,10 @@ const StyledButton = styled(Button)` border: 1px solid var(--ads-v2-color-border-emphasis); } - &:focus { + &:focus-visible { outline: var(--ads-v2-border-width-outline) solid var(--ads-v2-color-outline); - border: 1px solid var(--ads-v2-color-border-emphasis); + outline-offset: var(--ads-v2-offset-outline); } > span.bp3-button-text { diff --git a/app/client/src/index.css b/app/client/src/index.css index 340e93a66541..7ea5446dcf61 100755 --- a/app/client/src/index.css +++ b/app/client/src/index.css @@ -22,23 +22,6 @@ body.dragging * { cursor: grabbing !important; } -/** - Disable outline completely from all components -*/ -:focus, -:focus-visible { - outline: none !important; - outline-offset: 0 !important; -} - -/** - Disable outline for adsv2 select component -*/ -.ads-v2-select.rc-select-focused { - outline: none !important; - outline-offset: 0 !important; -} - #root.overlay { opacity: 0; pointer-events: none; diff --git a/app/client/src/pages/Editor/PropertyPane/PropertyPaneSearchInput.tsx b/app/client/src/pages/Editor/PropertyPane/PropertyPaneSearchInput.tsx index d764f7c8d730..9b497b794e44 100644 --- a/app/client/src/pages/Editor/PropertyPane/PropertyPaneSearchInput.tsx +++ b/app/client/src/pages/Editor/PropertyPane/PropertyPaneSearchInput.tsx @@ -20,21 +20,6 @@ const Container = styled.div` const SearchInputWrapper = styled.div` margin: 0 1rem; - border-radius: var(--ads-v2-border-radius); - border: 1px solid var(--ads-v2-color-border); - :focus-within { - /* outline: var(--ads-v2-border-width-outline) solid - var(--ads-v2-color-outline); - outline-offset: var(--ads-v2-offset-outline); */ - border-color: var(--ads-v2-color-border-emphasis-plus); - } -`; - -const StyledSearchInput = styled(SearchInput)` - input { - border: none; - outline: none; - } `; interface PropertyPaneSearchInputProps { @@ -104,7 +89,7 @@ export function PropertyPaneSearchInput(props: PropertyPaneSearchInputProps) { ref={wrapperRef} tabIndex={0} > -