|
1 | 1 | <script lang="ts"> |
2 | | - import { getColorFromBranchType, isLocalAndRemoteCommit } from '$components/v3/lib'; |
| 2 | + import { getColorFromCommitState, isLocalAndRemoteCommit } from '$components/v3/lib'; |
3 | 3 | import Tooltip from '@gitbutler/ui/Tooltip.svelte'; |
4 | 4 | import { camelCaseToTitleCase } from '@gitbutler/ui/utils/string'; |
5 | 5 | import type { Commit, UpstreamCommit } from '$lib/branches/v3'; |
|
8 | 8 | commit: Commit | UpstreamCommit; |
9 | 9 | lastCommit?: boolean; |
10 | 10 | lastBranch?: boolean; |
11 | | - lineColor?: string; |
12 | 11 | } |
13 | 12 |
|
14 | | - const { commit, lastCommit, lastBranch, lineColor }: Props = $props(); |
| 13 | + const { commit, lastCommit, lastBranch }: Props = $props(); |
15 | 14 |
|
16 | 15 | const color = $derived( |
17 | | - lineColor || |
18 | | - (isLocalAndRemoteCommit(commit) |
19 | | - ? getColorFromBranchType(commit.state?.type ?? 'LocalOnly') |
20 | | - : 'var(--clr-commit-upstream)') |
21 | | - ); |
22 | | - const dotRhombus = $derived( |
23 | | - isLocalAndRemoteCommit(commit) && commit.state.type === 'LocalAndRemote' |
| 16 | + isLocalAndRemoteCommit(commit) |
| 17 | + ? getColorFromCommitState(commit.id, commit.state) |
| 18 | + : 'var(--clr-commit-upstream)' |
24 | 19 | ); |
| 20 | + const [localAndRemote, diverged] = $derived.by(() => { |
| 21 | + const localAndRemote = isLocalAndRemoteCommit(commit) && commit.state.type === 'LocalAndRemote'; |
| 22 | + if (localAndRemote) { |
| 23 | + const diverged = commit.state.subject !== commit.id; |
| 24 | + return [localAndRemote, diverged]; |
| 25 | + } |
| 26 | + return [false, false]; |
| 27 | + }); |
25 | 28 |
|
26 | 29 | const tooltipText = $derived( |
27 | 30 | !isLocalAndRemoteCommit(commit) ? 'Upstream' : camelCaseToTitleCase(commit.state.type) |
|
30 | 33 |
|
31 | 34 | <div class="commit-lines" style:--commit-color={color}> |
32 | 35 | <div class="top"></div> |
33 | | - <Tooltip text={tooltipText}> |
34 | | - <div class="middle" class:rhombus={dotRhombus}></div> |
35 | | - </Tooltip> |
| 36 | + {#if diverged} |
| 37 | + <div class="local-shadow-commit-dot"> |
| 38 | + <Tooltip text={'Diverged'}> |
| 39 | + <svg class="shadow-dot" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"> |
| 40 | + <path |
| 41 | + d="M0.827119 6.41372C0.0460709 5.63267 0.0460709 4.36634 0.827119 3.58529L3.70602 0.706392C4.48707 -0.0746567 5.7534 -0.0746567 6.53445 0.706392L9.41335 3.58529C10.1944 4.36634 10.1944 5.63267 9.41335 6.41372L6.53445 9.29262C5.7534 10.0737 4.48707 10.0737 3.70602 9.29262L0.827119 6.41372Z" |
| 42 | + /> |
| 43 | + </svg> |
| 44 | + </Tooltip> |
| 45 | + <Tooltip text="Diverged"> |
| 46 | + <svg class="local-dot" viewBox="0 0 11 10" xmlns="http://www.w3.org/2000/svg"> |
| 47 | + <path |
| 48 | + fill-rule="evenodd" |
| 49 | + clip-rule="evenodd" |
| 50 | + d="M0.740712 8.93256C1.59096 9.60118 2.66337 10 3.82893 10H5.82893C8.59035 10 10.8289 7.76142 10.8289 5C10.8289 2.23858 8.59035 0 5.82893 0H3.82893C2.66237 0 1.58912 0.399504 0.738525 1.06916L1.84289 2.17353C3.40499 3.73562 3.40499 6.26828 1.84289 7.83038L0.740712 8.93256Z" |
| 51 | + /> |
| 52 | + </svg> |
| 53 | + </Tooltip> |
| 54 | + </div> |
| 55 | + {:else} |
| 56 | + <Tooltip text={tooltipText}> |
| 57 | + <div class="middle" class:rhombus={localAndRemote}></div> |
| 58 | + </Tooltip> |
| 59 | + {/if} |
36 | 60 | <div class="bottom" class:dashed={lastCommit && lastBranch}></div> |
37 | 61 | </div> |
38 | 62 |
|
39 | | -<style> |
| 63 | +<style lang="postcss"> |
40 | 64 | .commit-lines { |
41 | 65 | display: flex; |
42 | 66 | flex-direction: column; |
|
72 | 96 | transform: rotate(45deg) scale(0.86); |
73 | 97 | } |
74 | 98 | } |
| 99 | +
|
| 100 | + .local-shadow-commit-dot { |
| 101 | + display: flex; |
| 102 | + box-sizing: border-box; |
| 103 | + margin-left: -11px; |
| 104 | +
|
| 105 | + .shadow-dot { |
| 106 | + width: 10px; |
| 107 | + height: 10px; |
| 108 | + fill: var(--clr-commit-shadow); |
| 109 | + } |
| 110 | +
|
| 111 | + .local-dot { |
| 112 | + width: 11px; |
| 113 | + height: 10px; |
| 114 | + fill: var(--clr-commit-local); |
| 115 | + } |
| 116 | + } |
75 | 117 | </style> |
0 commit comments