mirror of
https://github.com/gitbutlerapp/gitbutler.git
synced 2024-12-20 16:11:46 +03:00
Added new icons, merge conflicts resolved
This commit is contained in:
commit
c6bc57cb90
@ -49,7 +49,10 @@
|
|||||||
let rsViewport: HTMLElement;
|
let rsViewport: HTMLElement;
|
||||||
|
|
||||||
const userSettings = getContext<SettingsStore>(SETTINGS_CONTEXT);
|
const userSettings = getContext<SettingsStore>(SETTINGS_CONTEXT);
|
||||||
const defaultBranchWidthRem = persisted<number | undefined>(24, 'defaulBranchWidth' + project.id);
|
const defaultBranchWidthRem = persisted<number | undefined>(
|
||||||
|
24,
|
||||||
|
'defaulBranchWidth' + project.id
|
||||||
|
);
|
||||||
const laneWidthKey = 'laneWidth_';
|
const laneWidthKey = 'laneWidth_';
|
||||||
|
|
||||||
let laneWidth: number;
|
let laneWidth: number;
|
||||||
@ -126,149 +129,174 @@
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let isLaneCollapsed: boolean;
|
||||||
|
|
||||||
|
$: console.log('collapsed', isLaneCollapsed);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="branch-card-wrapper">
|
{#if isLaneCollapsed}
|
||||||
<div
|
<div class="collapsed-lane-wrapper">
|
||||||
class="branch-card"
|
<BranchHeader
|
||||||
data-tauri-drag-region
|
{isUnapplied}
|
||||||
class:target-branch={branch.active && branch.selectedForChanges}
|
{branchController}
|
||||||
>
|
{branch}
|
||||||
<div
|
{base}
|
||||||
bind:this={rsViewport}
|
{githubService}
|
||||||
style:width={`${laneWidth || $defaultBranchWidthRem}rem`}
|
{branchService}
|
||||||
class="branch-card__contents"
|
bind:isLaneCollapsed
|
||||||
>
|
projectId={project.id}
|
||||||
<BranchHeader
|
on:action={(e) => {
|
||||||
{isUnapplied}
|
if (e.detail == 'generate-branch-name') {
|
||||||
{branchController}
|
generateBranchName();
|
||||||
{branch}
|
}
|
||||||
{base}
|
|
||||||
{githubService}
|
|
||||||
{branchService}
|
|
||||||
projectId={project.id}
|
|
||||||
on:action={(e) => {
|
|
||||||
if (e.detail == 'generate-branch-name') {
|
|
||||||
generateBranchName();
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<!-- DROPZONES -->
|
|
||||||
<DropzoneOverlay class="cherrypick-dz-marker" label="Apply here" />
|
|
||||||
<DropzoneOverlay class="lane-dz-marker" label="Move here" />
|
|
||||||
|
|
||||||
<div
|
|
||||||
class="branch-card__dropzone-wrapper"
|
|
||||||
use:dropzone={{
|
|
||||||
hover: 'cherrypick-dz-hover',
|
|
||||||
active: 'cherrypick-dz-active',
|
|
||||||
accepts: acceptCherrypick,
|
|
||||||
onDrop: onCherrypicked,
|
|
||||||
disabled: isUnapplied
|
|
||||||
}}
|
|
||||||
use:dropzone={{
|
|
||||||
hover: 'lane-dz-hover',
|
|
||||||
active: 'lane-dz-active',
|
|
||||||
accepts: acceptBranchDrop,
|
|
||||||
onDrop: onBranchDrop,
|
|
||||||
disabled: isUnapplied
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<DropzoneOverlay class="cherrypick-dz-marker" label="Apply here" />
|
|
||||||
<DropzoneOverlay class="lane-dz-marker" label="Move here" />
|
|
||||||
{#if branch.files?.length > 0}
|
|
||||||
<div class="card">
|
|
||||||
<BranchFiles
|
|
||||||
{branch}
|
|
||||||
{isUnapplied}
|
|
||||||
{selectedOwnership}
|
|
||||||
{selectedFiles}
|
|
||||||
showCheckboxes={$commitBoxOpen}
|
|
||||||
/>
|
|
||||||
{#if branch.active}
|
|
||||||
<CommitDialog
|
|
||||||
projectId={project.id}
|
|
||||||
{branchController}
|
|
||||||
{branch}
|
|
||||||
{cloud}
|
|
||||||
{selectedOwnership}
|
|
||||||
{user}
|
|
||||||
bind:expanded={commitBoxOpen}
|
|
||||||
on:action={(e) => {
|
|
||||||
if (e.detail == 'generate-branch-name') {
|
|
||||||
generateBranchName();
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
{:else if branch.commits.length == 0}
|
|
||||||
<div class="new-branch card" data-dnd-ignore>
|
|
||||||
<div class="new-branch__content">
|
|
||||||
<div class="new-branch__image">
|
|
||||||
<ImgThemed
|
|
||||||
imgSet={{
|
|
||||||
light: '/images/lane-new-light.webp',
|
|
||||||
dark: '/images/lane-new-dark.webp'
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<h2 class="new-branch__title text-base-body-15 text-semibold">
|
|
||||||
This is a new branch.
|
|
||||||
</h2>
|
|
||||||
<p class="new-branch__caption text-base-body-13">
|
|
||||||
You can drag and drop files or parts of files here.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{:else}
|
|
||||||
<!-- attention: these markers have custom css at the bottom of thise file -->
|
|
||||||
<div class="no-changes card" data-dnd-ignore>
|
|
||||||
<div class="new-branch__content">
|
|
||||||
<div class="new-branch__image">
|
|
||||||
<ImgThemed
|
|
||||||
imgSet={{
|
|
||||||
light: '/images/lane-no-changes-light.webp',
|
|
||||||
dark: '/images/lane-no-changes-dark.webp'
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<h2 class="new-branch__caption text-base-body-13">
|
|
||||||
No uncommitted changes<br />on this branch
|
|
||||||
</h2>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<BranchCommits
|
|
||||||
{base}
|
|
||||||
{branch}
|
|
||||||
{project}
|
|
||||||
{githubService}
|
|
||||||
{branchController}
|
|
||||||
{branchService}
|
|
||||||
{branchCount}
|
|
||||||
{isUnapplied}
|
|
||||||
{selectedFiles}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="divider-line">
|
|
||||||
<Resizer
|
|
||||||
viewport={rsViewport}
|
|
||||||
direction="right"
|
|
||||||
inside={$selectedFiles.length > 0}
|
|
||||||
minWidth={320}
|
|
||||||
sticky
|
|
||||||
on:width={(e) => {
|
|
||||||
laneWidth = e.detail / (16 * $userSettings.zoom);
|
|
||||||
lscache.set(laneWidthKey + branch.id, laneWidth, 7 * 1440); // 7 day ttl
|
|
||||||
$defaultBranchWidthRem = laneWidth;
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{:else}
|
||||||
|
<div class="branch-card-wrapper">
|
||||||
|
<div
|
||||||
|
class="branch-card"
|
||||||
|
data-tauri-drag-region
|
||||||
|
class:target-branch={branch.active && branch.selectedForChanges}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
bind:this={rsViewport}
|
||||||
|
style:width={`${laneWidth || $defaultBranchWidthRem}rem`}
|
||||||
|
class="branch-card__contents"
|
||||||
|
>
|
||||||
|
<BranchHeader
|
||||||
|
{isUnapplied}
|
||||||
|
{branchController}
|
||||||
|
{branch}
|
||||||
|
{base}
|
||||||
|
{githubService}
|
||||||
|
{branchService}
|
||||||
|
bind:isLaneCollapsed
|
||||||
|
projectId={project.id}
|
||||||
|
on:action={(e) => {
|
||||||
|
if (e.detail == 'generate-branch-name') {
|
||||||
|
generateBranchName();
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<!-- DROPZONES -->
|
||||||
|
<DropzoneOverlay class="cherrypick-dz-marker" label="Apply here" />
|
||||||
|
<DropzoneOverlay class="lane-dz-marker" label="Move here" />
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="branch-card__dropzone-wrapper"
|
||||||
|
use:dropzone={{
|
||||||
|
hover: 'cherrypick-dz-hover',
|
||||||
|
active: 'cherrypick-dz-active',
|
||||||
|
accepts: acceptCherrypick,
|
||||||
|
onDrop: onCherrypicked,
|
||||||
|
disabled: isUnapplied
|
||||||
|
}}
|
||||||
|
use:dropzone={{
|
||||||
|
hover: 'lane-dz-hover',
|
||||||
|
active: 'lane-dz-active',
|
||||||
|
accepts: acceptBranchDrop,
|
||||||
|
onDrop: onBranchDrop,
|
||||||
|
disabled: isUnapplied
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<DropzoneOverlay class="cherrypick-dz-marker" label="Apply here" />
|
||||||
|
<DropzoneOverlay class="lane-dz-marker" label="Move here" />
|
||||||
|
{#if branch.files?.length > 0}
|
||||||
|
<div class="card">
|
||||||
|
<BranchFiles
|
||||||
|
{branch}
|
||||||
|
{isUnapplied}
|
||||||
|
{selectedOwnership}
|
||||||
|
{selectedFiles}
|
||||||
|
showCheckboxes={$commitBoxOpen}
|
||||||
|
/>
|
||||||
|
{#if branch.active}
|
||||||
|
<CommitDialog
|
||||||
|
projectId={project.id}
|
||||||
|
{branchController}
|
||||||
|
{branch}
|
||||||
|
{cloud}
|
||||||
|
{selectedOwnership}
|
||||||
|
{user}
|
||||||
|
bind:expanded={commitBoxOpen}
|
||||||
|
on:action={(e) => {
|
||||||
|
if (e.detail == 'generate-branch-name') {
|
||||||
|
generateBranchName();
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
{:else if branch.commits.length == 0}
|
||||||
|
<div class="new-branch card" data-dnd-ignore>
|
||||||
|
<div class="new-branch__content">
|
||||||
|
<div class="new-branch__image">
|
||||||
|
<ImgThemed
|
||||||
|
imgSet={{
|
||||||
|
light: '/images/lane-new-light.webp',
|
||||||
|
dark: '/images/lane-new-dark.webp'
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<h2 class="new-branch__title text-base-body-15 text-semibold">
|
||||||
|
This is a new branch.
|
||||||
|
</h2>
|
||||||
|
<p class="new-branch__caption text-base-body-13">
|
||||||
|
You can drag and drop files or parts of files here.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{:else}
|
||||||
|
<!-- attention: these markers have custom css at the bottom of thise file -->
|
||||||
|
<div class="no-changes card" data-dnd-ignore>
|
||||||
|
<div class="new-branch__content">
|
||||||
|
<div class="new-branch__image">
|
||||||
|
<ImgThemed
|
||||||
|
imgSet={{
|
||||||
|
light: '/images/lane-no-changes-light.webp',
|
||||||
|
dark: '/images/lane-no-changes-dark.webp'
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<h2 class="new-branch__caption text-base-body-13">
|
||||||
|
No uncommitted changes<br />on this branch
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<BranchCommits
|
||||||
|
{base}
|
||||||
|
{branch}
|
||||||
|
{project}
|
||||||
|
{githubService}
|
||||||
|
{branchController}
|
||||||
|
{branchService}
|
||||||
|
{branchCount}
|
||||||
|
{isUnapplied}
|
||||||
|
{selectedFiles}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="divider-line">
|
||||||
|
<Resizer
|
||||||
|
viewport={rsViewport}
|
||||||
|
direction="right"
|
||||||
|
inside={$selectedFiles.length > 0}
|
||||||
|
minWidth={320}
|
||||||
|
sticky
|
||||||
|
on:width={(e) => {
|
||||||
|
laneWidth = e.detail / (16 * $userSettings.zoom);
|
||||||
|
lscache.set(laneWidthKey + branch.id, laneWidth, 7 * 1440); // 7 day ttl
|
||||||
|
$defaultBranchWidthRem = laneWidth;
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<style lang="postcss">
|
<style lang="postcss">
|
||||||
.branch-card-wrapper {
|
.branch-card-wrapper {
|
||||||
@ -397,4 +425,12 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* COLLAPSED LANE */
|
||||||
|
.collapsed-lane-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: var(--space-12);
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import BranchHeaderSecondaryActions from './BranchHeaderSecondaryActions.svelte';
|
||||||
import BranchLabel from './BranchLabel.svelte';
|
import BranchLabel from './BranchLabel.svelte';
|
||||||
import BranchLanePopupMenu from './BranchLanePopupMenu.svelte';
|
// import BranchLanePopupMenu from './BranchLanePopupMenu.svelte';
|
||||||
import MergeButton from './MergeButton.svelte';
|
import MergeButton from './MergeButton.svelte';
|
||||||
import Tag from './Tag.svelte';
|
import Tag from './Tag.svelte';
|
||||||
import { clickOutside } from '$lib/clickOutside';
|
// import { clickOutside } from '$lib/clickOutside';
|
||||||
import Button from '$lib/components/Button.svelte';
|
import Button from '$lib/components/Button.svelte';
|
||||||
import Icon, { type IconColor } from '$lib/components/Icon.svelte';
|
import Icon, { type IconColor } from '$lib/components/Icon.svelte';
|
||||||
import { normalizeBranchName } from '$lib/utils/branch';
|
import { normalizeBranchName } from '$lib/utils/branch';
|
||||||
@ -26,6 +27,8 @@
|
|||||||
export let branchService: BranchService;
|
export let branchService: BranchService;
|
||||||
export let projectId: string;
|
export let projectId: string;
|
||||||
|
|
||||||
|
export let isLaneCollapsed = false;
|
||||||
|
|
||||||
export let githubService: GitHubService;
|
export let githubService: GitHubService;
|
||||||
$: pr$ = githubService.get(branch.upstreamName);
|
$: pr$ = githubService.get(branch.upstreamName);
|
||||||
|
|
||||||
@ -117,254 +120,258 @@
|
|||||||
$: hasIntegratedCommits = branch.commits?.some((b) => b.isIntegrated);
|
$: hasIntegratedCommits = branch.commits?.some((b) => b.isIntegrated);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="header__wrapper">
|
{#if isLaneCollapsed}
|
||||||
<div class="header card" bind:this={container} class:isUnapplied>
|
<div class="collapsed-lane" data-remove-from-draggable data-tauri-drag-region>
|
||||||
<div class="header__info">
|
<div class="collapsed-lane__actions">
|
||||||
<div class="header__label">
|
<BranchHeaderSecondaryActions
|
||||||
<BranchLabel
|
{visible}
|
||||||
bind:name={branch.name}
|
{isUnapplied}
|
||||||
on:change={handleBranchNameChange}
|
{branch}
|
||||||
disabled={isUnapplied}
|
{branchController}
|
||||||
/>
|
{projectId}
|
||||||
</div>
|
bind:isLaneCollapsed
|
||||||
<div class="header__remote-branch">
|
bind:meatballButton
|
||||||
{#if !branch.upstream}
|
/>
|
||||||
{#if !branch.active}
|
</div>
|
||||||
<div
|
</div>
|
||||||
class="status-tag text-base-11 text-semibold unapplied"
|
{:else}
|
||||||
use:tooltip={'These changes are stashed away from your working directory.'}
|
<div class="header__wrapper">
|
||||||
>
|
<div class="header card" bind:this={container} class:isUnapplied>
|
||||||
<Icon name="removed-branch-small" /> unapplied
|
<div class="header__info">
|
||||||
</div>
|
<div class="header__label">
|
||||||
{:else if hasIntegratedCommits}
|
<BranchLabel
|
||||||
<div
|
bind:name={branch.name}
|
||||||
class="status-tag text-base-11 text-semibold integrated"
|
on:change={handleBranchNameChange}
|
||||||
use:tooltip={'These changes have been integrated upstream, update your workspace to make this lane disappear.'}
|
disabled={isUnapplied}
|
||||||
>
|
/>
|
||||||
<Icon name="removed-branch-small" /> integrated
|
</div>
|
||||||
</div>
|
<div class="header__remote-branch">
|
||||||
{:else}
|
{#if !branch.upstream}
|
||||||
<div
|
{#if !branch.active}
|
||||||
class="status-tag text-base-11 text-semibold pending"
|
<Tag
|
||||||
use:tooltip={'These changes are in your working directory.'}
|
icon="virtual-branch-small"
|
||||||
>
|
color="light"
|
||||||
<Icon name="virtual-branch-small" /> virtual
|
help="These changes are stashed away from your working directory."
|
||||||
</div>
|
reversedDirection>unapplied</Tag
|
||||||
{/if}
|
>
|
||||||
{#if !isUnapplied}
|
{:else if hasIntegratedCommits}
|
||||||
<div
|
<Tag
|
||||||
class="pending-name"
|
icon="removed-branch-small"
|
||||||
use:tooltip={'Branch name that will be used when pushing. You can change it from the lane menu.'}
|
color="success"
|
||||||
>
|
help="These changes have been integrated upstream, update your workspace to make this lane disappear."
|
||||||
<span class="text-base-11 text-semibold">
|
reversedDirection>integrated</Tag
|
||||||
|
>
|
||||||
|
{:else}
|
||||||
|
<Tag
|
||||||
|
icon="virtual-branch-small"
|
||||||
|
color="light"
|
||||||
|
help="These changes are in your working directory."
|
||||||
|
reversedDirection>virtual</Tag
|
||||||
|
>
|
||||||
|
{/if}
|
||||||
|
{#if !isUnapplied}
|
||||||
|
<Tag
|
||||||
|
disabled
|
||||||
|
help="Branch name that will be used when pushing. You can change it from the lane menu."
|
||||||
|
>
|
||||||
origin/{branch.upstreamName
|
origin/{branch.upstreamName
|
||||||
? branch.upstreamName
|
? branch.upstreamName
|
||||||
: normalizeBranchName(branch.name)}
|
: normalizeBranchName(branch.name)}</Tag
|
||||||
</span>
|
>
|
||||||
</div>
|
{/if}
|
||||||
{/if}
|
{:else}
|
||||||
{:else}
|
|
||||||
<div
|
|
||||||
class="status-tag text-base-11 text-semibold remote"
|
|
||||||
use:tooltip={'At least some of your changes have been pushed'}
|
|
||||||
>
|
|
||||||
<Icon name="remote-branch-small" /> remote
|
|
||||||
</div>
|
|
||||||
<Tag
|
|
||||||
icon="open-link"
|
|
||||||
color="ghost"
|
|
||||||
border
|
|
||||||
clickable
|
|
||||||
shrinkable
|
|
||||||
on:click={(e) => {
|
|
||||||
const url = base?.branchUrl(branch.upstream?.name);
|
|
||||||
if (url) open(url);
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
origin/{branch.upstreamName}
|
|
||||||
</Tag>
|
|
||||||
{#if $pr$?.htmlUrl}
|
|
||||||
<Tag
|
<Tag
|
||||||
icon="pr-small"
|
color="dark"
|
||||||
|
icon="remote-branch-small"
|
||||||
|
help="At least some of your changes have been pushed"
|
||||||
|
reversedDirection>remote</Tag
|
||||||
|
>
|
||||||
|
<Tag
|
||||||
|
icon="open-link"
|
||||||
color="ghost"
|
color="ghost"
|
||||||
border
|
border
|
||||||
clickable
|
clickable
|
||||||
|
shrinkable
|
||||||
on:click={(e) => {
|
on:click={(e) => {
|
||||||
const url = $pr$?.htmlUrl;
|
const url = base?.branchUrl(branch.upstream?.name);
|
||||||
if (url) open(url);
|
if (url) open(url);
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
View PR
|
origin/{branch.upstreamName}
|
||||||
</Tag>
|
</Tag>
|
||||||
|
{#if $pr$?.htmlUrl}
|
||||||
|
<Tag
|
||||||
|
icon="pr-small"
|
||||||
|
color="ghost"
|
||||||
|
border
|
||||||
|
clickable
|
||||||
|
on:click={(e) => {
|
||||||
|
const url = $pr$?.htmlUrl;
|
||||||
|
if (url) open(url);
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
View PR
|
||||||
|
</Tag>
|
||||||
|
{/if}
|
||||||
|
{#if prIcon}
|
||||||
|
<div
|
||||||
|
class="pr-status"
|
||||||
|
role="button"
|
||||||
|
tabindex="0"
|
||||||
|
on:click={fetchPrStatus}
|
||||||
|
on:keypress={fetchPrStatus}
|
||||||
|
use:tooltip={statusToTooltip(prStatus)}
|
||||||
|
>
|
||||||
|
{#if isFetching}
|
||||||
|
<Icon name="spinner" />
|
||||||
|
{:else}
|
||||||
|
<Icon name={prIcon} color={prColor} />
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
{#if prIcon}
|
{#await branch.isMergeable then isMergeable}
|
||||||
<div
|
{#if !isMergeable}
|
||||||
class="pr-status"
|
<Tag
|
||||||
role="button"
|
icon="locked-small"
|
||||||
tabindex="0"
|
color="warning"
|
||||||
on:click={fetchPrStatus}
|
help="Applying this branch will add merge conflict markers that you will have to resolve"
|
||||||
on:keypress={fetchPrStatus}
|
>
|
||||||
use:tooltip={statusToTooltip(prStatus)}
|
Conflict
|
||||||
>
|
</Tag>
|
||||||
{#if isFetching}
|
{/if}
|
||||||
<Icon name="spinner" />
|
{/await}
|
||||||
{:else}
|
</div>
|
||||||
<Icon name={prIcon} color={prColor} />
|
<div class="draggable" data-drag-handle>
|
||||||
{/if}
|
<Icon name="draggable" />
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
|
||||||
{/if}
|
|
||||||
{#await branch.isMergeable then isMergeable}
|
|
||||||
{#if !isMergeable}
|
|
||||||
<Tag
|
|
||||||
icon="locked-small"
|
|
||||||
color="warning"
|
|
||||||
help="Applying this branch will add merge conflict markers that you will have to resolve"
|
|
||||||
>
|
|
||||||
Conflict
|
|
||||||
</Tag>
|
|
||||||
{/if}
|
|
||||||
{/await}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="draggable" data-drag-handle>
|
<div class="header__actions">
|
||||||
<Icon name="draggable-narrow" />
|
<div class="header__buttons">
|
||||||
</div>
|
{#if branch.active}
|
||||||
</div>
|
{#if branch.selectedForChanges}
|
||||||
<div class="header__actions">
|
<Button
|
||||||
<div class="header__buttons">
|
help="New changes will land here"
|
||||||
{#if branch.active}
|
icon="target"
|
||||||
{#if branch.selectedForChanges}
|
notClickable
|
||||||
<Button
|
disabled={isUnapplied}>Default branch</Button
|
||||||
help="New changes will land here"
|
>
|
||||||
icon="target"
|
{:else}
|
||||||
notClickable
|
<Button
|
||||||
disabled={isUnapplied}>Default branch</Button
|
help="When selected, new changes will land here"
|
||||||
>
|
icon="target"
|
||||||
{:else}
|
kind="outlined"
|
||||||
<Button
|
color="neutral"
|
||||||
help="When selected, new changes will land here"
|
disabled={isUnapplied}
|
||||||
icon="target"
|
on:click={async () => {
|
||||||
kind="outlined"
|
await branchController.setSelectedForChanges(branch.id);
|
||||||
color="neutral"
|
}}
|
||||||
disabled={isUnapplied}
|
>
|
||||||
on:click={async () => {
|
Set as default
|
||||||
await branchController.setSelectedForChanges(branch.id);
|
</Button>
|
||||||
}}
|
{/if}
|
||||||
>
|
|
||||||
Set as default
|
|
||||||
</Button>
|
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
<!-- We can't show the merge button until we've waited for checks
|
||||||
<!-- We can't show the merge button until we've waited for checks
|
|
||||||
|
|
||||||
We use a octokit.checks.listForRef to find checks running for a PR, but right after
|
We use a octokit.checks.listForRef to find checks running for a PR, but right after
|
||||||
creation this request succeeds but returns an empty array. So we need a better way
|
creation this request succeeds but returns an empty array. So we need a better way
|
||||||
determining "no checks will run for this PR" such that we can show the merge button
|
determining "no checks will run for this PR" such that we can show the merge button
|
||||||
immediately. -->
|
immediately. -->
|
||||||
{#if $pr$ && !isFetching && (!prStatus || prStatus?.success)}
|
{#if $pr$ && !isFetching && (!prStatus || prStatus?.success)}
|
||||||
<MergeButton
|
<MergeButton
|
||||||
{projectId}
|
|
||||||
disabled={isUnapplied || !$pr$}
|
|
||||||
loading={isMerging}
|
|
||||||
help="Merge pull request and refresh"
|
|
||||||
on:click={async (e) => {
|
|
||||||
isMerging = true;
|
|
||||||
const method = e.detail.method;
|
|
||||||
try {
|
|
||||||
if ($pr$) {
|
|
||||||
await githubService.merge($pr$.number, method);
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// TODO: Should we show the error from GitHub?
|
|
||||||
toasts.error('Failed to merge pull request');
|
|
||||||
} finally {
|
|
||||||
isMerging = false;
|
|
||||||
await fetchPrStatus();
|
|
||||||
await branchService.reloadVirtualBranches();
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
<div class="relative" bind:this={meatballButton}>
|
|
||||||
{#if isUnapplied}
|
|
||||||
<Button
|
|
||||||
help="Deletes the local virtual branch (only)"
|
|
||||||
icon="bin-small"
|
|
||||||
color="neutral"
|
|
||||||
kind="outlined"
|
|
||||||
loading={isDeleting}
|
|
||||||
on:click={async () => {
|
|
||||||
isDeleting = true;
|
|
||||||
try {
|
|
||||||
await branchController.deleteBranch(branch.id);
|
|
||||||
goto(`/${projectId}/board`);
|
|
||||||
} catch (e) {
|
|
||||||
const err = 'Failed to delete branch';
|
|
||||||
toasts.error(err);
|
|
||||||
console.error(err, e);
|
|
||||||
} finally {
|
|
||||||
isDeleting = false;
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Delete
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
help="Restores these changes into your working directory"
|
|
||||||
icon="plus-small"
|
|
||||||
color="primary"
|
|
||||||
kind="outlined"
|
|
||||||
loading={isApplying}
|
|
||||||
on:click={async () => {
|
|
||||||
isApplying = true;
|
|
||||||
try {
|
|
||||||
await branchController.applyBranch(branch.id);
|
|
||||||
goto(`/${projectId}/board`);
|
|
||||||
} catch (e) {
|
|
||||||
const err = 'Failed to apply branch';
|
|
||||||
toast.error(err);
|
|
||||||
console.error(err, e);
|
|
||||||
} finally {
|
|
||||||
isApplying = false;
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Apply
|
|
||||||
</Button>
|
|
||||||
{:else}
|
|
||||||
<Button
|
|
||||||
icon="kebab"
|
|
||||||
kind="outlined"
|
|
||||||
color="neutral"
|
|
||||||
on:click={() => (visible = !visible)}
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
class="branch-popup-menu"
|
|
||||||
use:clickOutside={{
|
|
||||||
trigger: meatballButton,
|
|
||||||
handler: () => (visible = false)
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<BranchLanePopupMenu
|
|
||||||
{branchController}
|
|
||||||
{branch}
|
|
||||||
{projectId}
|
{projectId}
|
||||||
{isUnapplied}
|
disabled={isUnapplied || !$pr$}
|
||||||
bind:visible
|
loading={isMerging}
|
||||||
on:action
|
help="Merge pull request and refresh"
|
||||||
|
on:click={async (e) => {
|
||||||
|
isMerging = true;
|
||||||
|
const method = e.detail.method;
|
||||||
|
try {
|
||||||
|
if ($pr$) {
|
||||||
|
await githubService.merge($pr$.number, method);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// TODO: Should we show the error from GitHub?
|
||||||
|
toasts.error('Failed to merge pull request');
|
||||||
|
} finally {
|
||||||
|
isMerging = false;
|
||||||
|
await fetchPrStatus();
|
||||||
|
await branchService.reloadVirtualBranches();
|
||||||
|
}
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
{/if}
|
||||||
{/if}
|
</div>
|
||||||
|
|
||||||
|
<div class="relative" bind:this={meatballButton}>
|
||||||
|
{#if isUnapplied}
|
||||||
|
<Button
|
||||||
|
help="Deletes the local virtual branch (only)"
|
||||||
|
icon="bin-small"
|
||||||
|
color="neutral"
|
||||||
|
kind="outlined"
|
||||||
|
loading={isDeleting}
|
||||||
|
on:click={async () => {
|
||||||
|
isDeleting = true;
|
||||||
|
try {
|
||||||
|
await branchController.deleteBranch(branch.id);
|
||||||
|
goto(`/${projectId}/board`);
|
||||||
|
} catch (e) {
|
||||||
|
const err = 'Failed to delete branch';
|
||||||
|
toasts.error(err);
|
||||||
|
console.error(err, e);
|
||||||
|
} finally {
|
||||||
|
isDeleting = false;
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Delete
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
help="Restores these changes into your working directory"
|
||||||
|
icon="plus-small"
|
||||||
|
color="primary"
|
||||||
|
kind="outlined"
|
||||||
|
loading={isApplying}
|
||||||
|
on:click={async () => {
|
||||||
|
isApplying = true;
|
||||||
|
try {
|
||||||
|
await branchController.applyBranch(branch.id);
|
||||||
|
goto(`/${projectId}/board`);
|
||||||
|
} catch (e) {
|
||||||
|
const err = 'Failed to apply branch';
|
||||||
|
toast.error(err);
|
||||||
|
console.error(err, e);
|
||||||
|
} finally {
|
||||||
|
isApplying = false;
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Apply
|
||||||
|
</Button>
|
||||||
|
{:else}
|
||||||
|
<div class="header__buttons">
|
||||||
|
<BranchHeaderSecondaryActions
|
||||||
|
{visible}
|
||||||
|
{isUnapplied}
|
||||||
|
{branch}
|
||||||
|
{branchController}
|
||||||
|
{projectId}
|
||||||
|
bind:isLaneCollapsed
|
||||||
|
bind:meatballButton
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="header__top-overlay" data-remove-from-draggable data-tauri-drag-region />
|
||||||
</div>
|
</div>
|
||||||
<div class="header__top-overlay" data-remove-from-draggable data-tauri-drag-region />
|
{/if}
|
||||||
</div>
|
|
||||||
|
|
||||||
<style lang="postcss">
|
<style lang="postcss">
|
||||||
.header__wrapper {
|
.header__wrapper {
|
||||||
@ -443,13 +450,13 @@
|
|||||||
color: var(--clr-theme-scale-ntrl-40);
|
color: var(--clr-theme-scale-ntrl-40);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
.branch-popup-menu {
|
.branch-popup-menu {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: calc(100% + var(--space-4));
|
top: calc(100% + var(--space-4));
|
||||||
right: 0;
|
right: 0;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
}
|
} */
|
||||||
|
|
||||||
.header__remote-branch {
|
.header__remote-branch {
|
||||||
color: var(--clr-theme-scale-ntrl-50);
|
color: var(--clr-theme-scale-ntrl-50);
|
||||||
@ -462,56 +469,6 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-tag {
|
|
||||||
cursor: default;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: var(--space-2);
|
|
||||||
padding: var(--space-2) var(--space-6) var(--space-2) var(--space-4);
|
|
||||||
border-radius: var(--radius-m);
|
|
||||||
}
|
|
||||||
|
|
||||||
.pending {
|
|
||||||
color: var(--clr-theme-scale-pop-30);
|
|
||||||
background: var(--clr-theme-scale-pop-80);
|
|
||||||
}
|
|
||||||
|
|
||||||
.pending-name {
|
|
||||||
background: color-mix(in srgb, var(--clr-theme-scale-ntrl-50) 10%, transparent);
|
|
||||||
border-radius: var(--radius-m);
|
|
||||||
line-height: 120%;
|
|
||||||
height: var(--space-20);
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 0 var(--space-6);
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
& span {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.pending {
|
|
||||||
color: var(--clr-theme-scale-ntrl-30);
|
|
||||||
background: color-mix(in srgb, var(--clr-theme-scale-ntrl-50) 20%, transparent);
|
|
||||||
}
|
|
||||||
|
|
||||||
.integrated {
|
|
||||||
color: var(--clr-theme-succ-on-element);
|
|
||||||
background: var(--clr-theme-succ-element);
|
|
||||||
}
|
|
||||||
|
|
||||||
.remote {
|
|
||||||
color: var(--clr-theme-scale-ntrl-100);
|
|
||||||
background: var(--clr-theme-scale-ntrl-40);
|
|
||||||
}
|
|
||||||
|
|
||||||
.unapplied {
|
|
||||||
color: var(--clr-theme-scale-ntrl-30);
|
|
||||||
background: var(--clr-theme-scale-ntrl-80);
|
|
||||||
}
|
|
||||||
|
|
||||||
.pr-status {
|
.pr-status {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,63 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import BranchLanePopupMenu from './BranchLanePopupMenu.svelte';
|
||||||
|
import { clickOutside } from '$lib/clickOutside';
|
||||||
|
import Button from '$lib/components/Button.svelte';
|
||||||
|
import type { BranchController } from '$lib/vbranches/branchController';
|
||||||
|
import type { Branch } from '$lib/vbranches/types';
|
||||||
|
|
||||||
|
export let isLaneCollapsed = false;
|
||||||
|
export let visible = false;
|
||||||
|
|
||||||
|
export let isUnapplied = false;
|
||||||
|
export let branch: Branch;
|
||||||
|
export let branchController: BranchController;
|
||||||
|
export let projectId: string;
|
||||||
|
|
||||||
|
export let meatballButton: HTMLDivElement;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div style="display: contents;">
|
||||||
|
<Button
|
||||||
|
icon="fold-lane"
|
||||||
|
kind="outlined"
|
||||||
|
color="neutral"
|
||||||
|
help="Fold this lane"
|
||||||
|
on:click={() => {
|
||||||
|
isLaneCollapsed = !isLaneCollapsed;
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
icon="kebab"
|
||||||
|
kind="outlined"
|
||||||
|
color="neutral"
|
||||||
|
on:click={() => {
|
||||||
|
console.log('meatballButton', meatballButton);
|
||||||
|
visible = !visible;
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
class="branch-popup-menu"
|
||||||
|
use:clickOutside={{
|
||||||
|
trigger: meatballButton,
|
||||||
|
handler: () => (visible = false)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<BranchLanePopupMenu
|
||||||
|
{branchController}
|
||||||
|
{branch}
|
||||||
|
{projectId}
|
||||||
|
{isUnapplied}
|
||||||
|
bind:visible
|
||||||
|
on:action
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style lang="post-css">
|
||||||
|
.branch-popup-menu {
|
||||||
|
position: absolute;
|
||||||
|
top: calc(100% + var(--space-4));
|
||||||
|
right: 0;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
</style>
|
@ -24,7 +24,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if inputActive}
|
{#if inputActive}
|
||||||
<span class="branch-name-mesure-el text-base-13" bind:this={mesureEl}>{name}</span>
|
<span class="branch-name-mesure-el text-base-13 text-bold" bind:this={mesureEl}>{name}</span>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
{disabled}
|
{disabled}
|
||||||
@ -39,7 +39,7 @@
|
|||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
title={name}
|
title={name}
|
||||||
class="branch-name-input text-base-13"
|
class="branch-name-input text-base-13 text-bold"
|
||||||
on:dblclick|stopPropagation
|
on:dblclick|stopPropagation
|
||||||
on:blur={() => (inputActive = false)}
|
on:blur={() => (inputActive = false)}
|
||||||
on:keydown={(e) => {
|
on:keydown={(e) => {
|
||||||
@ -64,7 +64,7 @@
|
|||||||
bind:this={label}
|
bind:this={label}
|
||||||
role="textbox"
|
role="textbox"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
class="branch-name text-base-13 truncate"
|
class="branch-name text-base-13 text-bold truncate"
|
||||||
on:keydown={(e) => e.key == 'Enter' && activateInput()}
|
on:keydown={(e) => e.key == 'Enter' && activateInput()}
|
||||||
on:click={activateInput}
|
on:click={activateInput}
|
||||||
>
|
>
|
||||||
|
@ -77,7 +77,7 @@
|
|||||||
}
|
}
|
||||||
.clickable {
|
.clickable {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: var(--clr-theme-container-sub);
|
background: var(--clr-theme-container-sub);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -86,7 +86,7 @@
|
|||||||
|
|
||||||
.ghost {
|
.ghost {
|
||||||
color: var(--clr-theme-scale-ntrl-40);
|
color: var(--clr-theme-scale-ntrl-40);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: color-mix(in srgb, var(--clr-core-ntrl-50), transparent 85%);
|
background: color-mix(in srgb, var(--clr-core-ntrl-50), transparent 85%);
|
||||||
}
|
}
|
||||||
&.tag-border {
|
&.tag-border {
|
||||||
@ -97,7 +97,7 @@
|
|||||||
.light {
|
.light {
|
||||||
color: var(--clr-theme-scale-ntrl-40);
|
color: var(--clr-theme-scale-ntrl-40);
|
||||||
background: color-mix(in srgb, var(--clr-core-ntrl-50), transparent 85%);
|
background: color-mix(in srgb, var(--clr-core-ntrl-50), transparent 85%);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: color-mix(in srgb, var(--clr-core-ntrl-50), transparent 75%);
|
background: color-mix(in srgb, var(--clr-core-ntrl-50), transparent 75%);
|
||||||
}
|
}
|
||||||
&.tag-border {
|
&.tag-border {
|
||||||
@ -108,7 +108,7 @@
|
|||||||
.dark {
|
.dark {
|
||||||
color: var(--clr-theme-scale-ntrl-100);
|
color: var(--clr-theme-scale-ntrl-100);
|
||||||
background: var(--clr-theme-scale-ntrl-40);
|
background: var(--clr-theme-scale-ntrl-40);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: var(--clr-theme-scale-ntrl-30);
|
background: var(--clr-theme-scale-ntrl-30);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -116,7 +116,7 @@
|
|||||||
.success {
|
.success {
|
||||||
color: var(--clr-theme-scale-succ-20);
|
color: var(--clr-theme-scale-succ-20);
|
||||||
background: color-mix(in srgb, var(--clr-core-succ-50), transparent 80%);
|
background: color-mix(in srgb, var(--clr-core-succ-50), transparent 80%);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: color-mix(in srgb, var(--clr-core-succ-50), transparent 70%);
|
background: color-mix(in srgb, var(--clr-core-succ-50), transparent 70%);
|
||||||
}
|
}
|
||||||
&.tag-border {
|
&.tag-border {
|
||||||
@ -125,7 +125,7 @@
|
|||||||
&.filled {
|
&.filled {
|
||||||
color: var(--clr-theme-succ-on-element);
|
color: var(--clr-theme-succ-on-element);
|
||||||
background: var(--clr-theme-succ-element);
|
background: var(--clr-theme-succ-element);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: var(--clr-theme-succ-element-dim);
|
background: var(--clr-theme-succ-element-dim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -134,7 +134,7 @@
|
|||||||
.error {
|
.error {
|
||||||
color: var(--clr-theme-scale-err-20);
|
color: var(--clr-theme-scale-err-20);
|
||||||
background: color-mix(in srgb, var(--clr-core-err-50), transparent 80%);
|
background: color-mix(in srgb, var(--clr-core-err-50), transparent 80%);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: color-mix(in srgb, var(--clr-core-err-50), transparent 70%);
|
background: color-mix(in srgb, var(--clr-core-err-50), transparent 70%);
|
||||||
}
|
}
|
||||||
&.tag-border {
|
&.tag-border {
|
||||||
@ -143,7 +143,7 @@
|
|||||||
&.filled {
|
&.filled {
|
||||||
color: var(--clr-theme-err-on-element);
|
color: var(--clr-theme-err-on-element);
|
||||||
background: var(--clr-theme-err-element);
|
background: var(--clr-theme-err-element);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: var(--clr-theme-err-element-dim);
|
background: var(--clr-theme-err-element-dim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -152,7 +152,7 @@
|
|||||||
.warning {
|
.warning {
|
||||||
color: var(--clr-theme-scale-warn-20);
|
color: var(--clr-theme-scale-warn-20);
|
||||||
background: color-mix(in srgb, var(--clr-core-warn-50), transparent 80%);
|
background: color-mix(in srgb, var(--clr-core-warn-50), transparent 80%);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: color-mix(in srgb, var(--clr-core-warn-50), transparent 70%);
|
background: color-mix(in srgb, var(--clr-core-warn-50), transparent 70%);
|
||||||
}
|
}
|
||||||
&.tag-border {
|
&.tag-border {
|
||||||
@ -161,7 +161,7 @@
|
|||||||
&.filled {
|
&.filled {
|
||||||
color: var(--clr-theme-warn-on-element);
|
color: var(--clr-theme-warn-on-element);
|
||||||
background: var(--clr-theme-warn-element);
|
background: var(--clr-theme-warn-element);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: var(--clr-theme-warn-element-dim);
|
background: var(--clr-theme-warn-element-dim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -170,7 +170,7 @@
|
|||||||
.purple {
|
.purple {
|
||||||
color: var(--clr-theme-scale-purple-20);
|
color: var(--clr-theme-scale-purple-20);
|
||||||
background: color-mix(in srgb, var(--clr-core-purple-50), transparent 80%);
|
background: color-mix(in srgb, var(--clr-core-purple-50), transparent 80%);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: color-mix(in srgb, var(--clr-core-purple-50), transparent 70%);
|
background: color-mix(in srgb, var(--clr-core-purple-50), transparent 70%);
|
||||||
}
|
}
|
||||||
&.tag-border {
|
&.tag-border {
|
||||||
@ -179,7 +179,7 @@
|
|||||||
&.filled {
|
&.filled {
|
||||||
color: var(--clr-theme-purple-on-element);
|
color: var(--clr-theme-purple-on-element);
|
||||||
background: var(--clr-theme-purple-element);
|
background: var(--clr-theme-purple-element);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: var(--clr-theme-purple-element-dim);
|
background: var(--clr-theme-purple-element-dim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,7 +188,7 @@
|
|||||||
.pop {
|
.pop {
|
||||||
color: var(--clr-theme-scale-pop-20);
|
color: var(--clr-theme-scale-pop-20);
|
||||||
background: color-mix(in srgb, var(--clr-core-pop-50), transparent 80%);
|
background: color-mix(in srgb, var(--clr-core-pop-50), transparent 80%);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: color-mix(in srgb, var(--clr-core-pop-50), transparent 70%);
|
background: color-mix(in srgb, var(--clr-core-pop-50), transparent 70%);
|
||||||
}
|
}
|
||||||
&.tag-border {
|
&.tag-border {
|
||||||
@ -197,7 +197,7 @@
|
|||||||
&.filled {
|
&.filled {
|
||||||
color: var(--clr-theme-pop-on-element);
|
color: var(--clr-theme-pop-on-element);
|
||||||
background: var(--clr-theme-pop-element);
|
background: var(--clr-theme-pop-element);
|
||||||
&:hover {
|
&:not(.not-button):hover {
|
||||||
background: var(--clr-theme-pop-element-dim);
|
background: var(--clr-theme-pop-element-dim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -206,11 +206,10 @@
|
|||||||
/* modifiers */
|
/* modifiers */
|
||||||
|
|
||||||
.not-button {
|
.not-button {
|
||||||
pointer-events: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.disabled {
|
.disabled {
|
||||||
pointer-events: none;
|
|
||||||
background-color: color-mix(in srgb, var(--clr-theme-scale-ntrl-50) 10%, transparent);
|
background-color: color-mix(in srgb, var(--clr-theme-scale-ntrl-50) 10%, transparent);
|
||||||
color: var(--clr-core-ntrl-50);
|
color: var(--clr-core-ntrl-50);
|
||||||
}
|
}
|
||||||
|
@ -69,5 +69,13 @@
|
|||||||
"removed-branch-small": "M3.38588 10.6431L8.00002 7.87463L12.6142 10.6431L13.3859 9.35687L9.45775 6.99999L13.3859 4.64311L12.6141 3.35687L8.00002 6.12534L3.38589 3.35687L2.61415 4.64311L6.54228 6.99999L2.61414 9.35687L3.38588 10.6431Z M8.75002 13V9.99999H7.25002V13H8.75002Z",
|
"removed-branch-small": "M3.38588 10.6431L8.00002 7.87463L12.6142 10.6431L13.3859 9.35687L9.45775 6.99999L13.3859 4.64311L12.6141 3.35687L8.00002 6.12534L3.38589 3.35687L2.61415 4.64311L6.54228 6.99999L2.61414 9.35687L3.38588 10.6431Z M8.75002 13V9.99999H7.25002V13H8.75002Z",
|
||||||
"target": "M5.24988 7.99805C5.24988 6.47926 6.48109 5.24805 7.99988 5.24805C9.51866 5.24805 10.7499 6.47926 10.7499 7.99805C10.7499 9.51683 9.51866 10.748 7.99988 10.748C6.48109 10.748 5.24988 9.51683 5.24988 7.99805ZM7.99988 6.74805C7.30952 6.74805 6.74988 7.30769 6.74988 7.99805C6.74988 8.6884 7.30952 9.24805 7.99988 9.24805C8.69023 9.24805 9.24988 8.6884 9.24988 7.99805C9.24988 7.30769 8.69023 6.74805 7.99988 6.74805Z M2.25 8C2.25 4.82436 4.82436 2.25 8 2.25C11.1756 2.25 13.75 4.82436 13.75 8C13.75 11.1756 11.1756 13.75 8 13.75C4.82436 13.75 2.25 11.1756 2.25 8ZM8 3.75C5.65279 3.75 3.75 5.65279 3.75 8C3.75 10.3472 5.65279 12.25 8 12.25C10.3472 12.25 12.25 10.3472 12.25 8C12.25 5.65279 10.3472 3.75 8 3.75Z",
|
"target": "M5.24988 7.99805C5.24988 6.47926 6.48109 5.24805 7.99988 5.24805C9.51866 5.24805 10.7499 6.47926 10.7499 7.99805C10.7499 9.51683 9.51866 10.748 7.99988 10.748C6.48109 10.748 5.24988 9.51683 5.24988 7.99805ZM7.99988 6.74805C7.30952 6.74805 6.74988 7.30769 6.74988 7.99805C6.74988 8.6884 7.30952 9.24805 7.99988 9.24805C8.69023 9.24805 9.24988 8.6884 9.24988 7.99805C9.24988 7.30769 8.69023 6.74805 7.99988 6.74805Z M2.25 8C2.25 4.82436 4.82436 2.25 8 2.25C11.1756 2.25 13.75 4.82436 13.75 8C13.75 11.1756 11.1756 13.75 8 13.75C4.82436 13.75 2.25 11.1756 2.25 8ZM8 3.75C5.65279 3.75 3.75 5.65279 3.75 8C3.75 10.3472 5.65279 12.25 8 12.25C10.3472 12.25 12.25 10.3472 12.25 8C12.25 5.65279 10.3472 3.75 8 3.75Z",
|
||||||
"pin": "M4.65842 2.07243L1.94734 4.78351C1.1397 5.59115 1.1397 6.9006 1.94735 7.70824C2.47262 8.23351 3.22365 8.4253 3.91415 8.25174L4.95432 9.82158C4.42239 10.6621 4.53518 11.7726 5.25174 12.4892C6.09106 13.3285 7.45187 13.3285 8.29119 12.4892L9.79734 10.983L13.3089 14.4946L14.3696 13.4339L10.858 9.92235L12.3641 8.41628C13.2034 7.57697 13.2034 6.21616 12.3641 5.37685C11.6475 4.66024 10.5369 4.54748 9.69633 5.07953L8.12657 4.03941C8.30021 3.34887 8.10844 2.59775 7.58312 2.07243C6.77549 1.2648 5.46605 1.2648 4.65842 2.07243ZM3.00801 5.84417L5.71908 3.13309C5.94093 2.91124 6.30061 2.91124 6.52246 3.13309C6.71029 3.32092 6.74288 3.61383 6.60094 3.83835L6.16002 4.53577L9.75834 6.92001L10.4452 6.38456C10.7036 6.18309 11.0717 6.2058 11.3034 6.43751C11.5569 6.69104 11.5569 7.10209 11.3034 7.35562L7.23053 11.4285C6.97699 11.682 6.56594 11.682 6.3124 11.4285C6.08069 11.1968 6.05798 10.8287 6.25944 10.5703L7.98437 8.59718L6.95997 7.54196L5.94244 8.59718L5.18683 7.45682L5.95283 6.73243L4.92218 5.64258L3.90389 6.60557L3.71328 6.72606C3.48875 6.86801 3.19584 6.83541 3.00801 6.64758C2.78615 6.42572 2.78615 6.06602 3.00801 5.84417Z",
|
"pin": "M4.65842 2.07243L1.94734 4.78351C1.1397 5.59115 1.1397 6.9006 1.94735 7.70824C2.47262 8.23351 3.22365 8.4253 3.91415 8.25174L4.95432 9.82158C4.42239 10.6621 4.53518 11.7726 5.25174 12.4892C6.09106 13.3285 7.45187 13.3285 8.29119 12.4892L9.79734 10.983L13.3089 14.4946L14.3696 13.4339L10.858 9.92235L12.3641 8.41628C13.2034 7.57697 13.2034 6.21616 12.3641 5.37685C11.6475 4.66024 10.5369 4.54748 9.69633 5.07953L8.12657 4.03941C8.30021 3.34887 8.10844 2.59775 7.58312 2.07243C6.77549 1.2648 5.46605 1.2648 4.65842 2.07243ZM3.00801 5.84417L5.71908 3.13309C5.94093 2.91124 6.30061 2.91124 6.52246 3.13309C6.71029 3.32092 6.74288 3.61383 6.60094 3.83835L6.16002 4.53577L9.75834 6.92001L10.4452 6.38456C10.7036 6.18309 11.0717 6.2058 11.3034 6.43751C11.5569 6.69104 11.5569 7.10209 11.3034 7.35562L7.23053 11.4285C6.97699 11.682 6.56594 11.682 6.3124 11.4285C6.08069 11.1968 6.05798 10.8287 6.25944 10.5703L7.98437 8.59718L6.95997 7.54196L5.94244 8.59718L5.18683 7.45682L5.95283 6.73243L4.92218 5.64258L3.90389 6.60557L3.71328 6.72606C3.48875 6.86801 3.19584 6.83541 3.00801 6.64758C2.78615 6.42572 2.78615 6.06602 3.00801 5.84417Z",
|
||||||
"draggable-horizontal-narrow": "M4 4.25C4 3.83579 4.33579 3.5 4.75 3.5H11.25C11.6642 3.5 12 3.83579 12 4.25C12 4.66421 11.6642 5 11.25 5H4.75C4.33579 5 4 4.66421 4 4.25Z M4 8.25C4 7.83579 4.33579 7.5 4.75 7.5H11.25C11.6642 7.5 12 7.83579 12 8.25C12 8.66421 11.6642 9 11.25 9H4.75C4.33579 9 4 8.66421 4 8.25Z M4 12.25C4 11.8358 4.33579 11.5 4.75 11.5H11.25C11.6642 11.5 12 11.8358 12 12.25C12 12.6642 11.6642 13 11.25 13H4.75C4.33579 13 4 12.6642 4 12.25Z"
|
"draggable-horizontal-narrow": "M4 4.25C4 3.83579 4.33579 3.5 4.75 3.5H11.25C11.6642 3.5 12 3.83579 12 4.25C12 4.66421 11.6642 5 11.25 5H4.75C4.33579 5 4 4.66421 4 4.25Z M4 8.25C4 7.83579 4.33579 7.5 4.75 7.5H11.25C11.6642 7.5 12 7.83579 12 8.25C12 8.66421 11.6642 9 11.25 9H4.75C4.33579 9 4 8.66421 4 8.25Z M4 12.25C4 11.8358 4.33579 11.5 4.75 11.5H11.25C11.6642 11.5 12 11.8358 12 12.25C12 12.6642 11.6642 13 11.25 13H4.75C4.33579 13 4 12.6642 4 12.25Z",
|
||||||
|
"fold-lane": "M3 2C1.89543 2 1 2.89543 1 4V12C1 13.1046 1.89543 14 3 14H4C5.10457 14 6 13.1046 6 12V4C6 2.89543 5.10457 2 4 2H3ZM4 3.5H3C2.72386 3.5 2.5 3.72386 2.5 4V12C2.5 12.2761 2.72386 12.5 3 12.5H4C4.27614 12.5 4.5 12.2761 4.5 12V4C4.5 3.72386 4.27614 3.5 4 3.5Z M12.75 2C12.3358 2 12 2.33579 12 2.75C12 3.16421 12.3358 3.5 12.75 3.5H13C13.2761 3.5 13.5 3.72386 13.5 4V4.25C13.5 4.66421 13.8358 5 14.25 5C14.6642 5 15 4.66421 15 4.25V4C15 2.89543 14.1046 2 13 2H12.75Z M15 11.75C15 11.3358 14.6642 11 14.25 11C13.8358 11 13.5 11.3358 13.5 11.75V12C13.5 12.2761 13.2761 12.5 13 12.5H12.75C12.3358 12.5 12 12.8358 12 13.25C12 13.6642 12.3358 14 12.75 14H13C14.1046 14 15 13.1046 15 12V11.75Z M14.25 6.5C13.8358 6.5 13.5 6.83579 13.5 7.25V8.75C13.5 9.16421 13.8358 9.5 14.25 9.5C14.6642 9.5 15 9.16421 15 8.75V7.25C15 6.83579 14.6642 6.5 14.25 6.5Z M9.75 12.5C10.1642 12.5 10.5 12.8358 10.5 13.25C10.5 13.6642 10.1642 14 9.75 14H8.25C7.83579 14 7.5 13.6642 7.5 13.25C7.5 12.8358 7.83579 12.5 8.25 12.5H9.75Z M10.5 2.75C10.5 2.33579 10.1642 2 9.75 2H8.25C7.83579 2 7.5 2.33579 7.5 2.75C7.5 3.16421 7.83579 3.5 8.25 3.5H9.75C10.1642 3.5 10.5 3.16421 10.5 2.75Z",
|
||||||
|
"unfold-lane": "M4 2.75C4 2.33579 3.66421 2 3.25 2H3C1.89543 2 1 2.89543 1 4V4.25C1 4.66421 1.33579 5 1.75 5C2.16421 5 2.5 4.66421 2.5 4.25V4C2.5 3.72386 2.72386 3.5 3 3.5H3.25C3.66421 3.5 4 3.16421 4 2.75Z M1.75 11C1.33579 11 1 11.3358 1 11.75V12C1 13.1046 1.89543 14 3 14H3.25C3.66421 14 4 13.6642 4 13.25C4 12.8358 3.66421 12.5 3.25 12.5H3C2.72386 12.5 2.5 12.2761 2.5 12V11.75C2.5 11.3358 2.16421 11 1.75 11Z M1.75 6.5C2.16421 6.5 2.5 6.83579 2.5 7.25V8.75C2.5 9.16421 2.16421 9.5 1.75 9.5C1.33579 9.5 1 9.16421 1 8.75V7.25C1 6.83579 1.33579 6.5 1.75 6.5Z M6.25 12.5C5.83579 12.5 5.5 12.8358 5.5 13.25C5.5 13.6642 5.83579 14 6.25 14H8.75C8.78211 14 8.81375 13.998 8.84479 13.9941C8.89601 13.998 8.94777 14 9 14H13C14.1046 14 15 13.1046 15 12V4C15 2.89543 14.1046 2 13 2H9C8.94777 2 8.89601 2.002 8.84479 2.00593C8.81375 2.00202 8.78211 2 8.75 2H6.25C5.83579 2 5.5 2.33579 5.5 2.75C5.5 3.16421 5.83579 3.5 6.25 3.5H7.06301C7.02188 3.65981 7 3.82735 7 4V12C7 12.1726 7.02188 12.3402 7.06301 12.5H6.25ZM9 3.5H13C13.2761 3.5 13.5 3.72386 13.5 4V12C13.5 12.2761 13.2761 12.5 13 12.5H9C8.72386 12.5 8.5 12.2761 8.5 12V4C8.5 3.72386 8.72386 3.5 9 3.5Z",
|
||||||
|
"merged-pr-small": "M6.32237 6.86159C7.29909 6.52151 8 5.59261 8 4.5C8 3.11929 6.88071 2 5.5 2C4.11929 2 3 3.11929 3 4.5C3 5.61941 3.73572 6.56698 4.75 6.88555V13H6.25V8.89185C6.48404 9.01126 6.73846 9.09858 7.00806 9.1476L9.22361 9.55043C9.81797 9.65849 10.25 10.1762 10.25 10.7803V13H11.75V10.7803C11.75 9.45123 10.7995 8.31237 9.49193 8.07462L7.27639 7.6718C6.82616 7.58994 6.46908 7.27305 6.32237 6.86159Z",
|
||||||
|
"closed-pr-small": "M8.93934 6L6.46967 3.53033L7.53033 2.46967L10 4.93934L12.4697 2.46967L13.5303 3.53033L11.0607 6L13.5303 8.46967L12.4697 9.53033L10 7.06066L7.53033 9.53033L6.46967 8.46967L8.93934 6Z M3.25 4V13H4.75V4H3.25Z M9.25 9V13H10.75V9H9.25Z",
|
||||||
|
"draft-pr-small": "M10.75 7.88555C11.7643 7.56698 12.5 6.61941 12.5 5.5C12.5 4.11929 11.3807 3 10 3C8.61929 3 7.5 4.11929 7.5 5.5C7.5 6.61941 8.23572 7.56698 9.25 7.88555V10H10.75V7.88555Z M3.25 4V13H4.75V4H3.25Z M9.25 11V13H10.75V11H9.25Z",
|
||||||
|
"error-small": "M6.49662 2.5C5.95319 2.5 5.43315 2.72114 5.05616 3.11253L3.05954 5.18542C2.70056 5.55811 2.5 6.05543 2.5 6.57289V9.51506C2.5 10.0441 2.70961 10.5516 3.08293 10.9264L5.05988 12.9114C5.43518 13.2882 5.94511 13.5 6.47695 13.5H9.4673C10.0059 13.5 10.5217 13.2828 10.898 12.8975L12.9307 10.8165C13.2957 10.4428 13.5 9.94127 13.5 9.41897V6.58103C13.5 6.05873 13.2957 5.55716 12.9307 5.18353L10.898 3.1025C10.5217 2.71722 10.0059 2.5 9.4673 2.5H6.49662ZM7 7.42857C7 7.98086 7.44771 8.42857 8 8.42857C8.55228 8.42857 9 7.98086 9 7.42857V6C9 5.44771 8.55228 5 8 5C7.44771 5 7 5.44771 7 6V7.42857ZM7 10.1429C7 10.6162 7.38376 11 7.85714 11H8.14286C8.61624 11 9 10.6162 9 10.1429C9 9.66947 8.61624 9.28571 8.14286 9.28571H7.85714C7.38376 9.28571 7 9.66947 7 10.1429Z",
|
||||||
|
"info-small": "M8 2.5C4.96244 2.5 2.5 4.96243 2.5 8C2.5 11.0376 4.96243 13.5 8 13.5C11.0376 13.5 13.5 11.0376 13.5 8C13.5 4.96243 11.0376 2.5 8 2.5ZM9 8.57143C9 8.01914 8.55229 7.57143 8 7.57143C7.44772 7.57143 7 8.01914 7 8.57143V10C7 10.5523 7.44772 11 8 11C8.55229 11 9 10.5523 9 10V8.57143ZM9 5.85714C9 5.38376 8.61625 5 8.14286 5H7.85715C7.38376 5 7 5.38376 7 5.85714C7 6.33053 7.38376 6.71429 7.85714 6.71429H8.14286C8.61625 6.71429 9 6.33053 9 5.85714Z",
|
||||||
|
"success-small": "M8 2.5C4.96243 2.5 2.5 4.96243 2.5 8C2.5 11.0376 4.96243 13.5 8 13.5C11.0376 13.5 13.5 11.0376 13.5 8C13.5 4.96243 11.0376 2.5 8 2.5ZM7.58583 8.6724C7.48652 8.78274 7.31349 8.78274 7.21418 8.6724L5.55748 6.83161L4.44253 7.83506L6.09924 9.67584C6.79441 10.4483 8.00559 10.4483 8.70077 9.67584L11.5575 6.50172L10.4425 5.49828L7.58583 8.6724Z"
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ export interface ToolTipOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultOptions: Partial<ToolTipOptions> = {
|
const defaultOptions: Partial<ToolTipOptions> = {
|
||||||
delay: 1500
|
delay: 1200
|
||||||
};
|
};
|
||||||
|
|
||||||
export function tooltip(node: HTMLElement, optsOrString: ToolTipOptions | string | undefined) {
|
export function tooltip(node: HTMLElement, optsOrString: ToolTipOptions | string | undefined) {
|
||||||
|
Loading…
Reference in New Issue
Block a user