From df07fafd5b89f8c475d96aa3c7535c0436e82120 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Fri, 4 Sep 2026 13:51:57 -0400 Subject: [PATCH] fix: Include full URL when stringifying PromptFieldValue --- packages/@react-spectrum/ai/src/PromptField.tsx | 6 ++++++ .../@react-spectrum/ai/test/PromptField.test.tsx | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/packages/@react-spectrum/ai/src/PromptField.tsx b/packages/@react-spectrum/ai/src/PromptField.tsx index b31e55633df..9f96d19e00c 100644 --- a/packages/@react-spectrum/ai/src/PromptField.tsx +++ b/packages/@react-spectrum/ai/src/PromptField.tsx @@ -231,6 +231,12 @@ export class PromptFieldValue extends TokenFieldValue { } return super.replaceRangeWithSegments(start, end, segments, coalesce); } + + toString() { + return this.segments + .map(s => (s.type === 'token' && s.value?.type === 'url' ? s.value.url : s.text)) + .join(''); + } } const PromptFieldContext = createContext({ diff --git a/packages/@react-spectrum/ai/test/PromptField.test.tsx b/packages/@react-spectrum/ai/test/PromptField.test.tsx index 61bd1ddc362..baa12c4ae3f 100644 --- a/packages/@react-spectrum/ai/test/PromptField.test.tsx +++ b/packages/@react-spectrum/ai/test/PromptField.test.tsx @@ -507,4 +507,19 @@ describeOrSkip('PromptField', () => { await user.click(screen.getByRole('link', {name: 'AI User Guidelines'})); expect(onAITermsPress).toHaveBeenCalledTimes(1); }); + + it('keeps the full URL when stringifying', async () => { + let {user, textbox, getValue} = renderPromptField(); + await user.click(textbox); + await user.keyboard('visit https://www.test.com now'); + + await waitFor(() => + expect(getValue().segments.some(s => s.type === 'token' && s.value?.type === 'url')).toBe( + true + ) + ); + let urlToken = getValue().segments.find(s => s.type === 'token' && s.value?.type === 'url'); + expect(urlToken?.text).toBe('test.com'); + expect(getValue().toString()).toContain('https://www.test.com'); + }); });