Appearance
PopoverBalloon
위치 기반 팝오버 말풍선 컴포넌트입니다.
개요
PopoverBalloon은 특정 요소 주변에 말풍선 형태의 팝오버를 표시하는 컴포넌트입니다. HTML 콘텐츠를 지원하며, 다양한 위치와 스타일링 옵션을 제공합니다.
Props
typescript
interface Props {
content: string; // HTML 문자열 지원
position?: PopoverPosition; // 위치 (기본: 'right')
offset?: number; // 오프셋 (기본: 10px)
cursorNone?: boolean; // 화살표 숨김 (기본: false)
contentPadding?: number; // 콘텐츠 패딩 (기본: 24px)
}
type PopoverPosition =
| 'top'
| 'top-left'
| 'top-right'
| 'bottom'
| 'bottom-left'
| 'bottom-right'
| 'left'
| 'right';
기본 사용법
vue
<template>
<div
class="trigger"
@mouseover="showPopover = true"
@mouseleave="showPopover = false"
>
마우스를 올려보세요
<PopoverBalloon
v-if="showPopover"
content="<strong>팝오버</strong> 내용입니다."
position="top"
:offset="15"
/>
</div>
</template>
<script setup>
import { PopoverBalloon } from '@jennifersoft/apm-components';
import { ref } from 'vue';
const showPopover = ref(false);
</script>
위치 옵션
top
,top-left
,top-right
: 상단 배치bottom
,bottom-left
,bottom-right
: 하단 배치left
,right
: 좌/우측 배치
TooltipBalloon
간단한 툴팁 말풍선 컴포넌트입니다.
개요
TooltipBalloon은 PopoverBalloon의 경량화 버전으로, 간단한 텍스트 툴팁을 표시할 때 사용합니다.
Props
typescript
interface Props {
text: string; // 툴팁 텍스트
position?: TooltipPosition; // 위치 (기본: 'top')
visible?: boolean; // 표시 여부 (기본: false)
}
기본 사용법
vue
<template>
<div class="tooltip-container">
<button
@mouseover="showTooltip = true"
@mouseleave="showTooltip = false"
>
버튼
</button>
<TooltipBalloon
text="버튼을 클릭하세요"
position="top"
:visible="showTooltip"
/>
</div>
</template>
NodeTooltip
노드 요소용 전용 툴팁 컴포넌트입니다.
개요
NodeTooltip은 토폴로지나 관계 트리의 노드에 표시되는 전용 툴팁입니다. 노드의 메트릭 정보를 구조화된 형태로 표시합니다.
Props
typescript
interface Props {
width: number; // 노드 너비
x: number; // X 좌표
y: number; // Y 좌표
translateX: number; // X 변환값
translateY: number; // Y 변환값
data: NodeData; // 노드 데이터
cursorNone?: boolean; // 커서 숨김
scale?: number; // 스케일 (기본: 1)
useSimpleTooltip?: boolean; // 간단한 툴팁 모드
}
기본 사용법
vue
<template>
<NodeTooltip
:width="nodeWidth"
:x="nodePosition.x"
:y="nodePosition.y"
:translate-x="viewportTranslateX"
:translate-y="viewportTranslateY"
:data="nodeData"
:scale="currentScale"
:use-simple-tooltip="false"
/>
</template>
TextInNode
노드 내부에 표시되는 텍스트 컴포넌트입니다.
개요
TextInNode는 토폴로지나 관계 트리의 노드 내부에 텍스트를 표시하는 컴포넌트입니다. 텍스트 길이에 따른 자동 줄바꿈과 말줄임표를 지원합니다.
Props
typescript
interface Props {
text: string; // 표시할 텍스트
maxWidth?: number; // 최대 너비 (기본: 무제한)
fontSize?: number; // 폰트 크기 (기본: 14px)
textAlign?: 'left' | 'center' | 'right'; // 텍스트 정렬 (기본: 'center')
ellipsis?: boolean; // 말줄임표 사용 (기본: true)
}
기본 사용법
vue
<template>
<div class="node">
<TextInNode
:text="nodeName"
:max-width="120"
:font-size="12"
text-align="center"
:ellipsis="true"
/>
</div>
</template>
<script setup>
import { TextInNode } from '@jennifersoft/apm-components';
const nodeName = ref('Very Long Node Name That Should Be Truncated');
</script>
공통 사용 패턴
호버 툴팁 패턴
vue
<template>
<div
class="interactive-element"
@mouseenter="showTooltip = true"
@mouseleave="showTooltip = false"
>
콘텐츠
<PopoverBalloon
v-if="showTooltip"
:content="tooltipContent"
position="top"
/>
</div>
</template>
조건부 툴팁
vue
<template>
<div class="node-container">
<TextInNode :text="nodeText" :max-width="100" />
<NodeTooltip
v-if="nodeText.length > 20"
:data="nodeDetails"
v-bind="tooltipProps"
/>
</div>
</template>
의존성
- Vue 3 Composition API
- CSS Variables for theming