anki/ts/graphs/Tooltip.svelte
Matthias Metelka 9f8667fb47
Auto-hide toolbar in Reviewer (#2262)
* Give webviews a slide-in animation

if reduced motion isn't set.

* Auto-hide toolbar in review mode

moving the mouse above the main webview expands the toolbar. When the mouse leaves the toolbar, it will collapse after a delay of 2s.

* Save some space on bottom toolbars

* Use props for all hard-coded transition durations

and decrease most commonly used duration (200ms) to 150ms.

* Move auto-hide logic into ToolbarWebView

and handle auto-hide specific events in the respective webview subclasses.

* Fix typing issues

* Fix flickering issue

* Add auto_hide_toolbar opt-in to preferences

* Rename hide_toolbar to collapse_toolbar

to better describe the dock-like behaviour.

* Rename setting to minimize_distractions

* Reduce calls to pm in eventFilter

* Run formatter

* Revert setting title to something more specific

* Increase default animation time to 180ms

* Inset toolbar in review mode

when auto-hide is not enabled.

* Use card background on toolbar and add glass effect

* Use flatten/elevate over inset/outset

* Use flatten/elevate over inset/outset

* Update toolbar.py

* Fix toolbar background delay

* Tweak styles

* Use "collapse" instead of "auto-hide"

* Fix background misalignment in collapse mode

* Do not collapse toolbar when pointer is outside MainWebView

* Reduce hide_timer interval to 1000ms

* Use CSS to hide toolbar instead of setting webview height

* Add guard to prevent backdrop-filter: blur on Qt 5.14

* Apply transition to body instead of toolbar

to not complicate things for #2301.

* Fix Qt 5.14 and apply guard globally

* Fix background image scaling difference

* Tweak preference wording (dae)
2023-01-09 14:39:31 +10:00

62 lines
1.4 KiB
Svelte

<!--
Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts">
import { tick } from "svelte";
export let html = "";
export let x: number = 0;
export let y: number = 0;
export let show = true;
let container = null as unknown as HTMLDivElement;
let adjustedX: number, adjustedY: number;
let shiftLeftAmount = 0;
$: onXChange(x);
async function onXChange(xPos: number) {
await tick();
shiftLeftAmount = container
? Math.round(
container.clientWidth * 1.2 * (xPos / document.body.clientWidth),
)
: 0;
}
$: {
// move tooltip away from edge as user approaches right side
adjustedX = x + 40 - shiftLeftAmount;
adjustedY = y + 40;
}
</script>
<div
bind:this={container}
class="tooltip"
style="left: {adjustedX}px; top: {adjustedY}px; opacity: {show ? 1 : 0}"
>
{@html html}
</div>
<style lang="scss">
.tooltip {
position: absolute;
white-space: nowrap;
padding: 15px;
border-radius: 5px;
font-size: 15px;
opacity: 0;
pointer-events: none;
transition: opacity var(--transition);
color: var(--fg);
background: var(--canvas-overlay);
:global(table) {
border-spacing: 1em 0;
}
}
</style>