mirror of
https://github.com/unraid/api.git
synced 2026-01-06 08:39:54 -06:00
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a new `DropdownMenu` component in user profiles with dynamic content rendering. - Added a new `Popover` component with interactive Storybook demos, improving component discoverability. - Added a new `DropdownMenuArrow` component to enhance dropdown visuals. - Implemented new CSS custom properties for charts, enhancing styling capabilities in light and dark themes. - Enhanced dropdown functionality by encapsulating dropdown logic in a new `UpcDropdownMenu` component. - Added a new `Select` component for improved user interaction within the `Sheet` component. - Introduced a new `SheetWithSelect` story to showcase selection functionality within the `Sheet` component. - Updated the `Sidebar` component to improve modal behavior and content positioning. - Enhanced `UserProfile` components with a new feedback function for better status indication. - **Style** - Refined layouts by replacing fixed widths with flexible, responsive designs. - Updated global styling with a refreshed chart color palette and expanded dark mode support. - **Refactor** - Migrated components to use a unified UI library, streamlining interactions and boosting consistency. - Improved type safety in `BrandLoading` component by utilizing a new type for variants and sizes. - Updated component imports and organization to enhance maintainability. - **Bug Fixes** - Removed unused promotional code and components, simplifying the codebase and improving performance. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: mdatelle <mike@datelle.net> Co-authored-by: Zack Spear <hi@zackspear.com> Co-authored-by: Eli Bosley <ekbosley@gmail.com>
47 lines
1.3 KiB
Vue
47 lines
1.3 KiB
Vue
<script setup lang="ts">
|
|
import { DialogRoot, useForwardPropsEmits, type DialogRootEmits, type DialogRootProps } from 'reka-ui';
|
|
import { onUnmounted, ref } from 'vue';
|
|
|
|
const MOBILE_VIEWPORT = 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0' as const;
|
|
|
|
const props = defineProps<DialogRootProps & { class?: string }>();
|
|
const emits = defineEmits<DialogRootEmits>();
|
|
|
|
const getViewport = (): string => {
|
|
return document.querySelector('meta[name="viewport"]')?.getAttribute('content') ?? 'width=1300';
|
|
};
|
|
const updateViewport = (viewport: string): void => {
|
|
if (window.innerWidth < 500) {
|
|
const meta = document.querySelector('meta[name="viewport"]');
|
|
if (meta) {
|
|
meta.setAttribute('content', viewport);
|
|
} else {
|
|
const meta = document.createElement('meta');
|
|
meta.name = 'viewport';
|
|
meta.content = viewport;
|
|
document.head.appendChild(meta);
|
|
}
|
|
}
|
|
};
|
|
|
|
const forwarded = useForwardPropsEmits(props, emits) as any;
|
|
const initialViewport = ref(getViewport());
|
|
const openListener = (opened: boolean) => {
|
|
if (opened) {
|
|
updateViewport(MOBILE_VIEWPORT);
|
|
} else {
|
|
updateViewport(initialViewport.value);
|
|
}
|
|
};
|
|
|
|
onUnmounted(() => {
|
|
updateViewport(initialViewport.value);
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<DialogRoot v-bind="forwarded" @update:open="openListener">
|
|
<slot />
|
|
</DialogRoot>
|
|
</template>
|