'use client'; /* eslint-disable jsdoc/require-jsdoc */ import * as React from 'react'; import { callMultiple } from '../../lib/callMultiple'; import { stopPropagation } from '../../lib/utils'; import { RootComponent, type RootComponentProps } from '../RootComponent/RootComponent'; import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden'; import styles from './InputLike.module.css'; export interface InputLikeProps extends RootComponentProps { length: number; index: number; value?: string; label?: string; onElementSelect?: (index: number) => void; } const MASK_SYMBOL = String.fromCharCode(0x2007); function getMaskElements(length: number) { const result = []; for (let index = 0; index < length; index += 1) { result.push( {MASK_SYMBOL} , ); } return result; } export const InputLike = ({ value, length, index, onElementSelect, onFocus, label, readOnly, onKeyDown, ...restProps }: InputLikeProps) => { const handleElementSelect = React.useCallback( (event: React.MouseEvent) => { stopPropagation(event); onElementSelect?.(index); }, [index, onElementSelect], ); return ( {label && {label}} {value?.slice(0, length - 1)} {value?.slice(length - 1) && ( {value.slice(length - 1)} )} {getMaskElements(length - (value?.length ?? 0))} ); };