Files
3x-ui/frontend/tools/oxlint/__fixtures__/labelled-control.tsx
T
Alireza Ahmadi e2184777a0 fix(frontend): make the panel usable with screen readers (#6907)
* fix(frontend): make the panel usable with screen readers

* fix(frontend): keep mobile tab names and the inbound expiry hint

Review of #6907 found two gaps in the screen-reader pass:

- On phone-width screens catTabLabel renders only the icon and names the
  tab by putting aria-label on it, but callers now pass that icon with
  aria-hidden for the desktop label, so every Settings, Xray and Host
  category tab lost its name under TalkBack. catTabLabel now clears
  aria-hidden on the icon it uses as the name.
- DateTimePicker forwarded id and aria-label but not aria-describedby,
  so the inbound expiry hint ("leave blank to never expire") was never
  attached. It now forwards it on both the Gregorian and Jalali input.
2026-10-23 18:29:47 +02:00

44 lines
1.2 KiB
TypeScript

import { Form, Input, Space, Switch } from 'antd';
declare function FormField(props: { label?: string; children?: unknown }): null;
declare function SettingListItem(props: { title?: string; control?: unknown; children?: unknown }): null;
declare const rest: Record<string, unknown>;
export const AriaLabel = () => <Switch aria-label="Enabled" />;
export const LabelledBy = () => <Switch aria-labelledby="heading" />;
export const Forwarded = () => <Input {...rest} />;
export const Wrapped = () => (
// eslint-disable-next-line jsx-a11y/label-has-associated-control -- antd Input is opaque to it
<label>
Email <Input />
</label>
);
export const HtmlForAndId = () => (
<Form.Item label="Email" htmlFor="email">
<Space.Compact>
<Input id="email" />
</Space.Compact>
</Form.Item>
);
export const NamedItemDirect = () => (
<Form.Item label="Email" name="email">
<Input />
</Form.Item>
);
export const ViaFormField = () => (
<FormField label="Email">
<Input />
</FormField>
);
export const SettingChild = () => (
<SettingListItem title="Enabled">
<Switch />
</SettingListItem>
);
export const SettingControlProp = () => <SettingListItem title="Enabled" control={<Switch />} />;