diff options
author | Minseo Lee <itoupluk427@gmail.com> | 2024-03-06 19:38:48 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-06 19:38:48 +0900 |
commit | f3db23a3b14e9444cb499c727b9d62c414e5a840 (patch) | |
tree | 4b9f39447c7c53d2baf3dd4029b2f8ea30e3c9b1 /src/components/Menu/types.ts | |
parent | 0c6a82062f9c9c47338fe50f0ef37a1c068939c2 (diff) | |
parent | eb298d2e60a0ddf26ebaf8f27373418bbf7769e3 (diff) | |
download | voidsky-f3db23a3b14e9444cb499c727b9d62c414e5a840.tar.zst |
Merge branch 'bluesky-social:main' into patch-3
Diffstat (limited to 'src/components/Menu/types.ts')
-rw-r--r-- | src/components/Menu/types.ts | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/components/Menu/types.ts b/src/components/Menu/types.ts new file mode 100644 index 000000000..2f52e6390 --- /dev/null +++ b/src/components/Menu/types.ts @@ -0,0 +1,72 @@ +import React from 'react' +import {GestureResponderEvent, PressableProps} from 'react-native' + +import {Props as SVGIconProps} from '#/components/icons/common' +import * as Dialog from '#/components/Dialog' +import {TextStyleProp, ViewStyleProp} from '#/alf' + +export type ContextType = { + control: Dialog.DialogOuterProps['control'] +} + +export type TriggerProps = ViewStyleProp & { + children(props: TriggerChildProps): React.ReactNode + label: string +} +export type TriggerChildProps = + | { + isNative: true + control: Dialog.DialogOuterProps['control'] + state: { + /** + * Web only, `false` on native + */ + hovered: false + focused: boolean + pressed: boolean + } + /** + * We don't necessarily know what these will be spread on to, so we + * should add props one-by-one. + * + * On web, these properties are applied to a parent `Pressable`, so this + * object is empty. + */ + props: { + onPress: () => void + onFocus: () => void + onBlur: () => void + onPressIn: () => void + onPressOut: () => void + accessibilityLabel: string + } + } + | { + isNative: false + control: Dialog.DialogOuterProps['control'] + state: { + hovered: boolean + focused: boolean + /** + * Native only, `false` on web + */ + pressed: false + } + props: {} + } + +export type ItemProps = React.PropsWithChildren< + Omit<PressableProps, 'style'> & + ViewStyleProp & { + label: string + onPress: (e: GestureResponderEvent) => void + } +> + +export type ItemTextProps = React.PropsWithChildren<TextStyleProp & {}> +export type ItemIconProps = React.PropsWithChildren<{ + icon: React.ComponentType<SVGIconProps> + position?: 'left' | 'right' +}> + +export type GroupProps = React.PropsWithChildren<ViewStyleProp & {}> |