From 6ec259a0e71174651bae95d4628138bf6fd68742 Mon Sep 17 00:00:00 2001 From: kj_sh604 Date: Sun, 15 Mar 2026 16:19:35 -0400 Subject: refactor: packages/ --- packages/excalidraw/components/TextField.tsx | 112 +++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 packages/excalidraw/components/TextField.tsx (limited to 'packages/excalidraw/components/TextField.tsx') diff --git a/packages/excalidraw/components/TextField.tsx b/packages/excalidraw/components/TextField.tsx new file mode 100644 index 0000000..c5bdc82 --- /dev/null +++ b/packages/excalidraw/components/TextField.tsx @@ -0,0 +1,112 @@ +import type { KeyboardEvent } from "react"; +import { + forwardRef, + useRef, + useImperativeHandle, + useLayoutEffect, + useState, +} from "react"; +import clsx from "clsx"; + +import "./TextField.scss"; +import { Button } from "./Button"; +import { eyeIcon, eyeClosedIcon } from "./icons"; + +type TextFieldProps = { + onChange?: (value: string) => void; + onClick?: () => void; + onKeyDown?: (event: KeyboardEvent) => void; + + readonly?: boolean; + fullWidth?: boolean; + selectOnRender?: boolean; + + icon?: React.ReactNode; + label?: string; + className?: string; + placeholder?: string; + isRedacted?: boolean; +} & ({ value: string } | { defaultValue: string }); + +export const TextField = forwardRef( + ( + { + onChange, + label, + fullWidth, + placeholder, + readonly, + selectOnRender, + onKeyDown, + isRedacted = false, + icon, + className, + ...rest + }, + ref, + ) => { + const innerRef = useRef(null); + + useImperativeHandle(ref, () => innerRef.current!); + + useLayoutEffect(() => { + if (selectOnRender) { + // focusing first is needed because vitest/jsdom + innerRef.current?.focus(); + innerRef.current?.select(); + } + }, [selectOnRender]); + + const [isTemporarilyUnredacted, setIsTemporarilyUnredacted] = + useState(false); + + return ( +
{ + innerRef.current?.focus(); + }} + > + {icon} + {label &&
{label}
} +
+ onChange?.(event.target.value)} + onKeyDown={onKeyDown} + /> + {isRedacted && ( + + )} +
+
+ ); + }, +); -- cgit v1.2.3