Improved tooltip positioning and sizing, in particular for stashing (heart).

This commit is contained in:
2026-07-25 01:17:12 +02:00
parent e8f1dca2a0
commit eed07ba84b
5 changed files with 71 additions and 29 deletions

View File

@@ -1,7 +1,7 @@
/* Content */ /* Content */
.v-popper__popper { .v-popper__popper {
z-index: 10000; z-index: 1000;
top: 0; top: 0;
left: 0; left: 0;
outline: none; outline: none;
@@ -45,6 +45,10 @@
overflow-y: auto; overflow-y: auto;
} }
.no-outer-scroll .v-popper__inner {
overflow: hidden;
}
.v-popper__inner > div { .v-popper__inner > div {
position: relative; position: relative;
z-index: 1; z-index: 1;
@@ -82,6 +86,10 @@
border-width: 6px; border-width: 6px;
} }
.v-popper__popper[data-popper-placement^="top"] .v-popper__arrow-container {
bottom: -7px;
}
.v-popper__popper[data-popper-placement^="top"] .v-popper__arrow-inner, .v-popper__popper[data-popper-placement^="top"] .v-popper__arrow-inner,
.v-popper__popper[data-popper-placement^="bottom"] .v-popper__arrow-inner { .v-popper__popper[data-popper-placement^="bottom"] .v-popper__arrow-inner {
left: -2px; left: -2px;
@@ -105,7 +113,7 @@
} }
.v-popper__popper[data-popper-placement^="bottom"] .v-popper__arrow-container { .v-popper__popper[data-popper-placement^="bottom"] .v-popper__arrow-container {
top: 0; top: -2px;
} }
.v-popper__popper[data-popper-placement^="bottom"] .v-popper__arrow-inner, .v-popper__popper[data-popper-placement^="bottom"] .v-popper__arrow-inner,
@@ -151,7 +159,11 @@
} }
.v-popper__popper[data-popper-placement^="left"] .v-popper__arrow-container { .v-popper__popper[data-popper-placement^="left"] .v-popper__arrow-container {
right: -10px; right: -7px;
}
.v-popper__popper[data-popper-placement^="right"] .v-popper__arrow-container {
left: 2px;
} }
.v-popper__popper[data-popper-placement^="left"] .v-popper__arrow-inner, .v-popper__popper[data-popper-placement^="left"] .v-popper__arrow-inner,

View File

@@ -248,6 +248,8 @@ async function reloadStashes(newStash) {
v-if="itemStashes && (showSecondary || (hasSecondaryStash && pageStash?.user.id !== user.id))" v-if="itemStashes && (showSecondary || (hasSecondaryStash && pageStash?.user.id !== user.id))"
:aria-id="stashMenuDropdownId" :aria-id="stashMenuDropdownId"
:shown="showStashes" :shown="showStashes"
placement="auto"
popper-class="no-outer-scroll"
@hide="showStashes = false" @hide="showStashes = false"
> >
<Icon <Icon
@@ -274,6 +276,8 @@ async function reloadStashes(newStash) {
:triggers="[]" :triggers="[]"
:shown="showStashes" :shown="showStashes"
:disabled="showSecondary" :disabled="showSecondary"
placement="auto"
popper-class="no-outer-scroll"
@hide="showStashes = false" @hide="showStashes = false"
> >
<template v-if="pageStash?.user.id === user.id"> <template v-if="pageStash?.user.id === user.id">

View File

@@ -16,7 +16,8 @@ const emit = defineEmits(['stash', 'unstash', 'create']);
</script> </script>
<template> <template>
<ul class="stash-menu nolist noselect"> <div class="stash-menu noselect">
<ul class="stash-list nolist noselect">
<li <li
v-for="userStash in stashes" v-for="userStash in stashes"
:key="`stash-${userStash.id}`" :key="`stash-${userStash.id}`"
@@ -29,27 +30,39 @@ const emit = defineEmits(['stash', 'unstash', 'create']);
/>{{ userStash.name }} />{{ userStash.name }}
</label> </label>
</li> </li>
</ul>
<li class="menu-item create"> <div
<label
v-close-popper v-close-popper
class="menu-stash" class="menu-item menu-stash create"
@click="emit('create')" @click="emit('create')"
> >
<Icon icon="plus3" /> <Icon icon="plus3" />
New New
</label> </div>
</li> </div>
</ul>
</template> </template>
<style scoped> <style scoped>
.stash-menu {
display: flex;
flex-direction: column;
max-height: inherit;
overflow: hidden;
}
.stash-list {
overflow-y: auto;
min-height: 0; /* lets this flex child actually shrink and scroll instead of pushing the container taller */
}
.menu-item { .menu-item {
display: flex; display: flex;
.icon { .icon {
fill: var(--shadow-weak-10); fill: var(--shadow-weak-10);
padding: 0 .55rem 0 .2rem; padding: 0 .55rem 0 .2rem;
transform: translateY(-1px);
} }
} }
@@ -58,6 +71,7 @@ const emit = defineEmits(['stash', 'unstash', 'create']);
width: 100%; width: 100%;
align-items: center; align-items: center;
padding: .5rem; padding: .5rem;
box-sizing: border-box;
&:hover { &:hover {
cursor: pointer; cursor: pointer;
@@ -71,5 +85,10 @@ const emit = defineEmits(['stash', 'unstash', 'create']);
.check-container { .check-container {
margin-right: .5rem; margin-right: .5rem;
} }
&.create {
flex-shrink: 0;
border-top: 1px solid var(--glass-weak-40);
}
} }
</style> </style>

View File

@@ -32,7 +32,14 @@ function createApp(Page, pageProps, pageContext) {
app.provide('pageContext', pageContext); app.provide('pageContext', pageContext);
app.use(FloatingVue, { container: '#container' }); app.use(FloatingVue, {
container: '#container',
autoBoundaryMaxSize: true,
shiftCrossAxis: true,
overflowPadding: 10,
arrowPadding: 10,
});
app.use(VueVirtualScroller); app.use(VueVirtualScroller);
app.component('Link', Link); app.component('Link', Link);

View File

@@ -189,7 +189,7 @@ onMounted(() => {
justify-content: center; justify-content: center;
position: fixed; position: fixed;
bottom: 2rem; bottom: 2rem;
z-index: 1000; z-index: 10000;
pointer-events: none; pointer-events: none;
} }