Segmented Control
서로 배타적인 옵션 중 하나를 선택할 수 있게 해주는 컴포넌트입니다. 2-5개의 밀접하게 관련된 선택지를 제공할 때 사용됩니다.
import { SegmentedControl, SegmentedControlItem } from "seed-design/ui/segmented-control";
export default function SegmentedControlPreview() {
return (
<SegmentedControl defaultValue="Hot" aria-label="Sort by">
<SegmentedControlItem value="Hot">Hot</SegmentedControlItem>
<SegmentedControlItem value="New">New</SegmentedControlItem>
</SegmentedControl>
);
}Installation
npx @seed-design/cli@latest add ui:segmented-controlProps
SegmentedControl
value와 defaultValue 중 적어도 하나를 제공해야 합니다.
Prop
Type
SegmentedControlItem
Prop
Type
Examples
Disabled
import { VStack } from "@seed-design/react";
import { SegmentedControl, SegmentedControlItem } from "seed-design/ui/segmented-control";
export default function SegmentedControlPreview() {
return (
<VStack align="center" gap="spacingY.componentDefault">
<SegmentedControl defaultValue="Hot" disabled aria-label="Sort by">
<SegmentedControlItem value="Hot">Hot</SegmentedControlItem>
<SegmentedControlItem value="New">New</SegmentedControlItem>
</SegmentedControl>
<SegmentedControl defaultValue="Marinara" aria-label="Pasta">
<SegmentedControlItem value="Marinara">Marinara</SegmentedControlItem>
<SegmentedControlItem value="Alfredo" disabled>
Alfredo
</SegmentedControlItem>
<SegmentedControlItem value="Pesto" disabled>
Pesto
</SegmentedControlItem>
<SegmentedControlItem value="Carbonara">Carbonara</SegmentedControlItem>
<SegmentedControlItem value="Bolognese">Bolognese</SegmentedControlItem>
</SegmentedControl>
</VStack>
);
}Notification
import { ActionButton, VStack } from "@seed-design/react";
import { useState } from "react";
import { SegmentedControl, SegmentedControlItem } from "seed-design/ui/segmented-control";
export default function SegmentedControlNotification() {
const [sortBy, setSortBy] = useState("monthly");
const [hasSeenAnnual, setHasSeenAnnual] = useState(false);
return (
<VStack align="center" gap="spacingY.componentDefault">
<SegmentedControl
aria-label="Billing Method"
value={sortBy}
onValueChange={(value) => {
setSortBy(value);
if (value === "annual") setHasSeenAnnual(true);
}}
>
<SegmentedControlItem value="monthly">Monthly</SegmentedControlItem>
<SegmentedControlItem value="annual" notification={!hasSeenAnnual}>
Annual
</SegmentedControlItem>
<SegmentedControlItem value="enterprise">Enterprise Custom</SegmentedControlItem>
</SegmentedControl>
<ActionButton size="xsmall" disabled={!hasSeenAnnual} onClick={() => setHasSeenAnnual(false)}>
Reset Notification
</ActionButton>
</VStack>
);
}Long Label
import { SegmentedControl, SegmentedControlItem } from "seed-design/ui/segmented-control";
export default function SegmentedControlLongLabel() {
return (
<SegmentedControl defaultValue="price" aria-label="정렬 기준">
<SegmentedControlItem value="price">가격 높은 순</SegmentedControlItem>
<SegmentedControlItem value="discount">할인율 높은 순</SegmentedControlItem>
<SegmentedControlItem value="popularity">인기 많은 순</SegmentedControlItem>
</SegmentedControl>
);
}Fixed Width
SegmentedControl의 style prop에 width를 제공해서 직접 너비를 설정할 수 있습니다.
import { VStack } from "@seed-design/react";
import { SegmentedControl, SegmentedControlItem } from "seed-design/ui/segmented-control";
export default function SegmentedControlFixedWidth() {
return (
<VStack align="center" gap="spacingY.componentDefault">
<SegmentedControl defaultValue="new" style={{ width: "500px" }} aria-label="Sort by">
<SegmentedControlItem value="new">New</SegmentedControlItem>
<SegmentedControlItem value="hot">Hot</SegmentedControlItem>
</SegmentedControl>
<SegmentedControl defaultValue="oneway" style={{ width: "400px" }} aria-label="Trip Type">
<SegmentedControlItem value="oneway">One Way Trip</SegmentedControlItem>
<SegmentedControlItem notification value="round">
Round Trip
</SegmentedControlItem>
<SegmentedControlItem notification value="multi">
Multi-City Journey
</SegmentedControlItem>
</SegmentedControl>
</VStack>
);
}Last updated on