From 48181d7af63e24c612498f330b7bdb6bf5fde840 Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Tue, 30 Sep 2025 12:58:34 -0400 Subject: [PATCH 01/19] chore(TextInput): remove sx --- packages/react/src/TextInput/TextInput.tsx | 3 -- packages/react/src/TextInput/index.ts | 1 + packages/react/src/index.ts | 2 +- .../components/TextInputInnerAction.tsx | 2 +- .../internal/components/TextInputWrapper.tsx | 15 +++++----- .../styled-react/src/components/TextInput.tsx | 28 +++++++++++++++++++ 6 files changed, 38 insertions(+), 13 deletions(-) create mode 100644 packages/styled-react/src/components/TextInput.tsx diff --git a/packages/react/src/TextInput/TextInput.tsx b/packages/react/src/TextInput/TextInput.tsx index 9062b461411..48cf706abfb 100644 --- a/packages/react/src/TextInput/TextInput.tsx +++ b/packages/react/src/TextInput/TextInput.tsx @@ -46,7 +46,6 @@ export type TextInputNonPassthroughProps = { | 'contrast' | 'disabled' | 'monospace' - | 'sx' | 'width' | 'maxWidth' | 'minWidth' @@ -75,7 +74,6 @@ const TextInput = React.forwardRef( loaderText = 'Loading', monospace, validationStatus, - sx: sxProp, size: sizeProp, onFocus, onBlur, @@ -137,7 +135,6 @@ const TextInput = React.forwardRef( contrast={contrast} disabled={disabled} monospace={monospace} - sx={sxProp} size={sizeProp} width={widthProp} minWidth={minWidthProp} diff --git a/packages/react/src/TextInput/index.ts b/packages/react/src/TextInput/index.ts index 9395085508e..7df2e878207 100644 --- a/packages/react/src/TextInput/index.ts +++ b/packages/react/src/TextInput/index.ts @@ -1,2 +1,3 @@ export {default} from './TextInput' export type {TextInputProps, TextInputNonPassthroughProps} from './TextInput' +export type {TextInputActionProps} from '../internal/components/TextInputInnerAction' diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 418e9308cfb..50de424a40f 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -166,7 +166,7 @@ export type {SubNavProps, SubNavLinkProps, SubNavLinksProps} from './SubNav' export {default as ToggleSwitch} from './ToggleSwitch' export type {ToggleSwitchProps} from './ToggleSwitch' export {default as TextInput} from './TextInput' -export type {TextInputProps} from './TextInput' +export type {TextInputProps, TextInputActionProps} from './TextInput' export {default as TextInputWithTokens} from './TextInputWithTokens' export type {TextInputWithTokensProps} from './TextInputWithTokens' export {default as Text} from './Text' diff --git a/packages/react/src/internal/components/TextInputInnerAction.tsx b/packages/react/src/internal/components/TextInputInnerAction.tsx index 03093d32575..45c5d60438f 100644 --- a/packages/react/src/internal/components/TextInputInnerAction.tsx +++ b/packages/react/src/internal/components/TextInputInnerAction.tsx @@ -9,7 +9,7 @@ import {clsx} from 'clsx' import styles from './TextInputInnerAction.module.css' -type TextInputActionProps = Omit< +export type TextInputActionProps = Omit< React.ButtonHTMLAttributes, 'aria-label' | 'size' | 'tooltipDirection' > & { diff --git a/packages/react/src/internal/components/TextInputWrapper.tsx b/packages/react/src/internal/components/TextInputWrapper.tsx index 4d7a1a9280a..7b67c91b2eb 100644 --- a/packages/react/src/internal/components/TextInputWrapper.tsx +++ b/packages/react/src/internal/components/TextInputWrapper.tsx @@ -5,7 +5,6 @@ import type {FormValidationStatus} from '../../utils/types/FormValidationStatus' import {clsx} from 'clsx' import styles from './TextInputWrapper.module.css' -import {BoxWithFallback} from './BoxWithFallback' export type TextInputSizes = 'small' | 'medium' | 'large' @@ -59,8 +58,7 @@ export const TextInputBaseWrapper = React.forwardRef ) diff --git a/packages/styled-react/src/components/TextInput.tsx b/packages/styled-react/src/components/TextInput.tsx new file mode 100644 index 00000000000..747d42eb6b6 --- /dev/null +++ b/packages/styled-react/src/components/TextInput.tsx @@ -0,0 +1,28 @@ +import { + TextInput as PrimerTextInput, + TextInputProps as PrimerTextInputProps, + TextInputActionProps as PrimerTextInputActionProps, +} from '@primer/react' +import {forwardRef} from 'react' +import {Box} from './Box' +import type {SxProp} from '../sx' + +export type TextInputProps = PrimerTextInputProps & SxProp +export type TextInputActionProps = PrimerTextInputActionProps & SxProp + +const TextInputImpl = (props: TextInputProps) => + +const TextInputAction = forwardRef((props, ref) => { + return +}) + +type TextInputComposite = ((props: TextInputProps) => JSX.Element) & { + Action: typeof TextInputAction +} + +export const TextInput: TextInputComposite = Object.assign(TextInputImpl, { + Action: TextInputAction, +}) + +TextInputAction.displayName = 'TextInputAction' +TextInputImpl.displayName = 'TextInput' From 75c5b503f28122f78164cd19f545d75689ee056a Mon Sep 17 00:00:00 2001 From: Marie Lucca <40550942+francinelucca@users.noreply.github.com> Date: Tue, 30 Sep 2025 13:00:20 -0400 Subject: [PATCH 02/19] Remove sx prop from TextInput component Removed the 'sx' prop from the TextInput component. --- .changeset/spicy-items-watch.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/spicy-items-watch.md diff --git a/.changeset/spicy-items-watch.md b/.changeset/spicy-items-watch.md new file mode 100644 index 00000000000..bffcfa80181 --- /dev/null +++ b/.changeset/spicy-items-watch.md @@ -0,0 +1,6 @@ +--- +"@primer/react": patch +"@primer/styled-react": patch +--- + +chore(TextInput): remove sx From 3d10343b17a4dc48af13fe5041bfc379a7d1c4fc Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Tue, 30 Sep 2025 20:39:02 -0400 Subject: [PATCH 03/19] type fix --- packages/styled-react/src/components/TextInput.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/styled-react/src/components/TextInput.tsx b/packages/styled-react/src/components/TextInput.tsx index 747d42eb6b6..3c20cb6e64d 100644 --- a/packages/styled-react/src/components/TextInput.tsx +++ b/packages/styled-react/src/components/TextInput.tsx @@ -1,7 +1,7 @@ import { TextInput as PrimerTextInput, - TextInputProps as PrimerTextInputProps, - TextInputActionProps as PrimerTextInputActionProps, + type TextInputProps as PrimerTextInputProps, + type TextInputActionProps as PrimerTextInputActionProps, } from '@primer/react' import {forwardRef} from 'react' import {Box} from './Box' From 607edd37fef027f4393332e5b5a44699ad879e6a Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Tue, 30 Sep 2025 20:46:25 -0400 Subject: [PATCH 04/19] remove sx from TextInputWIthTokens --- packages/react/src/TextInputWithTokens/TextInputWithTokens.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/react/src/TextInputWithTokens/TextInputWithTokens.tsx b/packages/react/src/TextInputWithTokens/TextInputWithTokens.tsx index a0f3b0a2954..18c609dc045 100644 --- a/packages/react/src/TextInputWithTokens/TextInputWithTokens.tsx +++ b/packages/react/src/TextInputWithTokens/TextInputWithTokens.tsx @@ -83,7 +83,6 @@ function TextInputWithTokensInnerComponent {IconComponent && !LeadingVisual && } Date: Tue, 30 Sep 2025 20:49:22 -0400 Subject: [PATCH 05/19] remove unnecessary stories --- .../src/TextInput/TextInput.dev.stories.tsx | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/packages/react/src/TextInput/TextInput.dev.stories.tsx b/packages/react/src/TextInput/TextInput.dev.stories.tsx index 356f21970c3..ebcf5fc62cd 100644 --- a/packages/react/src/TextInput/TextInput.dev.stories.tsx +++ b/packages/react/src/TextInput/TextInput.dev.stories.tsx @@ -18,21 +18,3 @@ export const WithCSS = () => ( ) - -export const WithSx = () => ( -
- - Default label - - -
-) - -export const WithSxAndCSS = () => ( -
- - Default label - - -
-) From 05785b5af4e262c92f55c70142f3e96490f7593d Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Tue, 30 Sep 2025 21:00:56 -0400 Subject: [PATCH 06/19] remove sx prop from Textarea --- packages/react/src/Textarea/Textarea.tsx | 2 -- .../__snapshots__/exports.test.ts.snap | 1 + .../src/components/Autocomplete.tsx | 13 +++++++++++-- .../styled-react/src/components/TextInput.tsx | 14 +++++++++++--- .../styled-react/src/components/Textarea.tsx | 19 +++++++++++++++++++ packages/styled-react/src/index.tsx | 2 +- 6 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 packages/styled-react/src/components/Textarea.tsx diff --git a/packages/react/src/Textarea/Textarea.tsx b/packages/react/src/Textarea/Textarea.tsx index 6cabcd57f01..55b7b33c711 100644 --- a/packages/react/src/Textarea/Textarea.tsx +++ b/packages/react/src/Textarea/Textarea.tsx @@ -58,7 +58,6 @@ const Textarea = React.forwardRef( { value, disabled, - sx: sxProp, required, validationStatus, rows = DEFAULT_TEXTAREA_ROWS, @@ -76,7 +75,6 @@ const Textarea = React.forwardRef( ): ReactElement => { return ( should not update exports without a semver change 1`] = "Textarea", "type TextareaProps", "TextInput", + "type TextInputActionProps", "type TextInputProps", "TextInputWithTokens", "type TextInputWithTokensProps", diff --git a/packages/styled-react/src/components/Autocomplete.tsx b/packages/styled-react/src/components/Autocomplete.tsx index 2028c65d111..2dcff5c6922 100644 --- a/packages/styled-react/src/components/Autocomplete.tsx +++ b/packages/styled-react/src/components/Autocomplete.tsx @@ -1,6 +1,7 @@ import { Autocomplete as PrimerAutocomplete, type AutocompleteOverlayProps as PrimerAutocompleteOverlayProps, + type AutocompleteInputProps as PrimerAutocompleteInputProps, } from '@primer/react' import {sx, type SxProp} from '../sx' import styled from 'styled-components' @@ -16,17 +17,25 @@ const AutocompleteOverlay: React.ComponentType = style ${sx} ` +export type AutocompleteInputProps = PrimerAutocompleteInputProps & SxProp + +const AutocompleteInput: React.ComponentType = styled(PrimerAutocomplete.Input).withConfig({ + shouldForwardProp: prop => (prop as keyof AutocompleteInputProps) !== 'sx', +})` + ${sx} +` + interface AutocompleteExport { (props: ComponentProps): React.ReactNode Context: typeof PrimerAutocomplete.Context - Input: typeof PrimerAutocomplete.Input + Input: typeof AutocompleteInput Menu: typeof PrimerAutocomplete.Menu Overlay: typeof AutocompleteOverlay } const Autocomplete: AutocompleteExport = Object.assign(PrimerAutocomplete, { Context: PrimerAutocomplete.Context, - Input: PrimerAutocomplete.Input, + Input: AutocompleteInput, Menu: PrimerAutocomplete.Menu, Overlay: AutocompleteOverlay, }) diff --git a/packages/styled-react/src/components/TextInput.tsx b/packages/styled-react/src/components/TextInput.tsx index 3c20cb6e64d..f40196bd377 100644 --- a/packages/styled-react/src/components/TextInput.tsx +++ b/packages/styled-react/src/components/TextInput.tsx @@ -7,16 +7,24 @@ import {forwardRef} from 'react' import {Box} from './Box' import type {SxProp} from '../sx' -export type TextInputProps = PrimerTextInputProps & SxProp +export type TextInputProps = PrimerTextInputProps & SxProp & {as?: React.ElementType} export type TextInputActionProps = PrimerTextInputActionProps & SxProp -const TextInputImpl = (props: TextInputProps) => +const StyledTextInput = forwardRef((props, ref) => { + return +}) + +const TextInputImpl = forwardRef(({as, ...props}, ref) => { + return +}) const TextInputAction = forwardRef((props, ref) => { return }) -type TextInputComposite = ((props: TextInputProps) => JSX.Element) & { +import type {ForwardRefExoticComponent, RefAttributes} from 'react' + +type TextInputComposite = ForwardRefExoticComponent> & { Action: typeof TextInputAction } diff --git a/packages/styled-react/src/components/Textarea.tsx b/packages/styled-react/src/components/Textarea.tsx new file mode 100644 index 00000000000..2e8ad764e10 --- /dev/null +++ b/packages/styled-react/src/components/Textarea.tsx @@ -0,0 +1,19 @@ +import {Textarea as PrimerTextarea, type TextareaProps as PrimerTextareaProps} from '@primer/react' +import styled from 'styled-components' +import {sx, type SxProp} from '../sx' +import type {ForwardRefComponent} from '../polymorphic' +import {forwardRef} from 'react' + +type TextareaProps = PrimerTextareaProps & SxProp & {as?: React.ElementType} + +const StyledTextarea = styled(PrimerTextarea).withConfig({ + shouldForwardProp: prop => prop !== 'sx', +})` + ${sx} +` as ForwardRefComponent<'textarea', TextareaProps> + +const Textarea = forwardRef(({as, ...props}, ref) => { + return +}) as ForwardRefComponent<'textarea', TextareaProps> + +export {Textarea, type TextareaProps} diff --git a/packages/styled-react/src/index.tsx b/packages/styled-react/src/index.tsx index d5dd28c2cb9..38a93977b7a 100644 --- a/packages/styled-react/src/index.tsx +++ b/packages/styled-react/src/index.tsx @@ -7,7 +7,6 @@ export {IconButton} from '@primer/react' export {ProgressBar} from '@primer/react' export {Select} from '@primer/react' export {Text} from '@primer/react' -export {Textarea} from '@primer/react' export {TextInput} from '@primer/react' export {Tooltip} from '@primer/react' export {type TextInputProps} from '@primer/react' @@ -55,6 +54,7 @@ export { export {Spinner, type SpinnerProps} from './components/Spinner' export {StateLabel, type StateLabelProps} from './components/StateLabel' export {SubNav, type SubNavProps, type SubNavLinkProps} from './components/SubNav' +export {Textarea, type TextareaProps} from './components/Textarea' export { Timeline, type TimelineProps, From 7f53ab9e2fae5ff2e6bf51ee0f6e21d403f6b24f Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Tue, 30 Sep 2025 21:02:14 -0400 Subject: [PATCH 07/19] fix exports --- packages/styled-react/src/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/styled-react/src/index.tsx b/packages/styled-react/src/index.tsx index 38a93977b7a..6efa5ae52fe 100644 --- a/packages/styled-react/src/index.tsx +++ b/packages/styled-react/src/index.tsx @@ -7,9 +7,7 @@ export {IconButton} from '@primer/react' export {ProgressBar} from '@primer/react' export {Select} from '@primer/react' export {Text} from '@primer/react' -export {TextInput} from '@primer/react' export {Tooltip} from '@primer/react' -export {type TextInputProps} from '@primer/react' // theming depends on styled-components export {ThemeProvider} from '@primer/react' @@ -55,6 +53,7 @@ export {Spinner, type SpinnerProps} from './components/Spinner' export {StateLabel, type StateLabelProps} from './components/StateLabel' export {SubNav, type SubNavProps, type SubNavLinkProps} from './components/SubNav' export {Textarea, type TextareaProps} from './components/Textarea' +export {TextInput, type TextInputProps, type TextInputActionProps} from './components/TextInput' export { Timeline, type TimelineProps, From 07be57e0f076ea14bf12536af475f024d241566c Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Tue, 30 Sep 2025 21:04:51 -0400 Subject: [PATCH 08/19] fix import --- packages/styled-react/src/components/TextInput.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/styled-react/src/components/TextInput.tsx b/packages/styled-react/src/components/TextInput.tsx index f40196bd377..3ad2b560b95 100644 --- a/packages/styled-react/src/components/TextInput.tsx +++ b/packages/styled-react/src/components/TextInput.tsx @@ -6,6 +6,7 @@ import { import {forwardRef} from 'react' import {Box} from './Box' import type {SxProp} from '../sx' +import type {ForwardRefExoticComponent, RefAttributes} from 'react' export type TextInputProps = PrimerTextInputProps & SxProp & {as?: React.ElementType} export type TextInputActionProps = PrimerTextInputActionProps & SxProp @@ -22,8 +23,6 @@ const TextInputAction = forwardRef((pro return }) -import type {ForwardRefExoticComponent, RefAttributes} from 'react' - type TextInputComposite = ForwardRefExoticComponent> & { Action: typeof TextInputAction } From a251708d760787ae220b190cf13639731cf21b7f Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Tue, 30 Sep 2025 21:12:54 -0400 Subject: [PATCH 09/19] remove sx stories snapshots --- ...Input-Dev-WithSx-dark-colorblind-linux.png | Bin 6222 -> 0 bytes ...TextInput-Dev-WithSx-dark-dimmed-linux.png | Bin 6268 -> 0 bytes ...ut-Dev-WithSx-dark-high-contrast-linux.png | Bin 6126 -> 0 bytes .../TextInput-Dev-WithSx-dark-linux.png | Bin 6222 -> 0 bytes ...Input-Dev-WithSx-dark-tritanopia-linux.png | Bin 6222 -> 0 bytes ...nput-Dev-WithSx-light-colorblind-linux.png | Bin 6177 -> 0 bytes ...t-Dev-WithSx-light-high-contrast-linux.png | Bin 6144 -> 0 bytes .../TextInput-Dev-WithSx-light-linux.png | Bin 6177 -> 0 bytes ...nput-Dev-WithSx-light-tritanopia-linux.png | Bin 6177 -> 0 bytes ...Dev-WithSxAndCSS-dark-colorblind-linux.png | Bin 6244 -> 0 bytes ...put-Dev-WithSxAndCSS-dark-dimmed-linux.png | Bin 6266 -> 0 bytes ...-WithSxAndCSS-dark-high-contrast-linux.png | Bin 6191 -> 0 bytes .../TextInput-Dev-WithSxAndCSS-dark-linux.png | Bin 6244 -> 0 bytes ...Dev-WithSxAndCSS-dark-tritanopia-linux.png | Bin 6244 -> 0 bytes ...ev-WithSxAndCSS-light-colorblind-linux.png | Bin 6230 -> 0 bytes ...WithSxAndCSS-light-high-contrast-linux.png | Bin 6200 -> 0 bytes ...TextInput-Dev-WithSxAndCSS-light-linux.png | Bin 6230 -> 0 bytes ...ev-WithSxAndCSS-light-tritanopia-linux.png | Bin 6230 -> 0 bytes e2e/components/TextInput.test.ts | 36 ------------------ 19 files changed, 36 deletions(-) delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-colorblind-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-dimmed-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-high-contrast-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-tritanopia-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-colorblind-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-high-contrast-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-tritanopia-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-colorblind-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-dimmed-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-high-contrast-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-tritanopia-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-colorblind-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-high-contrast-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-linux.png delete mode 100644 .playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-tritanopia-linux.png diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-colorblind-linux.png deleted file mode 100644 index df3df41d1747633b615eb588dd2872da531114d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6222 zcmeHLYfw{X8a|ZmqNPAvYY`EsYb_fopn_0Qh*eu`0wZr9XLx}RlN7k`QJ{{qLjnNX zHhq2ki{Q)$OG5PR5EZ6JAyP_R%s;z*rFVBg?v1Ut&bY_ARdcF{ac3S~HK7)K+8@lk z^HUdsnd(mIjwv5{e4^WYe5#-%=)cq)p6@#;IC9Du6_nmZg)y}@;UKFHh?9tLj)hPs;-`HcP(FYg5ZVZri&|R~ z5tn~+V3%qZJttQ+(WHY|>3E&D4FJqTgbiY>b|u#QqtCYO{n;3q?|`I)$XR02uEN91 z5s9tSW%Vp=Re2FhTM`e0c#3j{U6B|nK3VDS>0jotRNLf;o2?Nu>GQ=WUFb3Yy#0_S z^hqFuXRIHSjWQF38Flo>_$L>h|ET16XN>mJaH9L3g3B}GNi(uGvCOv4I5~|=TV>Py zCbFv{It-QmC8^w7jF8&1`()RWaL`ydBud(vBwCkIYeMR@yn|wQXB0iF7ayc6XB2<0Jg? z%5WgmC`eI?p;<4lZMH^Uer9TQc(44qqwRLBedg3W^wn3T9tqjfA>We_IZMg0l6T

A>b>2x>@f!1AbSG$mRxLx#{ z`EfU*NY>UvlGkR7bH%7hLH1l|bb-(LR8d|YvV8#tv9MUDNBv0As!*$1PmVCYzI|aK zTO}E0z^hjhVq#(^&cZ^e$)iuAP{nX0g4v2+b}Z9hfJAj&f1ix+Da-t3ajV*1Q7Jt1 z0RUY3hj5F=%r5g3B>e58IarN6G3~phB;%jSbi<{9SQ0-~2s)EEswCt*N#9_JK zyqmaJmh0F+4(ZsA4*{+?4#xhsfWHP?UO27K+ z_vY3v=f-)w5ZFXRWT)8xDrWvr@<`Qz_%Xw4gHDvAWP7Xi9a1DMJsc7>-w=q0s~s>; z^V#92l{M;ZvZ#+kD z#y^QX)(8F)tXnu(|1c|D>2Y`~nBow9m5sq*>Jb$Il#m*ov}wR+mv0M|8lL@pH=Df} zk)w!4xqDz`DY&fPX!YmT)Q{^)DV!&?Nv{P|p?-=tH>au*p;1#me*qHQJ*Q}TU1v4E z%yq`G&OduZK=MGU)-#v+DRcckl2>`A zy=AyLx0#+I2k3OyY#*U$+rF1wcLP}H?pw|d9u?Yy9^@p zvup#~7kgRUVW0HsPQHEm{Hvw`Br7MBO9FLWni;O2W3{xXR~x@A@|Lyk?9B5%V65Ka z=$Cnc^8gM*qje%u&T@H*xX>FbwTUJvq;62s>Z~i3Ml*IVn{%MJiRCD3tnv|dU0dcJ z`D;BAozVZ&J{@M^G&ej$m||22Dxpe=Yv6-bN}me~g{r62=nAMHBy!H7N&=j7SlRE) zxPs-!-;7`w(4v~)8bUaB4MaIb#_do{GUTMRu~3F|e--{kbIw}-eYXK0^zz`t&WgY? z4-Bsv-kWRXllg2-Oruf5m#qjgmd??I`TEy`O*9ph{}yn?uKERT>NbgF0t((=h04mk zCcqVYN0|xm@wHYn;L3Y1?E&EEbu<8M+WEhNLHya`8PCMe(@ysp5=zZ7Qd1XC3E)5dt9wIT>*&l)H6dO$QQzIu-?0A@OkCcwA4~Yv2iErsVf6Z1fnSR8VznM}R zwx<}Swi_It0f0~DVS)$|^Wquuxig|u)geyBy=t3VIdu;FyxPUs zoIWi~()u`~BhJ6zNi-sOPjQ?-dn-meN~0ACTOU^Tm;mFFG%s18kg1sFY2!vqTT_eT zs9uaZ4Z(xDvhpz~mF)qZTCf0I5Q2uuo8Glh%;OCuP`th02A&4g4<|ue%V&t&QG+jt zA)_Ofk{G!J0s!gR>0EH<`!fu{AJ&{t71Y-Tr^loCKAo@MKhWB~v~*+OJ^=6^4}YnG z`3p@FDE#PcK99blQC%KaFa0MmVxi8aU3*J7{^Z})n3slK9MMSr`!0V0O$&A+P$C$Z zx#?YE2X1|Mcr`~h%BVE^9jj6BTkgbxz_C#WM%GMHX;_$3aau8~N%$gla!TEji|~wS zc$k$!PL35ByuB@fBUgX-NA#9tLAOO^Vw{a|%J7W5KY;eeoY=;iZ`Rpv;JJb4pL%rKAlL@MHVF17%_TOPYooa~ snroxEHmv&_9QJOA>i;RKs}3jR{g-9mt-TA*$bhfE3^-nQ^!(L-0muk^2><{9 diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-dimmed-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-dimmed-linux.png deleted file mode 100644 index 7c5497e2b96b5760fd99f8acb894f65794752911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6268 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 diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-linux.png deleted file mode 100644 index df3df41d1747633b615eb588dd2872da531114d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6222 zcmeHLYfw{X8a|ZmqNPAvYY`EsYb_fopn_0Qh*eu`0wZr9XLx}RlN7k`QJ{{qLjnNX zHhq2ki{Q)$OG5PR5EZ6JAyP_R%s;z*rFVBg?v1Ut&bY_ARdcF{ac3S~HK7)K+8@lk z^HUdsnd(mIjwv5{e4^WYe5#-%=)cq)p6@#;IC9Du6_nmZg)y}@;UKFHh?9tLj)hPs;-`HcP(FYg5ZVZri&|R~ z5tn~+V3%qZJttQ+(WHY|>3E&D4FJqTgbiY>b|u#QqtCYO{n;3q?|`I)$XR02uEN91 z5s9tSW%Vp=Re2FhTM`e0c#3j{U6B|nK3VDS>0jotRNLf;o2?Nu>GQ=WUFb3Yy#0_S z^hqFuXRIHSjWQF38Flo>_$L>h|ET16XN>mJaH9L3g3B}GNi(uGvCOv4I5~|=TV>Py zCbFv{It-QmC8^w7jF8&1`()RWaL`ydBud(vBwCkIYeMR@yn|wQXB0iF7ayc6XB2<0Jg? z%5WgmC`eI?p;<4lZMH^Uer9TQc(44qqwRLBedg3W^wn3T9tqjfA>We_IZMg0l6T

A>b>2x>@f!1AbSG$mRxLx#{ z`EfU*NY>UvlGkR7bH%7hLH1l|bb-(LR8d|YvV8#tv9MUDNBv0As!*$1PmVCYzI|aK zTO}E0z^hjhVq#(^&cZ^e$)iuAP{nX0g4v2+b}Z9hfJAj&f1ix+Da-t3ajV*1Q7Jt1 z0RUY3hj5F=%r5g3B>e58IarN6G3~phB;%jSbi<{9SQ0-~2s)EEswCt*N#9_JK zyqmaJmh0F+4(ZsA4*{+?4#xhsfWHP?UO27K+ z_vY3v=f-)w5ZFXRWT)8xDrWvr@<`Qz_%Xw4gHDvAWP7Xi9a1DMJsc7>-w=q0s~s>; z^V#92l{M;ZvZ#+kD z#y^QX)(8F)tXnu(|1c|D>2Y`~nBow9m5sq*>Jb$Il#m*ov}wR+mv0M|8lL@pH=Df} zk)w!4xqDz`DY&fPX!YmT)Q{^)DV!&?Nv{P|p?-=tH>au*p;1#me*qHQJ*Q}TU1v4E z%yq`G&OduZK=MGU)-#v+DRcckl2>`A zy=AyLx0#+I2k3OyY#*U$+rF1wcLP}H?pw|d9u?Yy9^@p zvup#~7kgRUVW0HsPQHEm{Hvw`Br7MBO9FLWni;O2W3{xXR~x@A@|Lyk?9B5%V65Ka z=$Cnc^8gM*qje%u&T@H*xX>FbwTUJvq;62s>Z~i3Ml*IVn{%MJiRCD3tnv|dU0dcJ z`D;BAozVZ&J{@M^G&ej$m||22Dxpe=Yv6-bN}me~g{r62=nAMHBy!H7N&=j7SlRE) zxPs-!-;7`w(4v~)8bUaB4MaIb#_do{GUTMRu~3F|e--{kbIw}-eYXK0^zz`t&WgY? z4-Bsv-kWRXllg2-Oruf5m#qjgmd??I`TEy`O*9ph{}yn?uKERT>NbgF0t((=h04mk zCcqVYN0|xm@wHYn;L3Y1?E&EEbu<8M+WEhNLHya`8PCMe(@ysp5=zZ7Qd1XC3E)5dt9wIT>*&l)H6dO$QQzIu-?0A@OkCcwA4~Yv2iErsVf6Z1fnSR8VznM}R zwx<}Swi_It0f0~DVS)$|^Wquuxig|u)geyBy=t3VIdu;FyxPUs zoIWi~()u`~BhJ6zNi-sOPjQ?-dn-meN~0ACTOU^Tm;mFFG%s18kg1sFY2!vqTT_eT zs9uaZ4Z(xDvhpz~mF)qZTCf0I5Q2uuo8Glh%;OCuP`th02A&4g4<|ue%V&t&QG+jt zA)_Ofk{G!J0s!gR>0EH<`!fu{AJ&{t71Y-Tr^loCKAo@MKhWB~v~*+OJ^=6^4}YnG z`3p@FDE#PcK99blQC%KaFa0MmVxi8aU3*J7{^Z})n3slK9MMSr`!0V0O$&A+P$C$Z zx#?YE2X1|Mcr`~h%BVE^9jj6BTkgbxz_C#WM%GMHX;_$3aau8~N%$gla!TEji|~wS zc$k$!PL35ByuB@fBUgX-NA#9tLAOO^Vw{a|%J7W5KY;eeoY=;iZ`Rpv;JJb4pL%rKAlL@MHVF17%_TOPYooa~ snroxEHmv&_9QJOA>i;RKs}3jR{g-9mt-TA*$bhfE3^-nQ^!(L-0muk^2><{9 diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-dark-tritanopia-linux.png deleted file mode 100644 index df3df41d1747633b615eb588dd2872da531114d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6222 zcmeHLYfw{X8a|ZmqNPAvYY`EsYb_fopn_0Qh*eu`0wZr9XLx}RlN7k`QJ{{qLjnNX zHhq2ki{Q)$OG5PR5EZ6JAyP_R%s;z*rFVBg?v1Ut&bY_ARdcF{ac3S~HK7)K+8@lk z^HUdsnd(mIjwv5{e4^WYe5#-%=)cq)p6@#;IC9Du6_nmZg)y}@;UKFHh?9tLj)hPs;-`HcP(FYg5ZVZri&|R~ z5tn~+V3%qZJttQ+(WHY|>3E&D4FJqTgbiY>b|u#QqtCYO{n;3q?|`I)$XR02uEN91 z5s9tSW%Vp=Re2FhTM`e0c#3j{U6B|nK3VDS>0jotRNLf;o2?Nu>GQ=WUFb3Yy#0_S z^hqFuXRIHSjWQF38Flo>_$L>h|ET16XN>mJaH9L3g3B}GNi(uGvCOv4I5~|=TV>Py zCbFv{It-QmC8^w7jF8&1`()RWaL`ydBud(vBwCkIYeMR@yn|wQXB0iF7ayc6XB2<0Jg? z%5WgmC`eI?p;<4lZMH^Uer9TQc(44qqwRLBedg3W^wn3T9tqjfA>We_IZMg0l6T

A>b>2x>@f!1AbSG$mRxLx#{ z`EfU*NY>UvlGkR7bH%7hLH1l|bb-(LR8d|YvV8#tv9MUDNBv0As!*$1PmVCYzI|aK zTO}E0z^hjhVq#(^&cZ^e$)iuAP{nX0g4v2+b}Z9hfJAj&f1ix+Da-t3ajV*1Q7Jt1 z0RUY3hj5F=%r5g3B>e58IarN6G3~phB;%jSbi<{9SQ0-~2s)EEswCt*N#9_JK zyqmaJmh0F+4(ZsA4*{+?4#xhsfWHP?UO27K+ z_vY3v=f-)w5ZFXRWT)8xDrWvr@<`Qz_%Xw4gHDvAWP7Xi9a1DMJsc7>-w=q0s~s>; z^V#92l{M;ZvZ#+kD z#y^QX)(8F)tXnu(|1c|D>2Y`~nBow9m5sq*>Jb$Il#m*ov}wR+mv0M|8lL@pH=Df} zk)w!4xqDz`DY&fPX!YmT)Q{^)DV!&?Nv{P|p?-=tH>au*p;1#me*qHQJ*Q}TU1v4E z%yq`G&OduZK=MGU)-#v+DRcckl2>`A zy=AyLx0#+I2k3OyY#*U$+rF1wcLP}H?pw|d9u?Yy9^@p zvup#~7kgRUVW0HsPQHEm{Hvw`Br7MBO9FLWni;O2W3{xXR~x@A@|Lyk?9B5%V65Ka z=$Cnc^8gM*qje%u&T@H*xX>FbwTUJvq;62s>Z~i3Ml*IVn{%MJiRCD3tnv|dU0dcJ z`D;BAozVZ&J{@M^G&ej$m||22Dxpe=Yv6-bN}me~g{r62=nAMHBy!H7N&=j7SlRE) zxPs-!-;7`w(4v~)8bUaB4MaIb#_do{GUTMRu~3F|e--{kbIw}-eYXK0^zz`t&WgY? z4-Bsv-kWRXllg2-Oruf5m#qjgmd??I`TEy`O*9ph{}yn?uKERT>NbgF0t((=h04mk zCcqVYN0|xm@wHYn;L3Y1?E&EEbu<8M+WEhNLHya`8PCMe(@ysp5=zZ7Qd1XC3E)5dt9wIT>*&l)H6dO$QQzIu-?0A@OkCcwA4~Yv2iErsVf6Z1fnSR8VznM}R zwx<}Swi_It0f0~DVS)$|^Wquuxig|u)geyBy=t3VIdu;FyxPUs zoIWi~()u`~BhJ6zNi-sOPjQ?-dn-meN~0ACTOU^Tm;mFFG%s18kg1sFY2!vqTT_eT zs9uaZ4Z(xDvhpz~mF)qZTCf0I5Q2uuo8Glh%;OCuP`th02A&4g4<|ue%V&t&QG+jt zA)_Ofk{G!J0s!gR>0EH<`!fu{AJ&{t71Y-Tr^loCKAo@MKhWB~v~*+OJ^=6^4}YnG z`3p@FDE#PcK99blQC%KaFa0MmVxi8aU3*J7{^Z})n3slK9MMSr`!0V0O$&A+P$C$Z zx#?YE2X1|Mcr`~h%BVE^9jj6BTkgbxz_C#WM%GMHX;_$3aau8~N%$gla!TEji|~wS zc$k$!PL35ByuB@fBUgX-NA#9tLAOO^Vw{a|%J7W5KY;eeoY=;iZ`Rpv;JJb4pL%rKAlL@MHVF17%_TOPYooa~ snroxEHmv&_9QJOA>i;RKs}3jR{g-9mt-TA*$bhfE3^-nQ^!(L-0muk^2><{9 diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-colorblind-linux.png deleted file mode 100644 index 785dcf53bb94b927acb855299b20455246185874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6177 zcmeHLYfuwb7QU2PTzRPLSQUlT=~PTS7&E-rk(x6k2`nnx%ZyA z_nh;6=iGbccxaI0I_Gr&0LLR=97X|P`^MV9+PAEdHHU>h*3O263OWS1y*tJM*djY} z_~6Nm+f(v0%;O7Loi8m8c<{~n94F^z8ypjR95U{u1paIsq;JeIr|!W_VjP*k4kiOa~Qq=6VE3)kxftF z^CKh=3)TG=i)9bM!^O(86E*CHs}G^aOe*c`U@M2ef136 z^#^F(9KNZeX^b;j&0sLh#`VwXmtw-3WiuPI6+BDM0baA<+p)-U(p#VncX`pB+9uSA zgo-woC_1;QYVyVX&L0ojBK=-IKWK{&rwt$bo|s7(nm0`e#Ws&}8`7ng^!7k?EG2Uh z-e1Zc$pqlNBksj=K3+nwoC?r8?`y>J3F{Ga+EYRK&3cguL;FIpyu@az3tZ~QhT&1< zX9e)tS4hmP0|4KZUQbq4$93X)w=y23N&J@#0cug!K@w^HabdI|V|E191zFjnWA=AC z8Ku2gqPI4`Isq2lSQek$eZK&HB6wT!K-nhbftKp(q=c+B-a)pziM7yUdygB6|JNxoV@)Sjk;_S;=crK7BgVZU)-1ufp{OI^I}zAL)H{Nt@`LwkL3#IRB>j}Bg%xt|*@ z-cO8G{8GvoAL7Us5X}Os`#yK^6|je~pLpPxi|wzYf&&8sp={DvFPjPVj#0Hx^*1;% z!t|sCE9uR=z&duP5SlZ)baee8{j`Fth%cnGvaFXp_w3%^JqK;^6*4{%7d$RsB6aI< zxYpFg$pZ>O8r

mVSc2T*JC6rPZ zazratFAxYu`5w`YT7-&H$?U7C5RF3V-LHy#$gUA+MXP1Y#KeR!b-ZRBc?|&mcn&Sa z@+=5aw0Ci`q@<)UL40%n*!8ZiE?pKmTEdNKfP8W;?}^E*QLUIqLOS%*gA))Qt8RQ3 z%kLAlXtZFeZ9NuRc5`MoUN)5@mf}l3ccKW zuIzoRYhS@OYVT9?;!U3<3UqYXRu5z6e|pxyqnlawFk|oDpaR6R zQ4J{|02n6g=YBEQ#CMz>N`(7I4bS48rbCJ*PsDG7=VYm-~JWw`{Qzqz=Dp1l~EFkPp1 zLQ4EeCKq%oY4+mg&6^pHjN-=B0@v+3;E7*BM{`-bV6n^7rC0T%oQ55~nl~jSn%P3+ z^R&XEU9n4MN3V$NKF0T|NJA(z{(Dha&<=lEpQE?9veH+hz1Hcnzk-?a&vv`eMjB0+ ze!URcILF~DjVpQ)we2B~Kdk}aGgjHxk;7K3RZWG9OZV7-951(N8}QzRMmvzRVZ;@H zLzk%ltljy0!e^p|OQEdrlA}X}%s#OS2VhT5f?tcICx`o}={P>|YcVbEM z@=`BvPtP6a+G>*cA7>e>R+=tjFcQL0l@r2vB2dB|eO)P|ID?$GIp3Pl$e5wpv6?&> zK_$wHXJ3TZq0ne_KtO;gSuGuu6ymvOCX%h-q_`Jr`b#{mdKud#)p0@b;)*hB)*C2C z_p=MVU@=i8NaAk`abxI`k9@U1I=T2%T}zJ8r)r;`deLrI2t`XN8$eFIva8cvD-ItT zsJa#zfeCYRKADJ@QP%x?hS$U^+s&ccZ3%BvZ3b;0)_(op&GNgp`X7ZqcXejzlx!}6 z(eslJUfJANio~wB0S||;ON~6PhuE+7^V6q_!m!xHL@8zMZx{HB8&jx@eZTf$uV8|^ zkCOVI9gw~EQpZsq&F2{Tk9@Sv^T7qK@rId(JGS6U4(6F$F2AMj$cI8`$DQDH0|QKk zSCpBwk*I7&VX@QAwQnXPcZHsvI0L|6>%68zp#7y*vjrz{^!PIj|E%C+$F{+x`>EEd zD1P&=0b>Xm@%>}Vp+BRZYB#cRLPRzrVndz|h0oLtmc%7u38^aR2}S diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-high-contrast-linux.png deleted file mode 100644 index adef3e640fb53abac5a6bf778b557629db8a9873..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6144 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

mVSc2T*JC6rPZ zazratFAxYu`5w`YT7-&H$?U7C5RF3V-LHy#$gUA+MXP1Y#KeR!b-ZRBc?|&mcn&Sa z@+=5aw0Ci`q@<)UL40%n*!8ZiE?pKmTEdNKfP8W;?}^E*QLUIqLOS%*gA))Qt8RQ3 z%kLAlXtZFeZ9NuRc5`MoUN)5@mf}l3ccKW zuIzoRYhS@OYVT9?;!U3<3UqYXRu5z6e|pxyqnlawFk|oDpaR6R zQ4J{|02n6g=YBEQ#CMz>N`(7I4bS48rbCJ*PsDG7=VYm-~JWw`{Qzqz=Dp1l~EFkPp1 zLQ4EeCKq%oY4+mg&6^pHjN-=B0@v+3;E7*BM{`-bV6n^7rC0T%oQ55~nl~jSn%P3+ z^R&XEU9n4MN3V$NKF0T|NJA(z{(Dha&<=lEpQE?9veH+hz1Hcnzk-?a&vv`eMjB0+ ze!URcILF~DjVpQ)we2B~Kdk}aGgjHxk;7K3RZWG9OZV7-951(N8}QzRMmvzRVZ;@H zLzk%ltljy0!e^p|OQEdrlA}X}%s#OS2VhT5f?tcICx`o}={P>|YcVbEM z@=`BvPtP6a+G>*cA7>e>R+=tjFcQL0l@r2vB2dB|eO)P|ID?$GIp3Pl$e5wpv6?&> zK_$wHXJ3TZq0ne_KtO;gSuGuu6ymvOCX%h-q_`Jr`b#{mdKud#)p0@b;)*hB)*C2C z_p=MVU@=i8NaAk`abxI`k9@U1I=T2%T}zJ8r)r;`deLrI2t`XN8$eFIva8cvD-ItT zsJa#zfeCYRKADJ@QP%x?hS$U^+s&ccZ3%BvZ3b;0)_(op&GNgp`X7ZqcXejzlx!}6 z(eslJUfJANio~wB0S||;ON~6PhuE+7^V6q_!m!xHL@8zMZx{HB8&jx@eZTf$uV8|^ zkCOVI9gw~EQpZsq&F2{Tk9@Sv^T7qK@rId(JGS6U4(6F$F2AMj$cI8`$DQDH0|QKk zSCpBwk*I7&VX@QAwQnXPcZHsvI0L|6>%68zp#7y*vjrz{^!PIj|E%C+$F{+x`>EEd zD1P&=0b>Xm@%>}Vp+BRZYB#cRLPRzrVndz|h0oLtmc%7u38^aR2}S diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSx-light-tritanopia-linux.png deleted file mode 100644 index 785dcf53bb94b927acb855299b20455246185874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6177 zcmeHLYfuwb7QU2PTzRPLSQUlT=~PTS7&E-rk(x6k2`nnx%ZyA z_nh;6=iGbccxaI0I_Gr&0LLR=97X|P`^MV9+PAEdHHU>h*3O263OWS1y*tJM*djY} z_~6Nm+f(v0%;O7Loi8m8c<{~n94F^z8ypjR95U{u1paIsq;JeIr|!W_VjP*k4kiOa~Qq=6VE3)kxftF z^CKh=3)TG=i)9bM!^O(86E*CHs}G^aOe*c`U@M2ef136 z^#^F(9KNZeX^b;j&0sLh#`VwXmtw-3WiuPI6+BDM0baA<+p)-U(p#VncX`pB+9uSA zgo-woC_1;QYVyVX&L0ojBK=-IKWK{&rwt$bo|s7(nm0`e#Ws&}8`7ng^!7k?EG2Uh z-e1Zc$pqlNBksj=K3+nwoC?r8?`y>J3F{Ga+EYRK&3cguL;FIpyu@az3tZ~QhT&1< zX9e)tS4hmP0|4KZUQbq4$93X)w=y23N&J@#0cug!K@w^HabdI|V|E191zFjnWA=AC z8Ku2gqPI4`Isq2lSQek$eZK&HB6wT!K-nhbftKp(q=c+B-a)pziM7yUdygB6|JNxoV@)Sjk;_S;=crK7BgVZU)-1ufp{OI^I}zAL)H{Nt@`LwkL3#IRB>j}Bg%xt|*@ z-cO8G{8GvoAL7Us5X}Os`#yK^6|je~pLpPxi|wzYf&&8sp={DvFPjPVj#0Hx^*1;% z!t|sCE9uR=z&duP5SlZ)baee8{j`Fth%cnGvaFXp_w3%^JqK;^6*4{%7d$RsB6aI< zxYpFg$pZ>O8r

mVSc2T*JC6rPZ zazratFAxYu`5w`YT7-&H$?U7C5RF3V-LHy#$gUA+MXP1Y#KeR!b-ZRBc?|&mcn&Sa z@+=5aw0Ci`q@<)UL40%n*!8ZiE?pKmTEdNKfP8W;?}^E*QLUIqLOS%*gA))Qt8RQ3 z%kLAlXtZFeZ9NuRc5`MoUN)5@mf}l3ccKW zuIzoRYhS@OYVT9?;!U3<3UqYXRu5z6e|pxyqnlawFk|oDpaR6R zQ4J{|02n6g=YBEQ#CMz>N`(7I4bS48rbCJ*PsDG7=VYm-~JWw`{Qzqz=Dp1l~EFkPp1 zLQ4EeCKq%oY4+mg&6^pHjN-=B0@v+3;E7*BM{`-bV6n^7rC0T%oQ55~nl~jSn%P3+ z^R&XEU9n4MN3V$NKF0T|NJA(z{(Dha&<=lEpQE?9veH+hz1Hcnzk-?a&vv`eMjB0+ ze!URcILF~DjVpQ)we2B~Kdk}aGgjHxk;7K3RZWG9OZV7-951(N8}QzRMmvzRVZ;@H zLzk%ltljy0!e^p|OQEdrlA}X}%s#OS2VhT5f?tcICx`o}={P>|YcVbEM z@=`BvPtP6a+G>*cA7>e>R+=tjFcQL0l@r2vB2dB|eO)P|ID?$GIp3Pl$e5wpv6?&> zK_$wHXJ3TZq0ne_KtO;gSuGuu6ymvOCX%h-q_`Jr`b#{mdKud#)p0@b;)*hB)*C2C z_p=MVU@=i8NaAk`abxI`k9@U1I=T2%T}zJ8r)r;`deLrI2t`XN8$eFIva8cvD-ItT zsJa#zfeCYRKADJ@QP%x?hS$U^+s&ccZ3%BvZ3b;0)_(op&GNgp`X7ZqcXejzlx!}6 z(eslJUfJANio~wB0S||;ON~6PhuE+7^V6q_!m!xHL@8zMZx{HB8&jx@eZTf$uV8|^ zkCOVI9gw~EQpZsq&F2{Tk9@Sv^T7qK@rId(JGS6U4(6F$F2AMj$cI8`$DQDH0|QKk zSCpBwk*I7&VX@QAwQnXPcZHsvI0L|6>%68zp#7y*vjrz{^!PIj|E%C+$F{+x`>EEd zD1P&=0b>Xm@%>}Vp+BRZYB#cRLPRzrVndz|h0oLtmc%7u38^aR2}S diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-colorblind-linux.png deleted file mode 100644 index 081099aacdb79529b71bc4db491dd2b56e17e3e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6244 zcmeHLYf#fy7XK^L;se25)*_;$9e3(bgjf)QKtg?$6;{!pO>H0%SU^c3mGB6JB)BMu z2w63Nyn>XC2pEE3!YdGz779oZ2n0zWyuvFaJOYV%Z`u$0xgYc!cjnHWIdkvKnR9-> z-#PbWUcBJDXV-yU008Vc_m4Ah05IDyZD7ZCljV~$EuN-h8xHP!3aH^7Tm*pq_UF!= zyo@iFjT5PP@g-erVo}F8v1Xp1Z*OwkvFn-oqKr+a%XdQD_5@u_te-93x6i>bQ1D|w zg1al@sNjg_&yzI)FA}JKTif~eytU&E{`0iO9ka)lAI#tW%bAD><29>Z<>Za@TbUH5 z09~vO=1Mg*DN`lF1w-73QuBQPa7~3+ly3uo)S53$$LF^j&4JXt)Aj&x>Mj8Qc6>Nv zi?ck#@{lKiXO^91gT~2NhsKdeq>wKXtuEuRTV<}`ua)>T*3#hMjj$;450Nr;kkYi44NC-4^SKu;3iL`bK}>cF4v#Xq1T-hvh)o@Ji9m`I4|4FS)p;X|4!?Qk#6|u2)t2 zISA0?aWEQRMvc|S3;G_zi0es#FvU9s8gH=4N5ytOIhj^5?oDi;AQ&A4QSWM}><~eh z{H}8FYc}AJRfe-RmCPmbWHPPz>9=4fi-`z&?c&sY-nOI-`FSd z9~}10F7&}pyeSYH4XTyojR(FtK2x__&E@*{VH5}$jq*#9ZSSE8F|AHsXOkCa^YEAY4(>L9TbH%`A$E5KYG+A+81 zNWVw9e~cvnEFU;TDpOijRaZOGU$R-*`$^w8NN!sP{20W+3zrNXN;E5WSlPwh9Ld8S z34rNpI|ztsC}AWQUNsC0cIkE}YQFO^-r1dQ1wtVNI0|&)N?_nn%Mar(7yIBnJ^LJs z3QQ)!EtET%7JaWc+y4#sV1i)2r8!H1+fyn{2Oek+Ry&&5ce)#kYDw`zK$S z(w@?rzA5cLp5J-3YNg8!|>-yy@EG%D;1Mrz%wGdT1ALA569Ib~CepX?rC zAR+kGNf|<_Rf!YDM1P0!Zz<07QSv7{T+(6|wR8xku@ic4G}#E<+rnR@~WLN>;v0v-Dh8@8!Y>N_|BM zNdw|+VA14OYV2=cWE4Zfdx$=|sdY&&+4y*FZVujqZZ+y>x+ox@DSmiwUiSX4r};w{ zxHD`a+faA2gI{UIE5LPDz^?cexM99?koZLMyw{(V*Kn4qjE$S(u7io9fv$s42}hCV zgjo{lw*jfa%txgn)xyAxbyycIZoNA#-6H8nLs-Ry$E)qj@90!En@#r6ZM%2*ULtZn{DQmx22YAm;rZL+zOBEy? zUprxJb3JlFw}f!UU@+242$dH>P;(V0Ww`n|n7Ah&sYoS>v$9Y+d16~&U}cJ=u9udw zp1B)lyyI4l2%vcuuUL?Q|BHMl|LaB9Q=4>o~l@0P)9NO?5W-38rnAwMq68{(L=ydbTPKn|+)8ZXT*d zn9GOj$LNRGa%y96z0-NQI0R>vzm(rh_{>xzf3KhMp~BfI5aR|GUArXt)eePJjdYeA z+drkO5{BVRPlD_{l5yI+qI~a(@fiU4`@%m(0rrN0cr07AxfJM@>v#TqAJ6uFip;d4 zqf70T527fE=aK8*CsNFSTA_5+RRxm!)V<7aDg5km6ebty_4CuGPvJ;{7E203eC4b3 zscq@n28_z$J>(R-xP_r=bk$`}roZ6X<*#;+aJ(bl5}FBnfz)wSh8^+y_{l-Yce3IT ze8vx=y3jK$*AvXc_${|dBQD&qD4!0o*%0N8sHR|O7`WyC4___iyEjCi2;-I~@Vq%Q z#ZBT2K|@S(a$oN_bO+EL!()Hqn?9>)W|r5ZvBJ^jq(C9kE7JX;?214; zNz&3ZHspGGYjo!zC|>0O06U{JBUVcyUbzP35%IRHqgu;XJx|!YJd12;3cuNV&lj!z zbqI5y{dLt;`vcOOIrZj0@xP7KGGy&i(Fge s+9KB$xjy)ab4ysZgyn+@i_VHM$gg`;u>F#0oB^CWd*MvYscZlKAFW#WxBvhE diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-dimmed-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-dimmed-linux.png deleted file mode 100644 index 5c4c510e792fc95009cbe0f1b1c693747fc8ed50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6266 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 diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-linux.png deleted file mode 100644 index 081099aacdb79529b71bc4db491dd2b56e17e3e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6244 zcmeHLYf#fy7XK^L;se25)*_;$9e3(bgjf)QKtg?$6;{!pO>H0%SU^c3mGB6JB)BMu z2w63Nyn>XC2pEE3!YdGz779oZ2n0zWyuvFaJOYV%Z`u$0xgYc!cjnHWIdkvKnR9-> z-#PbWUcBJDXV-yU008Vc_m4Ah05IDyZD7ZCljV~$EuN-h8xHP!3aH^7Tm*pq_UF!= zyo@iFjT5PP@g-erVo}F8v1Xp1Z*OwkvFn-oqKr+a%XdQD_5@u_te-93x6i>bQ1D|w zg1al@sNjg_&yzI)FA}JKTif~eytU&E{`0iO9ka)lAI#tW%bAD><29>Z<>Za@TbUH5 z09~vO=1Mg*DN`lF1w-73QuBQPa7~3+ly3uo)S53$$LF^j&4JXt)Aj&x>Mj8Qc6>Nv zi?ck#@{lKiXO^91gT~2NhsKdeq>wKXtuEuRTV<}`ua)>T*3#hMjj$;450Nr;kkYi44NC-4^SKu;3iL`bK}>cF4v#Xq1T-hvh)o@Ji9m`I4|4FS)p;X|4!?Qk#6|u2)t2 zISA0?aWEQRMvc|S3;G_zi0es#FvU9s8gH=4N5ytOIhj^5?oDi;AQ&A4QSWM}><~eh z{H}8FYc}AJRfe-RmCPmbWHPPz>9=4fi-`z&?c&sY-nOI-`FSd z9~}10F7&}pyeSYH4XTyojR(FtK2x__&E@*{VH5}$jq*#9ZSSE8F|AHsXOkCa^YEAY4(>L9TbH%`A$E5KYG+A+81 zNWVw9e~cvnEFU;TDpOijRaZOGU$R-*`$^w8NN!sP{20W+3zrNXN;E5WSlPwh9Ld8S z34rNpI|ztsC}AWQUNsC0cIkE}YQFO^-r1dQ1wtVNI0|&)N?_nn%Mar(7yIBnJ^LJs z3QQ)!EtET%7JaWc+y4#sV1i)2r8!H1+fyn{2Oek+Ry&&5ce)#kYDw`zK$S z(w@?rzA5cLp5J-3YNg8!|>-yy@EG%D;1Mrz%wGdT1ALA569Ib~CepX?rC zAR+kGNf|<_Rf!YDM1P0!Zz<07QSv7{T+(6|wR8xku@ic4G}#E<+rnR@~WLN>;v0v-Dh8@8!Y>N_|BM zNdw|+VA14OYV2=cWE4Zfdx$=|sdY&&+4y*FZVujqZZ+y>x+ox@DSmiwUiSX4r};w{ zxHD`a+faA2gI{UIE5LPDz^?cexM99?koZLMyw{(V*Kn4qjE$S(u7io9fv$s42}hCV zgjo{lw*jfa%txgn)xyAxbyycIZoNA#-6H8nLs-Ry$E)qj@90!En@#r6ZM%2*ULtZn{DQmx22YAm;rZL+zOBEy? zUprxJb3JlFw}f!UU@+242$dH>P;(V0Ww`n|n7Ah&sYoS>v$9Y+d16~&U}cJ=u9udw zp1B)lyyI4l2%vcuuUL?Q|BHMl|LaB9Q=4>o~l@0P)9NO?5W-38rnAwMq68{(L=ydbTPKn|+)8ZXT*d zn9GOj$LNRGa%y96z0-NQI0R>vzm(rh_{>xzf3KhMp~BfI5aR|GUArXt)eePJjdYeA z+drkO5{BVRPlD_{l5yI+qI~a(@fiU4`@%m(0rrN0cr07AxfJM@>v#TqAJ6uFip;d4 zqf70T527fE=aK8*CsNFSTA_5+RRxm!)V<7aDg5km6ebty_4CuGPvJ;{7E203eC4b3 zscq@n28_z$J>(R-xP_r=bk$`}roZ6X<*#;+aJ(bl5}FBnfz)wSh8^+y_{l-Yce3IT ze8vx=y3jK$*AvXc_${|dBQD&qD4!0o*%0N8sHR|O7`WyC4___iyEjCi2;-I~@Vq%Q z#ZBT2K|@S(a$oN_bO+EL!()Hqn?9>)W|r5ZvBJ^jq(C9kE7JX;?214; zNz&3ZHspGGYjo!zC|>0O06U{JBUVcyUbzP35%IRHqgu;XJx|!YJd12;3cuNV&lj!z zbqI5y{dLt;`vcOOIrZj0@xP7KGGy&i(Fge s+9KB$xjy)ab4ysZgyn+@i_VHM$gg`;u>F#0oB^CWd*MvYscZlKAFW#WxBvhE diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-dark-tritanopia-linux.png deleted file mode 100644 index 081099aacdb79529b71bc4db491dd2b56e17e3e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6244 zcmeHLYf#fy7XK^L;se25)*_;$9e3(bgjf)QKtg?$6;{!pO>H0%SU^c3mGB6JB)BMu z2w63Nyn>XC2pEE3!YdGz779oZ2n0zWyuvFaJOYV%Z`u$0xgYc!cjnHWIdkvKnR9-> z-#PbWUcBJDXV-yU008Vc_m4Ah05IDyZD7ZCljV~$EuN-h8xHP!3aH^7Tm*pq_UF!= zyo@iFjT5PP@g-erVo}F8v1Xp1Z*OwkvFn-oqKr+a%XdQD_5@u_te-93x6i>bQ1D|w zg1al@sNjg_&yzI)FA}JKTif~eytU&E{`0iO9ka)lAI#tW%bAD><29>Z<>Za@TbUH5 z09~vO=1Mg*DN`lF1w-73QuBQPa7~3+ly3uo)S53$$LF^j&4JXt)Aj&x>Mj8Qc6>Nv zi?ck#@{lKiXO^91gT~2NhsKdeq>wKXtuEuRTV<}`ua)>T*3#hMjj$;450Nr;kkYi44NC-4^SKu;3iL`bK}>cF4v#Xq1T-hvh)o@Ji9m`I4|4FS)p;X|4!?Qk#6|u2)t2 zISA0?aWEQRMvc|S3;G_zi0es#FvU9s8gH=4N5ytOIhj^5?oDi;AQ&A4QSWM}><~eh z{H}8FYc}AJRfe-RmCPmbWHPPz>9=4fi-`z&?c&sY-nOI-`FSd z9~}10F7&}pyeSYH4XTyojR(FtK2x__&E@*{VH5}$jq*#9ZSSE8F|AHsXOkCa^YEAY4(>L9TbH%`A$E5KYG+A+81 zNWVw9e~cvnEFU;TDpOijRaZOGU$R-*`$^w8NN!sP{20W+3zrNXN;E5WSlPwh9Ld8S z34rNpI|ztsC}AWQUNsC0cIkE}YQFO^-r1dQ1wtVNI0|&)N?_nn%Mar(7yIBnJ^LJs z3QQ)!EtET%7JaWc+y4#sV1i)2r8!H1+fyn{2Oek+Ry&&5ce)#kYDw`zK$S z(w@?rzA5cLp5J-3YNg8!|>-yy@EG%D;1Mrz%wGdT1ALA569Ib~CepX?rC zAR+kGNf|<_Rf!YDM1P0!Zz<07QSv7{T+(6|wR8xku@ic4G}#E<+rnR@~WLN>;v0v-Dh8@8!Y>N_|BM zNdw|+VA14OYV2=cWE4Zfdx$=|sdY&&+4y*FZVujqZZ+y>x+ox@DSmiwUiSX4r};w{ zxHD`a+faA2gI{UIE5LPDz^?cexM99?koZLMyw{(V*Kn4qjE$S(u7io9fv$s42}hCV zgjo{lw*jfa%txgn)xyAxbyycIZoNA#-6H8nLs-Ry$E)qj@90!En@#r6ZM%2*ULtZn{DQmx22YAm;rZL+zOBEy? zUprxJb3JlFw}f!UU@+242$dH>P;(V0Ww`n|n7Ah&sYoS>v$9Y+d16~&U}cJ=u9udw zp1B)lyyI4l2%vcuuUL?Q|BHMl|LaB9Q=4>o~l@0P)9NO?5W-38rnAwMq68{(L=ydbTPKn|+)8ZXT*d zn9GOj$LNRGa%y96z0-NQI0R>vzm(rh_{>xzf3KhMp~BfI5aR|GUArXt)eePJjdYeA z+drkO5{BVRPlD_{l5yI+qI~a(@fiU4`@%m(0rrN0cr07AxfJM@>v#TqAJ6uFip;d4 zqf70T527fE=aK8*CsNFSTA_5+RRxm!)V<7aDg5km6ebty_4CuGPvJ;{7E203eC4b3 zscq@n28_z$J>(R-xP_r=bk$`}roZ6X<*#;+aJ(bl5}FBnfz)wSh8^+y_{l-Yce3IT ze8vx=y3jK$*AvXc_${|dBQD&qD4!0o*%0N8sHR|O7`WyC4___iyEjCi2;-I~@Vq%Q z#ZBT2K|@S(a$oN_bO+EL!()Hqn?9>)W|r5ZvBJ^jq(C9kE7JX;?214; zNz&3ZHspGGYjo!zC|>0O06U{JBUVcyUbzP35%IRHqgu;XJx|!YJd12;3cuNV&lj!z zbqI5y{dLt;`vcOOIrZj0@xP7KGGy&i(Fge s+9KB$xjy)ab4ysZgyn+@i_VHM$gg`;u>F#0oB^CWd*MvYscZlKAFW#WxBvhE diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-colorblind-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-colorblind-linux.png deleted file mode 100644 index 14413c4b12e7a548e9ceb9cd5a81af109005c09e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6230 zcmeHL`%{xw8vZC%y0#Fkt*G4Eb*+<9#1=}HOGp)66bflUiU|TzSE<}05N-*{=baV= zMg>tJ!Ab+wkbvAGmn2fDQ4k^lB;-OAOt>as67mrs$$rlM1N(!W{e>USoSAp#ob$Zz zyw7uPgWV>L3;sqztc1TY_UJM zZ_lBeO0|rfQ?8^4Ui+N^_S)}1y5sj-e=o4<>0-9hH)21!*Fv9MsB4MrzMB%2)Y5vW z_f#D_>`!Z#d=`y_>#{DuOZ(Z;nVSkW+wVt(oZXQ4VcGeAgTH0;QG@iEGpP zL%KZO>LQOWD@sdo$-(QgikBL$6Yo>uBcY-ptwUhR**_v3M?>Y5Ki=+1DW$j%Q6{h4iTxjjQC$#YzbogczATkJqz zGI~gNbxZ~vTW{+kdG_pZFpigJyww$maPl*oAc|@6<8$i~EEa2}F9HkdQ*S7H%dwS2 z^Y2)7TknEA%wMT@DBopL@Y^Dkb)$&6mU%0`Isetl438X0o-L(uy7B(+SS}69D)o2xmjqU<1vz}|Hl`(@d zOZaAqkx{zG+9r&aj^k4)7V(Wq%AzCG$Ftm@C=P%sn?OUiN52nr7P1>2K|Q^1e9reZ zi*K4upl_1lQU$@CAtNj12uFwq6+8;KJ7wmy)z?>f+Tlqm=akyj4gm6!pZD1$=BwL7 zkV*!_17l=@xXvZxm(`G;YHE84TJ_i(u|@Z+GUytAd1i_N-MKRz7d%Q(Pz*~?YXx(B zg)>L-l~OxTeYqek+UmKi<|wGD8@XUlQG3>OI^0Fq!du0+q3?s7cqfH)aPH|Z3A9{+ zno|jCd}?Xwq6cT9F`fjf6!UH{vZ$yiDy)K}+FBdqZ4`y~)UCLF!H|)pm}}v@*DX58 zl{>%Rfy!-Z$yAkSj_gFhy%^wT1Hv|@BMZsU zs|OR9tky3WAIQ@VAeG8;OH*m%s|)Y}69L)X{BJ6Bn|i)EBEBH1x@V+kZyX9%+^Sz7d4ZF#{U9;51rFwVJy%S;D4d zoZ5l!f3LlLS;DmNYAicHt0dy1yErFf<*OLf=Zw;Vf`ag1PO3Z@iISg6sgLDKiVaf( z)pBb9cpxA+C-=6QA5~CSr0ck(MG3i{yWUpTUfTGhvgh*lizQB9c4kcWGfGqC-nkZ| zt!+`^W_LDQlQy(5pWyk^vlYw?K1N<$+L%1r7~a#FtHX@fxVyW%rV+cEglznofgO}`2h6q%l2 z|Ihy9Tsaz_8HJP^1!tMN?pf8p{-NtrORGE{qpq+Ggn! zC4Q~y9j5MslO^a^w{B$1aKXma`21_(#R1x%cY=$vgjl_L6ZW6x%WWm5@p8-RLpMtn z)7_?d-uNcR`Zqb&$D)%A)(~dlJ9VSPWRR~2JPBx`Ox!xpugaD7Of;n78vnMb*n@E-`{5)%EJ)>r{DBZ(25e6oi;PJKD#Q-AB&#Y{Jas5CGUXnW)q6rXKeY$0Lr#(tv{*Rf?W}c}P1xcc zUZD~5sqryESSz5RD|+HS0mjS13Ku;;aJ-XBA+t%`U#n{Yc*yW&9$ZQa*0ZczXKdS$9a^d09V^1j#rW-!(Bq7%EttCh0%xVkAV<&U2+rLdgH?wy zx`u&V^NfH=%A7@!@{3*Gh1W+7NF%5+ihB&zS-JUkn}`wte0WoBK- z%*?1_Nr+dwCg&6b69Dj!pAux{;WMfLPO_nM`9fwuT!?iT;JBtO?7Su&fEo f|4~@FLF-r1qOXiqvtIDWJaBM-*gp2&qi6pE?yu?W diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-high-contrast-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-high-contrast-linux.png deleted file mode 100644 index 2e8b221001e7b122aebdf1333f87390fe3123821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6200 zcmeHLdr(t%7QU3R*jB;auBGLX)ODv6ETE-4N`zF=QUfRkk-7-6Rs`iGV1N*kSgorR zk#32iyi#NX2$Bea5C}=EL6C<8fe3^=vWzIJ5gFf804U=Qroh zcfb3c@0@!JA`gace%tA7001^0_-Y>-0Bl#G3)uJul-aP49S8-REOh8zfHvf!00773 z1N-(I$*oX{3FMpD%HAb7|JqLeriUNfH(#sY(pNk8L(5fWnedMer#(C_{zaiXb!SIt zoaFe9w(yAjPsabu^mL@4_oyaE)w8wrkxtZ$U*mI8o8QBJ8Tmd-U#vJ6klOJCIGCTy z8Cn}BtkLF8RUln2USZSIZlI_T6a=q<27}^6aCZ;@e7{8x09*EoZGkT~W;g)Aw*Oo5 z*QP>HPO%Cf^JPLt48=7tu-at4jF1iiS!prBxoD`hBZrtWijQyiN~ZaMj=zrgKKn$ynu z>O;H(C3Uo8j9Nn0KoH&y@riXp07I#yr?!!bD-9gJNVyKyKD^?gy8of<5z30aC0UTy@E8FItN&n z?Ba%ZrmWi{Q8-oGxJBiR;VoYLpk11oId|!m+Vdt*NZ6%sU>xcJVS2 z(v9T)HzDp+DizBPZ`mJ~JdhA`yyH|~ma|{V*E}M@o!ZvcmMEyAl51;g33^E#`BU=) zTa-J`q9v80-}5HY$e*5kIp-O(_`M4NWP44yso{8Y0lI&PhuBWJ6eEW%aS`X;iXE1Oc+s@Ys>%UrE>Xyb4CWg#@U^O4aHHXvgqWx{l8*kNUNH3onWnHO5?sW%UKTFb}`^T+XrY=a!D(Aay8M-c`jhtTa?;Iiv$)7rPwcT*dCZGf+a zZ?mjR#;ol5*qp~3rW+a?8yivmJ zAw1uFRoN+lf#NP#9|v}Yu~ah7NT;t|5BkTyS!q1tQ5m4(d37>W+9EI_AXi{pK3|qC zv$^z#G)W=-UVLl5LVP(0)HxB1-87gT@Zlb4;*(p>OCP?H2q(#y$D>oH&+3&N`FBsi zLmvbgY`F|OXh{l$LkrRa%2q+gYsl`kSo(d{u9v?~Z?Cho&eDH(|8<3|D`Z_EzqcE$ ycgK2ntarzHcf97O)Vf`)+r_$F{7-ga_MYfwrO4*Lwm|>gfdl&w?xXEJaq*uo-1Q3p diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-linux.png deleted file mode 100644 index 14413c4b12e7a548e9ceb9cd5a81af109005c09e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6230 zcmeHL`%{xw8vZC%y0#Fkt*G4Eb*+<9#1=}HOGp)66bflUiU|TzSE<}05N-*{=baV= zMg>tJ!Ab+wkbvAGmn2fDQ4k^lB;-OAOt>as67mrs$$rlM1N(!W{e>USoSAp#ob$Zz zyw7uPgWV>L3;sqztc1TY_UJM zZ_lBeO0|rfQ?8^4Ui+N^_S)}1y5sj-e=o4<>0-9hH)21!*Fv9MsB4MrzMB%2)Y5vW z_f#D_>`!Z#d=`y_>#{DuOZ(Z;nVSkW+wVt(oZXQ4VcGeAgTH0;QG@iEGpP zL%KZO>LQOWD@sdo$-(QgikBL$6Yo>uBcY-ptwUhR**_v3M?>Y5Ki=+1DW$j%Q6{h4iTxjjQC$#YzbogczATkJqz zGI~gNbxZ~vTW{+kdG_pZFpigJyww$maPl*oAc|@6<8$i~EEa2}F9HkdQ*S7H%dwS2 z^Y2)7TknEA%wMT@DBopL@Y^Dkb)$&6mU%0`Isetl438X0o-L(uy7B(+SS}69D)o2xmjqU<1vz}|Hl`(@d zOZaAqkx{zG+9r&aj^k4)7V(Wq%AzCG$Ftm@C=P%sn?OUiN52nr7P1>2K|Q^1e9reZ zi*K4upl_1lQU$@CAtNj12uFwq6+8;KJ7wmy)z?>f+Tlqm=akyj4gm6!pZD1$=BwL7 zkV*!_17l=@xXvZxm(`G;YHE84TJ_i(u|@Z+GUytAd1i_N-MKRz7d%Q(Pz*~?YXx(B zg)>L-l~OxTeYqek+UmKi<|wGD8@XUlQG3>OI^0Fq!du0+q3?s7cqfH)aPH|Z3A9{+ zno|jCd}?Xwq6cT9F`fjf6!UH{vZ$yiDy)K}+FBdqZ4`y~)UCLF!H|)pm}}v@*DX58 zl{>%Rfy!-Z$yAkSj_gFhy%^wT1Hv|@BMZsU zs|OR9tky3WAIQ@VAeG8;OH*m%s|)Y}69L)X{BJ6Bn|i)EBEBH1x@V+kZyX9%+^Sz7d4ZF#{U9;51rFwVJy%S;D4d zoZ5l!f3LlLS;DmNYAicHt0dy1yErFf<*OLf=Zw;Vf`ag1PO3Z@iISg6sgLDKiVaf( z)pBb9cpxA+C-=6QA5~CSr0ck(MG3i{yWUpTUfTGhvgh*lizQB9c4kcWGfGqC-nkZ| zt!+`^W_LDQlQy(5pWyk^vlYw?K1N<$+L%1r7~a#FtHX@fxVyW%rV+cEglznofgO}`2h6q%l2 z|Ihy9Tsaz_8HJP^1!tMN?pf8p{-NtrORGE{qpq+Ggn! zC4Q~y9j5MslO^a^w{B$1aKXma`21_(#R1x%cY=$vgjl_L6ZW6x%WWm5@p8-RLpMtn z)7_?d-uNcR`Zqb&$D)%A)(~dlJ9VSPWRR~2JPBx`Ox!xpugaD7Of;n78vnMb*n@E-`{5)%EJ)>r{DBZ(25e6oi;PJKD#Q-AB&#Y{Jas5CGUXnW)q6rXKeY$0Lr#(tv{*Rf?W}c}P1xcc zUZD~5sqryESSz5RD|+HS0mjS13Ku;;aJ-XBA+t%`U#n{Yc*yW&9$ZQa*0ZczXKdS$9a^d09V^1j#rW-!(Bq7%EttCh0%xVkAV<&U2+rLdgH?wy zx`u&V^NfH=%A7@!@{3*Gh1W+7NF%5+ihB&zS-JUkn}`wte0WoBK- z%*?1_Nr+dwCg&6b69Dj!pAux{;WMfLPO_nM`9fwuT!?iT;JBtO?7Su&fEo f|4~@FLF-r1qOXiqvtIDWJaBM-*gp2&qi6pE?yu?W diff --git a/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-tritanopia-linux.png b/.playwright/snapshots/components/TextInput.test.ts-snapshots/TextInput-Dev-WithSxAndCSS-light-tritanopia-linux.png deleted file mode 100644 index 14413c4b12e7a548e9ceb9cd5a81af109005c09e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6230 zcmeHL`%{xw8vZC%y0#Fkt*G4Eb*+<9#1=}HOGp)66bflUiU|TzSE<}05N-*{=baV= zMg>tJ!Ab+wkbvAGmn2fDQ4k^lB;-OAOt>as67mrs$$rlM1N(!W{e>USoSAp#ob$Zz zyw7uPgWV>L3;sqztc1TY_UJM zZ_lBeO0|rfQ?8^4Ui+N^_S)}1y5sj-e=o4<>0-9hH)21!*Fv9MsB4MrzMB%2)Y5vW z_f#D_>`!Z#d=`y_>#{DuOZ(Z;nVSkW+wVt(oZXQ4VcGeAgTH0;QG@iEGpP zL%KZO>LQOWD@sdo$-(QgikBL$6Yo>uBcY-ptwUhR**_v3M?>Y5Ki=+1DW$j%Q6{h4iTxjjQC$#YzbogczATkJqz zGI~gNbxZ~vTW{+kdG_pZFpigJyww$maPl*oAc|@6<8$i~EEa2}F9HkdQ*S7H%dwS2 z^Y2)7TknEA%wMT@DBopL@Y^Dkb)$&6mU%0`Isetl438X0o-L(uy7B(+SS}69D)o2xmjqU<1vz}|Hl`(@d zOZaAqkx{zG+9r&aj^k4)7V(Wq%AzCG$Ftm@C=P%sn?OUiN52nr7P1>2K|Q^1e9reZ zi*K4upl_1lQU$@CAtNj12uFwq6+8;KJ7wmy)z?>f+Tlqm=akyj4gm6!pZD1$=BwL7 zkV*!_17l=@xXvZxm(`G;YHE84TJ_i(u|@Z+GUytAd1i_N-MKRz7d%Q(Pz*~?YXx(B zg)>L-l~OxTeYqek+UmKi<|wGD8@XUlQG3>OI^0Fq!du0+q3?s7cqfH)aPH|Z3A9{+ zno|jCd}?Xwq6cT9F`fjf6!UH{vZ$yiDy)K}+FBdqZ4`y~)UCLF!H|)pm}}v@*DX58 zl{>%Rfy!-Z$yAkSj_gFhy%^wT1Hv|@BMZsU zs|OR9tky3WAIQ@VAeG8;OH*m%s|)Y}69L)X{BJ6Bn|i)EBEBH1x@V+kZyX9%+^Sz7d4ZF#{U9;51rFwVJy%S;D4d zoZ5l!f3LlLS;DmNYAicHt0dy1yErFf<*OLf=Zw;Vf`ag1PO3Z@iISg6sgLDKiVaf( z)pBb9cpxA+C-=6QA5~CSr0ck(MG3i{yWUpTUfTGhvgh*lizQB9c4kcWGfGqC-nkZ| zt!+`^W_LDQlQy(5pWyk^vlYw?K1N<$+L%1r7~a#FtHX@fxVyW%rV+cEglznofgO}`2h6q%l2 z|Ihy9Tsaz_8HJP^1!tMN?pf8p{-NtrORGE{qpq+Ggn! zC4Q~y9j5MslO^a^w{B$1aKXma`21_(#R1x%cY=$vgjl_L6ZW6x%WWm5@p8-RLpMtn z)7_?d-uNcR`Zqb&$D)%A)(~dlJ9VSPWRR~2JPBx`Ox!xpugaD7Of;n78vnMb*n@E-`{5)%EJ)>r{DBZ(25e6oi;PJKD#Q-AB&#Y{Jas5CGUXnW)q6rXKeY$0Lr#(tv{*Rf?W}c}P1xcc zUZD~5sqryESSz5RD|+HS0mjS13Ku;;aJ-XBA+t%`U#n{Yc*yW&9$ZQa*0ZczXKdS$9a^d09V^1j#rW-!(Bq7%EttCh0%xVkAV<&U2+rLdgH?wy zx`u&V^NfH=%A7@!@{3*Gh1W+7NF%5+ihB&zS-JUkn}`wte0WoBK- z%*?1_Nr+dwCg&6b69Dj!pAux{;WMfLPO_nM`9fwuT!?iT;JBtO?7Su&fEo f|4~@FLF-r1qOXiqvtIDWJaBM-*gp2&qi6pE?yu?W diff --git a/e2e/components/TextInput.test.ts b/e2e/components/TextInput.test.ts index fceb98ca879..114854866b2 100644 --- a/e2e/components/TextInput.test.ts +++ b/e2e/components/TextInput.test.ts @@ -219,24 +219,6 @@ test.describe('TextInput', () => { } }) - test.describe('Dev: With Sx', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-textinput-dev--with-sx', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`TextInput.Dev.WithSx.${theme}.png`) - }) - }) - } - }) - test.describe('Dev: With CSS', () => { for (const theme of themes) { test.describe(theme, () => { @@ -254,22 +236,4 @@ test.describe('TextInput', () => { }) } }) - - test.describe('Dev: With Sx and CSS', () => { - for (const theme of themes) { - test.describe(theme, () => { - test('default @vrt', async ({page}) => { - await visit(page, { - id: 'components-textinput-dev--with-sx-and-css', - globals: { - colorScheme: theme, - }, - }) - - // Default state - expect(await page.screenshot()).toMatchSnapshot(`TextInput.Dev.WithSxAndCSS.${theme}.png`) - }) - }) - } - }) }) From b55c591ab0b23f23a200236cdf33b15d817debe8 Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Tue, 30 Sep 2025 23:15:27 -0400 Subject: [PATCH 10/19] use component name instead of component reference to associate FormControl --- .../react/src/Autocomplete/Autocomplete.tsx | 2 + .../react/src/FormControl/FormControl.tsx | 58 ++++++++++--------- packages/react/src/Select/Select.tsx | 2 + .../react/src/SelectPanel/SelectPanel.tsx | 2 + 4 files changed, 38 insertions(+), 26 deletions(-) diff --git a/packages/react/src/Autocomplete/Autocomplete.tsx b/packages/react/src/Autocomplete/Autocomplete.tsx index b5bee8299cf..7cfe651f54b 100644 --- a/packages/react/src/Autocomplete/Autocomplete.tsx +++ b/packages/react/src/Autocomplete/Autocomplete.tsx @@ -93,6 +93,8 @@ const Autocomplete: React.FC> = ({childre ) } +Autocomplete.displayName = 'Autocomplete' + export type AutocompleteProps = ComponentProps export type {AutocompleteInputProps} from './AutocompleteInput' export type {AutocompleteMenuProps} from './AutocompleteMenu' diff --git a/packages/react/src/FormControl/FormControl.tsx b/packages/react/src/FormControl/FormControl.tsx index 802418f6fc0..bbaa729f993 100644 --- a/packages/react/src/FormControl/FormControl.tsx +++ b/packages/react/src/FormControl/FormControl.tsx @@ -1,13 +1,5 @@ import {clsx} from 'clsx' import React, {useContext} from 'react' -import Autocomplete from '../Autocomplete' -import Checkbox from '../Checkbox' -import Radio from '../Radio' -import Select from '../Select/Select' -import {SelectPanel} from '../SelectPanel' -import TextInput from '../TextInput' -import TextInputWithTokens from '../TextInputWithTokens' -import Textarea from '../Textarea' import {CheckboxOrRadioGroupContext} from '../internal/components/CheckboxOrRadioGroup' import ValidationAnimationContainer from '../internal/components/ValidationAnimationContainer' import {useSlots} from '../hooks/useSlots' @@ -20,6 +12,23 @@ import {FormControlContextProvider} from './_FormControlContext' import {warning} from '../utils/warning' import classes from './FormControl.module.css' +/** + * Utility function to get the component name from a React element + */ +function getComponentName(child: React.ReactElement): string | undefined { + if (!React.isValidElement(child)) return undefined + const componentType = child.type as React.ComponentType + return componentType.displayName || componentType.name +} + +/** + * Utility function to check if a component name matches any of the expected names + */ +function isComponentNameInList(child: React.ReactElement, componentNames: string[]): boolean { + const componentName = getComponentName(child) + return componentName ? componentNames.includes(componentName) : false +} + export type FormControlProps = { children?: React.ReactNode /** @@ -50,15 +59,15 @@ const FormControl = React.forwardRef( leadingVisual: FormControlLeadingVisual, validation: FormControlValidation, }) - const expectedInputComponents = [ - Autocomplete, - Checkbox, - Radio, - Select, - TextInput, - TextInputWithTokens, - Textarea, - SelectPanel, + const expectedInputComponentNames = [ + 'Autocomplete', + 'Checkbox', + 'Radio', + 'Select', + 'TextInput', + 'TextInputWithTokens', + 'Textarea', + 'SelectPanel', ] const choiceGroupContext = useContext(CheckboxOrRadioGroupContext) const disabled = choiceGroupContext.disabled || disabledProp @@ -66,13 +75,13 @@ const FormControl = React.forwardRef( const validationMessageId = slots.validation ? `${id}-validationMessage` : undefined const captionId = slots.caption ? `${id}-caption` : undefined const validationStatus = slots.validation?.props.variant - const InputComponent = childrenWithoutSlots.find(child => - expectedInputComponents.some(inputComponent => React.isValidElement(child) && child.type === inputComponent), + const InputComponent = childrenWithoutSlots.find( + child => React.isValidElement(child) && isComponentNameInList(child, expectedInputComponentNames), ) const inputProps = React.isValidElement(InputComponent) && InputComponent.props const isChoiceInput = - React.isValidElement(InputComponent) && (InputComponent.type === Checkbox || InputComponent.type === Radio) - const isRadioInput = React.isValidElement(InputComponent) && InputComponent.type === Radio + React.isValidElement(InputComponent) && isComponentNameInList(InputComponent, ['Checkbox', 'Radio']) + const isRadioInput = React.isValidElement(InputComponent) && getComponentName(InputComponent) === 'Radio' if (InputComponent) { warning( @@ -135,8 +144,7 @@ const FormControl = React.forwardRef( ) : null} {childrenWithoutSlots.filter( - child => - React.isValidElement(child) && ![Checkbox, Radio].some(inputComponent => child.type === inputComponent), + child => React.isValidElement(child) && !isComponentNameInList(child, ['Checkbox', 'Radio']), )} {slots.leadingVisual ? ( @@ -195,9 +203,7 @@ const FormControl = React.forwardRef( ), )} {childrenWithoutSlots.filter( - child => - React.isValidElement(child) && - !expectedInputComponents.some(inputComponent => child.type === inputComponent), + child => React.isValidElement(child) && !isComponentNameInList(child, expectedInputComponentNames), )} {slots.validation ? ( {slots.validation} diff --git a/packages/react/src/Select/Select.tsx b/packages/react/src/Select/Select.tsx index ad5b2fec98f..77eb911cc08 100644 --- a/packages/react/src/Select/Select.tsx +++ b/packages/react/src/Select/Select.tsx @@ -87,6 +87,8 @@ const OptGroup: React.FC ) +Select.displayName = 'Select' + export default Object.assign(Select, { Option, OptGroup, diff --git a/packages/react/src/SelectPanel/SelectPanel.tsx b/packages/react/src/SelectPanel/SelectPanel.tsx index 0bc994590c7..57f765751d2 100644 --- a/packages/react/src/SelectPanel/SelectPanel.tsx +++ b/packages/react/src/SelectPanel/SelectPanel.tsx @@ -961,6 +961,8 @@ const SecondaryLink: React.FC = props => { ) } +Panel.displayName = 'SelectPanel' + export const SelectPanel = Object.assign(Panel, { SecondaryActionButton: SecondaryButton, SecondaryActionLink: SecondaryLink, From b03bc502473e5667a5c1802ed9dff5735f4e982c Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Wed, 1 Oct 2025 00:02:35 -0400 Subject: [PATCH 11/19] Revert "use component name instead of component reference to associate FormControl" This reverts commit b55c591ab0b23f23a200236cdf33b15d817debe8. --- .../react/src/Autocomplete/Autocomplete.tsx | 2 - .../react/src/FormControl/FormControl.tsx | 58 +++++++++---------- packages/react/src/Select/Select.tsx | 2 - .../react/src/SelectPanel/SelectPanel.tsx | 2 - 4 files changed, 26 insertions(+), 38 deletions(-) diff --git a/packages/react/src/Autocomplete/Autocomplete.tsx b/packages/react/src/Autocomplete/Autocomplete.tsx index 7cfe651f54b..b5bee8299cf 100644 --- a/packages/react/src/Autocomplete/Autocomplete.tsx +++ b/packages/react/src/Autocomplete/Autocomplete.tsx @@ -93,8 +93,6 @@ const Autocomplete: React.FC> = ({childre ) } -Autocomplete.displayName = 'Autocomplete' - export type AutocompleteProps = ComponentProps export type {AutocompleteInputProps} from './AutocompleteInput' export type {AutocompleteMenuProps} from './AutocompleteMenu' diff --git a/packages/react/src/FormControl/FormControl.tsx b/packages/react/src/FormControl/FormControl.tsx index bbaa729f993..802418f6fc0 100644 --- a/packages/react/src/FormControl/FormControl.tsx +++ b/packages/react/src/FormControl/FormControl.tsx @@ -1,5 +1,13 @@ import {clsx} from 'clsx' import React, {useContext} from 'react' +import Autocomplete from '../Autocomplete' +import Checkbox from '../Checkbox' +import Radio from '../Radio' +import Select from '../Select/Select' +import {SelectPanel} from '../SelectPanel' +import TextInput from '../TextInput' +import TextInputWithTokens from '../TextInputWithTokens' +import Textarea from '../Textarea' import {CheckboxOrRadioGroupContext} from '../internal/components/CheckboxOrRadioGroup' import ValidationAnimationContainer from '../internal/components/ValidationAnimationContainer' import {useSlots} from '../hooks/useSlots' @@ -12,23 +20,6 @@ import {FormControlContextProvider} from './_FormControlContext' import {warning} from '../utils/warning' import classes from './FormControl.module.css' -/** - * Utility function to get the component name from a React element - */ -function getComponentName(child: React.ReactElement): string | undefined { - if (!React.isValidElement(child)) return undefined - const componentType = child.type as React.ComponentType - return componentType.displayName || componentType.name -} - -/** - * Utility function to check if a component name matches any of the expected names - */ -function isComponentNameInList(child: React.ReactElement, componentNames: string[]): boolean { - const componentName = getComponentName(child) - return componentName ? componentNames.includes(componentName) : false -} - export type FormControlProps = { children?: React.ReactNode /** @@ -59,15 +50,15 @@ const FormControl = React.forwardRef( leadingVisual: FormControlLeadingVisual, validation: FormControlValidation, }) - const expectedInputComponentNames = [ - 'Autocomplete', - 'Checkbox', - 'Radio', - 'Select', - 'TextInput', - 'TextInputWithTokens', - 'Textarea', - 'SelectPanel', + const expectedInputComponents = [ + Autocomplete, + Checkbox, + Radio, + Select, + TextInput, + TextInputWithTokens, + Textarea, + SelectPanel, ] const choiceGroupContext = useContext(CheckboxOrRadioGroupContext) const disabled = choiceGroupContext.disabled || disabledProp @@ -75,13 +66,13 @@ const FormControl = React.forwardRef( const validationMessageId = slots.validation ? `${id}-validationMessage` : undefined const captionId = slots.caption ? `${id}-caption` : undefined const validationStatus = slots.validation?.props.variant - const InputComponent = childrenWithoutSlots.find( - child => React.isValidElement(child) && isComponentNameInList(child, expectedInputComponentNames), + const InputComponent = childrenWithoutSlots.find(child => + expectedInputComponents.some(inputComponent => React.isValidElement(child) && child.type === inputComponent), ) const inputProps = React.isValidElement(InputComponent) && InputComponent.props const isChoiceInput = - React.isValidElement(InputComponent) && isComponentNameInList(InputComponent, ['Checkbox', 'Radio']) - const isRadioInput = React.isValidElement(InputComponent) && getComponentName(InputComponent) === 'Radio' + React.isValidElement(InputComponent) && (InputComponent.type === Checkbox || InputComponent.type === Radio) + const isRadioInput = React.isValidElement(InputComponent) && InputComponent.type === Radio if (InputComponent) { warning( @@ -144,7 +135,8 @@ const FormControl = React.forwardRef( ) : null} {childrenWithoutSlots.filter( - child => React.isValidElement(child) && !isComponentNameInList(child, ['Checkbox', 'Radio']), + child => + React.isValidElement(child) && ![Checkbox, Radio].some(inputComponent => child.type === inputComponent), )} {slots.leadingVisual ? ( @@ -203,7 +195,9 @@ const FormControl = React.forwardRef( ), )} {childrenWithoutSlots.filter( - child => React.isValidElement(child) && !isComponentNameInList(child, expectedInputComponentNames), + child => + React.isValidElement(child) && + !expectedInputComponents.some(inputComponent => child.type === inputComponent), )} {slots.validation ? ( {slots.validation} diff --git a/packages/react/src/Select/Select.tsx b/packages/react/src/Select/Select.tsx index 77eb911cc08..ad5b2fec98f 100644 --- a/packages/react/src/Select/Select.tsx +++ b/packages/react/src/Select/Select.tsx @@ -87,8 +87,6 @@ const OptGroup: React.FC ) -Select.displayName = 'Select' - export default Object.assign(Select, { Option, OptGroup, diff --git a/packages/react/src/SelectPanel/SelectPanel.tsx b/packages/react/src/SelectPanel/SelectPanel.tsx index 57f765751d2..0bc994590c7 100644 --- a/packages/react/src/SelectPanel/SelectPanel.tsx +++ b/packages/react/src/SelectPanel/SelectPanel.tsx @@ -961,8 +961,6 @@ const SecondaryLink: React.FC = props => { ) } -Panel.displayName = 'SelectPanel' - export const SelectPanel = Object.assign(Panel, { SecondaryActionButton: SecondaryButton, SecondaryActionLink: SecondaryLink, From 861ffc8b891d07a3022b72007f171d177330b540 Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Wed, 1 Oct 2025 17:12:47 -0400 Subject: [PATCH 12/19] memoize style --- .../src/internal/components/TextInputWrapper.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/react/src/internal/components/TextInputWrapper.tsx b/packages/react/src/internal/components/TextInputWrapper.tsx index 7b67c91b2eb..7c08193aa8c 100644 --- a/packages/react/src/internal/components/TextInputWrapper.tsx +++ b/packages/react/src/internal/components/TextInputWrapper.tsx @@ -57,6 +57,15 @@ export const TextInputBaseWrapper = React.forwardRef { + return { + ...(typeof width === 'string' || typeof width === 'number' ? {width} : {}), + ...(typeof minWidth === 'string' || typeof minWidth === 'number' ? {minWidth} : {}), + ...(typeof maxWidth === 'string' || typeof maxWidth === 'number' ? {maxWidth} : {}), + ...style, + } + }, [width, minWidth, maxWidth, style]) + return ( ) From 55488c7bfe59c637df2bb13e5fe67767813d849d Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Wed, 1 Oct 2025 18:13:10 -0400 Subject: [PATCH 13/19] remove sx from TextInput.Action --- .../react/src/internal/components/TextInputInnerAction.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/react/src/internal/components/TextInputInnerAction.tsx b/packages/react/src/internal/components/TextInputInnerAction.tsx index 45c5d60438f..22d45d0b6d0 100644 --- a/packages/react/src/internal/components/TextInputInnerAction.tsx +++ b/packages/react/src/internal/components/TextInputInnerAction.tsx @@ -4,7 +4,6 @@ import type {IconProps} from '@primer/octicons-react' import {Button, IconButton} from '../../Button' import {Tooltip} from '../../TooltipV2' import type {ButtonProps} from '../../Button' -import type {SxProp} from '../../sx' import {clsx} from 'clsx' import styles from './TextInputInnerAction.module.css' @@ -26,7 +25,7 @@ export type TextInputActionProps = Omit< * Determine's the styles on a button one of 'default' | 'primary' | 'invisible' | 'danger' */ variant?: ButtonProps['variant'] -} & SxProp +} const ConditionalTooltip: React.FC< React.PropsWithChildren<{ @@ -54,14 +53,13 @@ const TextInputAction = forwardRef( tooltipDirection, children, icon, - sx: sxProp, className, variant = 'invisible', ...rest }, forwardedRef, ) => { - const styleProps = {className: clsx(variant === 'invisible' && styles.Invisible, className), sx: sxProp || {}} + const styleProps = {className: clsx(variant === 'invisible' && styles.Invisible, className)} if ((icon && !ariaLabel) || (!children && !ariaLabel)) { // eslint-disable-next-line no-console From d52d8b75055782e6dc5cb242df020cf6f7f0a7f4 Mon Sep 17 00:00:00 2001 From: Marie Lucca Date: Wed, 1 Oct 2025 18:15:59 -0400 Subject: [PATCH 14/19] update snapshot --- .../TextInput/__snapshots__/TextInput.test.tsx.snap | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/react/src/TextInput/__snapshots__/TextInput.test.tsx.snap b/packages/react/src/TextInput/__snapshots__/TextInput.test.tsx.snap index 04f3f456271..4d816592e47 100644 --- a/packages/react/src/TextInput/__snapshots__/TextInput.test.tsx.snap +++ b/packages/react/src/TextInput/__snapshots__/TextInput.test.tsx.snap @@ -294,7 +294,7 @@ exports[`TextInput > renders trailingAction icon button 1`] = `