import * as React from "react"; import type { ConversationsProp } from "../../props/components/navigation.prop.js"; export type { ConversationsProp, ConversationsProp as ConversationsProps, ConversationsItemProp, ConversationsDividerProp, ConversationsEntryProp, ConversationsMenuProp, ConversationsMenuItemProp, ConversationsGroupableProp, ConversationsCreationProp, } from "../../props/components/navigation.prop.js"; /** * Conversations — the session rail of a chat surface (Ant Design X `Conversations`). * * ## What is ported, and the one half that is deliberately not * * Every prop a caller passes keeps Ant X's spelling and semantics: `items` (conversations and * `{ type: "divider" }` rules), `activeKey` / `defaultActiveKey` / `onActiveChange`, `menu` (flat * or per-row), `groupable` (with `label`, `collapsible` and the `expandedKeys` triad) and * `creation`. The two knobs left out are `styles` / `classNames` — the semantic style maps — and * they are left out by a standing decision of this repository, not by omission: a free-form style * hole freezes internal DOM slot names into public API and is unmeasurable by the audit * (docs/WHAT-BELONGS-HERE.md · "Lỗ kiểu dáng tự do"; docs/DESIGN-AUTHORITY.md · "A knob that only * a fork could reach is not parity either"). The rail is retuned through * `src/tokens/components/conversations.css` instead. `prefixCls`, `rootClassName`, * `menu.getPopupContainer`, `menu.trigger` and `shortcutKeys` are out for the same reason or * because the subsystem behind them does not exist here (see the PR for the per-prop ledger). * * ## What this adds, because Ant X's rail has no keyboard model at all * * Measured in `@ant-design/x@2.9.0`: `es/conversations/Item.js` renders a bare * `
  • `. No `role`, no `tabIndex`, no key handling — the rail is unreachable by * keyboard, and a screen reader meets twelve list items with no hint that any of them is a * control or that one of them is current. Neither is the hand-rolled alternative the issue * describes (a stack of `Button`s) any better on the axis that matters: it is one tab stop PER * conversation. * * So the rows here are real `Button`s under ONE roving tabindex, the APG composite-widget rule: * * - the whole rail — group headings included — is a single tab stop; * - `↑` / `↓` walk it and wrap, `Home` / `End` jump to its ends; * - the logical FORWARD arrow (`→` in LTR, `←` in RTL) steps from a row onto its overflow menu, * and the backward arrow steps back, so a row's second action costs no extra tab stop; * - the current conversation carries `aria-current="true"`, which is what makes "current" survive * a theme that does not tint (WCAG 1.4.1 — never colour alone). */ export declare const Conversations: React.ForwardRefExoticComponent>;