@@ -19,10 +19,10 @@ export type StackedBarChartData = Array<{
1919 class="segment"
2020 [style.width.%]="asPercent(item.value)"
2121 [style.background-color]="item.color"
22- (click)="toggleDisplayMode(item )"
23- [attr.data-tooltip]="getTooltipText(item) "
22+ (click)="toggleDisplayMode()"
23+ [attr.data-tooltip]="showLegend() ? null : item.label "
2424 >
25- {{ getItemDisplayValue(item, displayPercentage() ) }}
25+ {{ getItemDisplayValue(item) }}
2626 </div>
2727 }
2828 }
@@ -53,7 +53,6 @@ export type StackedBarChartData = Array<{
5353 .chart-container {
5454 width: 100%;
5555 background-color: var(--card-bg-color);
56- border-radius: 12px;
5756 }
5857
5958 .stacked-bar {
@@ -112,6 +111,7 @@ export type StackedBarChartData = Array<{
112111 align-items: center;
113112 font-size: 14px;
114113 color: var(--text-secondary);
114+ white-space: nowrap;
115115 }
116116
117117 .legend-color {
@@ -121,7 +121,7 @@ export type StackedBarChartData = Array<{
121121 margin-right: 8px;
122122 }
123123
124- .segment::before {
124+ .segment[data-tooltip] ::before {
125125 content: attr(data-tooltip); /* Use a data attribute for the text */
126126 position: absolute;
127127 bottom: 110%; /* Position it above the segment */
@@ -141,12 +141,6 @@ export type StackedBarChartData = Array<{
141141 z-index: 10;
142142 }
143143
144- .segment:last-child:not(:only-child)::before {
145- right: 0;
146- left: auto;
147- transform: none;
148- }
149-
150144 /* Show tooltip on hover */
151145 .segment:hover::before,
152146 .segment:hover::after {
@@ -163,6 +157,7 @@ export class StackedBarChart {
163157 total = computed ( ( ) =>
164158 this . data ( ) . reduce ( ( acc , item ) => acc + item . value , 0 )
165159 ) ;
160+
166161 protected displayPercentage = signal ( false ) ;
167162
168163 asPercent ( value : number ) {
@@ -171,23 +166,14 @@ export class StackedBarChart {
171166 return parseFloat ( percentage . toFixed ( percentage % 1 === 0 ? 0 : 1 ) ) ;
172167 }
173168
174- toggleDisplayMode ( item : StackedBarChartData [ 0 ] ) : void {
169+ toggleDisplayMode ( ) : void {
175170 this . displayPercentage . update ( ( current ) => ! current ) ;
176171 }
177172
178- getItemDisplayValue (
179- item : StackedBarChartData [ 0 ] ,
180- showPercent : boolean
181- ) : string {
173+ getItemDisplayValue ( item : StackedBarChartData [ 0 ] ) : string {
182174 if ( item . value === 0 ) return '' ;
183- return showPercent ? `${ this . asPercent ( item . value ) } %` : `${ item . value } ` ;
184- }
185-
186- getTooltipText ( item : StackedBarChartData [ 0 ] ) {
187- if ( ! this . showLegend ( ) ) {
188- return item . label ;
189- }
190-
191- return this . getItemDisplayValue ( item , ! this . displayPercentage ( ) ) ;
175+ return this . displayPercentage ( )
176+ ? `${ this . asPercent ( item . value ) } %`
177+ : `${ item . value } ` ;
192178 }
193179}
0 commit comments