forked from molecule-ai/molecule-core
Addresses the three release-blocking WCAG violations from the UX audit (3rd consecutive cycle) and the new ChatTab ARIA gap from Audit #2. Changes: - Toaster: split into polite (success/info) + assertive (error) live regions, both always in DOM so screen readers register them before any toast fires. Adds x dismiss button on every toast. Errors no longer auto-expire after 4s — persist until explicitly dismissed. - ConfirmDialog: on open, requestAnimationFrame focuses the first button inside the dialog. Tab/Shift-Tab is now trapped inside the dialog while open. Added role="dialog" aria-modal="true" and aria-labelledby pointing to the title h3. - WorkspaceNode: outer div gains role="button", tabIndex={0}, aria-label, aria-pressed, and onKeyDown (Enter/Space => selectNode, ContextMenu key => openContextMenu). Keyboard-only users can now reach and activate workspace nodes. - ChatTab sub-tab bar: role="tablist" on wrapper, role="tab" + aria-selected + aria-controls on each button, matching role="tabpanel" + id on each panel div. Textarea gets aria-label="Message to agent". 453/453 Vitest tests pass. Production build clean (Next.js 15). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| __tests__ | ||
| canvas | ||
| settings | ||
| tabs | ||
| ui | ||
| ApprovalBanner.tsx | ||
| AuthGate.tsx | ||
| BundleDropZone.tsx | ||
| Canvas.tsx | ||
| CommunicationOverlay.tsx | ||
| ConfirmDialog.tsx | ||
| ContextMenu.tsx | ||
| ConversationTraceModal.tsx | ||
| CreateWorkspaceDialog.tsx | ||
| EmptyState.tsx | ||
| ErrorBoundary.tsx | ||
| Legend.tsx | ||
| MissingKeysModal.tsx | ||
| OnboardingWizard.tsx | ||
| ProvisioningTimeout.tsx | ||
| SearchDialog.tsx | ||
| SidePanel.tsx | ||
| StatusDot.tsx | ||
| TemplatePalette.tsx | ||
| Toaster.tsx | ||
| Toolbar.tsx | ||
| Tooltip.tsx | ||
| WorkspaceNode.tsx | ||