@uifabric/experiments
Version:
Experimental React components for building experiences for Microsoft 365.
72 lines (58 loc) • 2.54 kB
text/typescript
import * as React from 'react';
import { IComponent, IComponentStyles, IHTMLSlot, ISlottableProps, IStyleableComponentProps } from '../../Foundation';
import { IBaseProps, IRefObject } from '../../Utilities';
import { ICollapsibleSectionTitleSlot } from './CollapsibleSectionTitle.types';
export type ICollapsibleSectionComponent = IComponent<
ICollapsibleSectionProps,
ICollapsibleSectionTokens,
ICollapsibleSectionStyles,
ICollapsibleSectionViewProps
>;
// These types are redundant with ICollapsibleSectionComponent but are needed until TS function return widening issue
// is resolved: https://github.com/Microsoft/TypeScript/issues/241
// For now, these helper types can be used to provide return type safety when specifying tokens and styles functions.
export type ICollapsibleSectionTokenReturnType = ReturnType<Extract<ICollapsibleSectionComponent['tokens'], Function>>;
export type ICollapsibleSectionStylesReturnType = ReturnType<Extract<ICollapsibleSectionComponent['styles'], Function>>;
export interface ICollapsibleSectionSlots {
root?: IHTMLSlot;
title?: ICollapsibleSectionTitleSlot;
body?: IHTMLSlot;
}
export interface ICollapsibleSection {}
export interface ICollapsibleSectionProps
extends ISlottableProps<ICollapsibleSectionSlots>,
IStyleableComponentProps<ICollapsibleSectionViewProps, ICollapsibleSectionStyles, ICollapsibleSectionTokens>,
IBaseProps<ICollapsibleSection> {
/**
* Default and initial collapsed state if collapsed prop is not provided.
* @default true
*/
defaultCollapsed?: boolean;
/**
* Collapsed state. If provided, component is controlled.
* @default defaultCollapsed
*/
collapsed?: boolean;
indent?: number;
}
export interface ICollapsibleSectionViewProps extends ICollapsibleSectionProps {
/**
* Optional callback to access the Title element interface. Use this instead of ref for accessing
* the public methods and properties of the component.
*/
titleElementRef?: IRefObject<HTMLButtonElement>;
/**
* Toggle input callback triggered by mouse and keyboard input.
*/
onClick?: (ev: React.MouseEvent<Element>) => void;
/**
* Key down callback for root element of CollapsibleSection.
*/
onRootKeyDown?: (ev: React.KeyboardEvent<Element>) => void;
/**
* Key down callback for CollapsibleSection title.
*/
onKeyDown?: (ev: React.KeyboardEvent<Element>) => void;
}
export interface ICollapsibleSectionTokens {}
export type ICollapsibleSectionStyles = IComponentStyles<ICollapsibleSectionSlots>;