'use client'; import * as React from 'react'; import { classNames } from '@vkontakte/vkjs'; import { useConfigDirection } from '../../hooks/useConfigDirection'; import { useGlobalEventListener } from '../../hooks/useGlobalEventListener'; import { useDOM } from '../../lib/dom'; import { type CSSCustomProperties } from '../../types'; import { IconButton } from '../IconButton/IconButton'; import { Tappable } from '../Tappable/Tappable'; import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden'; import { type RemovableIosRenderProps, type RemovableProps } from './Removable'; import styles from './Removable.module.css'; /* eslint-disable jsdoc/require-jsdoc */ interface RemovableIosOwnProps extends RemovableProps { indent?: boolean; removePlaceholderString?: string; children?: React.ReactNode | ((renderProps: RemovableIosRenderProps) => React.ReactNode); } /* eslint-enable jsdoc/require-jsdoc */ const RemovableIosWithRemove = ({ onRemove, removePlaceholder, removePlaceholderString, children: childrenProp, toggleButtonTestId, removeButtonTestId, disabled, }: Omit) => { const direction = useConfigDirection(); const isRtl = direction === 'rtl'; const { window } = useDOM(); const removeButtonRef = React.useRef(null); const disabledRef = React.useRef(true); const [removeOffset, updateRemoveOffset] = React.useState(0); useGlobalEventListener( window, 'click', () => { if (removeOffset > 0) { updateRemoveOffset(0); } }, { capture: true }, ); const onRemoveTransitionEnd = () => { if (removeOffset > 0) { removeButtonRef?.current?.focus(); } else { disabledRef.current = true; } }; const onRemoveActivateClick = (e: React.MouseEvent) => { e.stopPropagation(); if (!removeButtonRef.current) { return; } const { offsetWidth } = removeButtonRef.current; disabledRef.current = false; updateRemoveOffset(offsetWidth); }; const style: CSSCustomProperties = { '--vkui_internal_Removable_remove_offset': String(removeOffset ?? 0), }; return (
0 || disabled} data-testid={toggleButtonTestId} > {removePlaceholderString} {typeof childrenProp === 'function' ? childrenProp({ isRemoving: removeOffset > 0 }) : childrenProp} {removePlaceholder}
); }; const RemovableIosWithIndent = ({ children: childrenProp, }: Pick) => { return (
{typeof childrenProp === 'function' ? childrenProp({ isRemoving: false }) : childrenProp}
); }; const RemovableIos = ({ indent, children, ...restProps }: RemovableIosOwnProps) => { return indent ? ( {children} ) : ( {children} ); }; export { RemovableIos };