'use client'; import * as React from 'react'; import { classNames } from '@vkontakte/vkjs'; import { useAdaptivity } from '../../hooks/useAdaptivity'; import { useExternRef } from '../../hooks/useExternRef'; import type { HTMLAttributesWithRootRef } from '../../types'; import { Removable, type RemovableProps } from '../Removable/Removable'; import { RootComponent } from '../RootComponent/RootComponent'; import styles from './FormLayoutGroup.module.css'; const sizeYClassNames = { none: classNames(styles.sizeYNone, 'vkuiInternalFormLayoutGroup--sizeY-none'), compact: classNames(styles.sizeYCompact, 'vkuiInternalFormLayoutGroup--sizeY-compact'), }; export interface FormLayoutGroupProps extends HTMLAttributesWithRootRef, RemovableProps { /** * Направление отображения элементов формы. */ mode?: 'vertical' | 'horizontal'; /** * Только для режима horizontal. Дает возможность удалить всю группу `FormItem`. * * Режим `indent` предназначен для визуального отступа. */ removable?: boolean | 'indent'; /** * Дает возможность склеить несколько `FormItem`. */ segmented?: boolean; } /** * @see https://vkui.io/components/form-layout-group */ export const FormLayoutGroup = ({ children, mode = 'vertical', removable, segmented, removePlaceholder = 'Удалить', onRemove, getRootRef, disabled, ...restProps }: FormLayoutGroupProps): React.ReactNode => { const { sizeY = 'none' } = useAdaptivity(); const isRemovable = removable && mode === 'horizontal'; const rootEl = useExternRef(getRootRef); return ( {isRemovable ? ( { if (rootEl?.current) { onRemove?.(e, rootEl.current); } }} disabled={disabled} indent={removable === 'indent'} > {children} ) : ( {children} )} ); };