diff --git a/src/components/workflows/timeline/BaseTimelineDetailedChart.vue b/src/components/workflows/timeline/BaseTimelineDetailedChart.vue index e9abdbb643b0a42315b03efa5b2f0dff7b63fa7a..b7fa80c822d6bda50b6eea8ccccea75f51586256 100644 --- a/src/components/workflows/timeline/BaseTimelineDetailedChart.vue +++ b/src/components/workflows/timeline/BaseTimelineDetailedChart.vue @@ -69,7 +69,7 @@ function render([data, startDate, endDate, maxY]) { svg.append("g") .classed('x-axis-group', true) .attr("transform", `translate(0,${height - marginBottom})`) - .call(d3.axisBottom(x).ticks(6).tickSize(4).tickFormat(d3.utcFormat("%d.%m.%Y"))) + .call(d3.axisBottom(x).ticks(6).tickPadding(8).tickSize(5).tickFormat(d3.utcFormat("%d.%m.%Y"))) svg.select('.x-axis-group .domain').attr('stroke', colors.gray['400']) svg.selectAll('.x-axis-group .tick text').attr('fill', colors.gray['400']) @@ -78,8 +78,15 @@ function render([data, startDate, endDate, maxY]) { svg.append("g") .classed('y-axis-group', true) .attr("transform", `translate(${marginLeft},0)`) - .call(d3.axisLeft(y).ticks(6).tickSize(0).tickPadding(5)) + .call(d3 + .axisLeft(y) + .ticks(6) + .tickSize(0) + .tickPadding(5) + .tickSizeInner(-_width.value + marginLeft + marginRight) + ) + // Append y-axis title on the left svg.append("text") .attr("text-anchor", "end") .attr("transform", "rotate(-90)") @@ -152,7 +159,7 @@ function render([data, startDate, endDate, maxY]) { .attr('stroke-dasharray', 4) .attr("d", d3.line()([[xPos, y(0)], [xPos, y(maxY)]])) - const group = releaseGroup.append('g') + const group = releaseGroup.append('g').attr('transform', 'translate(-79 0)') group .append('rect') @@ -168,7 +175,7 @@ function render([data, startDate, endDate, maxY]) { .attr("y", y(maxY)) .attr("x", xPos) .attr('dy', 12) - .attr('dx', 5) + .attr('dx', 8) .text(release.tag_name) .attr('stroke', 'none') .attr('fill', colors.gray['600']) @@ -195,57 +202,73 @@ watch([() => props.data, () => props.startDate, () => props.endDate, () => props </script> <template> - <div ref="container"></div> + <div class="svg-container" ref="container"></div> </template> -<style lang="scss"> - -.releases-group { - .tag-name { - font-size: 10px; - } -} - -.path-group { - path { - fill: none; - stroke: var(--color--neutral-text); - } +<style lang="scss" scoped> - circle { - fill: var(--color--neutral-text); +:deep(.svg-container) { + .releases-group { + .tag-name { + font-size: 10px; + } } - &.up { + .path-group { path { - stroke: var(--color--positive-text); + fill: none; + stroke: var(--color--neutral-text); } circle { - fill: var(--color--positive-text); + fill: var(--color--neutral-text); } - } - &.down { - path { - stroke: var(--color--negative-text); + &.up { + path { + stroke: var(--color--positive-text); + } + + circle { + fill: var(--color--positive-text); + } } - circle { - fill: var(--color--negative-text); + &.down { + path { + stroke: var(--color--negative-text); + } + + circle { + fill: var(--color--negative-text); + } } } -} -.y-axis-group { - .tick { - &:first-of-type { + .y-axis-group { + .tick { + &:first-of-type { + text { + transform: translateY(-3px); + } + + line { + stroke: none; + } + } text { - transform: translateY(-3px); + @apply text-[11px]; + } + + line { + stroke: theme('colors.gray.200'); } } + } + + .x-axis-group { text { - @apply text-[9px]; + @apply text-[11px]; } } } diff --git a/src/components/workflows/timeline/MetricAverageChart.vue b/src/components/workflows/timeline/MetricAverageChart.vue index 4cf333b4a3b2a1c987f5b71e2e053c60ff44d1cc..195a56455297cac503e2dcc101d20c489990baaf 100644 --- a/src/components/workflows/timeline/MetricAverageChart.vue +++ b/src/components/workflows/timeline/MetricAverageChart.vue @@ -73,23 +73,24 @@ function tooltipContent(d: TimelineChartDataPoint) { :tooltip-content="tooltipContent" :width="400" /> - </div> <OverlayPanel - ref="op" - :pt="{ + </div> + <OverlayPanel + ref="op" + :pt="{ root: { - class: 'z-[9999] bg-white border rounded-md shadow-md p-6' + class: 'z-[9999] bg-white border rounded-md shadow-md' } }" > <BaseTimelineDetailedChart - :data="data" - :max-y="maxY" - :y-axis-title="$t(metric)" - :start-date="startDate" - :end-date="endDate" - :tooltip-content="tooltipContent" - :height="400" - :width="660" + :data="data" + :max-y="maxY" + :y-axis-title="$t(metric)" + :start-date="startDate" + :end-date="endDate" + :tooltip-content="tooltipContent" + :height="400" + :width="660" /> </OverlayPanel> </template> diff --git a/src/components/workflows/timeline/MetricChart.vue b/src/components/workflows/timeline/MetricChart.vue index 46f71a20a417f7dbf26fdeca875f8285cce0400e..fee613b0729b34e18113313cd45586373a9f9610 100644 --- a/src/components/workflows/timeline/MetricChart.vue +++ b/src/components/workflows/timeline/MetricChart.vue @@ -67,6 +67,7 @@ function tooltipContent(d: TimelineChartDataPoint) { <BaseTimelineDetailedChart :data="data" :max-y="maxY" + :y-axis-title="$t(metric)" :start-date="startDate" :end-date="endDate" :tooltip-content="tooltipContent"