# List URL: /react/components/list Source: https://github.com/daangn/seed-design/blob/dev/docs/content/react/components/list.mdx 가로 행으로 구성된 콘텐츠를 표현하는 컴포넌트입니다. 사용 가능 버전: @seed-design/react@0.2.3, @seed-design/css@0.2.3 ## Preview ```tsx import { List, ListDivider, ListItem } from "seed-design/ui/list"; import { ListHeader } from "seed-design/ui/list-header"; import { IconILowercaseSerifCircleLine, IconPersonCircleLine, } from "@karrotmarket/react-monochrome-icon"; import { Icon, VStack } from "@seed-design/react"; export default function ListPreview() { return ( 리스트 헤더 } />} title="아이콘이 있는 리스트 아이템" detail="부가 정보가 포함된 설명" suffix={} />} /> ); } ``` ## Installation - npm: npx @seed-design/cli@latest add ui:list - pnpm: pnpm dlx @seed-design/cli@latest add ui:list - yarn: yarn dlx @seed-design/cli@latest add ui:list - bun: bun x @seed-design/cli@latest add ui:list ## Usage ```tsx import { ListHeader } from "seed-design/ui/list-header"; import { List, ListItem } from "seed-design/ui/list"; 리스트 헤더 ``` ## Props ### `ListHeader` ### `List` [`VStackProps`](/react/components/layout/v-stack#props)와 동일합니다. ### List Items [`DividerProps`](/react/components/divider#props)와 동일하나, 기본적으로 `
  • `로 렌더링됩니다. `List`를 `fieldset` 등으로 바꿔 사용하는 경우 `ListDivider` 역시 적절한 태그로 교체해주세요. ## Examples ### Using `ListHeader` `ListHeader`는 `List` 밖에 위치합니다. ```tsx import { List, ListButtonItem } from "seed-design/ui/list"; import { ListHeader } from "seed-design/ui/list-header"; import { ActionButton } from "seed-design/ui/action-button"; import { IconChevronRightLine, IconLockLine, IconPersonCircleLine, IconQuestionmarkCircleFill, } from "@karrotmarket/react-monochrome-icon"; import { Divider, Icon, PrefixIcon, VStack } from "@seed-design/react"; export default function () { return ( variant="mediumWeak" } />} suffix={} size="18px" />} /> } />} suffix={} size="x4_5" />} /> variant="boldSolid" } />} suffix={} size="18px" />} /> } />} suffix={} size="x4_5" />} />

    List Header with Action Button

    } /> 도움말
    } />} suffix={} size="18px" />} /> } />} suffix={} size="x4_5" />} />
    ); } ``` ### Affixes (Prefix/Suffix) ```tsx import { IconArrowUpBracketDownFill, IconILowercaseSerifCircleLine, } from "@karrotmarket/react-monochrome-icon"; import { Icon } from "@seed-design/react"; import { useState } from "react"; import { ActionButton } from "seed-design/ui/action-button"; import { Avatar } from "seed-design/ui/avatar"; import { IdentityPlaceholder } from "seed-design/ui/identity-placeholder"; import { List, ListDivider, ListItem } from "seed-design/ui/list"; import { ToggleButton } from "seed-design/ui/toggle-button"; export default function ListAffixes() { const [isToggleButtonPressed, setIsToggleButtonPressed] = useState(false); return ( } /> } title="Prefix에 Avatar 넣기" detail="Amet elit ullamco magna." /> } />} /> 액션 버튼 } /> } /> } /> {isToggleButtonPressed ? "선택됨" : "토글 버튼"} } /> ); } ``` ### Clickable List Items `ListButtonItem` 또는 `ListLinkItem`를 사용해서 리스트 항목 전체를 클릭 가능하도록 만들 수 있습니다. `prefix` 또는 `suffix`에 클릭할 수 있는 요소를 포함하는 경우 `z-index: 1`, `position: relative`, `isolation: isolate` 등의 스타일을 적용하여 클릭 이벤트가 리스트 항목과 별개로 동작하도록 하세요. `ActionButton`, `ToggleButton` 등 SEED React 컴포넌트는 추가적으로 스타일을 적용하지 않아도 됩니다. ```tsx import { IconArrowUpRightLine, IconCheckmarkFill, IconChevronRightLine, IconPenHorizlineFill, IconPlusFill, IconSquare2StackedFill, } from "@karrotmarket/react-monochrome-icon"; import { PrefixIcon, Icon, Box } from "@seed-design/react"; import { useCallback, useState } from "react"; import { List, ListDivider, ListItem, ListButtonItem, ListLinkItem } from "seed-design/ui/list"; import { ActionButton } from "seed-design/ui/action-button"; import { ToggleButton } from "seed-design/ui/toggle-button"; const href = "https://www.daangn.com"; export default function ListClickable() { const [isSubscribed, setIsSubscribed] = useState(false); const [isCopied, setIsCopied] = useState(false); const onCopyClick = useCallback(() => { navigator.clipboard.writeText(href); setIsCopied(true); setTimeout(() => setIsCopied(false), 2000); }, []); return ( alert("편집 클릭됨")} > } /> 편집 } /> alert("리스트 아이템 클릭됨")} suffix={ <> : } /> {isSubscribed ? "모아보는 중" : "모아보기"} } /> } /> alert("리스트 아이템 클릭됨")} suffix={ <> } /> } /> : } /> {isCopied ? "복사됨" : "URL 복사"} } /> } href={href} target="_blank" rel="noreferrer" /> ); } ``` ### `input`s in List Items `ListSwitchItem`, `ListCheckItem`, `ListRadioItem`을 사용해서 리스트 항목에 `input` 요소를 포함할 수 있습니다. 이때, [Switchmark](/react/components/switch#using-switchmark), [Checkmark](/react/components/checkbox#using-checkmark) 또는 [Radiomark](/react/components/radio-group#using-radiomark)와 같은 컨트롤 요소를 `prefix`나 `suffix` 영역에 넣어 사용합니다. ```tsx import { IconTrashcanLine } from "@karrotmarket/react-monochrome-icon"; import { IconSparkle2 } from "@karrotmarket/react-multicolor-icon"; import { Icon } from "@seed-design/react"; import { List, ListDivider, ListSwitchItem } from "seed-design/ui/list"; import { Switchmark } from "seed-design/ui/switch"; export default function ListSwitch() { return ( } />} suffix={} /> } />} suffix={} defaultChecked /> ); } ``` ```tsx import { Badge, HStack } from "@seed-design/react"; import { List, ListDivider, ListCheckItem } from "seed-design/ui/list"; import { Checkmark } from "seed-design/ui/checkbox"; export default function ListCheckbox() { return ( 알림 수신 동의 권장 } detail="푸시 알림을 받으시겠습니까?" suffix={} defaultChecked /> } title="마케팅 정보 수신 동의" detail="마케팅 정보를 받으시겠습니까?" defaultChecked /> } title="Ghost Variant" /> ); } ``` ```tsx import { RadioGroup } from "@seed-design/react/primitive"; import { List, ListDivider, ListRadioItem } from "seed-design/ui/list"; import { Radiomark } from "seed-design/ui/radio-group"; export default function ListRadio() { return ( } /> } value="option2" title="옵션 2" detail="두 번째 선택지" /> } value="option3" title="옵션 3" detail="세 번째 선택지" /> ); } ``` ### Accessibility `List`는 기본적으로 `