import type { FrontendHTMLTag, FrontendStaticConfig } from '@tamagui/core/internal-runtime'; import type { AriaAttributes, ComponentPropsWithoutRef, CSSProperties, FunctionComponent, HTMLAttributes, ReactElement, ReactNode, Ref as ReactRef } from 'react'; import type { PressableProps, StyleProp, TextInstance as ReactNativeText, TextProps as ReactNativeTextProps, TextStyle, ViewInstance as ReactNativeView, ViewProps as ReactNativeViewProps, ViewStyle } from '@tamagui/react-native-types'; type WebEventProps = { onMouseEnter?: HTMLAttributes['onMouseEnter']; onMouseLeave?: HTMLAttributes['onMouseLeave']; onMouseDown?: HTMLAttributes['onMouseDown']; onMouseUp?: HTMLAttributes['onMouseUp']; onMouseMove?: HTMLAttributes['onMouseMove']; onMouseOver?: HTMLAttributes['onMouseOver']; onMouseOut?: HTMLAttributes['onMouseOut']; onFocus?: HTMLAttributes['onFocus']; onBlur?: HTMLAttributes['onBlur']; onClick?: HTMLAttributes['onClick']; onDoubleClick?: HTMLAttributes['onDoubleClick']; onContextMenu?: HTMLAttributes['onContextMenu']; onWheel?: HTMLAttributes['onWheel']; onKeyDown?: HTMLAttributes['onKeyDown']; onKeyUp?: HTMLAttributes['onKeyUp']; onChange?: HTMLAttributes['onChange']; onInput?: HTMLAttributes['onInput']; onBeforeInput?: HTMLAttributes['onBeforeInput']; onScroll?: HTMLAttributes['onScroll']; onCopy?: HTMLAttributes['onCopy']; onCut?: HTMLAttributes['onCut']; onPaste?: HTMLAttributes['onPaste']; onDrag?: HTMLAttributes['onDrag']; onDragStart?: HTMLAttributes['onDragStart']; onDragEnd?: HTMLAttributes['onDragEnd']; onDragEnter?: HTMLAttributes['onDragEnter']; onDragLeave?: HTMLAttributes['onDragLeave']; onDragOver?: HTMLAttributes['onDragOver']; onDrop?: HTMLAttributes['onDrop']; onPointerDown?: HTMLAttributes['onPointerDown']; onPointerMove?: HTMLAttributes['onPointerMove']; onPointerUp?: HTMLAttributes['onPointerUp']; onPointerCancel?: HTMLAttributes['onPointerCancel']; }; type TailwindComponentState = { unmounted: boolean | 'should-enter'; disabled?: boolean; hover?: boolean; press?: boolean; pressIn?: boolean; focus?: boolean; focusVisible?: boolean; focusWithin?: boolean; }; type TailwindCommonProps = AriaAttributes & WebEventProps & { target?: string; htmlFor?: string; asChild?: boolean | 'except-style' | 'except-style-web' | 'web'; dangerouslySetInnerHTML?: { __html: string; }; children?: ReactNode; debug?: boolean | 'break' | 'verbose' | 'visualize' | 'profile'; disabled?: boolean; themeShallow?: boolean; id?: string; render?: keyof HTMLElementTagNameMap | (string & {}) | ReactElement | ((props: Record & { ref?: ReactRef; }, state: TailwindComponentState) => ReactElement); theme?: string | null; group?: string | boolean; container?: boolean | string; untilMeasured?: 'hide' | 'show'; name?: string; tabIndex?: string | number; role?: HTMLAttributes['role']; disableOptimization?: boolean; forceStyle?: 'hover' | 'press' | 'focus' | 'focusVisible' | 'focusWithin'; disableClassName?: boolean; hitSlop?: number | { top?: number; left?: number; bottom?: number; right?: number; } | null; animatedBy?: string | null; onPress?: PressableProps['onPress']; onLongPress?: PressableProps['onLongPress']; onPressIn?: PressableProps['onPress']; onPressOut?: PressableProps['onPress']; }; type LooseCombinedObjects = A | B | (A & B); export type TailwindViewNonStyleProps = Omit & TailwindCommonProps & { style?: StyleProp>; }; export type TailwindTextNonStyleProps = Omit & TailwindCommonProps & { style?: StyleProp>; }; type MeasureOnSuccessCallback = (x: number, y: number, width: number, height: number, pageX: number, pageY: number) => void; export interface TailwindElementMethods { measure(callback: MeasureOnSuccessCallback): void; measureInWindow(callback: (x: number, y: number, width: number, height: number) => void): void; measureLayout(relativeToNativeNode: ReactNativeView | HTMLElement, onSuccess: (left: number, top: number, width: number, height: number) => void, onFail?: () => void): void; focus(): void; blur(): void; } export type TailwindViewElement = (HTMLElement & TailwindElementMethods) | ReactNativeView; export type TailwindTextElement = (HTMLElement & TailwindElementMethods) | ReactNativeText; /** * The complete styling surface of a `@tamagui/tailwind` component. * * Everything else a component accepts is ordinary behavior: children, refs, * accessibility, events, ids, and the raw platform `style` escape hatch, all * inherited from the shared non-style prop types. Tamagui inline style props * (`padding`, `bg`, shorthands, state/media clauses, theme style props) are * deliberately absent — that authoring syntax belongs to `@tamagui/core`. */ export type TailwindStyleProps = { className?: string; }; /** `true`/`false` matchers become a boolean prop; every other matcher is its own literal. */ type VariantAcceptedValue = Key extends 'true' | 'false' ? boolean : Key; /** * Finite variant inference: one optional prop per variant, accepting exactly the * matchers that variant declares. It never reaches core's style prop graph. */ export type TailwindVariantProps = Variants extends object ? { [Key in keyof Variants]?: VariantAcceptedValue; } : {}; /** Variant values are class strings — the same authoring syntax as `className`. */ export type TailwindVariantDefinitions = { [variantName: string]: { [matcher: string]: string; }; }; export type TailwindStyledOptions = { displayName?: string; variants?: Variants; defaultVariants?: TailwindVariantProps; }; export interface TailwindComponent extends FunctionComponent; }> { staticConfig: FrontendStaticConfig; /** phantom carrier so `styled()` can recover the parts of a parent component */ __tailwind?: { ref: Ref; props: NonStyleProps; variants: VariantProps; }; } export type GetTailwindRef = Component extends TailwindComponent ? Ref : any; export type GetTailwindNonStyleProps = Component extends TailwindComponent ? Props : {}; export type GetTailwindVariantProps = Component extends TailwindComponent ? Variants : {}; export type TailwindView = TailwindComponent; export type TailwindText = TailwindComponent; export type TailwindViewProps = TailwindViewNonStyleProps & TailwindStyleProps; export type TailwindTextProps = TailwindTextNonStyleProps & TailwindStyleProps; /** * One tag's props: the element's own DOM contract plus the shared Tamagui * behavior props, with `className` the only styling input. Tamagui non-style * props win where both name the same thing, matching the regular `html`. */ type TailwindHTMLProps = Omit, 'className' | 'style' | keyof TailwindCommonProps> & TailwindCommonProps & { style?: StyleProp>; }; /** * The semantic elements, authored in Tailwind classes. Same tags and same * element defaults as `html` from `tamagui`; only the styling syntax differs. */ export type TailwindHTML = { [Tag in FrontendHTMLTag]: TailwindComponent>; }; export {}; //# sourceMappingURL=types.d.ts.map