Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(merge-styles): introduce DeepPartialV2 type to avoid infinite type instantiation and make unions declaration more performant #31703

Merged
merged 6 commits into from
Jun 14, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
Hotell marked this conversation as resolved.
Show resolved Hide resolved
"type": "patch",
"comment": "fix(merge-styles): improve DeepPartial type infinite recursion triggerpoint",
"packageName": "@fluentui/merge-styles",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "patch"
}
95 changes: 50 additions & 45 deletions packages/merge-styles/etc/merge-styles.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,37 @@ export type AddSheetCallback = ({ key, sheet }: {
// @public (undocumented)
export const cloneCSSStyleSheet: (srcSheet: CSSStyleSheet, targetSheet: CSSStyleSheet) => CSSStyleSheet;

// Warning: (ae-forgotten-export) The symbol "Missing_2" needs to be exported by the entry point index.d.ts
//
// @public
export function concatStyleSets<TStyleSet>(styleSet: TStyleSet | false | null | undefined): IConcatenatedStyleSet<ObjectOnly<TStyleSet>>;
export function concatStyleSets<TStyleSet>(styleSet: TStyleSet | Missing_2): IConcatenatedStyleSet<ObjectOnly<TStyleSet>>;

// @public
export function concatStyleSets<TStyleSet1, TStyleSet2>(styleSet1: TStyleSet1 | false | null | undefined | ShadowConfig, styleSet2: TStyleSet2 | false | null | undefined): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2>>;
export function concatStyleSets<TStyleSet1, TStyleSet2>(styleSet1: TStyleSet1 | Missing_2 | ShadowConfig, styleSet2: TStyleSet2 | Missing_2): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2>>;

// @public
export function concatStyleSets<TStyleSet1, TStyleSet2, TStyleSet3>(styleSet1: TStyleSet1 | false | null | undefined | ShadowConfig, styleSet2: TStyleSet2 | false | null | undefined, styleSet3: TStyleSet3 | false | null | undefined): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3>>;
export function concatStyleSets<TStyleSet1, TStyleSet2, TStyleSet3>(styleSet1: TStyleSet1 | Missing_2 | ShadowConfig, styleSet2: TStyleSet2 | Missing_2, styleSet3: TStyleSet3 | Missing_2): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3>>;

// @public
export function concatStyleSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4>(styleSet1: TStyleSet1 | false | null | undefined | ShadowConfig, styleSet2: TStyleSet2 | false | null | undefined, styleSet3: TStyleSet3 | false | null | undefined, styleSet4: TStyleSet4 | false | null | undefined): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4>>;
export function concatStyleSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4>(styleSet1: TStyleSet1 | Missing_2 | ShadowConfig, styleSet2: TStyleSet2 | Missing_2, styleSet3: TStyleSet3 | Missing_2, styleSet4: TStyleSet4 | Missing_2): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4>>;

// @public
export function concatStyleSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4, TStyleSet5>(styleSet1: TStyleSet1 | false | null | undefined | ShadowConfig, styleSet2: TStyleSet2 | false | null | undefined, styleSet3: TStyleSet3 | false | null | undefined, styleSet4: TStyleSet4 | false | null | undefined, styleSet5: TStyleSet5 | false | null | undefined): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4> & ObjectOnly<TStyleSet5>>;
export function concatStyleSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4, TStyleSet5>(styleSet1: TStyleSet1 | Missing_2 | ShadowConfig, styleSet2: TStyleSet2 | Missing_2, styleSet3: TStyleSet3 | Missing_2, styleSet4: TStyleSet4 | Missing_2, styleSet5: TStyleSet5 | Missing_2): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4> & ObjectOnly<TStyleSet5>>;

// @public
export function concatStyleSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4, TStyleSet5, TStyleSet6>(styleSet1: TStyleSet1 | false | null | undefined | ShadowConfig, styleSet2: TStyleSet2 | false | null | undefined, styleSet3: TStyleSet3 | false | null | undefined, styleSet4: TStyleSet4 | false | null | undefined, styleSet5: TStyleSet5 | false | null | undefined, styleSet6: TStyleSet6 | false | null | undefined): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4> & ObjectOnly<TStyleSet5> & ObjectOnly<TStyleSet6>>;
export function concatStyleSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4, TStyleSet5, TStyleSet6>(styleSet1: TStyleSet1 | Missing_2 | ShadowConfig, styleSet2: TStyleSet2 | Missing_2, styleSet3: TStyleSet3 | Missing_2, styleSet4: TStyleSet4 | Missing_2, styleSet5: TStyleSet5 | Missing_2, styleSet6: TStyleSet6 | Missing_2): IConcatenatedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4> & ObjectOnly<TStyleSet5> & ObjectOnly<TStyleSet6>>;

// @public
export function concatStyleSets(...styleSets: (IStyleSet | false | null | undefined | ShadowConfig)[]): IConcatenatedStyleSet<any>;
export function concatStyleSets(...styleSets: (IStyleSet | Missing_2 | ShadowConfig)[]): IConcatenatedStyleSet<any>;

// Warning: (ae-forgotten-export) The symbol "DeepPartialV2" needs to be exported by the entry point index.d.ts
//
// @public
export function concatStyleSetsWithProps<TStyleProps, TStyleSet extends IStyleSetBase>(styleProps: TStyleProps, ...allStyles: (IStyleFunctionOrObject<TStyleProps, TStyleSet> | undefined)[]): DeepPartial<TStyleSet>;
export function concatStyleSetsWithProps<TStyleProps, TStyleSet extends IStyleSetBase>(styleProps: TStyleProps, ...allStyles: (IStyleFunctionOrObject<TStyleProps, TStyleSet> | undefined)[]): DeepPartialV2<TStyleSet>;

// @public
// @public @deprecated
export type DeepPartial<T> = {
[P in keyof T]?: T[P] extends (infer U)[] ? DeepPartial<U>[] : T[P] extends object ? DeepPartial<T[P]> : T[P];
[P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends object ? DeepPartial<T[P]> : T[P];
};

// @public (undocumented)
Expand All @@ -61,7 +65,7 @@ export const GLOBAL_STYLESHEET_KEY = "__global__";
//
// @public
export type IConcatenatedStyleSet<TStyleSet extends IStyleSetBase> = {
[P in keyof Omit_2<TStyleSet, 'subComponentStyles'>]: IStyle;
[P in keyof Omit<TStyleSet, 'subComponentStyles'>]: IStyle;
} & {
subComponentStyles?: {
[P in keyof TStyleSet['subComponentStyles']]: IStyleFunction<any, any>;
Expand Down Expand Up @@ -110,7 +114,7 @@ export type InsertRuleCallback = ({ key, sheet, rule }: InsertRuleArgs) => void;

// @public
export type IProcessedStyleSet<TStyleSet extends IStyleSetBase> = {
[P in keyof Omit_2<TStyleSet, 'subComponentStyles'>]: string;
[P in keyof Omit<TStyleSet, 'subComponentStyles'>]: string;
} & {
subComponentStyles: {
[P in keyof TStyleSet['subComponentStyles']]: __MapToFunctionType<TStyleSet['subComponentStyles'] extends infer J ? (P extends keyof J ? J[P] : never) : never>;
Expand Down Expand Up @@ -139,7 +143,7 @@ export interface IRawStyle extends IRawStyleBase {
displayName?: string;
// @deprecated (undocumented)
selectors?: {
[key: string]: IStyle;
[key: string]: IStyle_2;
};
}

Expand Down Expand Up @@ -449,20 +453,20 @@ export type IStyle = IStyleBase | IStyleBaseArray;
export type IStyleBase = IRawStyle | string | false | null | undefined;

// @public (undocumented)
export interface IStyleBaseArray extends Array<IStyle> {
export interface IStyleBaseArray extends Array<IStyleBase | IStyleBaseArray> {
}

// @public
export type IStyleFunction<TStylesProps, TStyleSet extends IStyleSetBase> = (props: TStylesProps) => DeepPartial<TStyleSet>;
export type IStyleFunction<TStylesProps, TStyleSet extends IStyleSetBase> = (props: TStylesProps) => DeepPartialV2<TStyleSet>;

// @public
export type IStyleFunctionOrObject<TStylesProps, TStyleSet extends IStyleSetBase> = IStyleFunction<TStylesProps, TStyleSet> | DeepPartial<TStyleSet>;
export type IStyleFunctionOrObject<TStylesProps, TStyleSet extends IStyleSetBase> = IStyleFunction<TStylesProps, TStyleSet> | DeepPartialV2<TStyleSet>;

// @public
export type IStyleSet<TStyleSet extends IStyleSetBase = {
[key: string]: any;
}> = {
[P in keyof Omit_2<TStyleSet, 'subComponentStyles'>]: IStyle;
[P in keyof Omit<TStyleSet, 'subComponentStyles'>]: IStyle;
} & {
subComponentStyles?: {
[P in keyof TStyleSet['subComponentStyles']]: IStyleFunctionOrObject<any, any>;
Expand Down Expand Up @@ -503,58 +507,54 @@ export function keyframes(timeline: IKeyframes): string;
// @public (undocumented)
export const makeShadowConfig: (stylesheetKey: string, inShadow: boolean, window?: Window) => ShadowConfig;

// Warning: (ae-forgotten-export) The symbol "StyleArgWithShadow" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "IStyleOptions" needs to be exported by the entry point index.d.ts
//
// @public
export function mergeCss(args: (IStyle | IStyleBaseArray | false | null | undefined | ShadowConfig) | (IStyle | IStyleBaseArray | false | null | undefined | ShadowConfig)[], options?: IStyleOptions): string;
export function mergeCss(args: StyleArgWithShadow | StyleArgWithShadow[], options?: IStyleOptions): string;

// Warning: (ae-forgotten-export) The symbol "Missing" needs to be exported by the entry point index.d.ts
//
// @public
export function mergeCssSets<TStyleSet>(styleSets: [TStyleSet | false | null | undefined], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet>>;
export function mergeCssSets<TStyleSet>(styleSets: [TStyleSet | Missing], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet>>;

// @public
export function mergeCssSets<TStyleSet1, TStyleSet2>(styleSets: [TStyleSet1 | false | null | undefined | ShadowConfig, TStyleSet2 | false | null | undefined], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2>>;
export function mergeCssSets<TStyleSet1, TStyleSet2>(styleSets: [TStyleSet1 | Missing | ShadowConfig, TStyleSet2 | Missing], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2>>;

// @public
export function mergeCssSets<TStyleSet1, TStyleSet2, TStyleSet3>(styleSets: [
TStyleSet1 | false | null | undefined | ShadowConfig,
TStyleSet2 | false | null | undefined,
TStyleSet3 | false | null | undefined
], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3>>;
export function mergeCssSets<TStyleSet1, TStyleSet2, TStyleSet3>(styleSets: [TStyleSet1 | Missing | ShadowConfig, TStyleSet2 | Missing, TStyleSet3 | Missing], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3>>;

// @public
export function mergeCssSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4>(styleSets: [
TStyleSet1 | false | null | undefined | ShadowConfig,
TStyleSet2 | false | null | undefined,
TStyleSet3 | false | null | undefined,
TStyleSet4 | false | null | undefined
], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4>>;
export function mergeCssSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4>(styleSets: [TStyleSet1 | Missing | ShadowConfig, TStyleSet2 | Missing, TStyleSet3 | Missing, TStyleSet4 | Missing], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4>>;

// @public
export function mergeCssSets<TStyleSet>(styleSet: [TStyleSet | false | null | undefined], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet>>;
export function mergeCssSets<TStyleSet>(styleSet: [TStyleSet | Missing], options?: IStyleOptions): IProcessedStyleSet<ObjectOnly<TStyleSet>>;

// Warning: (ae-forgotten-export) The symbol "StyleArg" needs to be exported by the entry point index.d.ts
//
// @public (undocumented)
export function mergeStyles(...args: (IStyle | IStyleBaseArray | false | null | undefined)[]): string;
export function mergeStyles(...args: StyleArg[]): string;

// @public (undocumented)
export function mergeStyles(shadowConfig: ShadowConfig, ...args: (IStyle | IStyleBaseArray | false | null | undefined)[]): string;
export function mergeStyles(shadowConfig: ShadowConfig, ...args: StyleArg[]): string;

// @public
export function mergeStyleSets<TStyleSet>(styleSet: TStyleSet | false | null | undefined): IProcessedStyleSet<ObjectOnly<TStyleSet>>;
export function mergeStyleSets<TStyleSet>(styleSet: TStyleSet | Missing): IProcessedStyleSet<ObjectOnly<TStyleSet>>;

// @public
export function mergeStyleSets<TStyleSet1, TStyleSet2>(styleSet1: TStyleSet1 | false | null | undefined, styleSet2: TStyleSet2 | false | null | undefined): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2>>;
export function mergeStyleSets<TStyleSet1, TStyleSet2>(styleSet1: TStyleSet1 | Missing, styleSet2: TStyleSet2 | Missing): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2>>;

// @public
export function mergeStyleSets<TStyleSet1, TStyleSet2, TStyleSet3>(styleSet1: TStyleSet1 | false | null | undefined, styleSet2: TStyleSet2 | false | null | undefined, styleSet3: TStyleSet3 | false | null | undefined): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3>>;
export function mergeStyleSets<TStyleSet1, TStyleSet2, TStyleSet3>(styleSet1: TStyleSet1 | Missing, styleSet2: TStyleSet2 | Missing, styleSet3: TStyleSet3 | Missing): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3>>;

// @public
export function mergeStyleSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4>(styleSet1: TStyleSet1 | false | null | undefined, styleSet2: TStyleSet2 | false | null | undefined, styleSet3: TStyleSet3 | false | null | undefined, styleSet4: TStyleSet4 | false | null | undefined): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4>>;
export function mergeStyleSets<TStyleSet1, TStyleSet2, TStyleSet3, TStyleSet4>(styleSet1: TStyleSet1 | Missing, styleSet2: TStyleSet2 | Missing, styleSet3: TStyleSet3 | Missing, styleSet4: TStyleSet4 | Missing): IProcessedStyleSet<ObjectOnly<TStyleSet1> & ObjectOnly<TStyleSet2> & ObjectOnly<TStyleSet3> & ObjectOnly<TStyleSet4>>;

// @public
export function mergeStyleSets(...styleSets: Array<IStyleSet | undefined | false | null | ShadowConfig>): IProcessedStyleSet<any>;
export function mergeStyleSets(...styleSets: Array<IStyleSet | Missing | ShadowConfig>): IProcessedStyleSet<any>;

// @public (undocumented)
export function mergeStyleSets(shadowConfig: ShadowConfig, ...styleSets: Array<IStyleSet | undefined | false | null>): IProcessedStyleSet<any>;
export function mergeStyleSets(shadowConfig: ShadowConfig, ...styleSets: Array<IStyleSet | Missing>): IProcessedStyleSet<any>;

// @public (undocumented)
export type ObjectOnly<TArg> = TArg extends {} ? TArg : {};
Expand All @@ -569,12 +569,16 @@ export { Omit_2 as Omit }
export function setRTL(isRTL: boolean): void;

// @public (undocumented)
export type ShadowConfig = {
stylesheetKey: string;
export interface ShadowConfig {
// (undocumented)
__isShadowConfig__: true;
// (undocumented)
inShadow: boolean;
// (undocumented)
stylesheetKey: string;
// (undocumented)
window?: Window;
__isShadowConfig__: true;
};
}

// @public (undocumented)
export class ShadowDomStylesheet extends Stylesheet {
Expand Down Expand Up @@ -634,7 +638,8 @@ export const SUPPORTS_MODIFYING_ADOPTED_STYLESHEETS: boolean;

// Warnings were encountered during analysis:
//
// lib/IStyleSet.d.ts:61:5 - (ae-forgotten-export) The symbol "__MapToFunctionType" needs to be exported by the entry point index.d.ts
// lib/IRawStyle.d.ts:24:9 - (ae-forgotten-export) The symbol "IStyle_2" needs to be exported by the entry point index.d.ts
// lib/IStyleSet.d.ts:62:5 - (ae-forgotten-export) The symbol "__MapToFunctionType" needs to be exported by the entry point index.d.ts

// (No @packageDocumentation comment for this package)

Expand Down
18 changes: 17 additions & 1 deletion packages/merge-styles/src/DeepPartial.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,22 @@
/**
* TypeScript type to return a deep partial object (each property can be undefined, recursively.)
* @deprecated - This type will hit infinite type instantiation recursion. Please use {@link DeepPartialV2}
*/
export type DeepPartial<T> = {
[P in keyof T]?: T[P] extends (infer U)[] ? DeepPartial<U>[] : T[P] extends object ? DeepPartial<T[P]> : T[P];
// eslint-disable-next-line deprecation/deprecation
[P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends object ? DeepPartial<T[P]> : T[P];
};

interface IDeepPartialArray<T> extends Array<DeepPartialV2<T>> {}

type DeepPartialObject<T> = {
[Key in keyof T]?: DeepPartialV2<T[Key]>;
};

export type DeepPartialV2<T> = T extends Function
? T
: T extends Array<infer U>
? IDeepPartialArray<U>
: T extends object
? DeepPartialObject<T>
: T;
7 changes: 5 additions & 2 deletions packages/merge-styles/src/IRawStyle.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { IRawStyleBase } from './IRawStyleBase';
import { IStyle } from './IStyle';
import type { IRawStyleBase } from './IRawStyleBase';

/**
* IRawStyle extends a raw style object, but allows selectors to be defined
Expand Down Expand Up @@ -29,3 +28,7 @@ export interface IRawStyle extends IRawStyleBase {
[key: string]: IStyle;
};
}

type IStyleBase = IRawStyle | string | false | null | undefined;
interface IStyleBaseArray extends Array<IStyleBase | IStyleBaseArray> {}
type IStyle = IStyleBase | IStyleBaseArray;
4 changes: 2 additions & 2 deletions packages/merge-styles/src/IStyle.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { IRawStyle } from './IRawStyle';
import type { IRawStyle } from './IRawStyle';

/**
* {@docCategory IStyleBase}
Expand All @@ -8,7 +8,7 @@ export type IStyleBase = IRawStyle | string | false | null | undefined;
/**
* {@docCategory IStyleBaseArray}
*/
export interface IStyleBaseArray extends Array<IStyle> {}
export interface IStyleBaseArray extends Array<IStyleBase | IStyleBaseArray> {}

/**
* IStyleObject extends a raw style objects, but allows selectors to be defined
Expand Down
6 changes: 3 additions & 3 deletions packages/merge-styles/src/IStyleFunction.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { IStyleSetBase } from './IStyleSet';
import { DeepPartial } from './DeepPartial';
import type { DeepPartialV2 } from './DeepPartial';

/**
* A style function takes in styleprops and returns a partial styleset.
* {@docCategory IStyleFunction}
*/
export type IStyleFunction<TStylesProps, TStyleSet extends IStyleSetBase> = (
props: TStylesProps,
) => DeepPartial<TStyleSet>;
) => DeepPartialV2<TStyleSet>;

/**
* Represents either a style function that takes in style props and returns a partial styleset,
Expand All @@ -16,4 +16,4 @@ export type IStyleFunction<TStylesProps, TStyleSet extends IStyleSetBase> = (
*/
export type IStyleFunctionOrObject<TStylesProps, TStyleSet extends IStyleSetBase> =
| IStyleFunction<TStylesProps, TStyleSet>
| DeepPartial<TStyleSet>;
| DeepPartialV2<TStyleSet>;
2 changes: 1 addition & 1 deletion packages/merge-styles/src/IStyleOptions.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ShadowConfig } from './shadowConfig';
import type { ShadowConfig } from './shadowConfig';
import type { Stylesheet } from './Stylesheet';

export interface IStyleOptions {
Expand Down
Loading
Loading