import React from 'react' import {ImageStyle, useWindowDimensions, View} from 'react-native' import {Image} from 'expo-image' import {msg, Plural, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {MAX_ALT_TEXT} from '#/lib/constants' import {enforceLen} from '#/lib/strings/helpers' import {isAndroid, isWeb} from '#/platform/detection' import {ComposerImage} from '#/state/gallery' import {AltTextCounterWrapper} from '#/view/com/composer/AltTextCounterWrapper' import {atoms as a, useTheme} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {DialogControlProps} from '#/components/Dialog' import * as TextField from '#/components/forms/TextField' import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo' import {Text} from '#/components/Typography' type Props = { control: Dialog.DialogOuterProps['control'] image: ComposerImage onChange: (next: ComposerImage) => void } export const ImageAltTextDialog = ({ control, image, onChange, }: Props): React.ReactNode => { const [altText, setAltText] = React.useState(image.alt) return ( { onChange({ ...image, alt: enforceLen(altText, MAX_ALT_TEXT, true), }) }}> ) } const ImageAltTextInner = ({ altText, setAltText, control, image, }: { altText: string setAltText: (text: string) => void control: DialogControlProps image: Props['image'] }): React.ReactNode => { const {_, i18n} = useLingui() const t = useTheme() const windim = useWindowDimensions() const imageStyle = React.useMemo(() => { const maxWidth = isWeb ? 450 : windim.width const source = image.transformed ?? image.source if (source.height > source.width) { return { resizeMode: 'contain', width: '100%', aspectRatio: 1, borderRadius: 8, } } return { width: '100%', height: (maxWidth / source.width) * source.height, borderRadius: 8, } }, [image, windim]) return ( Add alt text Descriptive alt text { setAltText(text) }} defaultValue={altText} multiline numberOfLines={3} autoFocus /> {altText.length > MAX_ALT_TEXT && ( Alt text will be truncated.{' '} )} {/* Maybe fix this later -h */} {isAndroid ? : null} ) }