# Search Input URL: /lynx/components/search-input Source: https://github.com/daangn/seed-design/blob/dev/docs/content/lynx/components/search-input.mdx 검색어를 입력하고 제출하는 입력 필드입니다. 화면 상단에서는 Search Bar와 함께 사용합니다. Lynx Engine 최소 버전: 3.6 사용 XElement: 사용 가능 버전: @seed-design/lynx-react@1.1.0, @seed-design/lynx-css@1.1.0 ## Preview ```tsx import "./styles"; import { SearchInput } from "@/components/ui/search-input"; export default function Example() { return ( ); } ``` 화면 상단에서 검색하는 경우에는 Search Input을 직접 배치하지 말고 [Search Bar](/lynx/components/search-bar)를 사용하세요. Search Bar는 Search Input을 App Bar에 Back·닫기 버튼과 함께 배치합니다. ## Installation - npm: npx @seed-design/cli@latest add ui:search-input - pnpm: pnpm dlx @seed-design/cli@latest add ui:search-input - yarn: yarn dlx @seed-design/cli@latest add ui:search-input - bun: bun x @seed-design/cli@latest add ui:search-input ## Usage ```tsx import { SearchInput } from "@/components/ui/search-input"; ``` ```tsx ``` ## Props `placeholder`, `accessibility-label`, `clearButtonLabel`, `inputProps`를 제외한 prop은 `SearchInput.Root`로 전달됩니다. `accessibility-label`(기본값 "검색")은 입력 요소에, `clearButtonLabel`(기본값 "지우기")은 Clear 버튼에 지정됩니다. 입력 요소에 넘길 `maxlength` 등은 `inputProps`로 전달하세요. ### `SearchInput.Root` Snippet이 감싸는 `@seed-design/lynx-react`의 `SearchInput.Root`입니다. 레이아웃을 직접 조합하려면 `SearchInput.Root`·`SearchInput.Input`·`SearchInput.ClearButton`을 함께 사용하세요. ## Examples ### Submit 키보드의 검색 키를 누르면 `onSubmit`이 현재 값과 함께 호출됩니다. Lynx ``의 `bindconfirm` 이벤트를 사용합니다. 제출한 뒤에는 입력의 focus를 해제해 키보드를 내립니다. 제출 뒤에도 계속 입력하게 하려면 `blurOnSubmit={false}`를 사용하세요. 이때 Lynx ``의 `confirm-enter`를 켜서 native 입력이 제출 뒤 스스로 focus를 해제하지 않게 합니다. ```tsx import "./styles"; import { useState } from "@lynx-js/react"; import { SearchInput } from "@/components/ui/search-input"; export default function Example() { const [value, setValue] = useState(""); const [submittedValue, setSubmittedValue] = useState(null); function handleSubmit(nextValue: string) { "background only"; setSubmittedValue(nextValue); } return ( {submittedValue === null ? "아직 검색하지 않았습니다." : `검색한 값: ${submittedValue}`} ); } ``` 이 예제는 네이티브 키보드 동작을 사용합니다. QR 코드 패널에서 Lynx Explorer로 실행한 뒤 입력 영역을 탭하고 키보드의 검색 키를 눌러 확인해 주세요. ### Clear Button Clear 버튼은 값이 있을 때만 렌더링되고, 누르면 값을 비웁니다. `value`를 넘기지 않은 uncontrolled 상태에서도 동작하며, `onValueChange`가 빈 문자열과 함께 호출됩니다. 누르는 동안 Scale Feedback으로 살짝 줄어듭니다. 입력에 focus가 있었다면 지운 뒤에도 유지하고, 없었다면 새로 주지 않습니다. Clear 버튼은 `ignore-focus`로 탭이 입력의 focus를 가져가지 않게 합니다. ## Accessibility - 화면에 보이는 레이블이 없으므로 입력과 Clear 버튼에 레이블이 필요합니다. Snippet은 기본값 "검색"·"지우기"를 지정하며, `accessibility-label`·`clearButtonLabel`로 바꿀 수 있습니다. compound 컴포넌트를 직접 쓸 때 `SearchInput.Input`과 `SearchInput.ClearButton`에 `accessibility-label`이 없으면 개발 콘솔에 경고가 출력됩니다. - Clear 버튼은 `accessibility-traits="button"`으로 알립니다. - 콘텐츠를 누르거나 스크롤할 때 키보드를 내리는 동작은 Search Input이 아닌 화면이 담당합니다. [Search Bar](/lynx/components/search-bar#keyboard) 예제를 참고하세요. ## 웹 버전과의 차이 - 제출은 Enter 키의 `keydown` 대신 Lynx ``의 `bindconfirm`(키보드의 검색 키)으로 처리합니다. - `SearchInput`은 `value`·`defaultValue`·`onValueChange`·`name`과 제출 prop만 받습니다. `disabled`·`readOnly`·`invalid`·`required`는 지원하지 않습니다. - `role="search"`에 대응하는 Lynx 접근성 역할이 없어 Root에는 역할을 지정하지 않습니다.