* New project page * fix silly icon tailwind classes * Start new versions page, add new ButtonStyled component * Pagination and finish mocking up versions page functionality * green download button * hover animation * New Modal, Avatar refactor, subpages in NavTabs * lint * Download modal * New user page + fix lint * fix ui lint * Download animation fix * Versions filter + finish project page * Improve consistency of buttons on home page * Fix ButtonStyled breaking * Fix margin on version summary * finish search, new modals, user + project page mobile * fix gallery image pages * New project header * Fix gallery tab showing improperly * Use auto direction + position for all popouts * Preliminary user page * test to see if this fixes login stuff * remove extra slash * Add version actions, move download button on versions page * Listed -> public * Shorten download modal selector height * Fix user menu open direction * Change breakpoint for header collapse * Only underline title * Tighten padding on stats a little * New nav * Make mobile breakpoint more consistent * fix header breakpoint regression * Add sign in button * Fix edit icon color * Fix margin at top of screen * Fix user bios and ad width * Fix user nav showing when there's only one type of project * Fix plural projects on user page & extract i18n * Remove ads on mobile for now * Fix overflow menu showing hidden items * NavTabs on mobile * Fix navbar z index * Search filter overhaul + negative filters * fix no-max-height * port version filters, fix following/collections, lint * hide promos * ui lint * Disable modal background animation to reduce reported motion sickness * Hide install with modrinth app button on mobile --------- Signed-off-by: Geometrically <18202329+Geometrically@users.noreply.github.com> Co-authored-by: Prospector <prospectordev@gmail.com>
81 lines
1.5 KiB
Vue
81 lines
1.5 KiB
Vue
<template>
|
|
<div>
|
|
<ButtonStyled v-if="!!slots.title" :type="type">
|
|
<button class="!w-full" @click="() => (isOpen ? close() : open())">
|
|
<slot name="title" /><DropdownIcon
|
|
class="ml-auto size-5 transition-transform duration-300"
|
|
:class="{ 'rotate-180': isOpen }"
|
|
/>
|
|
</button>
|
|
</ButtonStyled>
|
|
<div class="accordion-content" :class="{ open: isOpen }">
|
|
<div>
|
|
<div :class="{ 'mt-2': !!slots.title }" v-bind="$attrs" :inert="!isOpen">
|
|
<slot />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { DropdownIcon } from "@modrinth/assets";
|
|
import { ButtonStyled } from "@modrinth/ui";
|
|
|
|
const props = withDefaults(
|
|
defineProps<{
|
|
openByDefault?: boolean;
|
|
type?: "standard" | "outlined" | "transparent";
|
|
}>(),
|
|
{
|
|
type: "standard",
|
|
openByDefault: false,
|
|
},
|
|
);
|
|
|
|
const isOpen = ref(props.openByDefault);
|
|
const emit = defineEmits(["onOpen", "onClose"]);
|
|
|
|
const slots = useSlots();
|
|
|
|
function open() {
|
|
isOpen.value = true;
|
|
emit("onOpen");
|
|
}
|
|
function close() {
|
|
isOpen.value = false;
|
|
emit("onClose");
|
|
}
|
|
|
|
defineExpose({
|
|
open,
|
|
close,
|
|
isOpen,
|
|
});
|
|
|
|
defineOptions({
|
|
inheritAttrs: false,
|
|
});
|
|
</script>
|
|
<style scoped>
|
|
.accordion-content {
|
|
display: grid;
|
|
grid-template-rows: 0fr;
|
|
transition: grid-template-rows 0.3s ease-in-out;
|
|
}
|
|
|
|
@media (prefers-reduced-motion) {
|
|
.accordion-content {
|
|
transition: none !important;
|
|
}
|
|
}
|
|
|
|
.accordion-content.open {
|
|
grid-template-rows: 1fr;
|
|
}
|
|
|
|
.accordion-content > div {
|
|
overflow: hidden;
|
|
}
|
|
</style>
|