@clubmed/trident-ui
Version:
Shared ClubMed React UI components
53 lines (52 loc) • 1.74 kB
TypeScript
import { Dispatch, PropsWithChildren, RefObject } from 'react';
type RefTab<T extends HTMLElement = HTMLElement> = RefObject<T>;
type RefTabs<T extends HTMLElement = HTMLElement> = Map<number, RefTab<T>>;
type TabsUpdateAction = {
type: 'update';
payload: number;
};
type TabsRegisterAction<T extends HTMLElement = HTMLElement> = {
type: 'register';
payload: {
value: number;
ref: RefObject<T>;
};
};
type TabsUnregisterAction = {
type: 'unregister';
payload: {
value: number;
};
};
type TabsAction<T extends HTMLElement = HTMLElement> = {
type: 'start' | 'end' | 'previous' | 'next';
} | TabsUpdateAction | TabsRegisterAction<T> | TabsUnregisterAction;
interface TabsState<T extends HTMLElement = HTMLElement> {
uid: string;
value: number;
refs: RefTabs<T>;
}
interface TabControl<T extends HTMLElement = HTMLElement> extends TabsState<T> {
uid: string;
value: number;
refs: RefTabs<T>;
dispatch: Dispatch<TabsAction>;
register: (value: number, ref: RefTab<T>) => void;
unregister: (value: number) => void;
}
export declare const TabControlContext: import('react').Context<TabControl<HTMLElement>>;
export interface TabsProviderProps {
selected?: number;
/**
* The selected tab value
* @deprecated Min props as no effect on the Tabs component and will be removed in future versions
*/
min?: number;
/**
* The selected tab value
* @deprecated Max props as no effect on the Tabs component and will be removed in future versions
*/
max?: number;
}
export declare function TabsProvider({ selected, children }: PropsWithChildren<TabsProviderProps>): import("react/jsx-runtime").JSX.Element;
export {};