From 66cdf98651251c20f0e8162a67fb9ac31f304f07 Mon Sep 17 00:00:00 2001 From: Micah Skilling <341608572+labkey-micahs@users.noreply.github.com> Date: Mon, 26 Oct 2026 11:39:24 -0700 Subject: [PATCH 1/4] Add aria-labels for button on ChatModal --- .../internal/components/mcp/ChatModal.test.tsx | 2 +- .../src/internal/components/mcp/ChatModal.tsx | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/components/src/internal/components/mcp/ChatModal.test.tsx b/packages/components/src/internal/components/mcp/ChatModal.test.tsx index 7c406af748..a2cf54326f 100644 --- a/packages/components/src/internal/components/mcp/ChatModal.test.tsx +++ b/packages/components/src/internal/components/mcp/ChatModal.test.tsx @@ -154,7 +154,7 @@ describe('ChatModal', () => { // Act await user.type(getTextarea(), ' hello world '); - await user.click(screen.getByRole('button', { name: '' }).closest('.btn') as HTMLElement); + await user.click(screen.getByRole('button', { name: 'Submit' }).closest('.btn') as HTMLElement); // Assert - sendPrompt receives the trimmed value once and the textarea is reset expect(sendPrompt).toHaveBeenCalledTimes(1); diff --git a/packages/components/src/internal/components/mcp/ChatModal.tsx b/packages/components/src/internal/components/mcp/ChatModal.tsx index 555bba0c9d..5088e66704 100644 --- a/packages/components/src/internal/components/mcp/ChatModal.tsx +++ b/packages/components/src/internal/components/mcp/ChatModal.tsx @@ -167,7 +167,7 @@ export const ChatModal: FC = memo(props => { name="chat-prompt" onChange={handleChange} onKeyDown={handleKeyDown} - placeholder="Enter a prompt" + placeholder="EEEnter a prompt" ref={textAreaRef} rows={1} value={prompt} @@ -175,12 +175,22 @@ export const ChatModal: FC = memo(props => { {isPending && ( - )} {!isPending && ( - )} From 3ebf7ffae999b3b4368391903e1f8795eb32aee3 Mon Sep 17 00:00:00 2001 From: Micah Skilling <341608572+labkey-micahs@users.noreply.github.com> Date: Mon, 26 Oct 2026 13:21:25 -0700 Subject: [PATCH 2/4] Correct spelling issues and capture version bump --- packages/components/package-lock.json | 4 ++-- packages/components/package.json | 2 +- .../components/src/internal/components/mcp/ChatModal.test.tsx | 4 ++-- packages/components/src/internal/components/mcp/ChatModal.tsx | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/components/package-lock.json b/packages/components/package-lock.json index 34aeae5729..d78e6986c9 100644 --- a/packages/components/package-lock.json +++ b/packages/components/package-lock.json @@ -1,12 +1,12 @@ { "name": "@labkey/components", - "version": "7.74.0", + "version": "7.74.1-fb-chat-a11y-1556.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@labkey/components", - "version": "7.74.0", + "version": "7.74.1-fb-chat-a11y-1556.0", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@hello-pangea/dnd": "18.0.1", diff --git a/packages/components/package.json b/packages/components/package.json index fefee25c8d..ef862821c0 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@labkey/components", - "version": "7.74.0", + "version": "7.74.1-fb-chat-a11y-1556.0", "description": "Components, models, actions, and utility functions for LabKey applications and pages", "sideEffects": false, "files": [ diff --git a/packages/components/src/internal/components/mcp/ChatModal.test.tsx b/packages/components/src/internal/components/mcp/ChatModal.test.tsx index a2cf54326f..e1d7641114 100644 --- a/packages/components/src/internal/components/mcp/ChatModal.test.tsx +++ b/packages/components/src/internal/components/mcp/ChatModal.test.tsx @@ -154,7 +154,7 @@ describe('ChatModal', () => { // Act await user.type(getTextarea(), ' hello world '); - await user.click(screen.getByRole('button', { name: 'Submit' }).closest('.btn') as HTMLElement); + await user.click(screen.getByRole('button', { name: 'Submit' })); // Assert - sendPrompt receives the trimmed value once and the textarea is reset expect(sendPrompt).toHaveBeenCalledTimes(1); @@ -217,7 +217,7 @@ describe('ChatModal', () => { expect(document.querySelector('.chat-item.pending')).toBeInTheDocument(); expect(sendPrompt).not.toHaveBeenCalled(); - const stopBtn = document.querySelector('.prompt-button') as HTMLButtonElement; + const stopBtn = screen.getByRole('button', { name: 'Stop' }); expect(stopBtn.querySelector('.fa-stop')).toBeInTheDocument(); fireEvent.click(stopBtn); expect(onInterrupt).toHaveBeenCalledTimes(1); diff --git a/packages/components/src/internal/components/mcp/ChatModal.tsx b/packages/components/src/internal/components/mcp/ChatModal.tsx index 5088e66704..ddfd603812 100644 --- a/packages/components/src/internal/components/mcp/ChatModal.tsx +++ b/packages/components/src/internal/components/mcp/ChatModal.tsx @@ -167,7 +167,7 @@ export const ChatModal: FC = memo(props => { name="chat-prompt" onChange={handleChange} onKeyDown={handleKeyDown} - placeholder="EEEnter a prompt" + placeholder="Enter a prompt" ref={textAreaRef} rows={1} value={prompt} @@ -186,7 +186,7 @@ export const ChatModal: FC = memo(props => { )} {!isPending && (