Outlook_Addin_LLM/node_modules/@fluentui/react-utilities/dist/index.d.ts

1003 lines
41 KiB
TypeScript

import { DispatchWithoutAction } from 'react';
import * as React_2 from 'react';
/**
* Creates a slot from a slot shorthand or properties (`props.SLOT_NAME` or `props` itself)
* @param value - the value of the slot, it can be a slot shorthand, a slot component or a slot properties
* @param options - values you can pass to alter the signature of a slot, those values are:
*
* * `elementType` - the base element type of a slot, defaults to `'div'`
* * `defaultProps` - similar to a React component declaration, you can provide a slot default properties to be merged with the shorthand/properties provided.
*/
declare function always<Props extends UnknownSlotProps>(value: Props | SlotShorthandValue | undefined, options: SlotOptions<Props>): SlotComponentType<Props>;
/**
* @internal
* resolve the trigger props to the children, either by calling the render function, or cloning with the new props.
*/
export declare function applyTriggerPropsToChildren<TriggerChildProps>(children: TriggerProps<TriggerChildProps>['children'], triggerChildProps: TriggerChildProps): React_2.ReactElement | null;
/**
* Helper type for inferring the type of the as prop from a Props type.
*
* For example:
* ```
* type Example<T> = T extends AsIntrinsicElement<infer As> ? As : never;
* ```
*/
declare type AsIntrinsicElement<As extends keyof JSX.IntrinsicElements> = {
as?: As;
};
/**
* @internal
* Assertion method to ensure state slots properties are properly declared.
* A properly declared slot must be declared by using the `slot` method.
*
* @example
* ```tsx
* export const renderInput_unstable = (state: InputState) => {
assertSlots<InputSlots>(state);
return (
<state.root>
{state.contentBefore && <state.contentBefore />}
<state.input />
{state.contentAfter && <state.contentAfter />}
</state.root>
);
};
* ```
*/
export declare function assertSlots<Slots extends SlotPropsRecord>(state: unknown): asserts state is SlotComponents<Slots>;
/**
* Verifies if an application can use DOM.
*/
export declare function canUseDOM(): boolean;
/**
* @internal
* Clamps `value` to a number between the min and max.
*
* @param value - the value to be clamped
* @param min - the lowest valid value
* @param max - the highest valid value
*/
export declare const clamp: (value: number, min: number, max: number) => number;
/**
* Defines the Props type for a component given its slots and the definition of which one is the primary slot,
* defaulting to root if one is not provided.
*/
export declare type ComponentProps<Slots extends SlotPropsRecord, Primary extends keyof Slots = 'root'> = Omit<Slots, Primary & 'root'> & PropsWithoutRef<ExtractSlotProps<Slots[Primary]>>;
/**
* Defines the State object of a component given its slots.
*/
export declare type ComponentState<Slots extends SlotPropsRecord> = {
components: {
[Key in keyof Slots]-?: React_2.ComponentType<ExtractSlotProps<Slots[Key]>> | (ExtractSlotProps<Slots[Key]> extends AsIntrinsicElement<infer As> ? As : keyof JSX.IntrinsicElements);
};
} & {
[Key in keyof Slots]: ReplaceNullWithUndefined<Exclude<Slots[Key], SlotShorthandValue | (Key extends 'root' ? null : never)>>;
};
/**
* @internal
* @param compare - comparison function for items
* @returns Priority queue implemented with a min heap
*/
export declare function createPriorityQueue<T>(compare: PriorityQueueCompareFn<T>): PriorityQueue<T>;
/**
* Helper type that works similar to Omit,
* but when modifying an union type it will distribute the omission to all the union members.
*
* See [distributive conditional types](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types) for more information
*/
export declare type DistributiveOmit<T, K extends keyof any> = T extends unknown ? Omit<T, K> : T;
/**
* Similar functionality to `element.contains` DOM API for use without of order DOM elements that
* checks the virtual parent hierarchy. If a virtual parents exists, it is chosen over the actual parent
*
* @internal
* @returns true if the child can find the parent in its virtual hierarchy
*/
export declare function elementContains(parent: Node | null, child: Node | null): boolean;
/**
* HTML element types that are not allowed to have children.
*
* Reference: https://developer.mozilla.org/en-US/docs/Glossary/Empty_element
*/
declare type EmptyIntrinsicElements = 'area' | 'base' | 'br' | 'col' | 'embed' | 'hr' | 'img' | 'input' | 'link' | 'meta' | 'param' | 'source' | 'track' | 'wbr';
/**
* Data type for event handlers. It makes data a discriminated union, where each object requires `event` and `type` property.
* - `event` is the specific event type
* - `type` is a string literal. It serves as a clear identifier of the event type that reflects the component's state when the event occurred.
* For example, the Tree component's `onNavigation` event handler has different `type` for different key presses: `{ event: React.KeyboardEvent<HTMLElement>; type: typeof ArrowRight } | { event: React.KeyboardEvent<HTMLElement>; type: typeof ArrowLeft }`.
* Developers can use the `type` property to identify and filter events of interest.
* See RFC event-handlers-event-type.md for more details.
*
* Example usage:
* type OnOpenChangeData = (
* | EventData\<'click', React.MouseEvent\<MyComponentElement\>\>
* | EventData\<'keydown', React.KeyboardEvent\<MyComponentElement\>\>
* ) & \{ open: boolean; \};
*/
export declare type EventData<Type extends string, TEvent> = {
type: undefined;
event: React_2.SyntheticEvent | Event;
} | {
type: Type;
event: TEvent;
};
/**
* Type for props that are event handlers.
* See RFC event-handlers-event-type.md for more details.
*
* Example usage:
* type OnSomeEventData = EventData\<'click', React.MouseEvent\<MyComponentElement\>\> & \{ open: boolean; \};
* type SomeProps = \{ onSomeEvent?: EventHandler\<OnSomeEventData\>; \};
*/
export declare type EventHandler<TData extends EventData<string, unknown>> = (ev: React_2.SyntheticEvent | Event, data: TData) => void;
/**
* Removes SlotShorthandValue and null from the slot type, extracting just the slot's Props object.
*/
export declare type ExtractSlotProps<S> = Exclude<S, SlotShorthandValue | null | undefined>;
/**
* @internal
* Allows a component to be tagged as a FluentUI trigger component.
*
* Triggers are special-case components: they attach event listeners and other props on their child,
* and use them to trigger another component to show. Examples include `MenuTrigger` and `Tooltip`.
*
* A component can be tagged as a trigger as follows:
* ```ts
* const MyComponent: React.FC<MyComponentProps> & FluentTriggerComponent = ...;
*
* MyComponent.isFluentTriggerComponent = true; // MUST also set this to true
* ```
*/
export declare type FluentTriggerComponent = {
isFluentTriggerComponent?: boolean;
};
/**
* Return type for `React.forwardRef`, including inference of the proper typing for the ref.
*/
export declare type ForwardRefComponent<Props> = React_2.ForwardRefExoticComponent<Props & React_2.RefAttributes<InferredElementRefType<Props>>>;
/**
* Returns an object with clientX, clientY for TouchOrMouseEvent.
* Returns zeros in case the event is not a mouse or a touch event.
*/
export declare function getEventClientCoords(event: TouchOrMouseEvent): {
clientX: number;
clientY: number;
};
/**
* Given an element tagname and user props, filters the props to only allowed props for the given
* element type.
*
* Equivalent to {@link getNativeElementProps}, but more type-safe.
*/
export declare const getIntrinsicElementProps: <Props extends UnknownSlotProps, ExcludedPropKeys extends Extract<keyof Props, string> = never>(tagName: NonNullable<Props["as"]>, props: Props & React_2.RefAttributes<InferredElementRefType<Props>>, excludedPropNames?: ExcludedPropKeys[] | undefined) => DistributiveOmit<Props, ExcludedPropKeys | Exclude<keyof Props, "as" | keyof HTMLAttributes>>;
/**
* Given an element tagname and user props, filters the props to only allowed props for the given
* element type.
* @param tagName - Tag name (e.g. "div")
* @param props - Props object
* @param excludedPropNames - List of props to disallow
*
* @deprecated use getIntrinsicElementProps instead, it is a type-safe version of this method
*/
export declare function getNativeElementProps<TAttributes extends React_2.HTMLAttributes<any>>(tagName: string, props: {}, excludedPropNames?: string[]): TAttributes;
/**
* Gets the element which is the parent of a given element.
* This method prefers the virtual parent over real DOM parent when present.
* @internal
*/
export declare function getParent(child: Node | null, options?: GetParentOptions): Node | null;
declare type GetParentOptions = {
/**
* Indicates if getParent() should ignore a virtual parent.
* @internal
*/
skipVirtual?: boolean;
};
/**
* Splits the native props into ones that go to the `root` slot, and ones that go to the primary slot.
*
* This function is only for use with components that have a primary slot other than `root`.
* Most components should use {@link getNativeElementProps} for their root slot if it is the primary slot.
*
* @returns An object containing the native props for the `root` and primary slots.
*/
export declare const getPartitionedNativeProps: <Props extends Pick<React_2.HTMLAttributes<HTMLElement>, "style" | "className">, ExcludedPropKeys extends Extract<keyof Props, string> = never>({ primarySlotTagName, props, excludedPropNames, }: {
/** The primary slot's element type (e.g. 'div') */
primarySlotTagName: keyof JSX.IntrinsicElements;
/** The component's props object */
props: Props;
/** List of native props to exclude from the returned value */
excludedPropNames?: ExcludedPropKeys[] | undefined;
}) => {
root: {
style: React_2.CSSProperties | undefined;
className: string | undefined;
};
primary: Omit<Props, ExcludedPropKeys>;
};
/**
* @internal
* Finds and swaps a provided key for it's right to left format.
*/
export declare const getRTLSafeKey: (key: string, dir: 'ltr' | 'rtl') => string;
/**
* Given the state and an array of slot names, will break out `slots` and `slotProps`
* collections.
*
* The root is derived from a mix of `components` props and `as` prop.
*
* Slots will render as null if they are rendered as primitives with undefined children.
*
* The slotProps will always omit the `as` prop within them, and for slots that are string
* primitives, the props will be filtered according to the slot type by the type system.
* For example, if the slot is rendered `as: 'a'`, the props will be filtered for acceptable
* anchor props. Note that this is only enforced at build time by Typescript -- there is no
* runtime code filtering props in this function.
*
* @deprecated use slot.always or slot.optional combined with assertSlots instead
*
* @param state - State including slot definitions
* @returns An object containing the `slots` map and `slotProps` map.
*/
export declare function getSlots<R extends SlotPropsRecord>(state: ComponentState<R>): {
slots: Slots<R>;
slotProps: ObjectSlotProps<R>;
};
/**
* Similar to `getSlots`, main difference is that it's compatible with new custom jsx pragma
*
* @internal
* This is an internal temporary method, this method will cease to exist eventually!
*
* * ❗️❗️ **DO NOT USE IT EXTERNALLY** ❗️❗️
*
* @deprecated use slot.always or slot.optional combined with assertSlots instead
*/
export declare function getSlotsNext<R extends SlotPropsRecord>(state: ComponentState<R>): {
slots: Slots<R>;
slotProps: ObjectSlotProps<R>;
};
/**
* @internal
* Gets the trigger element of a FluentTriggerComponent (such as Tooltip or MenuTrigger).
*
* In the case where the immediate child is itself a FluentTriggerComponent and/or React Fragment,
* it returns the first descendant that is _not_ a FluentTriggerComponent or Fragment.
* This allows multiple triggers to be stacked, and still apply their props to the actual trigger element.
*
* For example, the following returns `<div id="child" />`:
* ```jsx
* getTriggerChild(
* <Tooltip>
* <MenuTrigger>
* <div id="child" />
* </MenuTrigger>
* </Tooltip>
* );
* ```
*
* In the case where the immediate child is not a valid element,
* null is returned
*/
export declare function getTriggerChild<TriggerChildProps>(children: TriggerProps<TriggerChildProps>['children']): (React_2.ReactElement<Partial<TriggerChildProps>> & {
ref?: React_2.Ref<any>;
}) | null;
declare type HTMLAttributes = React_2.HTMLAttributes<any>;
declare type HTMLElementConstructorName = 'HTMLElement' | 'HTMLAnchorElement' | 'HTMLAreaElement' | 'HTMLAudioElement' | 'HTMLBaseElement' | 'HTMLBodyElement' | 'HTMLBRElement' | 'HTMLButtonElement' | 'HTMLCanvasElement' | 'HTMLDataElement' | 'HTMLDataListElement' | 'HTMLDetailsElement' | 'HTMLDivElement' | 'HTMLDListElement' | 'HTMLEmbedElement' | 'HTMLFieldSetElement' | 'HTMLFormElement' | 'HTMLHeadingElement' | 'HTMLHeadElement' | 'HTMLHRElement' | 'HTMLHtmlElement' | 'HTMLIFrameElement' | 'HTMLImageElement' | 'HTMLInputElement' | 'HTMLModElement' | 'HTMLLabelElement' | 'HTMLLegendElement' | 'HTMLLIElement' | 'HTMLLinkElement' | 'HTMLMapElement' | 'HTMLMetaElement' | 'HTMLMeterElement' | 'HTMLObjectElement' | 'HTMLOListElement' | 'HTMLOptGroupElement' | 'HTMLOptionElement' | 'HTMLOutputElement' | 'HTMLParagraphElement' | 'HTMLParamElement' | 'HTMLPreElement' | 'HTMLProgressElement' | 'HTMLQuoteElement' | 'HTMLSlotElement' | 'HTMLScriptElement' | 'HTMLSelectElement' | 'HTMLSourceElement' | 'HTMLSpanElement' | 'HTMLStyleElement' | 'HTMLTableElement' | 'HTMLTableColElement' | 'HTMLTableRowElement' | 'HTMLTableSectionElement' | 'HTMLTemplateElement' | 'HTMLTextAreaElement' | 'HTMLTimeElement' | 'HTMLTitleElement' | 'HTMLTrackElement' | 'HTMLUListElement' | 'HTMLVideoElement';
/**
* Allows to define a prefix that will be used for all IDs generated by useId() hook. It's useful to avoid collisions
* between different bundles.
*/
export declare const IdPrefixProvider: React_2.Provider<string | undefined>;
/**
* Infers the element type from props that are declared using ComponentProps.
*/
export declare type InferredElementRefType<Props> = ObscureEventName extends keyof Props ? Required<Props>[ObscureEventName] extends React_2.PointerEventHandler<infer Element> ? Element : never : never;
/**
* Helper type for {@link Slot}. Modifies `JSX.IntrinsicElements[Type]`:
* * Removes legacy string ref.
* * Disallows children for empty tags like 'img'.
*/
declare type IntrinsicElementProps<Type extends keyof JSX.IntrinsicElements> = Type extends EmptyIntrinsicElements ? PropsWithoutChildren<React_2.PropsWithRef<JSX.IntrinsicElements[Type]>> : React_2.PropsWithRef<JSX.IntrinsicElements[Type]>;
/**
* @internal
* Checks if a given element is a FluentUI trigger (e.g. `MenuTrigger` or `Tooltip`).
* See the {@link FluentTriggerComponent} type for more info.
*/
export declare function isFluentTrigger(element: React_2.ReactElement): element is React_2.ReactElement<TriggerProps>;
/**
* Verifies if a given node is an HTMLElement,
* this method works seamlessly with frames and elements from different documents
*
* This is preferred over simply using `instanceof`.
* Since `instanceof` might be problematic while operating with [multiple realms](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof#instanceof_and_multiple_realms)
*
* @example
* ```ts
* isHTMLElement(event.target) && event.target.focus()
* isHTMLElement(event.target, {constructorName: 'HTMLInputElement'}) && event.target.value // some value
* ```
*
*/
export declare function isHTMLElement<ConstructorName extends HTMLElementConstructorName = 'HTMLElement'>(element?: unknown, options?: {
/**
* Can be used to provide a custom constructor instead of `HTMLElement`,
* Like `HTMLInputElement` for example.
*/
constructorName?: ConstructorName;
}): element is InstanceType<(typeof globalThis)[ConstructorName]>;
/**
* @internal
* Checks that the element has default behaviour from user input on click or 'Enter'/'Space' keys
*/
export declare function isInteractiveHTMLElement(element: unknown): boolean;
/**
* Returns true if event is a mouse event. Useful when sharing logic between touch and mouse interactions.
*/
export declare function isMouseEvent(event: TouchOrMouseEvent): event is MouseEvent | React_2.MouseEvent;
/**
* Guard method that validates if a shorthand is a slot
* can be used to extends properties provided by a slot
*
* @example
* ```
* const backdropSlot = resolveShorthand(backdrop, {
* defaultProps: {
* onClick: useEventCallback(event => {
* if (isResolvedShorthand(backdrop)) {
* backdrop.onClick?.(event)
* }
* // do something after passing click down the line
* }),
* },
* })
* ```
* @example
* ```
* const handleBackDropClick = (event) => {
* // do your thing
* }
* const backdropSlot = resolveShorthand(backdrop, {
* defaultProps: {
* onClick: useEventCallback(
* mergeCallbacks(isResolvedShorthand(backdrop) ? backdrop.onClick : undefined, handleBackdropClick)
* )
* })
* ```
*/
export declare function isResolvedShorthand<Shorthand extends Slot<UnknownSlotProps>>(shorthand?: Shorthand): shorthand is ExtractSlotProps<Shorthand>;
/**
* Evaluates to true if the given type contains exactly one string, or false if it is a union of strings.
*
* ```
* IsSingleton<'a'> // true
* IsSingleton<'a' | 'b' | 'c'> // false
* ```
*/
declare type IsSingleton<T extends string> = {
[K in T]: Exclude<T, K> extends never ? true : false;
}[T];
/**
* Guard method to ensure a given element is a slot.
* This is mainly used internally to ensure a slot is being used as a component.
*/
export declare function isSlot<Props extends {}>(element: unknown): element is SlotComponentType<Props>;
/**
* Returns true if event is a touch event. Useful when sharing logic between touch and mouse interactions.
*/
export declare function isTouchEvent(event: TouchOrMouseEvent): event is TouchEvent | React_2.TouchEvent;
/**
* @internal
* Combine two event callbacks into a single callback function that calls each one in order.
*
* Usage example:
* ```ts
* state.slot.onChange = mergeCallbacks(state.slot.onChange, ev => {
* // Handle onChange
* });
* ```
*
* The primary use is to avoid the need to capture an existing callback (`state.slot.onChange` in the example) to a
* local variable before replacing with a new listener that calls the existing one. This helps avoid bugs like:
* * Infinite recursion by calling the re-assigned state.slot.onChange if it's not captured to a local variable.
* * Missing a call to the original onChange due to an early return or other conditional.
*
* If you need a callback that is stable between renders, wrap the result in {@link useEventCallback}.
*
* @param callback1 - The first callback to be called, or undefined
* @param callback2 - The second callback to be called, or undefined
*
* @returns A function that that calls the provided functions in order
*/
export declare function mergeCallbacks<Args extends unknown[]>(callback1: ((...args: Args) => void) | undefined, callback2: ((...args: Args) => void) | undefined): (...args: Args) => void;
export declare type NativeTouchOrMouseEvent = MouseEvent | TouchEvent;
/**
* @deprecated - use slot.always or slot.optional combined with assertSlots instead
*/
declare type ObjectSlotProps<S extends SlotPropsRecord> = {
[K in keyof S]-?: ExtractSlotProps<S[K]> extends AsIntrinsicElement<infer As> ? UnionToIntersection<JSX.IntrinsicElements[As]> : ExtractSlotProps<S[K]> extends React_2.ComponentType<infer P> ? P : ExtractSlotProps<S[K]>;
};
/**
* This is part of a hack to infer the element type from a native element *props* type.
* The only place the original element is found in a native props type (at least that's workable
* for inference) is in the event handlers, so some of the helper types use this event handler
* name to infer the original element type.
*
* Notes:
* - Using an extremely obscure event handler reduces the likelihood that its signature will be
* modified in any component's props.
* - Inferring based on a single prop name instead of a larger type like `DOMAttributes<T>` should be
* less expensive for typescript to evaluate and is less likely to result in type expansion in .d.ts.
*/
declare type ObscureEventName = 'onLostPointerCaptureCapture';
/**
* Tiny helper to do the minimal amount of work in duplicating an object but omitting some
* props. This ends up faster than using object ...rest or reduce to filter.
*
* This behaves very much like filteredAssign, but does not merge many objects together,
* uses an exclusion object map, and avoids spreads all for optimal performance.
*
* See perf test for background:
* https://jsperf.com/omit-vs-rest-vs-reduce/1
*
* @param obj - The object to clone
* @param exclusions - The array of keys to exclude
*/
export declare function omit<TObj extends Record<string, any>, Exclusions extends (keyof TObj)[]>(obj: TObj, exclusions: Exclusions): Omit<TObj, Exclusions[number]>;
export declare type OnSelectionChangeCallback = (event: React_2.SyntheticEvent, selectedItems: Set<SelectionItemId>) => void;
export declare type OnSelectionChangeData = {
selectedItems: Set<SelectionItemId>;
};
/**
* Creates a slot from a slot shorthand or properties (`props.SLOT_NAME` or `props` itself)
* @param value - the value of the slot, it can be a slot shorthand, a slot component or a slot properties
* @param options - values you can pass to alter the signature of a slot, those values are:
*
* * `elementType` - the base element type of a slot, defaults to `'div'`
* * `defaultProps` - similar to a React component declaration, you can provide a slot default properties to be merged with the shorthand/properties provided
* * `renderByDefault` - a boolean that indicates if a slot will be rendered even if it's base value is `undefined`.
* By default if `props.SLOT_NAME` is `undefined` then `state.SLOT_NAME` becomes `undefined`
* and nothing will be rendered, but if `renderByDefault = true` then `state.SLOT_NAME` becomes an object
* with the values provided by `options.defaultProps` (or `{}`). This is useful for cases such as providing a default content
* in case no shorthand is provided, like the case of the `expandIcon` slot for the `AccordionHeader`
*/
declare function optional<Props extends UnknownSlotProps>(value: Props | SlotShorthandValue | undefined | null, options: {
renderByDefault?: boolean;
} & SlotOptions<Props>): SlotComponentType<Props> | undefined;
/**
* @internal
*/
export declare interface PriorityQueue<T> {
all: () => T[];
clear: () => void;
contains: (item: T) => boolean;
dequeue: () => T;
enqueue: (item: T) => void;
peek: () => T | null;
remove: (item: T) => void;
size: () => number;
}
/**
* @internal
*/
declare type PriorityQueueCompareFn<T> = (a: T, b: T) => number;
/**
* Removes the 'ref' prop from the given Props type, leaving unions intact (such as the discriminated union created by
* IntrinsicSlotProps). This allows IntrinsicSlotProps to be used with React.forwardRef.
*
* The conditional "extends unknown" (always true) exploits a quirk in the way TypeScript handles conditional
* types, to prevent unions from being expanded.
*/
declare type PropsWithoutChildren<P> = 'children' extends keyof P ? DistributiveOmit<P, 'children'> : P;
/**
* Removes the 'ref' prop from the given Props type, leaving unions intact (such as the discriminated union created by
* IntrinsicSlotProps). This allows IntrinsicSlotProps to be used with React.forwardRef.
*
* The conditional "extends unknown" (always true) exploits a quirk in the way TypeScript handles conditional
* types, to prevent unions from being expanded.
*/
declare type PropsWithoutRef<P> = 'ref' extends keyof P ? DistributiveOmit<P, 'ref'> : P;
export declare type ReactTouchOrMouseEvent = React_2.MouseEvent | React_2.TouchEvent;
/**
* A Ref function which can be treated like a ref object in that it has an attached
* current property, which will be updated as the ref is evaluated.
*/
export declare type RefObjectFunction<T> = React_2.RefObject<T> & ((value: T | null) => void);
/**
* @internal
* If type T includes `null`, remove it and add `undefined` instead.
*/
declare type ReplaceNullWithUndefined<T> = T extends null ? Exclude<T, null> | undefined : T;
/**
* Resets generated IDs, should be used only in tests.
*/
export declare function resetIdsForTests(): void;
/**
*
* Resolves shorthands into slot props, to ensure normalization of the signature
* being passed down to getSlots method
* @param value - the base shorthand props
* @param options - options to resolve shorthand props
*
* @deprecated use slot.always or slot.optional combined with assertSlots instead
*/
export declare const resolveShorthand: ResolveShorthandFunction<UnknownSlotProps>;
/**
* Helper function that converts a slot shorthand or properties to a slot properties object
* The main difference between this function and `slot` is that this function does not return the metadata required for a slot to be considered a properly renderable slot, it only converts the value to a slot properties object
* @param value - the value of the slot, it can be a slot shorthand or a slot properties object
*/
declare function resolveShorthand_2<Props extends UnknownSlotProps | null | undefined>(value: Props | SlotShorthandValue): Props;
/**
* @deprecated use slot.always or slot.optional combined with assertSlots instead
*/
export declare type ResolveShorthandFunction<Props extends UnknownSlotProps = UnknownSlotProps> = {
<P extends Props>(value: P | SlotShorthandValue | undefined, options: ResolveShorthandOptions<P, true>): P;
<P extends Props>(value: P | SlotShorthandValue | null | undefined, options?: ResolveShorthandOptions<P, boolean>): P | undefined;
};
/**
* @deprecated - use slot.always or slot.optional combined with assertSlots instead
*/
export declare type ResolveShorthandOptions<Props, Required extends boolean = false> = Required extends true ? {
required: true;
defaultProps?: Props;
} : {
required?: Required;
defaultProps?: Props;
};
export declare type SelectionHookParams = {
selectionMode: SelectionMode_2;
/**
* Used in uncontrolled mode to set initial selected items on mount
*/
defaultSelectedItems?: Iterable<SelectionItemId>;
/**
* Used to control selected items
*/
selectedItems?: Iterable<SelectionItemId>;
/**
* Called when selection changes
*/
onSelectionChange?(event: React_2.SyntheticEvent, data: OnSelectionChangeData): void;
};
export declare type SelectionItemId = string | number;
export declare interface SelectionMethods {
toggleItem(event: React_2.SyntheticEvent, id: SelectionItemId): void;
selectItem(event: React_2.SyntheticEvent, id: SelectionItemId): void;
deselectItem(event: React_2.SyntheticEvent, id: SelectionItemId): void;
clearItems(event: React_2.SyntheticEvent): void;
isSelected(id: SelectionItemId): boolean;
toggleAllItems(event: React_2.SyntheticEvent, itemIds: SelectionItemId[]): void;
}
declare type SelectionMode_2 = 'single' | 'multiselect';
export { SelectionMode_2 as SelectionMode }
/**
* Sets the virtual parent of an element.
*
* @internal
* @param child - Theme element to set the virtual parent
* @param parent - The virtual parent, use `undefined` to remove a virtual parent relationship
*/
export declare function setVirtualParent(child: Node, parent?: Node): void;
/**
* The props type and shorthand value for a slot. Type is either a single intrinsic element like `'div'`,
* or a component like `typeof Button`.
*
* If a slot needs to support multiple intrinsic element types, use the `AlternateAs` param (see examples below).
*
* By default, slots can be set to `null` to prevent them from being rendered. If a slot must always be rendered,
* wrap with `NonNullable` (see examples below).
*
* @example
* ```
* // Intrinsic element examples:
* Slot<'div'> // Slot is always div
* Slot<'button', 'a'> // Defaults to button, but allows as="a" with anchor-specific props
* Slot<'span', 'div' | 'pre'> // Defaults to span, but allows as="div" or as="pre"
* NonNullable<Slot<'div'>> // Slot that will always be rendered (can't be set to null by the user)
*
* // Component examples:
* Slot<typeof Button> // Slot is always a Button, and accepts all of Button's Props
* NonNullable<Slot<typeof Label>> // Slot is a Label and will always be rendered (can't be set to null by the user)
* ```
*/
export declare type Slot<Type extends keyof JSX.IntrinsicElements | React_2.ComponentType | React_2.VoidFunctionComponent | UnknownSlotProps, AlternateAs extends keyof JSX.IntrinsicElements = never> = IsSingleton<Extract<Type, string>> extends true ? WithSlotShorthandValue<Type extends keyof JSX.IntrinsicElements ? {
as?: Type;
} & WithSlotRenderFunction<IntrinsicElementProps<Type>> : Type extends React_2.ComponentType<infer Props> ? WithSlotRenderFunction<Props> : Type> | {
[As in AlternateAs]: {
as: As;
} & WithSlotRenderFunction<IntrinsicElementProps<As>>;
}[AlternateAs] | null : 'Error: First parameter to Slot must not be not a union of types. See documentation of Slot type.';
declare namespace slot {
export {
always,
optional,
resolveShorthand_2 as resolveShorthand,
SlotOptions
}
}
export { slot }
/**
* @internal
* Internal reference for the render function
*/
export declare const SLOT_ELEMENT_TYPE_SYMBOL: unique symbol;
/**
* @internal
* Internal reference for the render function
*/
export declare const SLOT_RENDER_FUNCTION_SYMBOL: unique symbol;
/**
* Helper type to correctly define the slot class names object.
*/
export declare type SlotClassNames<Slots> = {
[SlotName in keyof Slots]-?: string;
};
declare type SlotComponents<Slots extends SlotPropsRecord> = {
[K in keyof Slots]: SlotComponentType<ExtractSlotProps<Slots[K]>>;
};
/**
* A definition of a slot, as a component, very similar to how a React component is declared,
* but with some additional metadata that is used to determine how to render the slot.
*/
export declare type SlotComponentType<Props> = Props & {
/**
* **NOTE**: Slot components are not callable.
*/
(props: React_2.PropsWithChildren<{}>): React_2.ReactElement | null;
/**
* @internal
*/
[SLOT_RENDER_FUNCTION_SYMBOL]?: SlotRenderFunction<Props>;
/**
* @internal
*/
[SLOT_ELEMENT_TYPE_SYMBOL]: React_2.ComponentType<Props> | (Props extends AsIntrinsicElement<infer As> ? As : keyof JSX.IntrinsicElements);
};
export declare type SlotOptions<Props extends UnknownSlotProps> = {
elementType: React_2.ComponentType<Props> | (Props extends AsIntrinsicElement<infer As> ? As : keyof JSX.IntrinsicElements);
defaultProps?: Partial<Props>;
};
/**
* Matches any component's Slots type (such as ButtonSlots).
*
* This should ONLY be used in type templates as in `extends SlotPropsRecord`;
* it shouldn't be used as a component's Slots type.
*/
export declare type SlotPropsRecord = Record<string, UnknownSlotProps | SlotShorthandValue | null | undefined>;
export declare type SlotRenderFunction<Props> = (Component: React_2.ElementType<Props>, props: Omit<Props, 'as'>) => React_2.ReactNode;
/**
* @deprecated - use slot.always or slot.optional combined with assertSlots instead
*/
export declare type Slots<S extends SlotPropsRecord> = {
[K in keyof S]: ExtractSlotProps<S[K]> extends AsIntrinsicElement<infer As> ? As : ExtractSlotProps<S[K]> extends React_2.ComponentType<infer P> ? React_2.ElementType<NonNullable<P>> : React_2.ElementType<ExtractSlotProps<S[K]>>;
};
/**
* The shorthand value of a slot allows specifying its child
*/
export declare type SlotShorthandValue = React_2.ReactChild | React_2.ReactNode[] | React_2.ReactPortal;
/**
* When using SSR with Fluent UI, applications must be wrapped in an SSRProvider. This ensures that auto generated ids
* are consistent between the client and server.
*
* @public
*/
export declare const SSRProvider: React_2.FC<{
children: React_2.ReactNode;
}>;
export declare type TouchOrMouseEvent = NativeTouchOrMouseEvent | ReactTouchOrMouseEvent;
/**
* A trigger may have a children that could be either:
* 1. A single element
* 2. A render function that will receive properties and must return a valid element or null
* 3. null or undefined
*/
export declare type TriggerProps<TriggerChildProps = unknown> = {
children?: React_2.ReactElement | ((props: TriggerChildProps) => React_2.ReactElement | null) | null;
};
/**
* Converts a union type (`A | B | C`) to an intersection type (`A & B & C`)
*/
export declare type UnionToIntersection<U> = (U extends unknown ? (x: U) => U : never) extends (x: infer I) => U ? I : never;
/**
* Matches any slot props type.
*
* This should ONLY be used in type templates as in `extends UnknownSlotProps`;
* it shouldn't be used as the type of a slot.
*/
export declare type UnknownSlotProps = Pick<React_2.HTMLAttributes<HTMLElement>, 'children' | 'className' | 'style'> & {
as?: keyof JSX.IntrinsicElements;
};
/**
* @internal
* Helper to manage a browser requestAnimationFrame.
* Ensures that the requestAnimationFrame isn't set multiple times at once and is cleaned up
* when the component is unloaded.
*
* @returns A pair of [requestAnimationFrame, cancelAnimationFrame] that are stable between renders.
*/
export declare function useAnimationFrame(): readonly [(fn: () => void, delay?: number | undefined) => number, () => void];
/**
* @internal
*
* A [`useState`](https://reactjs.org/docs/hooks-reference.html#usestate)-like hook
* to manage a value that could be either `controlled` or `uncontrolled`,
* such as a checked state or text input string.
*
* @see https://react.dev/learn/sharing-state-between-components#controlled-and-uncontrolled-components for more details on `controlled`/`uncontrolled`
*
* @returns an array of the current value and an updater (dispatcher) function.
* The updater function is referentially stable (won't change during the component's lifecycle).
* It can take either a new value, or a function which is passed the previous value and returns the new value.
*
* ❗️❗️ Calls to the dispatcher will only modify the state if the state is `uncontrolled`.
* Meaning that if a state is `controlled`, calls to the dispatcher do not modify the state.
*
*/
export declare const useControllableState: <State>(options: UseControllableStateOptions<State>) => [State, React_2.Dispatch<React_2.SetStateAction<State>>];
/**
* @internal
*/
export declare type UseControllableStateOptions<State> = {
/**
* User-provided default state or initializer, for uncontrolled usage.
*/
defaultState?: State | (() => State);
/**
* User-provided controlled state. `undefined` means internal state will be used.
*/
state: State | undefined;
/**
* Used as the initial state if `state` and `defaultState` are both `undefined`.
* If `undefined` is the correct initial state, pass that here.
*/
initialState: State;
};
/**
* @internal
* https://reactjs.org/docs/hooks-faq.html#how-to-read-an-often-changing-value-from-usecallback
*
* Modified `useCallback` that can be used when dependencies change too frequently. Can occur when
* e.g. user props are dependencies which could change on every render
* e.g. volatile values (i.e. useState/useDispatch) are dependencies which could change frequently
*
* This should not be used often, but can be a useful re-render optimization since the callback is a ref and
* will not be invalidated between re-renders
*
* @param fn - The callback function that will be used
*/
export declare const useEventCallback: <Args extends unknown[], Return>(fn: (...args: Args) => Return) => (...args: Args) => Return;
/**
* @internal
* Checks if components was mounted the first time.
* Since concurrent mode will be released in the future this needs to be verified
* Currently (React 17) will always render the initial mount once
* https://codesandbox.io/s/heuristic-brook-s4w0q?file=/src/App.jsx
* https://codesandbox.io/s/holy-grass-8nieu?file=/src/App.jsx
*
* @example
* const isFirstMount = useFirstMount();
*/
export declare function useFirstMount(): boolean;
/**
* @internal
* Forces a re-render, similar to `forceUpdate` in class components.
*/
export declare function useForceUpdate(): DispatchWithoutAction;
/**
* Hook to generate a unique ID.
*
* @param prefix - Optional prefix for the ID. Defaults to 'fui-'.
* @param providedId - Optional id provided by a parent component. Defaults to the provided value if present,
* without conditioning the hook call
* @returns The ID
*/
export declare function useId(prefix?: string, providedId?: string): string;
/**
* React currently throws a warning when using useLayoutEffect on the server. To get around it, we can conditionally
* useEffect on the server (no-op) and useLayoutEffect in the browser. We occasionally need useLayoutEffect to
* ensure we don't get a render flash for certain operations, but we may also need affected components to render on
* the server.
*
* https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85
* https://github.com/reduxjs/react-redux/blob/master/src/utils/useIsomorphicLayoutEffect.js
*/
export declare const useIsomorphicLayoutEffect: typeof React_2.useEffect;
/**
* Returns whether the component is currently being server side rendered or hydrated on the client. Can be used to delay
* browser-specific rendering until after hydration. May cause re-renders on a client when is used within SSRProvider.
*/
export declare function useIsSSR(): boolean;
/**
* React hook to merge multiple React refs (either MutableRefObjects or ref callbacks) into a single ref callback that
* updates all provided refs
* @param refs - Refs to collectively update with one ref value.
* @returns A function with an attached "current" prop, so that it can be treated like a RefObject.
*/
export declare function useMergedRefs<T>(...refs: (React_2.Ref<T> | undefined)[]): RefObjectFunction<T>;
/**
* @internal
*/
export declare type UseOnClickOrScrollOutsideOptions = {
/**
* The element to listen for the click event
*/
element: Document | undefined;
/**
* Refs to elements that check if the click is outside
*/
refs: React_2.MutableRefObject<HTMLElement | undefined | null>[];
/**
* By default uses element.contains, but custom contain function can be provided
*
* @param parent - provided parent element
* @param child - event target element
*/
contains?(parent: HTMLElement | null, child: HTMLElement): boolean;
/**
* Disables event listeners
*/
disabled?: boolean;
/**
* Disables custom focus event listeners for iframes
*/
disabledFocusOnIframe?: boolean;
/**
* Called if the click is outside the element refs
*/
callback: (ev: MouseEvent | TouchEvent) => void;
};
/**
* @internal
* Utility to perform checks where a click/touch event was made outside a component
*/
export declare const useOnClickOutside: (options: UseOnClickOrScrollOutsideOptions) => void;
/**
* @internal
* Utility to perform checks where a click/touch event was made outside a component
*/
export declare const useOnScrollOutside: (options: UseOnClickOrScrollOutsideOptions) => void;
/**
* @internal
*/
export declare const usePrevious: <ValueType = unknown>(value: ValueType) => ValueType | null;
/**
* @returns The width in pixels of the scrollbar in the user agent
*/
export declare function useScrollbarWidth(options: UseScrollbarWidthOptions): number | undefined;
declare interface UseScrollbarWidthOptions {
/**
* Reference document to measure the scrollbar width
*/
targetDocument: Document | null | undefined;
/**
* Does not use the cache and recalculates the scrollbar width
*/
force?: boolean;
}
export declare function useSelection(params: SelectionHookParams): readonly [Set<SelectionItemId>, SelectionMethods];
/**
* @internal
* Helper to manage a browser timeout.
* Ensures that the timeout isn't set multiple times at once and is cleaned up
* when the component is unloaded.
*
* @returns A pair of [setTimeout, clearTimeout] that are stable between renders.
*/
export declare function useTimeout(): readonly [(fn: () => void, delay?: number | undefined) => number, () => void];
/**
* Helper type for {@link Slot}. Takes the props we want to support for a slot and adds the ability for `children`
* to be a render function that takes those props.
*/
declare type WithSlotRenderFunction<Props> = Props & {
children?: ('children' extends keyof Props ? Props['children'] : never) | SlotRenderFunction<Props>;
};
/**
* Helper type for {@link Slot}. Adds shorthand types that are assignable to the slot's `children`.
*/
declare type WithSlotShorthandValue<Props> = Props | ('children' extends keyof Props ? Extract<SlotShorthandValue, Props['children']> : never);
export { }