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'); + }); });