-
Notifications
You must be signed in to change notification settings - Fork 171
Expand file tree
/
Copy pathToolbar.svelte
More file actions
84 lines (79 loc) · 2.78 KB
/
Toolbar.svelte
File metadata and controls
84 lines (79 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<script lang="ts">
import * as DropdownMenu from "@rilldata/web-common/components/dropdown-menu/";
import ThreeDot from "@rilldata/web-common/components/icons/ThreeDot.svelte";
import Trash from "@rilldata/web-common/components/icons/Trash.svelte";
import { Copy } from "lucide-svelte";
import type { BaseCanvasComponent } from "./components/BaseCanvasComponent";
import type { ComponentWithMetricsView } from "./components/types";
import ExploreLink from "./explore-link/ExploreLink.svelte";
export let dropdownOpen = false;
export let onDelete: () => void;
export let onDuplicate: () => void;
export let editable = false;
export let component: BaseCanvasComponent;
export let navigationEnabled: boolean = true;
// Component types that support link to explore functionality
const EXPLORE_SUPPORTED_TYPES = [
"kpi_grid",
"leaderboard",
"table",
"pivot",
"bar_chart",
"line_chart",
"area_chart",
"stacked_bar",
"stacked_bar_normalized",
"donut_chart",
"pie_chart",
"heatmap",
"combo_chart",
"custom_chart",
] as const;
$: showExplore =
navigationEnabled &&
EXPLORE_SUPPORTED_TYPES.includes(component.type as any);
$: exploreComponent = showExplore
? (component as BaseCanvasComponent<ComponentWithMetricsView>)
: null;
</script>
<div
class:!flex={dropdownOpen}
class="group-hover:flex p-0 overflow-hidden bg-surface-card gap-x-1 items-center justify-center hidden toolbar top-0 right-0 shadow-sm z-[1000] absolute w-fit border-l border-b pointer-events-auto rounded-bl-sm rounded-tr-sm"
>
{#if editable}
<!-- Editable mode: Show dropdown with explore option -->
<DropdownMenu.Root bind:open={dropdownOpen}>
<DropdownMenu.Trigger
class="size-7 grid place-content-center bg-surface-card hover:brightness-[85%] active:brightness-75"
>
<ThreeDot size="16px" />
</DropdownMenu.Trigger>
<DropdownMenu.Content
align="end"
sideOffset={8}
alignOffset={-4}
class="w-40"
>
<DropdownMenu.Item onclick={onDuplicate}>
<Copy size="14px" />
Duplicate
</DropdownMenu.Item>
{#if showExplore && exploreComponent}
<DropdownMenu.Separator />
<ExploreLink component={exploreComponent} mode="dropdown-item" />
{/if}
<DropdownMenu.Separator />
<DropdownMenu.Item
onclick={onDelete}
class="text-red-600 data-[highlighted]:text-red-600"
>
<Trash size="14px" />
Delete
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
{:else if showExplore && exploreComponent}
<!-- Non-editable mode: Show explore icon button -->
<ExploreLink component={exploreComponent} mode="icon-button" />
{/if}
</div>