diff --git a/packages/core/src/List/List.tsx b/packages/core/src/List/List.tsx
index dedd900d857..0fe516ab6c3 100644
--- a/packages/core/src/List/List.tsx
+++ b/packages/core/src/List/List.tsx
@@ -152,7 +152,6 @@ export function List({
style,
'data-testid': testId,
ref,
- ...rest
}: ListProps) {
const headerId = useId();
const isOrdered = listStyle === 'decimal';
@@ -167,7 +166,14 @@ export function List({
}
data-testid={testId}
+ aria-labelledby={header != null ? headerId : undefined}
{...(isOrdered && start != null && start !== 1 ? {start} : {})}
+ // The base list style always sets list-style-type: none (markers are
+ // custom-rendered by ListItem), and Safari/VoiceOver drops implicit
+ // list semantics for lists styled with list-style: none. The explicit
+ // role restores "list, N items" announcements for every listStyle
+ // variant.
+ role="list"
{...mergeProps(
themeProps('list', {density, listStyle}),
stylex.props(
@@ -181,17 +187,7 @@ export function List({
),
className,
style,
- )}
- {...rest}
- // The base list style always sets list-style-type: none (markers are
- // custom-rendered by ListItem), and Safari/VoiceOver drops implicit
- // list semantics for lists styled with list-style: none. The explicit
- // role restores "list, N items" announcements for every listStyle
- // variant.
- role="list"
- // Only emitted when there is a header to point at, so a headerless list
- // can still be named by a caller's aria-labelledby.
- {...(header != null ? {'aria-labelledby': headerId} : {})}>
+ )}>
{children}
);
diff --git a/packages/core/src/Markdown/Markdown.tsx b/packages/core/src/Markdown/Markdown.tsx
index 330a5283874..813e44eb1a9 100644
--- a/packages/core/src/Markdown/Markdown.tsx
+++ b/packages/core/src/Markdown/Markdown.tsx
@@ -1627,7 +1627,6 @@ export function Markdown({
className,
style,
'data-testid': testId,
- ...rest
}: MarkdownProps): React.ReactElement {
const t = useTranslator();
const LinkComponent = useLinkComponent();
@@ -1756,8 +1755,7 @@ export function Markdown({
stylex.props(styles.root, styles.inlineRoot, xstyle),
className,
style,
- )}
- {...rest}>
+ )}>
{inlineNodes.map((node, i) =>
renderInline(
node,
@@ -1782,6 +1780,7 @@ export function Markdown({
const rendered = (
}
data-testid={testId}
{...mergeProps(
@@ -1789,9 +1788,7 @@ export function Markdown({
stylex.props(styles.root, xstyle),
className,
style,
- )}
- {...rest}
- role="document">
+ )}>
{blocks.map((block, i) =>
renderBlock(
block,
diff --git a/packages/core/src/MetadataList/MetadataListItem.tsx b/packages/core/src/MetadataList/MetadataListItem.tsx
index 5dbb1a37372..6bfffa953e8 100644
--- a/packages/core/src/MetadataList/MetadataListItem.tsx
+++ b/packages/core/src/MetadataList/MetadataListItem.tsx
@@ -144,7 +144,6 @@ export function MetadataListItem({
style,
'data-testid': testId,
ref,
- ...rest
}: MetadataListItemProps) {
const ctx = use(MetadataListContext);
const labelPosition = ctx?.labelConfig.position ?? 'start';
@@ -171,8 +170,7 @@ export function MetadataListItem({
stylex.props(styles.stackedWrapper, xstyle),
className,
style,
- )}
- {...rest}>
+ )}>
{labelContent}
{children}
@@ -190,8 +188,7 @@ export function MetadataListItem({
stylex.props(styles.label, xstyle),
className,
style,
- )}
- {...rest}>
+ )}>
{labelContent}
+ )}>
{children}
diff --git a/packages/core/src/Timestamp/Timestamp.tsx b/packages/core/src/Timestamp/Timestamp.tsx
index 85e2c1df250..6518bd5849a 100644
--- a/packages/core/src/Timestamp/Timestamp.tsx
+++ b/packages/core/src/Timestamp/Timestamp.tsx
@@ -419,7 +419,6 @@ export function Timestamp({
style,
ref,
'data-testid': testId,
- ...rest
}: TimestampProps) {
const t = useTranslator();
const locale = useLocale();
@@ -531,16 +530,15 @@ export function Timestamp({