This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [vite](https://vite.dev) ([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`6.3.5` -> `7.0.3`](https://renovatebot.com/diffs/npm/vite/6.3.5/7.0.3) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>vitejs/vite (vite)</summary> ### [`v7.0.3`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-703-2025-07-08-small) [Compare Source](https://redirect.github.com/vitejs/vite/compare/v7.0.2...v7.0.3) ##### Bug Fixes - **client:** protect against window being defined but addEv undefined ([#​20359](https://redirect.github.com/vitejs/vite/issues/20359)) ([31d1467](31d1467cf0)) - **define:** replace optional values ([#​20338](https://redirect.github.com/vitejs/vite/issues/20338)) ([9465ae1](9465ae1378)) - **deps:** update all non-major dependencies ([#​20366](https://redirect.github.com/vitejs/vite/issues/20366)) ([43ac73d](43ac73da27)) ##### Miscellaneous Chores - **deps:** update dependency dotenv to v17 ([#​20325](https://redirect.github.com/vitejs/vite/issues/20325)) ([45040d4](45040d4807)) - **deps:** update dependency rolldown to ^1.0.0-beta.24 ([#​20365](https://redirect.github.com/vitejs/vite/issues/20365)) ([5ab25e7](5ab25e73a2)) - use `n/prefer-node-protocol` rule ([#​20368](https://redirect.github.com/vitejs/vite/issues/20368)) ([38bb268](38bb268cde)) ##### Code Refactoring - minor changes to reduce diff between normal Vite and rolldown-vite ([#​20354](https://redirect.github.com/vitejs/vite/issues/20354)) ([2e8050e](2e8050e4cd)) ### [`v7.0.2`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-702-2025-07-04-small) [Compare Source](https://redirect.github.com/vitejs/vite/compare/v7.0.1...v7.0.2) ##### Bug Fixes - **css:** resolve relative paths in sass, revert [#​20300](https://redirect.github.com/vitejs/vite/issues/20300) ([#​20349](https://redirect.github.com/vitejs/vite/issues/20349)) ([db8bd41](db8bd412a8)) ### [`v7.0.1`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-701-2025-07-03-small) [Compare Source](https://redirect.github.com/vitejs/vite/compare/v7.0.0...v7.0.1) ##### Bug Fixes - **css:** skip resolving resolved paths in sass ([#​20300](https://redirect.github.com/vitejs/vite/issues/20300)) ([ac528a4](ac528a44c3)) - **deps:** update all non-major dependencies ([#​20324](https://redirect.github.com/vitejs/vite/issues/20324)) ([3e81af3](3e81af38a8)) - **types:** add a global interface for Worker ([#​20243](https://redirect.github.com/vitejs/vite/issues/20243)) ([37bdfc1](37bdfc18f4)) ##### Miscellaneous Chores - **deps:** update rolldown-related dependencies ([#​20323](https://redirect.github.com/vitejs/vite/issues/20323)) ([30d2f1b](30d2f1b38c)) - fix typos and grammatical errors across documentation and comments ([#​20337](https://redirect.github.com/vitejs/vite/issues/20337)) ([c1c951d](c1c951dcc3)) - group commits by category in changelog ([#​20310](https://redirect.github.com/vitejs/vite/issues/20310)) ([41e83f6](41e83f62b1)) - rearrange 7.0 changelog ([#​20280](https://redirect.github.com/vitejs/vite/issues/20280)) ([eafd28a](eafd28ac88)) ### [`v7.0.0`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#700-2025-06-24) [Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.3.5...v7.0.0) - fix: keep `import.meta.url` in bundled Vite ([#​20235](https://redirect.github.com/vitejs/vite/issues/20235)) ([3bf3a8a](3bf3a8ab00)), closes [#​20235](https://redirect.github.com/vitejs/vite/issues/20235) - fix(deps): update all non-major dependencies ([#​20271](https://redirect.github.com/vitejs/vite/issues/20271)) ([6b64d63](6b64d63d70)), closes [#​20271](https://redirect.github.com/vitejs/vite/issues/20271) - fix(module-runner): export `ssrExportNameKey` ([#​20266](https://redirect.github.com/vitejs/vite/issues/20266)) ([ac302a7](ac302a7290)), closes [#​20266](https://redirect.github.com/vitejs/vite/issues/20266) - fix(module-runner): expose `normalizeModuleId` ([#​20277](https://redirect.github.com/vitejs/vite/issues/20277)) ([9b98dcb](9b98dcbf75)), closes [#​20277](https://redirect.github.com/vitejs/vite/issues/20277) - feat(types): use terser types from terser package ([#​20274](https://redirect.github.com/vitejs/vite/issues/20274)) ([a5799fa](a5799fa74c)), closes [#​20274](https://redirect.github.com/vitejs/vite/issues/20274) - chore: "indentity" → "identity" in test description ([#​20225](https://redirect.github.com/vitejs/vite/issues/20225)) ([ea9aed7](ea9aed7ebc)), closes [#​20225](https://redirect.github.com/vitejs/vite/issues/20225) - chore: typos in comments ([#​20259](https://redirect.github.com/vitejs/vite/issues/20259)) ([b135918](b135918b91)), closes [#​20259](https://redirect.github.com/vitejs/vite/issues/20259) - chore(deps): update rolldown-related dependencies ([#​20270](https://redirect.github.com/vitejs/vite/issues/20270)) ([f7377c3](f7377c3eae)), closes [#​20270](https://redirect.github.com/vitejs/vite/issues/20270) - perf(utils): improve performance of `numberToPos` ([#​20244](https://redirect.github.com/vitejs/vite/issues/20244)) ([3f46901](3f469012ad)), closes [#​20244](https://redirect.github.com/vitejs/vite/issues/20244) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/unraid/api). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC42Mi4xIiwidXBkYXRlZEluVmVyIjoiNDEuMjMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Unraid UI
A Vue 3 component library providing a set of reusable, accessible UI components for Unraid development.
Features
- ⚡️ Built with Vue 3 and TypeScript
- 🎭 Storybook documentation
- ✅ Tested components
- 🎪 Built on top of TailwindCSS and Shadcn/UI
Installation
Make sure you have the peer dependencies installed:
npm install vue@^3.3.0 tailwindcss@^3.0.0
Setup
1. Add CSS
Import the component library styles in your main entry file:
import '@unraid/ui/style.css';
2. Configure TailwindCSS
Create a tailwind.config.ts file with the following configuration:
import tailwindConfig from '@unraid/ui/tailwind.config.ts';
import type { Config } from 'tailwindcss';
export default {
presets: [tailwindConfig],
content: [
// ... your content paths
'./components/**/*.{js,vue,ts}',
'./layouts/**/*.vue',
'./pages/**/*.vue',
],
theme: {
extend: {
// your theme extensions
},
},
} satisfies Partial<Config>;
This configuration:
- Uses the Unraid UI library's Tailwind config as a preset
- Properly types your configuration with TypeScript
- Allows you to extend the base theme while maintaining all Unraid UI defaults
Usage
<script setup lang="ts">
import { Button } from '@unraid/ui';
</script>
<template>
<Button variant="primary"> Click me </Button>
</template>
Development
Local Development
Install dependencies:
npm install
Start Storybook development server:
npm run storybook
This will start Storybook at http://localhost:6006
Building
npm run build
Testing
Run tests:
npm run test
Run tests with UI:
npm run test:ui
Generate coverage report:
npm run coverage
Type Checking
npm run typecheck
Scripts
dev: Start development serverbuild: Build for productionpreview: Preview production buildtest: Run teststest:ui: Run tests with UIcoverage: Generate test coverageclean: Remove build artifactstypecheck: Run type checkingstorybook: Start Storybook development serverbuild-storybook: Build Storybook for production
License
Component Development
Installing Shadcn Components
- Install a new component using the Shadcn CLI:
npx shadcn-vue@latest add [component-name]
-
The component will be installed in the root components folder. Move it to the appropriate subfolder based on its type:
- Form components →
src/components/form/ - Layout components →
src/components/layout/ - Common components →
src/components/common/ - Brand components →
src/components/brand/
- Form components →
-
Update any imports in your codebase to reflect the new component location.
Component Variants Pattern
We use the class-variance-authority (CVA) package to manage component variants. Each component that supports variants should follow this pattern:
- Create a variants file (e.g.,
button.variants.ts):
import { cva } from 'class-variance-authority';
export const buttonVariants = cva('base-classes-here', {
variants: {
variant: {
primary: 'variant-specific-classes',
secondary: 'variant-specific-classes',
// ... other variants
},
size: {
sm: 'size-specific-classes',
md: 'size-specific-classes',
lg: 'size-specific-classes',
},
},
defaultVariants: {
variant: 'primary',
size: 'md',
},
});
- Use the variants in your component (e.g.,
Button.vue):
<script setup lang="ts">
import { computed } from "vue";
import { buttonVariants } from "./button.variants";
import { cn } from "@/lib/utils";
export interface ButtonProps {
variant?: "primary" | "secondary" | /* other variants */;
size?: "sm" | "md" | "lg";
class?: string;
}
const props = withDefaults(defineProps<ButtonProps>(), {
variant: "primary",
size: "md",
});
const buttonClass = computed(() => {
return cn(
buttonVariants({ variant: props.variant, size: props.size }),
props.class
);
});
</script>
<template>
<button :class="buttonClass">
<slot />
</button>
</template>
Storybook Development
We use Storybook for component development and documentation. To start the Storybook development server:
npm run storybook
This will start Storybook at http://localhost:6006
When creating stories for your components:
- Place story files in the
storiesdirectory - Name your story files as
ComponentName.stories.ts - Include examples of all variants and states
- Add documentation using JSDoc comments
Example story file:
import type { Meta, StoryObj } from '@storybook/vue3';
import { Button } from '../src/components/common/button';
const meta = {
title: 'Components/Button',
component: Button,
tags: ['autodocs'],
argTypes: {
variant: {
control: 'select',
options: ['primary', 'secondary', 'outline'],
},
size: {
control: 'select',
options: ['sm', 'md', 'lg'],
},
},
} satisfies Meta<typeof Button>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Primary: Story = {
args: {
variant: 'primary',
size: 'md',
},
};
export const Secondary: Story = {
args: {
variant: 'secondary',
size: 'md',
},
};