diff --git a/src/lib/components/standalone-activities/saved-views.svelte b/src/lib/components/standalone-activities/saved-views.svelte
index 05dab00dc2..105c28a65a 100644
--- a/src/lib/components/standalone-activities/saved-views.svelte
+++ b/src/lib/components/standalone-activities/saved-views.svelte
@@ -12,6 +12,7 @@
import Button from '$lib/holocene/button.svelte';
import type { IconName } from '$lib/holocene/icon';
import Icon from '$lib/holocene/icon/icon.svelte';
+ import Tooltip from '$lib/holocene/tooltip.svelte';
import { translate } from '$lib/i18n/translate';
import { activityRefresh } from '$lib/stores/activities';
import { activityFilters } from '$lib/stores/filters';
@@ -199,51 +200,6 @@
clearParameters: [currentPageKey],
});
};
-
- function portal(
- node: HTMLElement,
- target: HTMLElement | string = document.body,
- ) {
- const targetEl =
- typeof target === 'string'
- ? (document.querySelector(target) as HTMLElement | null)
- : (target as HTMLElement | null);
- if (targetEl) targetEl.appendChild(node);
- return {
- destroy() {
- if (node.parentNode) node.parentNode.removeChild(node);
- },
- };
- }
-
- let showTooltip = $state(false);
- let tooltipText: string | undefined = $state();
- let tooltipX = $state(0);
- let tooltipY = $state(0);
-
- const positionTooltipFrom = (el: HTMLElement) => {
- const rect = el.getBoundingClientRect();
- tooltipX = Math.round(rect.right + 8);
- tooltipY = Math.round(rect.top + 16);
- };
-
- const onQueryBtnEnter = (e: MouseEvent | FocusEvent, name: string) => {
- if ($savedQueryNavOpen) return;
- const el = e.currentTarget as HTMLElement;
- tooltipText = name;
- positionTooltipFrom(el);
- showTooltip = true;
- };
-
- const onQueryBtnMove = (e: MouseEvent | FocusEvent) => {
- if (!showTooltip) return;
- const el = e.currentTarget as HTMLElement;
- positionTooltipFrom(el);
- };
-
- const onQueryBtnLeave = () => {
- showTooltip = false;
- };
{#snippet queryButton(view: SavedQuery)}
- onQueryBtnEnter(e, view.name)}
- onmousemove={onQueryBtnMove}
- onmouseleave={onQueryBtnLeave}
- onfocusin={(e) => onQueryBtnEnter(e, view.name)}
- onfocusout={onQueryBtnLeave}
+ tooltipClass="max-w-[280px]"
>
-
+
{/snippet}
{#snippet queryBadge({
@@ -503,14 +461,3 @@
{/if}
{/snippet}
-
-{#if showTooltip && tooltipText}
-
- {tooltipText}
-
-{/if}
diff --git a/src/lib/holocene/tooltip.svelte b/src/lib/holocene/tooltip.svelte
index c97b26ae36..fe3c3bcdd6 100644
--- a/src/lib/holocene/tooltip.svelte
+++ b/src/lib/holocene/tooltip.svelte
@@ -147,7 +147,7 @@
})();
-
+
{#if hide}
diff --git a/src/lib/pages/saved-query-views.svelte b/src/lib/pages/saved-query-views.svelte
index 5bce305524..0476ea6663 100644
--- a/src/lib/pages/saved-query-views.svelte
+++ b/src/lib/pages/saved-query-views.svelte
@@ -12,6 +12,7 @@
import Button from '$lib/holocene/button.svelte';
import type { IconName } from '$lib/holocene/icon';
import Icon from '$lib/holocene/icon/icon.svelte';
+ import Tooltip from '$lib/holocene/tooltip.svelte';
import { translate } from '$lib/i18n/translate';
import { workflowFilters } from '$lib/stores/filters';
import { savedQueryNavOpen } from '$lib/stores/nav-open';
@@ -197,51 +198,6 @@
clearParameters: [currentPageKey],
});
};
-
- function portal(
- node: HTMLElement,
- target: HTMLElement | string = document.body,
- ) {
- const targetEl =
- typeof target === 'string'
- ? (document.querySelector(target) as HTMLElement | null)
- : (target as HTMLElement | null);
- if (targetEl) targetEl.appendChild(node);
- return {
- destroy() {
- if (node.parentNode) node.parentNode.removeChild(node);
- },
- };
- }
-
- let showTooltip = $state(false);
- let tooltipText: string | undefined = $state();
- let tooltipX = $state(0);
- let tooltipY = $state(0);
-
- const positionTooltipFrom = (el: HTMLElement) => {
- const rect = el.getBoundingClientRect();
- tooltipX = Math.round(rect.right + 8);
- tooltipY = Math.round(rect.top + 16);
- };
-
- const onQueryBtnEnter = (e: MouseEvent | FocusEvent, name: string) => {
- if ($savedQueryNavOpen) return;
- const el = e.currentTarget as HTMLElement;
- tooltipText = name;
- positionTooltipFrom(el);
- showTooltip = true;
- };
-
- const onQueryBtnMove = (e: MouseEvent | FocusEvent) => {
- if (!showTooltip) return;
- const el = e.currentTarget as HTMLElement;
- positionTooltipFrom(el);
- };
-
- const onQueryBtnLeave = () => {
- showTooltip = false;
- };
{#snippet queryButton(view: SavedQuery)}
-
- onQueryBtnEnter(
- e,
- view.id === TASK_FAILURES_VIEW.id
- ? `${view.name} • ${view.count ?? 0}`
- : view.name,
- )}
- onmousemove={onQueryBtnMove}
- onmouseleave={onQueryBtnLeave}
- onfocusin={(e) =>
- onQueryBtnEnter(
- e,
- view.id === TASK_FAILURES_VIEW.id
- ? `${view.name} • ${view.count ?? 0}`
- : view.name,
- )}
- onfocusout={onQueryBtnLeave}
+ tooltipClass="max-w-[280px]"
>
-
setActiveQueryView(view)}
- class={merge(
- 'flex w-full justify-start',
- view.count > 0 && 'text-red-900 dark:text-red-300',
- )}
- active={view.active}
- disabled={view.disabled}
- size="sm"
- >
- 0
- ? 'exclamation-octagon'
- : view.icon || 'bookmark'}
+
+
setActiveQueryView(view)}
class={merge(
- 'h-4 w-4 flex-shrink-0 transition-colors duration-200',
- $savedQueryNavOpen ? 'lg:hidden' : '',
+ 'flex w-full justify-start',
+ view.count > 0 && 'text-red-900 dark:text-red-300',
)}
- />
-
- {#if $savedQueryNavOpen}
- {view.name}
- {#if view.badge}
- {@render queryBadge({
- className: 'italic',
- content: view.badge,
- })}
- {/if}
- {#if view.count != undefined}
- {@render queryBadge({
- className: `font-mono ${view.count > 0 ? 'bg-red-50 dark:bg-red-900 text-red-900 dark:text-white' : 'bg-slate-50 dark:bg-slate-600 text-blue-900 dark:text-white'}`,
- content: view.count,
- icon: view.count > 0 ? 'exclamation-octagon' : 'happy-lappy',
- iconClass:
- view.count > 0
- ? 'bg-red-200 dark:bg-red-700 text-red-900 dark:text-white'
- : 'surface-subtle',
- })}
+ active={view.active}
+ disabled={view.disabled}
+ size="sm"
+ >
+ 0
+ ? 'exclamation-octagon'
+ : view.icon || 'bookmark'}
+ class={merge(
+ 'h-4 w-4 flex-shrink-0 transition-colors duration-200',
+ $savedQueryNavOpen ? 'lg:hidden' : '',
+ )}
+ />
+
+ {#if $savedQueryNavOpen}
+ {view.name}
+ {#if view.badge}
+ {@render queryBadge({
+ className: 'italic',
+ content: view.badge,
+ })}
+ {/if}
+ {#if view.count != undefined}
+ {@render queryBadge({
+ className: `font-mono ${view.count > 0 ? 'bg-red-50 dark:bg-red-900 text-red-900 dark:text-white' : 'bg-slate-50 dark:bg-slate-600 text-blue-900 dark:text-white'}`,
+ content: view.count,
+ icon: view.count > 0 ? 'exclamation-octagon' : 'happy-lappy',
+ iconClass:
+ view.count > 0
+ ? 'bg-red-200 dark:bg-red-700 text-red-900 dark:text-white'
+ : 'surface-subtle',
+ })}
+ {/if}
{/if}
- {/if}
-
+
- {#if activeQueryView?.id === view.id && view.type === 'user'}
-
- {#if view.id === activeQueryView?.id && view.query !== query}
+ {#if activeQueryView?.id === view.id && view.type === 'user'}
+
+ {#if view.id === activeQueryView?.id && view.query !== query}
+ {
+ onSaveView({
+ ...view,
+ query,
+ });
+ }}>Save
+ {/if}
{
- onSaveView({
- ...view,
- query,
- });
- }}>SaveEdit
- {/if}
- {
- editViewModalOpen = true;
- }}>Edit
- Share
-
- {:else if unsavedQuery && view.id === 'unsaved'}
-
- {
- saveViewModalOpen = true;
- }}
- >NewSave as NewShare
+
+ {:else if unsavedQuery && view.id === 'unsaved'}
+
-
- {/if}
-
+
{
+ saveViewModalOpen = true;
+ }}
+ >NewSave as New
+
+ {/if}
+
+
{/snippet}
{#snippet queryBadge({
@@ -546,14 +494,3 @@
{/if}
{/snippet}
-
-{#if showTooltip && tooltipText}
-
- {tooltipText}
-
-{/if}