|
1 | 1 | <script lang="ts"> |
2 | 2 | import Icon from '@gitbutler/ui/Icon.svelte'; |
| 3 | + import Tooltip from '@gitbutler/ui/Tooltip.svelte'; |
3 | 4 |
|
4 | 5 | interface Props { |
5 | 6 | isDefault: boolean; |
6 | 7 | onDefaultSet: () => void; |
| 8 | + onCollapseButtonClick: () => void; |
7 | 9 | } |
8 | 10 |
|
9 | | - const { isDefault, onDefaultSet }: Props = $props(); |
| 11 | + const { isDefault, onDefaultSet, onCollapseButtonClick }: Props = $props(); |
10 | 12 | </script> |
11 | 13 |
|
12 | 14 | <div class="header-control" class:is-default={isDefault} data-drag-handle> |
13 | | - <div class="draggable-icon" data-drag-handle> |
14 | | - <Icon name="draggable" /> |
| 15 | + <div class="actions"> |
| 16 | + <div class="draggable-icon" data-drag-handle> |
| 17 | + <Icon name="draggable" /> |
| 18 | + </div> |
| 19 | + |
| 20 | + <Tooltip text="Collapse lane"> |
| 21 | + <button type="button" class="action-button" onclick={onCollapseButtonClick}> |
| 22 | + <Icon name="fold-lane" /> |
| 23 | + </button> |
| 24 | + </Tooltip> |
15 | 25 | </div> |
16 | 26 |
|
17 | 27 | <button type="button" class="target-btn" onclick={onDefaultSet} disabled={isDefault}> |
|
33 | 43 | display: flex; |
34 | 44 | align-items: center; |
35 | 45 | justify-content: space-between; |
36 | | - padding: 3px 2px 3px 6px; |
| 46 | + padding: 4px 2px 4px 6px; |
37 | 47 | background-color: var(--clr-theme-ntrl-soft); |
38 | 48 | border: 1px solid var(--clr-border-2); |
39 | 49 | border-radius: var(--radius-m) var(--radius-m) 0 0; |
40 | 50 | width: 100%; |
41 | 51 |
|
| 52 | + --hover-color: oklch(from var(--clr-scale-ntrl-70) l c h / 0.5); |
| 53 | + --hover-color-on-target: oklch(from var(--clr-scale-pop-70) l c h / 0.7); |
| 54 | +
|
42 | 55 | & .draggable-icon { |
43 | 56 | cursor: grab; |
44 | 57 | display: flex; |
45 | | - color: var(--clr-scale-ntrl-0); |
46 | | - opacity: 0.3; |
47 | | - transition: opacity var(--transition-fast); |
| 58 | + opacity: 0.5; |
| 59 | + } |
| 60 | +
|
| 61 | + & .actions { |
| 62 | + display: flex; |
| 63 | + align-items: center; |
| 64 | + gap: 4px; |
| 65 | + } |
| 66 | +
|
| 67 | + & .action-button { |
| 68 | + display: flex; |
| 69 | + align-items: center; |
| 70 | + padding: 2px; |
| 71 | + color: var(--clr-text-2); |
| 72 | + border-radius: var(--radius-s); |
| 73 | + opacity: 0.7; |
| 74 | + transition: background-color var(--transition-fast); |
48 | 75 |
|
49 | 76 | &:hover { |
50 | | - opacity: 0.6; |
| 77 | + color: var(--clr-text-2); |
| 78 | + opacity: 1; |
| 79 | + background-color: var(--clr-theme-ntrl-soft-hover); |
51 | 80 | } |
52 | 81 | } |
53 | 82 |
|
|
57 | 86 | gap: 4px; |
58 | 87 | padding: 1px 5px 1px 3px; |
59 | 88 | border-radius: var(--radius-s); |
60 | | - border: 1px solid transparent; |
61 | 89 |
|
62 | | - transition: |
63 | | - background-color var(--transition-fast), |
64 | | - border-color var(--transition-fast); |
| 90 | + transition: background-color var(--transition-fast); |
65 | 91 |
|
66 | 92 | &:not(:disabled) { |
67 | 93 | cursor: pointer; |
68 | 94 | color: var(--clr-theme-ntrl-element); |
69 | 95 |
|
70 | 96 | &:hover { |
71 | 97 | background-color: var(--clr-theme-ntrl-soft-hover); |
72 | | - border-color: var(--clr-border-2); |
73 | 98 | } |
74 | 99 | } |
75 | 100 |
|
|
88 | 113 | /* MODIFIERS */ |
89 | 114 | .is-default { |
90 | 115 | background-color: var(--clr-theme-pop-soft); |
| 116 | +
|
| 117 | + & .draggable-icon { |
| 118 | + color: var(--clr-theme-pop-on-soft); |
| 119 | + } |
| 120 | +
|
| 121 | + & .action-button { |
| 122 | + color: var(--clr-theme-pop-on-soft); |
| 123 | + opacity: 0.5; |
| 124 | +
|
| 125 | + &:hover { |
| 126 | + color: var(--clr-theme-pop-on-soft); |
| 127 | + opacity: 0.7; |
| 128 | + background-color: var(--hover-color-on-target); |
| 129 | + } |
| 130 | + } |
91 | 131 | } |
92 | 132 | </style> |
0 commit comments