import { Machine, EventObject, Service } from '@zag-js/core'; import { PropTypes, RequiredBy, DirectionProperty, CommonProperties, Orientation } from '@zag-js/types'; export { Orientation } from '@zag-js/types'; interface ValueChangeDetails { value: string[]; } type ElementIds = Partial<{ root: string; item: (value: string) => string; }>; interface ToggleGroupProps extends DirectionProperty, CommonProperties { /** * The ids of the elements in the toggle. Useful for composition. */ ids?: ElementIds | undefined; /** * Whether the toggle is disabled. */ disabled?: boolean | undefined; /** * The controlled selected value of the toggle group. */ value?: string[] | undefined; /** * The initial selected value of the toggle group when rendered. * Use when you don't need to control the selected value of the toggle group. */ defaultValue?: string[] | undefined; /** * Function to call when the toggle is clicked. */ onValueChange?: ((details: ValueChangeDetails) => void) | undefined; /** * Whether to loop focus inside the toggle group. * @default true */ loopFocus?: boolean | undefined; /** * Whether to use roving tab index to manage focus. * @default true */ rovingFocus?: boolean | undefined; /** * The orientation of the toggle group. * @default "horizontal" */ orientation?: Orientation | undefined; /** * Whether to allow multiple toggles to be selected. */ multiple?: boolean | undefined; /** * Whether the toggle group allows empty selection. * **Note:** This is ignored if `multiple` is `true`. * * @default true */ deselectable?: boolean | undefined; } type PropsWithDefault = "loopFocus" | "rovingFocus" | "orientation"; type ComputedContext = Readonly<{ currentLoopFocus: boolean; }>; interface PrivateContext { /** * Whether the user is tabbing backward. */ isTabbingBackward: boolean; /** * Whether the toggle was focused by a click. */ isClickFocus: boolean; /** * The value of the toggle that was focused. */ focusedId: string | null; /** * Whether the toggle group is within a toolbar. * This is used to determine whether to use roving tab index. */ isWithinToolbar: boolean; /** * The value of the toggle group. */ value: string[]; } interface ToggleGroupSchema { props: RequiredBy; context: PrivateContext; computed: ComputedContext; state: "idle" | "focused"; event: EventObject; action: string; effect: string; guard: string; } type ToggleGroupService = Service; type ToggleGroupMachine = Machine; interface ItemProps { value: string; disabled?: boolean | undefined; } interface ItemState { /** * The underlying id of the item. */ id: string; /** * Whether the toggle item is disabled. */ disabled: boolean; /** * Whether the toggle item is pressed. */ pressed: boolean; /** * Whether the toggle item is focused. */ focused: boolean; } interface ToggleGroupApi { /** * The value of the toggle group. */ value: string[]; /** * Sets the value of the toggle group. */ setValue: (value: string[]) => void; /** * Returns the state of the toggle item. */ getItemState: (props: ItemProps) => ItemState; getRootProps: () => T["element"]; getItemProps: (props: ItemProps) => T["button"]; } export type { ElementIds, ItemProps, ItemState, ToggleGroupApi, ToggleGroupMachine, ToggleGroupProps, ToggleGroupSchema, ToggleGroupService, ValueChangeDetails };