mirror of
https://github.com/sysadminsmedia/homebox.git
synced 2025-12-24 22:39:14 +01:00
* feat: add shadcn * feat: add themes * feat: make sidebar use shadcn * feat: sort bg * feat: lint fixes * feat: make daisyui toggleable, add tooltips to sidebar, add work in progress docs page * fix: theme switching for shadcn * Fix minor profile.vue issue * feat: update docs, enlarge SidebarMenuButton and refine profile layout * feat: add testing page * feat: update css and remove comments from template * fix: create dropdown not opening due to tooltip interference also lint * fix: correct CSS selector for homebox in main.css to ensure proper theming functionality * feat: make theme switching actually kinda work for shadcn * fix: sidebar colours * fix: remove unused router import, made sidebar indicate active page and sort tailwind config linting * style: update styles * chore: remove unused duplicate code * style: refine theme management, CSS variables, get styles closer to original * feat: implement suggested changes * feat: better button size --------- Co-authored-by: Matt Kilgore <tankerkiller125@users.noreply.github.com>
55 lines
1.5 KiB
Vue
55 lines
1.5 KiB
Vue
<script setup lang="ts">
|
|
import { type Component, computed } from "vue";
|
|
import SidebarMenuButtonChild, { type SidebarMenuButtonProps } from "./SidebarMenuButtonChild.vue";
|
|
import { useSidebar } from "./utils";
|
|
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
|
|
|
|
defineOptions({
|
|
inheritAttrs: false,
|
|
});
|
|
|
|
const props = withDefaults(
|
|
defineProps<
|
|
SidebarMenuButtonProps & {
|
|
tooltip?: string | Component;
|
|
hotkey?: string;
|
|
}
|
|
>(),
|
|
{
|
|
as: "button",
|
|
variant: "default",
|
|
size: "default",
|
|
}
|
|
);
|
|
|
|
const { isMobile, state } = useSidebar();
|
|
|
|
const delegatedProps = computed(() => {
|
|
const { tooltip, hotkey, ...delegated } = props;
|
|
return delegated;
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<SidebarMenuButtonChild v-if="!tooltip" v-bind="{ ...delegatedProps, ...$attrs }">
|
|
<slot />
|
|
</SidebarMenuButtonChild>
|
|
|
|
<Tooltip v-else>
|
|
<TooltipTrigger as-child>
|
|
<SidebarMenuButtonChild v-bind="{ ...delegatedProps, ...$attrs }" :size="state === 'collapsed' ? 'default' : 'lg'" :class="state === 'collapsed' ? '' : 'text-xl'">
|
|
<slot />
|
|
</SidebarMenuButtonChild>
|
|
</TooltipTrigger>
|
|
<TooltipContent side="right" align="center" :hidden="state !== 'collapsed' || isMobile">
|
|
<template v-if="typeof tooltip === 'string'">
|
|
{{ tooltip }}
|
|
</template>
|
|
<component :is="tooltip" v-else />
|
|
</TooltipContent>
|
|
<TooltipContent v-if="hotkey" :hidden="isMobile">
|
|
{{ hotkey }}
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
</template>
|