# JENNIFER UI > **JENNIFER UI - 엔터프라이즈 Vue.js 컴포넌트 라이브러리** > Jennifer APM 시스템에서 사용되는 재사용 가능한 UI 컴포넌트들을 제공합니다. Vue 3 Composition API와 TypeScript를 기반으로 구축되었습니다. **Version:** 0.1.166+ | **Framework:** Vue 3 | **TypeScript:** Full Support --- ## PART 1: 기본 UI 컴포넌트 (@jennifersoft/vue-components-v2) ### Quick Start ```bash # 설치 npm install @jennifersoft/vue-components-v2 ``` ## Typography ### File: typography/typography.md # Typography 타이포그래피를 정의하는 목적은 일관성 있는 디자인을 구축하고, 글을 쉽게 읽을 수 있게 하며, 시각적으로 구분되는 계층을 만들고 브랜드 아이덴티티를 강화하며, 디자인 작업을 더욱 효율적으로 관리하는 데 있습니다. ## Display
Display Large
Display Medium
Display Small
```vue ``` ## Headline
Headline Large
Headline Medium
Headline Small
```vue ``` ## Title
Title Large
Title Medium
Title Small
```vue ``` ## Body
Body Large
Body Medium
Body Small
Body XSmall
Body Tiny
```vue ``` ## SourceCode
Source Code Large
Source Code Medium
Source Code Small
Source Code tiny
```vue ``` ## Icons ### File: icons/icons.md # Icons 공통으로 사용하는 아이콘 집합입니다. ## Simple Usage ```vue ``` ## Props | Prop 이름 | 타입 | 필수 여부 | 기본값 | 설명 | | --------- | ----------- | --------- | ------ | ---------------- | | icon | `IconTypes` | Yes | - | 표시할 아이콘 타입 | | width | `number` | No | `24` | 아이콘 너비(px) | | height | `number` | No | `24` | 아이콘 높이(px) | ## Icon + color 상위 엘리먼트의 컬러 속성을 따라갑니다. ```vue ```
### File: icons/icons-alphabet.md # Icons Aalphabet 알파벳 순서로 정렬하여 표시합니다. ## A
{{ icon }}
## B
{{ icon }}
## C
{{ icon }}
## D
{{ icon }}
## E
{{ icon }}
## F
{{ icon }}
## G
{{ icon }}
## H
{{ icon }}
## I
{{ icon }}
## J
{{ icon }}
## K
{{ icon }}
## L
{{ icon }}
## M
{{ icon }}
## N
{{ icon }}
## O
{{ icon }}
## P
{{ icon }}
## Q
{{ icon }}
## R
{{ icon }}
## S
{{ icon }}
## T
{{ icon }}
## U
{{ icon }}
## V
{{ icon }}
## W
{{ icon }}
## X
{{ icon }}
## Y
{{ icon }}
## Z
{{ icon }}
## FormInput ### File: form-input/buttons.md # Buttons Button은 아이콘과 결합된 형태로 사용됩니다. ## Type
```vue ``` ## Props | Prop | 타입 | 필수 | 기본값 | 설명 | | -------------- | -------------------------------------------------------------------- | ---- | ----------------- | ----------------------- | | `type` | `'primary-filled'` \| `'primary-text'` \| `'outlined'` \| `'text'` \| `'error-filled'` \| `'error-text'` | - | `'primary-filled'` | 버튼 스타일 유형 | | `shape` | `'rect'` \| `'circle'` | - | `'rect'` | 버튼 모양 | | `text` | `string` | - | - | 버튼 라벨 텍스트 | | `leadingIcon` | `IconTypes` | - | - | 선행 아이콘 | | `trailingIcon` | `IconTypes` | - | - | 후행 아이콘 | | `size` | `'mini'` \| `'small'` \| `'medium'` \| `'large'` | - | - | 버튼 크기 | | `disabled` | `boolean` | - | `false` | 비활성화 여부 | ## disabled
```vue ``` ## Size
```vue ``` ## Without Icon
```vue ``` ## With LeadingIcon
```vue ``` ## With TrailingIcon
```vue ``` ## With LeadingIcon, TrailingIcon
```vue ``` ## Icon Only
```vue ``` ### File: form-input/copy-button.md # CopyButton 복사 기능을 제공하는 버튼 컴포넌트입니다. 텍스트를 클립보드에 복사하고 시각적 피드백을 제공합니다. ## 기본 사용법
```vue ``` ## Props | 속성 | 타입 | 기본값 | 설명 | | -------------- | ----------------------------- | -------- | -------------------- | | `textToCopy` | `string` | - | 복사할 텍스트 내용 | | `type` | `'text' \| 'outlined'` | `'text'` | 버튼 스타일 유형 | | `config` | `'icon' \| 'label' \| 'both'` | `'icon'` | 버튼 표시 방식 | | `tooltipProps` | `Omit` | - | 툴팁 속성(텍스트 제외) | 그 외 `Btn` 컴포넌트의 모든 속성을 지원합니다. (leadingIcon, trailingIcon, text 제외) ## 버튼 표시 방식 (config) CopyButton은 세 가지 표시 방식을 지원합니다: - `icon`: 아이콘만 표시 (기본값) - `label`: 텍스트만 표시 - `both`: 아이콘과 텍스트 모두 표시 ```vue ``` ## 다국어 지원 CopyButton은 provide/inject 패턴을 사용하여 다국어를 지원합니다. 애플리케이션의 루트에서 다음과 같이 텍스트를 주입할 수 있습니다: ```typescript // main.ts 또는 앱 진입점 app.provide('copyButtonTexts', { copy: i18n.t('copy'), copied: i18n.t('copied'), copyToClipboard: i18n.t('copyToClipboard'), }); ``` 주입하지 않으면 기본값으로 영어 텍스트가 사용됩니다. ## 예제
## 작동 방식 1. 버튼을 클릭하면 지정된 텍스트가 클립보드에 복사됩니다. 2. 복사 후 버튼 아이콘이 체크 아이콘으로 변경됩니다. 3. 툴팁 텍스트도 "복사됨" 메시지로 변경됩니다. 4. 3초 후 원래 상태로 돌아갑니다. ### File: form-input/select-button.md # SelectButton ## Basic
```vue ``` ## Props | Prop | 타입 | 필수 | 기본값 | 설명 | | ------------ | ------------------------------------------------------------------------------------- | ---- | ---------- | -------------------- | | `modelValue` | `string` \| `number` \| `null` | - | `null` | 선택된 값 | | `items` | `{ icon?: IconTypes; label?: string; value: string \| number; tooltip?: TooltipProps; }[]` | ✓ | - | 버튼 항목 목록 | | `size` | `'large' \| 'medium' \| 'small'` | - | `'medium'` | 컴포넌트 크기 | | `disabled` | `boolean` | - | `false` | 비활성화 여부 | ## Size
```vue ``` ## disabled
```vue ``` ## Icon + Tooltip
```vue ``` ### File: form-input/float-label.md # FloatLabel InputText 의 라벨을 표시합니다. ## Basic input이 활성화되면 라벨 표시가 활성화 됩니다.
```vue ``` ## Props | Prop | 타입 | 필수 | 기본값 | 설명 | | ---------- | --------------------- | ---- | ------- | ----------------------- | | `position` | `'over'` \| `'on'` | - | `'over'`| 라벨 표시 위치 | | `fixed` | `boolean` | - | `false` | 라벨 고정 여부 | ## Fixed `:fixed="true"` 를 추가하면 라벨 표시가 고정됩니다.
```vue ``` ## Size `:fixed="true" position="over"`
```vue ``` ## Size `:fixed="true" position="on"`
```vue ``` ### File: form-input/input-group.md # InputGroup - InputText 와 다른 컴포넌트, 아이콘을 조합형으로 사용할 수 있습니다 ## Basic
홈페이지 .com
```vue ``` ## Props | Prop | 타입 | 필수 | 기본값 | 설명 | | ---------- | ---------------------------------------------- | ---- | ------ | ------------- | | `size` | `'large' \| 'medium' \| 'small'` | - | - | 컴포넌트 크기 | | `disabled` | `boolean` | - | `false`| 비활성화 여부 | ## FloatLabel
홈페이지 .com
```vue ``` ## Button
```vue ``` ## Checkbox
```vue ``` ### File: form-input/input-affix.md # InputAffix - [InputText](../form-input/input-text) 와 다른 컴포넌트, 아이콘을 조합형으로 사용할 수 있습니다 - [InputGroup](../form-input/input-group) 와 다른점은 [InputText](../form-input/input-text) 의 보더를 표시하지 않고 부모 노드의 보더를 표시합니다 ## prefix(icon) + suffix(icon)
```vue ``` ## Props | Prop | 타입 | 필수 | 기본값 | 설명 | | ---------- | ---------------------------------------------- | ---- | ------- | -------------------- | | `invalid` | `boolean` | - | `false` | 에러 스타일 표시 | | `readonly` | `boolean` | - | `false` | 읽기 전용 | | `size` | `'large'` \| `'medium'` \| `'small'` | - | - | 컴포넌트 크기 | | `disabled` | `boolean` | - | `false` | 비활성화 여부 | ## prefix(icon) + suffix(icon) + label
```vue ``` ## When invalid
ms
```vue ``` ### File: form-input/input-search.md # InputSearch InputSearch 는 사용자가 키워드를 입력하여 원하는 정보를 빠르게 찾을 수 있도록 돕는 컴포넌트입니다. 텍스트 필드가 항상 노출된 형태와, 버튼 클릭 시 Input가 확장되어 노출되는 형태 두 가지 타입으로 제공됩니다. [InputAffix](../form-input/input-affix) 를 사용해서 구현 했습니다 ## Basic
```vue ``` ## Props | Prop | 타입 | 필수 | 기본값 | 설명 | | ------------ | ----------------------------------------------------------------------------- | ---- | ------------ | -------------------------------- | | `modelValue` | `string \| undefined` | - | `undefined` | 입력 값 | | `placeholder`| `string` | - | `'Search'` | 플레이스홀더 텍스트 | | `type` | `'outlined'` \| `'plain'` | - | `'outlined'` | 표시 타입 | | `minimal` | `boolean` | - | `false` | 버튼 클릭 시에만 확장되는 모드 | | `size` | `'large' \| 'medium' \| 'small'` | - | - | 컴포넌트 크기 | | `disabled` | `boolean` | - | `false` | 비활성화 여부 | ## Size
```vue ``` ## Type
```vue ``` ## Type + minimal
```vue ``` ## disable
### File: form-input/input-text.md # InputText - InputText 는 텍스트 입력 도구인 Input을 확장하여 구현 했습니다. ## Basic
```vue ``` ## Props | Prop | 타입 | 필수 | 기본값 | 설명 | | ------------ | ----------------------------------- | ---- | -------- | ------------------------ | | `modelValue` | `string` | - | `''` | 입력 값 | | `invalid` | `boolean` | - | `false` | 유효성 오류 스타일 표시 | | `readonly` | `boolean` | - | `false` | 읽기 전용 | | `required` | `boolean` | - | `false` | 필수 상태 표시 | | `placeholder`| `string` | - | - | 플레이스홀더 텍스트 | | `textAlign` | `'left'` \| `'right'` | - | `'left'` | 텍스트 정렬 | | `size` | `'large'` \| `'medium'` \| `'small'` | - | - | 입력 크기 | | `disabled` | `boolean` | - | `false` | 비활성화 여부 | ## States
```vue ``` ## Size
```vue ``` ## textAlign textAlign 속성을 설정하여 텍스트 정렬 방식을 설정할 수 있습니다.
```vue ``` ## label
```vue ``` ## message
```vue ``` ## label + message
```vue ``` ## input - when invalid(true)
```vue ``` ### File: form-input/input-textarea.md # InputTextarea - InputTextarea 는 여러 줄의 텍스트를 입력하기 위한 컴포넌트입니다. - `InputText` 와 동일한 디자인 시스템/상태 클래스를 사용하며, 태그만 `