src/segmented-control/types.ts (64 lines of code) (raw):
/*
Copyright (c) Uber Technologies, Inc.
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree.
*/
import type * as React from 'react';
import type { FILL, STATE_CHANGE_TYPE } from './constants';
import type { Override } from '../helpers/overrides';
import type { IconProps } from '../icon';
export type Fill = (typeof FILL)[keyof typeof FILL];
export type StateChange = (typeof STATE_CHANGE_TYPE)[keyof typeof STATE_CHANGE_TYPE];
export type SegmentedControlOverrides = {
Root?: Override;
SegmentList?: Override;
Active?: Override;
};
export type SegmentOverrides = {
Segment?: Override;
LabelBlock?: Override;
ArtworkContainer?: Override;
Label?: Override;
Badge?: Override;
BadgeHint?: Override;
Description?: Override;
};
export type StatefulSegmentedControlState = {
activeKey: React.Key;
};
export type StatefulSegmentedControlAction = {
type: StateChange;
payload: React.Key;
};
export type StatefulSegmentedControlReducer = (
state: StatefulSegmentedControlState,
action: StatefulSegmentedControlAction
) => StatefulSegmentedControlState;
export type onChange = (params: { activeKey: React.Key }) => void;
export type SegmentedControlProps = {
children: React.ReactNode;
activeKey?: React.Key;
disabled?: boolean;
fill?: Fill;
activateOnFocus?: boolean;
onChange?: onChange;
overrides?: SegmentedControlOverrides;
height?: string;
uid?: string;
width?: string;
};
export type StatefulSegmentedControlProps = {
initialState?: StatefulSegmentedControlState;
stateReducer?: StatefulSegmentedControlReducer;
} & SegmentedControlProps;
export type SegmentProps = {
label?: React.ReactNode;
description?: React.ReactNode;
badge?: React.ReactNode;
badgeHint?: boolean;
key?: React.Key;
segmentRef?: React.Ref<HTMLButtonElement>;
overrides?: SegmentOverrides;
artwork?: React.ComponentType<
{
size: IconProps['size'];
color: IconProps['color'];
} & IconProps
>;
disabled?: boolean;
};