From 084d8cfbe643bba77e957d0122201e20871f0a9c Mon Sep 17 00:00:00 2001 From: Ahmed Gaber Date: Tue, 13 Oct 2026 16:16:35 +0300 Subject: [PATCH 1/7] Restore inline editing of the Expensify Card name behind a cell-wide pencil The card name is a subtitle inside the cardholder cell, so EditableCell's padded box grew that line from 16px to 32px and opened a gap above the freeze message, which is why inline editing was removed from it as a temporary fix. EditableCell now takes shouldRenderDisplayChrome so a composite cell can keep its own line heights at rest, and InlineTextEditCell accepts that display block as children. The cardholder cell gets one pencil, and editing swaps the whole cell for the card name input, per the design agreed on the issue. Co-Authored-By: Claude Opus 5 --- src/components/EditableCell/EditableCell.tsx | 23 ++++++- .../EditableCell/InlineTextEditCell.tsx | 26 +++++-- .../WorkspaceExpensifyCardsTableRow.tsx | 67 +++++++++++-------- .../WorkspaceExpensifyCardsTable/index.tsx | 2 + src/libs/actions/Policy/InlineEdit.ts | 13 +++- .../WorkspaceExpensifyCardListPage.tsx | 10 ++- .../inlineEditing/PolicyInlineEdit.test.ts | 36 ++++++++++ 7 files changed, 137 insertions(+), 40 deletions(-) diff --git a/src/components/EditableCell/EditableCell.tsx b/src/components/EditableCell/EditableCell.tsx index d76913848ded..a49bc10676a3 100644 --- a/src/components/EditableCell/EditableCell.tsx +++ b/src/components/EditableCell/EditableCell.tsx @@ -48,6 +48,13 @@ type EditableCellProps = { /** Which side should show the edit icon in display mode */ editIconPosition?: EditIconPosition; + + /** + * Whether display mode wraps children in the padded, bordered `editableCell` box. + * A composite cell whose display content is taller than one line owns its own layout, + * and the box would add height to it. Edit mode still draws the box around its input. + */ + shouldRenderDisplayChrome?: boolean; }; /** @@ -61,7 +68,17 @@ type EditableCellProps = { * 4. canEdit=false → styled container View, no pressable (transient: loading / no permission) * 5. default → passive cell body with hover/focus edit icon button */ -function EditableCell({children, editContent, popoverContent, isEditing, canEdit, onStartEditing, anchorRef, editIconPosition = 'right'}: EditableCellProps) { +function EditableCell({ + children, + editContent, + popoverContent, + isEditing, + canEdit, + onStartEditing, + anchorRef, + editIconPosition = 'right', + shouldRenderDisplayChrome = true, +}: EditableCellProps) { const styles = useThemeStyles(); const theme = useTheme(); const {translate} = useLocalize(); @@ -133,7 +150,7 @@ function EditableCell({children, editContent, popoverContent, isEditing, canEdit // Tooltip / Hoverable / BoundsObserver subtree during the initial skeleton render, // unblocking the main thread so the network response can be processed sooner. if (!canEdit || !isInteractive) { - return {children}; + return shouldRenderDisplayChrome ? {children} : children; } return ( @@ -143,7 +160,7 @@ function EditableCell({children, editContent, popoverContent, isEditing, canEdit return ( - {children} + {shouldRenderDisplayChrome ? {children} : children} string; + + /** + * Display content replacing the default single-line text, for a cell that shows more than the + * value being edited — such as a cardholder block whose subtitle is the card name. The box that + * normally wraps display content is dropped so that layout keeps its own line heights. Editing + * still swaps the whole cell for the input. + */ + children?: ReactNode; } & EditableProps; /** @@ -43,7 +52,7 @@ type InlineTextEditCellProps = { * original value. On narrow layouts EditableCell renders the display text only, so tables keep * their existing tap-to-navigate behavior there. */ -function InlineTextEditCell({value, accessibilityLabel, displayTextStyle, canEdit, onSave, sanitize = StringUtils.sanitizeName}: InlineTextEditCellProps) { +function InlineTextEditCell({value, accessibilityLabel, displayTextStyle, canEdit, onSave, sanitize = StringUtils.sanitizeName, children}: InlineTextEditCellProps) { const styles = useThemeStyles(); const inputRef = useRef(null); @@ -68,6 +77,7 @@ function InlineTextEditCell({value, accessibilityLabel, displayTextStyle, canEdi canEdit={canEdit} isEditing={isEditing} onStartEditing={startEditing} + shouldRenderDisplayChrome={!children} editContent={ } > - + {children ?? ( + + )} ); } diff --git a/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx b/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx index 85a965e48266..8b812a7ad3a3 100644 --- a/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx +++ b/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx @@ -1,4 +1,5 @@ import UserAvatar from '@components/Avatar/UserAvatar'; +import {InlineTextEditCell} from '@components/EditableCell'; import Icon from '@components/Icon'; import {useSession} from '@components/OnyxListItemProvider'; import Table from '@components/Table'; @@ -123,37 +124,47 @@ export default function WorkspaceExpensifyCardsTableRow({item, rowIndex, shouldU {({hovered}) => ( <> - - - - {shouldUseNarrowTableLayout ? ( - - ) : ( - + + - )} - + + + {shouldUseNarrowTableLayout ? ( + + ) : ( + + )} + + + {!shouldUseNarrowTableLayout && ( diff --git a/src/components/Tables/WorkspaceExpensifyCardsTable/index.tsx b/src/components/Tables/WorkspaceExpensifyCardsTable/index.tsx index cbebbde00fef..4901c06c7e9d 100644 --- a/src/components/Tables/WorkspaceExpensifyCardsTable/index.tsx +++ b/src/components/Tables/WorkspaceExpensifyCardsTable/index.tsx @@ -60,9 +60,11 @@ type WorkspaceExpensifyCardTableRowData = TableData & { frozenDate?: string; errors?: OnyxCommon.Errors; pendingAction?: OnyxCommon.PendingAction; + canEditName?: boolean; canEditLimitType?: boolean; canEditLimit?: boolean; action: () => void; + onRenameName?: (newName: string) => void; onChangeLimitType?: (limitType: CardLimitType) => void; /** Return false, or a promise of false, to keep the limit editor open until a confirm modal resolves. */ onChangeLimit?: (newLimit: string) => InlineEditSaveResult; diff --git a/src/libs/actions/Policy/InlineEdit.ts b/src/libs/actions/Policy/InlineEdit.ts index 4839fc85e09e..191ef1181974 100644 --- a/src/libs/actions/Policy/InlineEdit.ts +++ b/src/libs/actions/Policy/InlineEdit.ts @@ -14,7 +14,7 @@ import {getCleanedTagName, getTagList} from '@libs/PolicyUtils'; import StringUtils from '@libs/StringUtils'; import {getTagNameError} from '@libs/TagUtils'; -import {updateExpensifyCardLimit, updateExpensifyCardLimitType} from '@userActions/Card'; +import {updateExpensifyCardLimit, updateExpensifyCardLimitType, updateExpensifyCardTitle} from '@userActions/Card'; import {updateCompanyCardName} from '@userActions/CompanyCards'; import CONST from '@src/CONST'; @@ -65,6 +65,16 @@ function renameCompanyCardInline(domainOrWorkspaceAccountID: number, cardID: str updateCompanyCardName(domainOrWorkspaceAccountID, cardID, sanitized, bankName, storedName); } +function renameExpensifyCardInline(workspaceAccountID: number, cardID: number, newName: string, currentName: string): void { + const sanitized = StringUtils.sanitizeName(newName); + + if (sanitized === currentName || getCardNameError(newName)) { + return; + } + + updateExpensifyCardTitle(workspaceAccountID, cardID, sanitized, currentName); +} + function renameDistanceRateInline(policyID: string, customUnit: CustomUnit, rate: Rate, newName: string): void { const sanitized = StringUtils.sanitizeName(newName); const currentName = rate.name ?? ''; @@ -206,6 +216,7 @@ export { renameCategoryInline, renameTagInline, renameCompanyCardInline, + renameExpensifyCardInline, renameDistanceRateInline, updateDistanceRateValueInline, updateMemberRoleInline, diff --git a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx index 0a4df299326c..0b5e1e559ed6 100644 --- a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx +++ b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx @@ -36,7 +36,13 @@ import useWindowDimensions from '@hooks/useWindowDimensions'; import {clearIssueNewCardFormData, exportExpensifyCardListToCSV, setIssueNewCardStepAndData} from '@libs/actions/Card'; import {turnOffMobileSelectionMode} from '@libs/actions/MobileSelectionMode'; import {clearDeletePaymentMethodError} from '@libs/actions/PaymentMethods'; -import {canUpdateExpensifyCardLimitTypeInline, getExpensifyCardLimitInlineUpdate, updateExpensifyCardLimitInline, updateExpensifyCardLimitTypeInline} from '@libs/actions/Policy/InlineEdit'; +import { + canUpdateExpensifyCardLimitTypeInline, + getExpensifyCardLimitInlineUpdate, + renameExpensifyCardInline, + updateExpensifyCardLimitInline, + updateExpensifyCardLimitTypeInline, +} from '@libs/actions/Policy/InlineEdit'; import { getCardsByCardholderName, getCardSettings, @@ -262,9 +268,11 @@ function WorkspaceExpensifyCardListPage({route, cardsList, fundID}: WorkspaceExp frozenDate: card.nameValuePairs?.frozen?.date, errors: card.errors, pendingAction: card.pendingAction, + canEditName: canEditCard, canEditLimitType: canEditCard, canEditLimit: canEditCard, action: () => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_DETAILS.getRoute(card.cardID.toString()))), + onRenameName: (newName: string) => renameExpensifyCardInline(fundID, card.cardID, newName, card.nameValuePairs?.cardTitle ?? ''), onChangeLimitType: (newLimitType: CardLimitType) => changeCardLimitType(card, newLimitType), onChangeLimit: (newLimit: string) => changeCardLimit(card, newLimit), onClose: () => clearDeletePaymentMethodError(`${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${fundID}_${CONST.EXPENSIFY_CARD.BANK}`, card.cardID), diff --git a/tests/unit/inlineEditing/PolicyInlineEdit.test.ts b/tests/unit/inlineEditing/PolicyInlineEdit.test.ts index c7b9505b2816..089366287424 100644 --- a/tests/unit/inlineEditing/PolicyInlineEdit.test.ts +++ b/tests/unit/inlineEditing/PolicyInlineEdit.test.ts @@ -4,6 +4,7 @@ import { canUpdateExpensifyCardLimitTypeInline, getExpensifyCardLimitInlineUpdate, renameCategoryInline, + renameExpensifyCardInline, updateExpensifyCardLimitInline, updateExpensifyCardLimitTypeInline, updateMemberRoleInline, @@ -162,6 +163,41 @@ describe('PolicyInlineEdit', () => { }); }); + describe('renameExpensifyCardInline', () => { + it('does not persist a name the user never changed', () => { + // Given a card named "Travel" + // When the editor closes on blur with that same name + renameExpensifyCardInline(1, 10, 'Travel', 'Travel'); + + // Then nothing is written, so opening the editor and clicking away costs no request + expect(mockWrite).not.toHaveBeenCalled(); + }); + + it('does not persist a name that sanitizes to nothing', () => { + // Given a card named "Travel" + // When the editor commits whitespace only + renameExpensifyCardInline(1, 10, ' ', 'Travel'); + + // Then nothing is written, matching the RHP name form which rejects this too + expect(mockWrite).not.toHaveBeenCalled(); + }); + + it('persists the sanitized name', () => { + // Given a card named "Travel" + // When the editor commits a new name padded with whitespace + renameExpensifyCardInline(1, 10, ' Travel card ', 'Travel'); + + // Then the trimmed name reaches the backend, so a padded paste cannot be stored verbatim + expect(mockWrite).toHaveBeenCalledWith( + WRITE_COMMANDS.UPDATE_EXPENSIFY_CARD_TITLE, + expect.objectContaining({ + cardTitle: 'Travel card', + }), + expect.anything(), + ); + }); + }); + describe('getExpensifyCardLimitInlineUpdate', () => { it('returns undefined for an invalid limit so the confirm modal is not shown', () => { // Given a card with a current limit of $100 From 35fe2632f30b9c09a99bf01d0ef6c4050170f249 Mon Sep 17 00:00:00 2001 From: Ahmed Gaber Date: Tue, 13 Oct 2026 16:39:55 +0300 Subject: [PATCH 2/7] Keep the cardholder avatar visible while editing the Expensify Card name The edit cell replaces its contents with the name input, so the avatar sits outside that cell. --- .../WorkspaceExpensifyCardsTableRow.tsx | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx b/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx index 8b812a7ad3a3..f7e23982ffe8 100644 --- a/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx +++ b/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx @@ -124,22 +124,23 @@ export default function WorkspaceExpensifyCardsTableRow({item, rowIndex, shouldU {({hovered}) => ( <> - - - + {/* The avatar sits outside the edit cell so it stays on screen while the card name is edited. */} + + + )} - - + + {!shouldUseNarrowTableLayout && ( From 2d2b34ea097caa2005bf05bd84840dffdb490cf6 Mon Sep 17 00:00:00 2001 From: Ahmed Gaber Date: Wed, 21 Oct 2026 10:49:35 +0300 Subject: [PATCH 3/7] Show validation errors when an inline Expensify Card rename is rejected --- src/libs/actions/Policy/InlineEdit.ts | 9 ++++- .../WorkspaceExpensifyCardListPage.tsx | 2 +- .../inlineEditing/PolicyInlineEdit.test.ts | 39 +++++++++++++++---- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/libs/actions/Policy/InlineEdit.ts b/src/libs/actions/Policy/InlineEdit.ts index d7f4785c5dfe..cd00eef61ca3 100644 --- a/src/libs/actions/Policy/InlineEdit.ts +++ b/src/libs/actions/Policy/InlineEdit.ts @@ -103,13 +103,18 @@ function renameCompanyCardInline( updateCompanyCardName(domainOrWorkspaceAccountID, cardID, sanitized, bankName, storedName); } -function renameExpensifyCardInline(workspaceAccountID: number, cardID: number, newName: string, currentName: string): void { +function renameExpensifyCardInline(translate: LocalizedTranslate, workspaceAccountID: number, cardID: number, newName: string, currentName: string): string | undefined { const sanitized = StringUtils.sanitizeName(newName); - if (sanitized === currentName || getCardNameError(newName)) { + if (sanitized === currentName) { return; } + const cardNameError = getCardNameError(newName); + if (cardNameError) { + return getCardNameErrorMessage(translate, cardNameError, newName); + } + updateExpensifyCardTitle(workspaceAccountID, cardID, sanitized, currentName); } diff --git a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx index 7a3e7478fa11..9834037b5ecb 100644 --- a/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx +++ b/src/pages/workspace/expensifyCard/WorkspaceExpensifyCardListPage.tsx @@ -281,7 +281,7 @@ function WorkspaceExpensifyCardListPage({route, cardsList, fundID}: WorkspaceExp canEditLimitType: canEditCard, canEditLimit: canEditCard, action: () => Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.WORKSPACE_EXPENSIFY_CARD_DETAILS.getRoute(card.cardID.toString()))), - onRenameName: (newName: string) => renameExpensifyCardInline(fundID, card.cardID, newName, card.nameValuePairs?.cardTitle ?? ''), + onRenameName: (newName: string) => showInlineEditError(renameExpensifyCardInline(translate, fundID, card.cardID, newName, card.nameValuePairs?.cardTitle ?? '')), onChangeLimitType: (newLimitType: CardLimitType) => changeCardLimitType(card, newLimitType), onChangeLimit: (newLimit: string) => changeCardLimit(card, newLimit), onClose: () => clearDeletePaymentMethodError(`${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${fundID}_${CONST.EXPENSIFY_CARD.BANK}`, card.cardID), diff --git a/tests/unit/inlineEditing/PolicyInlineEdit.test.ts b/tests/unit/inlineEditing/PolicyInlineEdit.test.ts index 068c613945ae..b5e44e173026 100644 --- a/tests/unit/inlineEditing/PolicyInlineEdit.test.ts +++ b/tests/unit/inlineEditing/PolicyInlineEdit.test.ts @@ -182,27 +182,52 @@ describe('PolicyInlineEdit', () => { it('does not persist a name the user never changed', () => { // Given a card named "Travel" // When the editor closes on blur with that same name - renameExpensifyCardInline(1, 10, 'Travel', 'Travel'); + const rejection = renameExpensifyCardInline(translate, 1, 10, 'Travel', 'Travel'); - // Then nothing is written, so opening the editor and clicking away costs no request + // Then nothing is written and no toast is raised, so opening the editor and clicking away costs no request + expect(rejection).toBeUndefined(); expect(mockWrite).not.toHaveBeenCalled(); }); - it('does not persist a name that sanitizes to nothing', () => { + it('returns the required-field error for a name that sanitizes to nothing', () => { // Given a card named "Travel" // When the editor commits whitespace only - renameExpensifyCardInline(1, 10, ' ', 'Travel'); + const rejection = renameExpensifyCardInline(translate, 1, 10, ' ', 'Travel'); - // Then nothing is written, matching the RHP name form which rejects this too + // Then the page can toast the same required message as the card name form, and nothing is written + expect(rejection).toBe('common.error.fieldRequired'); + expect(mockWrite).not.toHaveBeenCalled(); + }); + + it('returns the invalid-character error for a name the card form rejects', () => { + // Given a card named "Travel" + // When the editor commits a name that contains an HTML-like tag + const rejection = renameExpensifyCardInline(translate, 1, 10, '', 'Travel'); + + // Then the page can toast the same invalid-character message as the card name form, and nothing is written + expect(rejection).toBe('common.error.invalidCharacter'); + expect(mockWrite).not.toHaveBeenCalled(); + }); + + it('returns the length error for a name past the card form limit', () => { + // Given a card named "Travel" and a name one byte past the shared length limit + const tooLongName = 'a'.repeat(CONST.STANDARD_LENGTH_LIMIT + 1); + + // When the editor commits that name + const rejection = renameExpensifyCardInline(translate, 1, 10, tooLongName, 'Travel'); + + // Then the page can toast the same character-limit message as the card name form, and nothing is written + expect(rejection).toBe(`common.error.characterLimitExceedCounter|${CONST.STANDARD_LENGTH_LIMIT + 1}|${CONST.STANDARD_LENGTH_LIMIT}`); expect(mockWrite).not.toHaveBeenCalled(); }); it('persists the sanitized name', () => { // Given a card named "Travel" // When the editor commits a new name padded with whitespace - renameExpensifyCardInline(1, 10, ' Travel card ', 'Travel'); + const rejection = renameExpensifyCardInline(translate, 1, 10, ' Travel card ', 'Travel'); - // Then the trimmed name reaches the backend, so a padded paste cannot be stored verbatim + // Then the trimmed name reaches the backend and no toast is raised, so a padded paste cannot be stored verbatim + expect(rejection).toBeUndefined(); expect(mockWrite).toHaveBeenCalledWith( WRITE_COMMANDS.UPDATE_EXPENSIFY_CARD_TITLE, expect.objectContaining({ From ae7210c8d1e5035d3c44785bdcff34ae93c93122 Mon Sep 17 00:00:00 2001 From: Ahmed Gaber Date: Wed, 21 Oct 2026 13:59:25 +0300 Subject: [PATCH 4/7] Write the InlineTextEditCell children comment as a plain sentence. --- src/components/EditableCell/InlineTextEditCell.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/EditableCell/InlineTextEditCell.tsx b/src/components/EditableCell/InlineTextEditCell.tsx index 922f6bf65979..88eaeaf8f8cb 100644 --- a/src/components/EditableCell/InlineTextEditCell.tsx +++ b/src/components/EditableCell/InlineTextEditCell.tsx @@ -36,7 +36,7 @@ type InlineTextEditCellProps = { /** * Display content replacing the default single-line text, for a cell that shows more than the - * value being edited — such as a cardholder block whose subtitle is the card name. The box that + * value being edited, such as a cardholder block whose subtitle is the card name. The box that * normally wraps display content is dropped so that layout keeps its own line heights. Editing * still swaps the whole cell for the input. */ From eb78e0b97c330102f42bfc7fad0bd59024bd0e5f Mon Sep 17 00:00:00 2001 From: Ahmed Gaber Date: Thu, 22 Oct 2026 11:40:33 +0300 Subject: [PATCH 5/7] Pin cardID in the Expensify Card rename write assertion. --- tests/unit/inlineEditing/PolicyInlineEdit.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/inlineEditing/PolicyInlineEdit.test.ts b/tests/unit/inlineEditing/PolicyInlineEdit.test.ts index b5e44e173026..c1ef8a68b1b8 100644 --- a/tests/unit/inlineEditing/PolicyInlineEdit.test.ts +++ b/tests/unit/inlineEditing/PolicyInlineEdit.test.ts @@ -231,6 +231,7 @@ describe('PolicyInlineEdit', () => { expect(mockWrite).toHaveBeenCalledWith( WRITE_COMMANDS.UPDATE_EXPENSIFY_CARD_TITLE, expect.objectContaining({ + cardID: 10, cardTitle: 'Travel card', }), expect.anything(), From c7f3a71d46ed600a5859e75b7b26d007f6faef94 Mon Sep 17 00:00:00 2001 From: Ahmed Gaber Date: Thu, 22 Oct 2026 11:46:26 +0300 Subject: [PATCH 6/7] Remove the unused flex grow from the cardholder name block. --- .../WorkspaceExpensifyCardsTableRow.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx b/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx index f7e23982ffe8..1dc256d2ad6c 100644 --- a/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx +++ b/src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx @@ -141,7 +141,7 @@ export default function WorkspaceExpensifyCardsTableRow({item, rowIndex, shouldU onSave={item.onRenameName} displayTextStyle={[styles.textLabelSupporting, styles.lh16]} > - + Date: Thu, 22 Oct 2026 11:56:43 +0300 Subject: [PATCH 7/7] Clarify displayTextStyle docs when InlineTextEditCell has children. --- src/components/EditableCell/InlineTextEditCell.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/EditableCell/InlineTextEditCell.tsx b/src/components/EditableCell/InlineTextEditCell.tsx index 88eaeaf8f8cb..00caa5d6456a 100644 --- a/src/components/EditableCell/InlineTextEditCell.tsx +++ b/src/components/EditableCell/InlineTextEditCell.tsx @@ -25,7 +25,7 @@ type InlineTextEditCellProps = { accessibilityLabel: string; - /** Style applied to the display text and to the TextInput while editing, so font size and color stay in sync */ + /** Style for the default display text and the TextInput while editing. With children, only the input uses it. */ displayTextStyle?: StyleProp; /**