You've already forked AstralRinth
forked from didirus/AstralRinth
* refactor: migrate to common eslint+prettier configs * fix: prettier frontend * feat: config changes * fix: lint issues * fix: lint * fix: type imports * fix: cyclical import issue * fix: lockfile * fix: missing dep * fix: switch to tabs * fix: continue switch to tabs * fix: rustfmt parity * fix: moderation lint issue * fix: lint issues * fix: ui intl * fix: lint issues * Revert "fix: rustfmt parity" This reverts commit cb99d2376c321d813d4b7fc7e2a213bb30a54711. * feat: revert last rs
62 lines
1.5 KiB
Vue
62 lines
1.5 KiB
Vue
<template>
|
|
<div class="smart-clickable" :class="{ 'smart-clickable--has-clickable': !!$slots.clickable }">
|
|
<slot name="clickable" />
|
|
<div v-bind="$attrs" class="smart-clickable__contents pointer-events-none">
|
|
<slot />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
defineOptions({
|
|
inheritAttrs: false,
|
|
})
|
|
</script>
|
|
<style scoped lang="scss">
|
|
.smart-clickable {
|
|
display: grid;
|
|
|
|
> * {
|
|
grid-area: 1 / 1;
|
|
}
|
|
|
|
.smart-clickable__contents {
|
|
// Utility classes for contents
|
|
:deep(.smart-clickable\:allow-pointer-events) {
|
|
pointer-events: all;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Only apply effects when a clickable is present
|
|
.smart-clickable.smart-clickable--has-clickable {
|
|
// Setup base styles for contents
|
|
.smart-clickable__contents {
|
|
transition: scale 0.125s ease-out;
|
|
|
|
// Why? I don't know. It forces the SVGs to render differently, which fixes some shift on hover otherwise.
|
|
//filter: brightness(1.00001);
|
|
}
|
|
|
|
// When clickable is being hovered or focus-visible, give contents an effect
|
|
&:has(> *:first-child:hover, > *:first-child:focus-visible) .smart-clickable__contents {
|
|
filter: var(--hover-filter-weak);
|
|
|
|
// Utility classes for contents
|
|
:deep(.smart-clickable\:underline-on-hover) {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
// Utility classes for contents
|
|
:deep(.smart-clickable\:highlight-on-hover) {
|
|
filter: brightness(var(--hover-brightness, 1.25));
|
|
}
|
|
}
|
|
|
|
// When clickable is being clicked, give contents an effect
|
|
&:has(> *:first-child:active) .smart-clickable__contents {
|
|
scale: 0.97;
|
|
}
|
|
}
|
|
</style>
|