# Component/InputGroup > Props: component-inputgroup.props.txt ## Examples ### Amount With Currency Dropdown이 뒤에 오는 조합. 값을 입력하는 칸에 `flex`를 주면 Dropdown은 내용 폭만 차지한다. ```tsx { render: function Render(args) { const [currency, setCurrency] = useState('krw'); return ; }, args: { width: 320 }, parameters: { docs: { description: { story: 'Dropdown이 뒤에 오는 조합. 값을 입력하는 칸에 `flex`를 주면 Dropdown은 내용 폭만 차지한다.' } } } } ``` ### Base ```tsx { render: args => , args: { width: 320 } } ``` ### Conditional Segment `{condition && }` 형태의 조건부 세그먼트는 구분선 개수에 그대로 반영된다. ```tsx { render: function Render(args) { const [hasSuffix, setHasSuffix] = useState(false); return {hasSuffix && } ; }, args: { width: 360 }, parameters: { docs: { description: { story: '`{condition && }` 형태의 조건부 세그먼트는 구분선 개수에 그대로 반영된다.' } } } } ``` ### Disabled ```tsx { render: args => , args: { width: 320 }, args: { ...Base.args, disabled: true } } ``` ### Error status는 그룹 테두리 색만 바꾼다. 세그먼트의 경고 아이콘은 `WithSegmentStatus`를 참고한다. ```tsx { render: args => , args: { width: 320 }, args: { ...Base.args, status: 'error' }, parameters: { docs: { description: { story: 'status는 그룹 테두리 색만 바꾼다. 세그먼트의 경고 아이콘은 `WithSegmentStatus`를 참고한다.' } } } } ``` ### Filter Bar 목록 화면 필터 바에서 쓰는 형태. 그룹끼리는 서로 독립적이고, 버튼은 그룹 밖에 둔다. ```tsx { render: function Render() { const [column, setColumn] = useState('product_id'); const [dateColumn, setDateColumn] = useState('expected_shipping'); const [period, setPeriod] = useState('1m'); const [value, setValue] = useState([]); return ; }, parameters: { docs: { description: { story: '목록 화면 필터 바에서 쓰는 형태. 그룹끼리는 서로 독립적이고, 버튼은 그룹 밖에 둔다.' } } } } ``` ### Flex 세그먼트는 기본적으로 내용 폭을 유지한다. 남는 공간을 채우려면 `flex`를 지정한다. ```tsx { render: args => 010 , args: { width: 360 }, parameters: { docs: { description: { story: '세그먼트는 기본적으로 내용 폭을 유지한다. 남는 공간을 채우려면 `flex`를 지정한다.' } } } } ``` ### Highlighted ```tsx { render: args => , args: { width: 320 }, args: { ...Base.args, status: 'highlighted' } } ``` ### Nested `InputGroup`은 중첩할 수 있다. 안쪽 그룹은 테두리를 그리지 않고 바깥 필드에 얹히며, 여백과 라운드는 필드 가장자리에 닿은 칸만 가져간다. ```tsx { render: function Render(args) { const [currency, setCurrency] = useState('krw'); return 최소 ; }, args: { size: 'medium', width: 400 }, parameters: { docs: { description: { story: '`InputGroup`은 중첩할 수 있다. 안쪽 그룹은 테두리를 그리지 않고 바깥 필드에 얹히며, 여백과 라운드는 필드 가장자리에 닿은 칸만 가져간다.' } } } } ``` ### Number Range `prefix`/`suffix`를 지정한 `Input`은 스스로 InputGroup을 렌더한다. 그래서 이렇게 그룹 안에 넣으면 중첩 그룹이 되어 바깥 테두리를 그대로 쓴다. 단위까지 포함해 한 칸으로 묶이므로 구분선도 알맞게 들어간다. ```tsx { render: args => , args: { width: 400 }, parameters: { docs: { description: { story: ['`prefix`/`suffix`를 지정한 `Input`은 스스로 InputGroup을 렌더한다. 그래서 이렇게 그룹 안에 넣으면', '중첩 그룹이 되어 바깥 테두리를 그대로 쓴다. 단위까지 포함해 한 칸으로 묶이므로 구분선도 알맞게 들어간다.'].join(' ') } } } } ``` ### Number Range Without Unit Divider `NumberRange`에서 값과 단위 사이의 구분선만 지운 형태. `Input`의 `suffix` 대신 단위를 중첩 `InputGroup`으로 직접 묶고, 그 그룹에만 `dividerVariant='none'`을 지정한다. 최소/최대를 가르는 바깥 그룹의 구분선은 그대로 남는다. ```tsx { render: args => , args: { width: 400 }, parameters: { docs: { description: { story: ['`NumberRange`에서 값과 단위 사이의 구분선만 지운 형태. `Input`의 `suffix` 대신 단위를 중첩 `InputGroup`으로 직접 묶고,', "그 그룹에만 `dividerVariant='none'`을 지정한다. 최소/최대를 가르는 바깥 그룹의 구분선은 그대로 남는다."].join(' ') } } } } ``` ### Size ```tsx { render: () => {(['large', 'medium', 'small', 'xsmall'] as InputSize[]).map(size => )} } ``` ### With Addon `InputGroupAddon`은 문자열이 아닌 요소도 받는다. `Input`의 `prefix`/`suffix`를 그룹 안에서 쓰면 자동으로 이 형태로 렌더링된다. ```tsx { render: args => https:// .kakaostyle.com , args: { width: 400 }, parameters: { docs: { description: { story: '`InputGroupAddon`은 문자열이 아닌 요소도 받는다. `Input`의 `prefix`/`suffix`를 그룹 안에서 쓰면 자동으로 이 형태로 렌더링된다.' } } } } ``` ### With Date Picker 단일 날짜 선택(`target='all'`). 날짜 입력이 하나의 세그먼트가 된다. ```tsx { render: function Render(args) { const [period, setPeriod] = useState('1m'); const [value, setValue] = useState([]); return ; }, args: { size: 'xsmall', width: 280 }, parameters: { docs: { description: { story: "단일 날짜 선택(`target='all'`). 날짜 입력이 하나의 세그먼트가 된다." } } } } ``` ### With Date Range Picker 범위 선택. 시작일/종료일은 중첩 그룹의 각 칸이 되고, 편집 중인 칸 아래에 인디케이터가 붙는다. 인디케이터는 DatePicker 전용 표현이라 다른 조합에서는 나오지 않는다. ```tsx { render: function Render(args) { const [dateColumn, setDateColumn] = useState('expected_shipping'); const [period, setPeriod] = useState('1m'); const [value, setValue] = useState([]); return ; }, args: { size: 'xsmall', width: 400 }, parameters: { docs: { description: { story: '범위 선택. 시작일/종료일은 중첩 그룹의 각 칸이 되고, 편집 중인 칸 아래에 인디케이터가 붙는다. 인디케이터는 DatePicker 전용 표현이라 다른 조합에서는 나오지 않는다.' } } } } ``` ### With Dropdown 서로 다른 종류의 컨트롤을 하나의 필드로 합성한다. ```tsx { render: function Render(args) { const [column, setColumn] = useState('product_id'); return 정렬 ; }, args: { size: 'xsmall', width: 'auto' }, parameters: { docs: { description: { story: '서로 다른 종류의 컨트롤을 하나의 필드로 합성한다.' } } } } ``` ### With Form Field FormField의 라벨·헬퍼텍스트와 함께 쓰는 형태. FormField는 InputGroup에 status를 자동으로 공유하지 않으므로 그룹에도 직접 지정한다. ```tsx { render: function Render(args) { const [column, setColumn] = useState('product_id'); return ; }, parameters: { docs: { description: { story: 'FormField의 라벨·헬퍼텍스트와 함께 쓰는 형태. FormField는 InputGroup에 status를 자동으로 공유하지 않으므로 그룹에도 직접 지정한다.' } } } } ``` ### With Input 서로 다른 종류의 컨트롤을 하나의 필드로 합성한다. ```tsx { render: function Render(args) { const [column, setColumn] = useState('product_id'); return ; }, args: { size: 'xsmall', width: 400 }, parameters: { docs: { description: { story: '서로 다른 종류의 컨트롤을 하나의 필드로 합성한다.' } } } } ``` ### With Numeric Input `NumericInput`도 세그먼트로 동작한다. 자체 `suffix`는 중첩 그룹의 addon으로 렌더된다. ```tsx { render: args => 배송비 , args: { width: 320 }, parameters: { docs: { description: { story: '`NumericInput`도 세그먼트로 동작한다. 자체 `suffix`는 중첩 그룹의 addon으로 렌더된다.' } } } } ``` ### With Numeric Input Without Unit Divider `WithNumericInput`에서 단위 앞 구분선만 지운 형태. prefix/suffix를 `InputGroupAddon`으로 직접 쓰면 어느 구분선을 남길지 중첩 단위로 고를 수 있다. 여기서는 `배송비`와 값 사이의 구분선은 남기고 값과 `원` 사이만 지웠다. ```tsx { render: args => 배송비 , args: { width: 320 }, parameters: { docs: { description: { story: ['`WithNumericInput`에서 단위 앞 구분선만 지운 형태. prefix/suffix를 `InputGroupAddon`으로 직접 쓰면', '어느 구분선을 남길지 중첩 단위로 고를 수 있다. 여기서는 `배송비`와 값 사이의 구분선은 남기고 값과 `원` 사이만 지웠다.'].join(' ') } } } } ``` ### With Segment Status ```tsx { render: args => , args: { width: 320, status: 'error' } } ``` ### With Time Picker 날짜와 시각을 한 필드로 묶는 조합. 두 팝오버는 각자 자기 세그먼트를 기준으로 열린다. ```tsx { render: function Render(args) { const [date, setDate] = useState([]); const [time, setTime] = useState(undefined); return setTime(next ?? undefined)} flex={1} /> ; }, args: { size: 'xsmall', width: 360 }, parameters: { docs: { description: { story: '날짜와 시각을 한 필드로 묶는 조합. 두 팝오버는 각자 자기 세그먼트를 기준으로 열린다.' } } } } ``` ### With Time Range Picker `TimeRangePicker`는 `DatePicker`와 마찬가지로 중첩 그룹으로 렌더되어 시작/종료 시각이 각각의 칸이 된다. ```tsx { render: function Render(args) { const [range, setRange] = useState({ from: null, to: null }); return 운영 시간 setRange({ from, to })} flex={1} /> ; }, args: { size: 'xsmall', width: 360 }, parameters: { docs: { description: { story: '`TimeRangePicker`는 `DatePicker`와 마찬가지로 중첩 그룹으로 렌더되어 시작/종료 시각이 각각의 칸이 된다.' } } } } ```