import type {
DebugProp,
ThemeName,
GroupNames,
Role,
TamaguiComponentState,
} from '../types'
export type TamaguiComponentPropsBaseBase = {
target?: string
htmlFor?: string
/**
* When truthy passes through all props to a single child element, and avoids rendering its own element.
* Must pass just one child React element that will receive all the props.
*
* The option "except-style" will avoid passing any style related props.
*
* The option "web" will map all React Native style props to web props (onPress becomes onClick).
*
* The option "except-style-web" combines the except-style and web options.
*
*/
asChild?: boolean | 'except-style' | 'except-style-web' | 'web'
dangerouslySetInnerHTML?: { __html: string }
children?: any | any[]
debug?: DebugProp
disabled?: boolean
/**
* Same as the web className property, useful for applying styles from CSS on web only
*/
className?: string
/**
* If given a theme it will only apply to this element, instead of passing down to children
*/
themeShallow?: boolean
/**
* Same as the web id property for setting a uid on an element
*/
id?: string
/**
* Controls the rendered element on web.
* - String: renders as that HTML element (e.g., `render="button"`)
* - JSX Element: clones element with merged props (e.g., `render={}`)
* - Function: full control with props and state (e.g., `render={(props) => }`)
*/
render?:
| keyof HTMLElementTagNameMap
| (string & {})
| React.ReactElement
| ((
props: Record & { ref?: React.Ref },
state: TamaguiComponentState
) => React.ReactElement)
/**
* Applies a theme to this element
*/
theme?: ThemeName | null
/**
* Marks this component as a group for use in styling children based on parents named group
* See: https://tamagui.dev/docs/intro/props
*/
group?: GroupNames | boolean
/**
* Works only alongside group, when children of the group are using container based sizing on native you can hide them until parent is measured.
* See: https://tamagui.dev/docs/intro/props
*/
untilMeasured?: 'hide' | 'show'
/**
* Equivalent to "name" property on styled() for automatically applying a theme
*/
componentName?: string
/**
* Used for controlling the order of focus with keyboard or assistive device enavigation
* See https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex
*/
tabIndex?: string | number
/**
* Equivalent to role="" attribute on web for accessibility
*/
role?: Role
/**
* Disable all compiler optimization
*/
disableOptimization?: boolean
/**
* Forces the pseudo style state to be on
*/
forceStyle?: 'hover' | 'press' | 'focus' | 'focusVisible' | 'focusWithin'
/**
* Disables className output of styles, instead using only inline styles
*/
disableClassName?: boolean
/**
* Adds some area outside the typical bounds of the component for touch actions to register.
* Tamagui uses Pressable internally so it supports `number | Insets` rather than just `Insets`
*/
hitSlop?: number | Insets | null
}
export interface Insets {
top?: number
left?: number
bottom?: number
right?: number
}