11<template >
2- <div class =" relative h-10 flex items-center" >
3- <!-- Salary band line -->
2+ <div class =" flex gap-1 items-center" >
3+ <!-- Min label -->
44 <div
5- class =" absolute h-2 bg-gray-200 dark:bg-gray-700 rounded-full"
6- :style =" {
7- left: `${getPercentPosition(min)}%`,
8- width: `${getPercentWidth(min, max)}%`
9- }"
10- />
11-
12- <!-- Min marker -->
13- <div
14- class =" absolute top-1/2 text-xs text-gray-500 dark:text-gray-400 whitespace-nowrap"
15- :style =" {
16- left: `${getPercentPosition(min)}%`,
17- transform: 'translateX(-100%) translateY(-50%)',
18- marginLeft: '-4px'
19- }"
5+ class =" text-xs text-gray-500 dark:text-gray-400 w-16 whitespace-nowrap"
206 >
217 {{ formatValue(min) }}
228 </div >
239
24- <!-- Max marker -->
25- <div
26- class =" absolute top-1/2 text-xs text-gray-500 dark:text-gray-400 whitespace-nowrap"
27- :style =" {
28- left: `${getPercentPosition(max)}%`,
29- transform: 'translateY(-50%)',
30- marginLeft: '4px'
31- }"
32- >
33- {{ formatValue(max) }}
34- </div >
10+ <!-- Line with markers -->
11+ <div class =" relative h-10 flex items-center w-full" >
12+ <!-- Salary band line -->
13+ <div
14+ class =" absolute h-2 bg-gray-200 dark:bg-gray-700 rounded-full"
15+ :style =" {
16+ left: `${getPercentPosition(min)}%`,
17+ width: `${getPercentWidth(min, max)}%`
18+ }"
19+ />
3520
36- <!-- Median marker -->
37- <div
38- class =" absolute w-1 h-4 bg-blue-500 rounded-full transform -translate-x-1/2"
39- :style =" { left: `${getPercentPosition(median)}%` }"
40- >
41- <div class =" absolute top-4 transform -translate-x-1/2 text-xs text-blue-500 whitespace-nowrap" >
42- {{ formatValue(median) }}
21+ <!-- Median marker -->
22+ <div
23+ class =" absolute w-1 h-4 bg-blue-500 rounded-full transform -translate-x-1/2"
24+ :style =" { left: `${getPercentPosition(median)}%` }"
25+ >
26+ <div class =" absolute top-4 transform -translate-x-1/2 text-xs text-blue-500 whitespace-nowrap" >
27+ {{ formatValue(median) }}
28+ </div >
4329 </div >
44- </div >
4530
46- <!-- Average marker -->
47- <div
48- class =" absolute w-1 h-4 bg-green-500 rounded-full transform -translate-x-1/2"
49- :style =" { left: `${getPercentPosition(average)}%` }"
50- >
51- <div class =" absolute top-[-16px] transform -translate-x-1/2 text-xs text-green-500 whitespace-nowrap" >
52- {{ formatValue(average) }}
31+ <!-- Average marker -->
32+ <div
33+ class =" absolute w-1 h-4 bg-green-500 rounded-full transform -translate-x-1/2"
34+ :style =" { left: `${getPercentPosition(average)}%` }"
35+ >
36+ <div class =" absolute top-[-16px] transform -translate-x-1/2 text-xs text-green-500 whitespace-nowrap" >
37+ {{ formatValue(average) }}
38+ </div >
39+ </div >
40+
41+ <!-- Own salary marker (optional) -->
42+ <div
43+ v-if =" ownSalary"
44+ class =" absolute w-1 h-6 bg-purple-500 rounded-full transform -translate-x-1/2"
45+ :style =" { left: `${getPercentPosition(ownSalary)}%` }"
46+ >
47+ <div class =" absolute top-8 transform -translate-x-1/2 text-xs text-purple-500 whitespace-nowrap" >
48+ {{ formatValue(ownSalary) }}
49+ </div >
5350 </div >
5451 </div >
5552
56- <!-- Own salary marker (optional) -->
53+ <!-- Max label -->
5754 <div
58- v-if =" ownSalary"
59- class =" absolute w-1 h-6 bg-purple-500 rounded-full transform -translate-x-1/2"
60- :style =" { left: `${getPercentPosition(ownSalary)}%` }"
55+ class =" text-xs text-gray-500 dark:text-gray-400 w-18 whitespace-nowrap"
6156 >
62- <div class =" absolute top-8 transform -translate-x-1/2 text-xs text-purple-500 whitespace-nowrap" >
63- {{ formatValue(ownSalary) }}
64- </div >
57+ {{ formatValue(max) }}
6558 </div >
6659 </div >
6760</template >
@@ -82,22 +75,21 @@ const props = defineProps<{
8275function getPercentPosition (value : number | string ) {
8376 const numValue = Number (value );
8477 const range = props .globalMax - props .globalMin ;
85- if (range == = 0 ) {
78+ if (range < = 0 ) {
8679 return 50 ;
8780 }
88- // Add padding of 10% on each side
89- return 10 + ((numValue - props .globalMin ) / range ) * 80 ;
81+ return ((numValue - props .globalMin ) / range ) * 100 ;
9082}
9183
9284// Calculate width percentage for the salary band
9385function getPercentWidth (min : number , max : number ) {
9486 const minValue = min ;
9587 const maxValue = max ;
9688 const range = props .globalMax - props .globalMin ;
97- if (range == = 0 ) {
98- return 80 ;
89+ if (range < = 0 ) {
90+ return 100 ;
9991 }
100- return ((maxValue - minValue ) / range ) * 80 ;
92+ return ((maxValue - minValue ) / range ) * 100 ;
10193}
10294
10395// Format the value for display
0 commit comments