import type { ClassicComponentClass, ComponentClass, ComponentProps, ComponentType, ForwardRefExoticComponent, FunctionComponent } from "react"; import type { ImageStyle, TextStyle, ViewStyle } from "react-native"; import type { Animation, ContainerCondition, ContainerType, Declaration, EasingFunction, MediaQuery, SelectorComponent, Time } from "lightningcss"; import type { SharedValue } from "react-native-reanimated"; import type { FeatureFlagStatus } from "./css-to-rn/feature-flags"; import type { SharedState } from "./runtime/native/types"; import type { Effect } from "./runtime/observable"; import { StyleRuleSetSymbol, StyleRuleSymbol } from "./shared"; export interface Effect2 { update: () => void; dependencies: Set<() => void>; } export type ReactComponent

= ClassicComponentClass

| ComponentClass

| FunctionComponent

| ForwardRefExoticComponent

; export type InteropComponentConfig = { target: string[]; inlineProp?: string; source: string; propToRemove?: string; nativeStyleToProp?: Array<[string, string[]]>; }; export type CssToReactNativeRuntimeOptions = { cache?: { rules: Map; keyframes: Map; rootVariables: StyleSheetRegisterOptions["rootVariables"]; universalVariables: StyleSheetRegisterOptions["universalVariables"]; }; inlineRem?: number | false; grouping?: (string | RegExp)[]; ignorePropertyWarningRegex?: (string | RegExp)[]; selectorPrefix?: string; stylesheetOrder?: number; features?: FeatureFlagStatus; }; export interface ExtractRuleOptions extends CssToReactNativeRuntimeOptions { rules: Map; keyframes: Map; grouping: RegExp[]; darkMode?: DarkMode; rootVariables: StyleSheetRegisterOptions["rootVariables"]; universalVariables: StyleSheetRegisterOptions["universalVariables"]; flags: Record; selectorPrefix?: string; appearanceOrder: number; rem?: StyleSheetRegisterOptions["rem"]; varUsageCount: Map; } export type CssInterop = , const M extends EnableCssInteropOptions>(component: C, mapping: M & EnableCssInteropOptions) => ComponentType & { [K in keyof M as K extends string ? M[K] extends undefined | false ? never : M[K] extends true | FlattenComponentProps ? K : M[K] extends { target: FlattenComponentProps | true; } | { target: false; nativeStyleToProp: Record; } ? K : never : never]?: string; }>; export type EnableCssInteropOptions> = Record | { target: false; nativeStyleToProp: { [K in (keyof Style & string) | "fill" | "stroke"]?: K extends FlattenComponentProps ? FlattenComponentProps | true : FlattenComponentProps; }; } | { target: FlattenComponentProps | true; nativeStyleToProp?: { [K in (keyof Style & string) | "fill" | "stroke"]?: K extends FlattenComponentProps ? FlattenComponentProps | true : FlattenComponentProps; }; }>; type FlattenComponentProps> = FlattenObjectKeys>; type FlattenObjectKeys, Depth extends number[] = [], MaxDepth extends number = 10, Key = keyof T> = Depth["length"] extends MaxDepth ? never : Key extends string ? unknown extends T[Key] ? Key | `${Key}.${string}` : NonNullable extends Record ? Key | `${Key}.${FlattenObjectKeys, [...Depth, 0]>}` : Key : never; export type JSXFunction = (type: React.ComponentType, props: Record | undefined | null, key?: React.Key, isStaticChildren?: boolean, __source?: unknown, __self?: unknown) => React.ReactNode; type OmitFirstTwo = T extends [any, any, ...infer R] ? R : never; export type JSXFunctionType = Parameters[0]; export type JSXFunctionProps = Parameters[1]; export type JSXFunctionRest = OmitFirstTwo>; export type StyleAttribute = string; export type PathTokens = string[]; export type Delayed = boolean; export type MoveTokenRecord = Record; export type StyleDeclaration = [Record] | [Record, PathTokens] | [RuntimeValueDescriptor, StyleAttribute] | [RuntimeValueDescriptor, PathTokens] | [RuntimeValueDescriptor, StyleAttribute | PathTokens, 1]; export type StyleDeclarationOrInline = StyleDeclaration | Record; export type StyleRuleSet = { [StyleRuleSetSymbol]: true; n?: StyleRule[]; i?: StyleRule[]; warnings?: ExtractionWarning[]; classNames?: string; variables?: boolean; container?: boolean; animation?: boolean; active?: boolean; hover?: boolean; focus?: boolean; }; export type RemappedClassName = { [StyleRuleSetSymbol]: "RemappedClassName"; classNames: string[]; }; export type RuntimeStyleRule = StyleRule | object; export type RuntimeStyleRuleSet = { normal: RuntimeStyleRule[]; inline: RuntimeStyleRule[]; important: RuntimeStyleRule[]; }; export type StyleRule = { [StyleRuleSymbol]: true; s: Specificity; d?: StyleDeclaration[]; media?: MediaQuery[]; variables?: Array<[string, RuntimeValueDescriptor]>; pseudoClasses?: PseudoClassesQuery; animations?: ExtractedAnimations; container?: Partial; containerQuery?: ExtractedContainerQuery[]; transition?: ExtractedTransition; requiresLayoutWidth?: boolean; requiresLayoutHeight?: boolean; attrs?: AttributeCondition[]; warnings?: ExtractionWarning[]; }; export type ProcessedStyleRules = (StyleRule & Required>) | Record; export type PropState = Effect & { initialRender: boolean; resetContext: boolean; isAnimated: boolean; sharedValues: Map>; animationNames: Set; animationWaitingOnLayout: boolean; }; export type PropAccumulator = { props: Record; state: PropState; target: string[]; resetContext: boolean; requiresLayout: boolean; delayedDeclarations: Extract>[]; variables: Map; isAnimated: boolean; animation?: Required; transition?: Required; containerNames: string[] | null; getWidth(): number; getHeight(): number; getFontSize(): number; getVariable(name?: string): RuntimeValueDescriptor; }; export type RuntimeStyle = RuntimeValueDescriptor | Record; export type RuntimeValueDescriptor = string | number | boolean | undefined | RuntimeFunction | RuntimeValueDescriptor[]; export type RuntimeFunction = [ {}, string ] | [ {}, string, undefined | RuntimeValueDescriptor[] ] | [ {}, string, undefined | RuntimeValueDescriptor[], 1 ]; export type RuntimeValue = string | number | boolean | undefined | ((acc: PropAccumulator) => RuntimeValue); export type SpecificityValue = number | undefined; export type Specificity = SpecificityValue[]; export type ExtractedContainer = { names?: string[] | false; type?: ContainerType; }; export type ExtractedContainerQuery = { name?: string | null; condition?: ContainerCondition; pseudoClasses?: PseudoClassesQuery; attrs?: AttributeCondition[]; }; export type ExtractedAnimations = { [K in keyof Animation]?: Animation[K][]; }; export type ExtractedTransition = { delay?: Time[]; duration?: Time[]; property?: (AnimatableCSSProperty | "none")[]; timingFunction?: EasingFunction[]; }; type AnimationPropertyKey = string; export type AnimationEasingFunction = EasingFunction | { type: "!PLACEHOLDER!"; }; export type AnimationFrame = [AnimationPropertyKey, RuntimeValueFrame[]]; export type ExtractedAnimation = { frames: AnimationFrame[]; easingFunctions?: AnimationEasingFunction[]; requiresLayoutWidth?: boolean; requiresLayoutHeight?: boolean; }; export type RuntimeValueFrame = { progress: number; value: RuntimeValueDescriptor; }; export type PseudoClassesQuery = { hover?: boolean; active?: boolean; focus?: boolean; }; export type StyleSheetRegisterCompiledOptions = { $compiled: true; rules?: Record; keyframes?: [string, ExtractedAnimation][]; rootVariables?: VariableRecord; universalVariables?: VariableRecord; rem?: number; flags?: Record; }; export type StyleSheetRegisterOptions = { declarations?: Record; keyframes?: Record; rootVariables?: VariableRecord; universalVariables?: VariableRecord; rem?: number; flags?: Record; }; export type ColorSchemeVariableValue = { light?: RuntimeValueDescriptor; dark?: RuntimeValueDescriptor; }; export type VariableRecord = Record; export type ContainerRecord = Record; export type Style = ViewStyle & TextStyle & ImageStyle; export type StyleProp = Style | StyleProp[] | undefined; export type KebabToCamelCase = S extends `${infer P1}-${infer P2}${infer P3}` ? `${Lowercase}${Uppercase}${KebabToCamelCase}` : Lowercase; export type ExtractionWarning = ExtractionWarningProperty | ExtractionWarningValue | ExtractionWarningFunctionValue; export type ExtractionWarningProperty = { type: "IncompatibleNativeProperty"; property: string; }; export type ExtractionWarningValue = { type: "IncompatibleNativeValue"; property: string; value: any; }; export type ExtractionWarningFunctionValue = { type: "IncompatibleNativeFunctionValue"; property: string; value: any; }; export type DarkMode = { type: "media"; } | { type: "class"; value: string; } | { type: "attribute"; value: string; }; export interface CssInteropStyleSheet { unstable_hook_onClassName?(callback: (c: string) => void): void; register(options: StyleSheetRegisterOptions): void; registerCompiled(options: StyleSheetRegisterCompiledOptions): void; getFlag(name: string): string | undefined; getGlobalStyle(name: string): StyleRuleSet | undefined; } type AttributeSelectorComponent = Extract; export type AttributeCondition = PropCondition | DataAttributeCondition; export type PropCondition = Omit & { operation?: AttributeSelectorComponent["operation"] | { operator: "empty" | "truthy"; }; }; export type DataAttributeCondition = Omit & { type: "data-attribute"; }; export type TransformProperty = "perspective" | "translateX" | "translateY" | "translateZ" | "scale" | "scaleX" | "scaleY" | "scaleZ" | "rotate" | "rotateX" | "rotateY" | "rotateZ" | "skewX" | "skewY" | "skewZ" | "matrix" | "matrix3d"; export type AnimatableCSSProperty = (keyof Style | "fill" | "stroke") & KebabToCamelCase<"background-color" | "border-bottom-color" | "border-bottom-left-radius" | "border-bottom-right-radius" | "border-bottom-width" | "border-color" | "border-left-color" | "border-left-width" | "border-radius" | "border-right-color" | "border-right-width" | "border-top-color" | "border-top-width" | "border-width" | "bottom" | "color" | "fill" | "flex" | "flex-basis" | "flex-grow" | "flex-shrink" | "font-size" | "font-weight" | "gap" | "height" | "left" | "letter-spacing" | "line-height" | "margin" | "margin-bottom" | "margin-left" | "margin-right" | "margin-top" | "max-height" | "max-width" | "min-height" | "min-width" | "object-position" | "opacity" | "order" | "padding" | "padding-bottom" | "padding-left" | "padding-right" | "padding-top" | "right" | "rotate" | "scale" | "stroke" | "text-decoration" | "text-decoration-color" | "top" | "transform" | "transform-origin" | "translate" | "vertical-align" | "visibility" | "width" | "word-spacing" | "z-index">; export {};