office-ui-fabric-react
Version:
Reusable React components for building experiences for Microsoft 365.
185 lines (158 loc) • 4.85 kB
text/typescript
import * as React from 'react';
import {
IComponentStyles,
IHTMLSlot,
ISlotProp,
IComponent,
IStyleableComponentProps,
ISlottableProps,
} from '../../Foundation';
/**
* Defines a type made by the union of the different values that the align-items and justify-content flexbox
* properties can take.
* {@docCategory Stack}
*/
export type Alignment =
| 'start'
| 'end'
| 'center'
| 'space-between'
| 'space-around'
| 'space-evenly'
| 'baseline'
| 'stretch';
/**
* {@docCategory Stack}
*/
export type IStackComponent = IComponent<IStackProps, IStackTokens, IStackStyles>;
// The following two types are redundant with IStackComponent 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.
/**
* {@docCategory Stack}
*/
export type IStackTokenReturnType = ReturnType<Extract<IStackComponent['tokens'], Function>>;
/**
* {@docCategory Stack}
*/
export type IStackStylesReturnType = ReturnType<Extract<IStackComponent['styles'], Function>>;
/**
* {@docCategory Stack}
*/
export type IStackSlot = ISlotProp<IStackProps>;
/**
* {@docCategory Stack}
*/
export interface IStackSlots {
/**
* Defines root slot of the component.
*/
root?: IHTMLSlot;
/**
* Defines a slot that is placed inside the root slot in order to achieve wrapping. Only used when the wrap
* property is set to true.
*/
inner?: IHTMLSlot;
}
/**
* {@docCategory Stack}
*/
export interface IStackProps
extends ISlottableProps<IStackSlots>,
IStyleableComponentProps<IStackProps, IStackTokens, IStackStyles>,
React.HTMLAttributes<HTMLElement> {
/**
* Defines how to render the Stack.
*/
as?: React.ElementType<React.HTMLAttributes<HTMLElement>>;
/**
* Defines whether to render Stack children horizontally.
* @defaultvalue false
*/
horizontal?: boolean;
/**
* Defines whether to render Stack children in the opposite direction (bottom-to-top if it's a vertical Stack and
* right-to-left if it's a horizontal Stack).
* @defaultvalue false
*/
reversed?: boolean;
/**
* Defines how to align Stack children horizontally (along the x-axis).
*/
horizontalAlign?: Alignment;
/**
* Defines how to align Stack children vertically (along the y-axis).
*/
verticalAlign?: Alignment;
/**
* Defines whether the Stack should take up 100% of the height of its parent.
* This property is required to be set to true when using the `grow` flag on children in vertical oriented Stacks.
* Stacks are rendered as block elements and grow horizontally to the container already.
* @defaultvalue false
*/
verticalFill?: boolean;
/**
* Defines whether Stack children should not shrink to fit the available space.
* @defaultvalue false
*/
disableShrink?: boolean;
/**
* Defines how much to grow the Stack in proportion to its siblings.
*/
grow?: boolean | number | 'inherit' | 'initial' | 'unset';
/**
* Defines the spacing between Stack children.
* The property is specified as a value for 'row gap', followed optionally by a value for 'column gap'.
* If 'column gap' is omitted, it's set to the same value as 'row gap'.
* @deprecated Use `childrenGap` token in `IStackTokens` instead.
*/
gap?: number | string;
/**
* Defines the maximum width that the Stack can take.
* @deprecated Use `maxWidth` token in `IStackTokens` instead.
*/
maxWidth?: number | string;
/**
* Defines the maximum height that the Stack can take.
* @deprecated Use `maxHeight` token in `IStackTokens` instead.
*/
maxHeight?: number | string;
/**
* Defines the inner padding of the Stack.
* @deprecated Use `padding` token in `IStackTokens` instead.
*/
padding?: number | string;
/**
* Defines whether Stack children should wrap onto multiple rows or columns when they are about to overflow
* the size of the Stack.
* @defaultvalue false
*/
wrap?: boolean;
}
/**
* {@docCategory Stack}
*/
export interface IStackTokens {
/**
* Defines the spacing between Stack children.
* The property is specified as a value for 'row gap', followed optionally by a value for 'column gap'.
* If 'column gap' is omitted, it's set to the same value as 'row gap'.
*/
childrenGap?: number | string;
/**
* Defines a maximum height for the Stack.
*/
maxHeight?: number | string;
/**
* Defines a maximum width for the Stack.
*/
maxWidth?: number | string;
/**
* Defines the padding to be applied to the Stack contents relative to its border.
*/
padding?: number | string;
}
/**
* {@docCategory Stack}
*/
export type IStackStyles = IComponentStyles<IStackSlots>;