UNPKG

@primer/react-brand

Version:

Primer Brand is a GitHub's design system for creating React-based marketing websites and digital experiences.

84 lines (83 loc) 2.91 kB
import React from 'react'; import type { PaginationPageType } from '../Pagination/model'; type UseMediaPlaylistProps = { children: React.ReactNode; components: MediaPlaylistComponentTypes; defaultSelectedIndex: number; onChange?: (selectedIndex: number) => void; selectedIndex?: number; }; /** * Internal only hook used by MediaPlaylist to manage state and behavior. * @private * @internal */ export type MediaPlaylistComponentTypes = { Heading: React.ElementType; Item: React.ElementType; ItemHeading: React.ElementType; ItemContent: React.ElementType; ItemMedia: React.ElementType; }; type MediaPlaylistHeadingChildProps = { activeIndex?: number | null; id?: string; itemCount?: number; }; type MediaPlaylistItemChildProps = React.PropsWithChildren<Record<string, unknown>>; type MediaPlaylistItemChild = React.ReactElement<MediaPlaylistItemChildProps>; type MediaPlaylistItemData = { className?: string; content: MediaPlaylistItemChild; heading: MediaPlaylistItemChild; media: MediaPlaylistItemChild; thumbnail?: React.ReactNode; }; /** * Internal only hook used by MediaPlaylist to manage state and behavior. * @private * @internal */ export declare function useMediaPlaylist({ children, components, defaultSelectedIndex, onChange, selectedIndex, }: UseMediaPlaylistProps): { activeIndex: number | null; currentItemPage: number; getPaginationAttributes: (pageNumber: number, page: PaginationPageType) => { [key: string]: string; }; getTabListProps: (props: { label: string; labelledBy?: never; } | { labelledBy: string; label?: never; }) => { role: "tablist"; 'aria-orientation': "horizontal" | "vertical"; }; getTabPanelProps: (id: string) => { role: "tabpanel"; id: `tabs-${string}-panel-${string}`; 'aria-labelledby': `tabs-${string}-tab-${string}`; hidden: boolean; tabIndex: 0; }; getTabProps: <T extends HTMLElement = HTMLElement>(id: string, externalRef?: React.Ref<T>) => { role: "tab"; id: `tabs-${string}-tab-${string}`; 'aria-controls': `tabs-${string}-panel-${string}`; 'aria-selected': boolean; tabIndex: 0 | -1; onClick: () => void; onKeyDown: (event: React.KeyboardEvent) => void; onFocus: () => void; ref: (element: HTMLElement | null) => void; }; handlePageChange: (event: React.MouseEvent, page: number) => void; hasOverflowItems: boolean; headingChild: React.ReactElement<MediaPlaylistHeadingChildProps, string | React.JSXElementConstructor<any>> | null; isItemSelected: (index: number) => boolean; items: MediaPlaylistItemData[]; setItemRef: (index: number, element: HTMLDivElement | null) => void; tabListRef: React.RefObject<HTMLDivElement | null>; }; export {};