Skip to content

Commit 533edc5

Browse files
committed
feat(player): media announcer
1 parent 5f07f55 commit 533edc5

22 files changed

Lines changed: 443 additions & 341 deletions

File tree

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import * as React from 'react';
2+
3+
import { composeRefs, createReactComponent, type ReactElementProps } from 'maverick.js/react';
4+
5+
import { MediaAnnouncerInstance } from './primitives/instances';
6+
import { Primitive } from './primitives/nodes';
7+
8+
/* -------------------------------------------------------------------------------------------------
9+
* MediaAnnouncer
10+
* -----------------------------------------------------------------------------------------------*/
11+
12+
const MediaAnnouncerBridge = createReactComponent(MediaAnnouncerInstance, {
13+
events: ['onChange'],
14+
});
15+
16+
export interface MediaAnnouncerProps extends ReactElementProps<MediaAnnouncerInstance> {
17+
ref?: React.Ref<HTMLElement>;
18+
}
19+
20+
/**
21+
*
22+
* @docs {@link https://www.vidstack.io/docs/player/components/display/announcer}
23+
* @example
24+
* ```tsx
25+
* <MediaAnnouncer />
26+
* ```
27+
*/
28+
const MediaAnnouncer = React.forwardRef<HTMLElement, MediaAnnouncerProps>(
29+
({ style, children, ...props }, forwardRef) => {
30+
return (
31+
<MediaAnnouncerBridge {...(props as Omit<MediaAnnouncerProps, 'ref'>)}>
32+
{(props) => (
33+
<Primitive.div
34+
{...props}
35+
style={{ display: 'contents', ...style }}
36+
ref={composeRefs(props.ref, forwardRef)}
37+
>
38+
{children}
39+
</Primitive.div>
40+
)}
41+
</MediaAnnouncerBridge>
42+
);
43+
},
44+
);
45+
46+
MediaAnnouncer.displayName = 'MediaAnnouncer';
47+
export { MediaAnnouncer };

packages/react/src/components/layouts/default/audio-layout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ import { createComputed } from '../../../hooks/use-signals';
1717
import * as Controls from '../../ui/controls';
1818
import { useLayoutName } from '../utils';
1919
import { i18n, useDefaultLayoutContext } from './context';
20-
import { DefaultKeyboardStatus } from './keyboard-action-display';
2120
import { createDefaultMediaLayout, type DefaultLayoutProps } from './media-layout';
2221
import {
22+
DefaultAnnouncer,
2323
DefaultCaptionButton,
2424
DefaultCaptions,
2525
DefaultChaptersMenu,
@@ -112,8 +112,8 @@ function AudioLayout() {
112112
const slots = useDefaultAudioLayoutSlots();
113113
return (
114114
<>
115+
<DefaultAnnouncer />
115116
<DefaultCaptions />
116-
<DefaultKeyboardStatus className="vds-sr-only" />
117117
<Controls.Root className="vds-controls">
118118
<Controls.Group className="vds-controls-group">
119119
{slot(slots, 'seekBackwardButton', <DefaultSeekButton backward tooltip="top start" />)}

packages/react/src/components/layouts/default/index.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,4 @@ export type { DefaultLayoutProps } from './media-layout';
1010
export * from './icons';
1111
export * from './context';
1212
export * from './ui';
13-
export {
14-
DefaultKeyboardDisplay,
15-
DefaultKeyboardStatus,
16-
type DefaultKeyboardDisplayProps,
17-
type DefaultKeyboardDisplayWords,
18-
type DefaultKeyboardDisplayTranslations,
19-
type DefaultKeyboardStatusProps,
20-
} from './keyboard-action-display';
13+
export { DefaultKeyboardDisplay, type DefaultKeyboardDisplayProps } from './keyboard-display';

packages/react/src/components/layouts/default/keyboard-action-display.tsx

Lines changed: 0 additions & 226 deletions
This file was deleted.

0 commit comments

Comments
 (0)