Compare commits

...

9 Commits

Author SHA1 Message Date
Eric Fennis
881e733159 Merge branch 'main' of https://github.com/lucide-icons/lucide into next 2025-12-12 09:34:11 +01:00
Eric Fennis
d58a2e43c6 Merge branch 'next' of https://github.com/lucide-icons/lucide into next 2025-11-27 10:58:43 +01:00
Eric Fennis
5ecf78bb8a Merge branch 'main' of https://github.com/lucide-icons/lucide into next 2025-11-27 10:58:34 +01:00
Eric Fennis
aa8f74eb9e fix(icons): Remove brand icons (#3639)
* Remove brand icons

* Apply feedback

* adjust schema
2025-11-27 10:56:32 +01:00
Eric Fennis
7327637532 Merge branch 'main' of https://github.com/lucide-icons/lucide into next 2025-11-27 10:56:13 +01:00
Eric Fennis
08bd4b33a0 Merge branch 'main' of https://github.com/lucide-icons/lucide into next 2025-11-21 14:58:50 +01:00
Eric Fennis
b1675c4c33 chore(packages): Remove umd exports (#3641)
* Remove UMD export

* Revert package file change
2025-10-16 13:49:19 +02:00
Eric Fennis
758fa4b75f Merge branch 'main' into next 2025-09-19 13:59:13 +02:00
Eric Fennis
7bbb1e1fea feat(@lucide/vue): Rename Vue package name to @lucide/vue (#3337)
* Remove old vue 2 package

* Add @lucide/vue package

* Remove old vue 2 doc

* Update docs

* Adjust export template

* Adjust vue package!

* Fix tests

* Format code

* Update packages/vue/src/Icon.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Adjust vue package in docs

* Update deadlinks

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-11 14:38:34 +02:00
102 changed files with 997 additions and 1646 deletions

View File

@@ -9,9 +9,3 @@ strikethrough
touchpad
ungroup
toc
# Brands
codepen
codesandbox
dribbble
x.com

43
.github/workflows/lucide-vue.yml vendored Normal file
View File

@@ -0,0 +1,43 @@
name: Lucide Vue checks
on:
pull_request:
paths:
- packages/lucide-vue/**
- packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- pnpm-lock.yaml
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter @lucide/vue build
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Test
run: pnpm --filter @lucide/vue test

View File

@@ -60,6 +60,7 @@ jobs:
'lucide-svelte',
'@lucide/astro',
'@lucide/svelte',
'@lucide/vue',
]
steps:
- uses: actions/checkout@v6

View File

@@ -1,5 +0,0 @@
{
"$schema": "../category.schema.json",
"title": "Brands",
"icon": "facebook"
}

View File

@@ -15,10 +15,6 @@
"name": "arrows",
"title": "Arrows"
},
{
"name": "brands",
"title": "Brands"
},
{
"name": "buildings",
"title": "Buildings"

View File

@@ -31,20 +31,12 @@
}
]
},
"lucide-vue-next": {
"@lucide/vue": {
"order": 2,
"icon": "vue-next",
"icon": "vue",
"docsAlias": "lucide-vue",
"packageDirname": "vue",
"shields": [
{
"alt": "npm",
"src": "https://img.shields.io/npm/v/lucide-vue-next",
"href": "https://www.npmjs.com/package/lucide-vue-next"
},
{
"alt": "npm",
"src": "https://img.shields.io/npm/dw/lucide-vue-next",
"href": "https://www.npmjs.com/package/lucide-vue-next"
}
]
},
"lucide-svelte": {

View File

@@ -43,7 +43,7 @@ export default App;
language: 'vue',
title: 'Vue',
code: `<script setup>
import { $PascalCase } from 'lucide-vue-next';
import { $PascalCase } from '@lucide/vue';
</script>
<template>

View File

@@ -74,7 +74,7 @@ const sidebar: UserConfig<DefaultTheme.Config>['themeConfig']['sidebar'] = {
},
{
text: 'Lucide Vue',
link: '/guide/packages/lucide-vue-next',
link: '/guide/packages/lucide-vue',
},
{
text: 'Lucide Svelte',

View File

@@ -13,9 +13,9 @@ export default {
label: 'Lucide documentation for React',
},
{
name: 'lucide-vue-next',
name: 'lucide-vue',
logo: '/framework-logos/vue.svg',
label: 'Lucide documentation for Vue 3',
label: 'Lucide documentation for Vue',
},
{
name: 'lucide-svelte',

View File

@@ -29,7 +29,12 @@ const props = defineProps<{
const iconComponent = computed(() => {
if (!props.name || !props.iconNode) return null;
try {
return createLucideIcon(props.name, props.iconNode);
} catch (error) {
console.warn(`Icon ${props.name} not found, using fallback`);
return null;
}
});
const CalendarIcon = createLucideIcon('calendar', Calendar.iconNode);
@@ -61,7 +66,7 @@ const prettyName = props.name
</script>
<template>
<section class="showcase">
<section class="showcase" v-if="iconComponent">
<h2 class="title">See this icon in action</h2>
<div class="showcase-grid">
<div class="showcase-item column">

View File

@@ -64,25 +64,24 @@ Implementation of the lucide icon library for Vue applications.
::: code-group
```sh [pnpm]
pnpm add lucide-vue-next
pnpm add @lucide/vue
```
```sh [yarn]
yarn add lucide-vue-next
yarn add @lucide/vue
```
```sh [npm]
npm install lucide-vue-next
npm install @lucide/vue
```
```sh [bun]
bun add lucide-vue-next
bun add @lucide/vue
```
:::
For more details, see the [documentation](packages/lucide-vue-next.md).
For Vue 2 use the `lucide-vue` package.
For more details, see the [documentation](packages/lucide-vue.md).
## Svelte
@@ -91,22 +90,22 @@ Implementation of the lucide icon library for Svelte applications.
::: code-group
```sh [pnpm]
pnpm add lucide-svelte
pnpm add @lucide/svelte
```
```sh [yarn]
yarn add lucide-svelte
yarn add @lucide/svelte
```
```sh [npm]
npm install lucide-svelte
npm install @lucide/svelte
```
```sh [bun]
bun add lucide-svelte
bun add @lucide/svelte
```
:::
> `@lucide/svelte` is only for Svelte 5, for Svelte 4 use the `lucide-svelte` package.
For more details, see the [documentation](packages/lucide-svelte.md).

View File

@@ -30,14 +30,7 @@ This package includes the following implementations of Lucide icons:
SVG sprites and icon fonts include **all icons**, which can significantly increase your app's bundle size and load time.
For production environments, we recommend using a bundler with tree-shaking support to include only the icons you actually use. Consider using:
- [lucide](lucide)
- [lucide-react](lucide-react)
- [lucide-vue](lucide-vue)
- [lucide-vue-next](lucide-vue-next)
- [lucide-angular](lucide-angular)
- [lucide-preact](lucide-preact)
For production environments, we recommend using a bundler with tree-shaking support to include only the icons you actually use. Consider using one of the framework-specific [packages](../../packages).
:::
## Installation

View File

@@ -1,148 +0,0 @@
# Lucide Vue Next
Vue 3 components for Lucide icons that leverage the Composition API and modern Vue features. Each icon is a reactive Vue component that renders as an inline SVG, providing excellent performance and developer experience in Vue 3 applications.
**What you can accomplish:**
- Use icons as Vue 3 components with full reactivity and TypeScript support
- Bind icon properties to reactive data and computed values
- Customize icons with props, slots, and Vue's powerful templating system
- Integrate seamlessly with Vue 3's Composition API and script setup syntax
- Build dynamic interfaces where icons respond to application state changes
## Installation
::: code-group
```sh [pnpm]
pnpm add lucide-vue-next
```
```sh [yarn]
yarn add lucide-vue-next
```
```sh [npm]
npm install lucide-vue-next
```
```sh [bun]
bun add lucide-vue-next
```
:::
## How to use
Lucide is built with ES Modules, so it's completely tree-shakable.
Each icon can be imported as a Vue component, which renders an inline SVG Element. This way only the icons that are imported into your project are included in the final bundle. The rest of the icons are tree-shaken away.
### Example
You can pass additional props to adjust the icon.
```vue
<script setup>
import { Camera } from 'lucide-vue-next';
</script>
<template>
<Camera
color="red"
:size="32"
/>
</template>
```
## Props
| name | type | default |
| ----------------------- | --------- | ------------ |
| `size` | *number* | 24 |
| `color` | *string* | currentColor |
| `stroke-width` | *number* | 2 |
| `absoluteStrokeWidth` | *boolean* | false |
| `default-class` | *string* | lucide-icon |
### Applying props
To customize the appearance of an icon, you can pass custom properties as props directly to the component. The component accepts all SVG attributes as props, which allows flexible styling of the SVG elements. See the list of SVG Presentation Attributes on [MDN](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Presentation).
```vue
<template>
<Camera fill="red" />
</template>
```
## With Lucide lab or custom icons
[Lucide lab](https://github.com/lucide-icons/lucide-lab) is a collection of icons that are not part of the Lucide main library.
They can be used by using the `Icon` component.
All props like regular lucide icons can be passed to adjust the icon appearance.
### Using the `Icon` component
This creates a single icon based on the iconNode passed and renders a Lucide icon component.
```vue
<script setup>
import { Icon } from 'lucide-vue-next';
import { baseball } from '@lucide/lab';
</script>
<template>
<Icon :iconNode="baseball" />
</template>
```
## One generic icon component
It is possible to create one generic icon component to load icons, but it is not recommended.
::: danger
The example below imports all ES Modules, so exercise caution when using it. Importing all icons will significantly increase the build size of the application, negatively affecting its performance. This is especially important when using bundlers like `Webpack`, `Rollup`, or `Vite`.
:::
### Icon Component Example
```vue
<script setup>
import { computed } from 'vue';
import * as icons from "lucide-vue-next";
const props = defineProps({
name: {
type: String,
required: true
},
size: Number,
color: String,
strokeWidth: Number,
defaultClass: String
})
const icon = computed(() => icons[props.name]);
</script>
<template>
<component
:is="icon"
:size="size"
:color="color"
:stroke-width="strokeWidth" :default-class="defaultClass"
/>
</template>
```
### Using the Icon Component
All other props listed above also work on the `Icon` Component.
```vue
<template>
<div id="app">
<Icon name="Airplay" />
</div>
</template>
```

View File

@@ -9,28 +9,24 @@ Vue 2 components for Lucide icons that integrate with Vue's Options API and temp
- Build applications using Vue 2's familiar syntax and patterns
- Bridge the gap while planning migration to Vue 3
::: danger
This package is deprecated. Vue 2 is EOF See [Announcement](https://v2.vuejs.org/eol/). Migrate to Vue 3.
:::
## Installation
::: code-group
```sh [pnpm]
pnpm add lucide-vue
pnpm add @lucide/vue
```
```sh [yarn]
yarn add lucide-vue
yarn add @lucide/vue
```
```sh [npm]
npm install lucide-vue
npm install @lucide/vue
```
```sh [bun]
bun add lucide-vue
bun add @lucide/vue
```
:::
@@ -43,21 +39,19 @@ Each icon can be imported as a Vue component, which renders an inline SVG Elemen
### Example
Additional props can be passed to adjust the icon:
You can pass additional props to adjust the icon.
```vue
<template>
<Camera color="red" :size="32" />
</template>
<script>
import { Camera } from 'lucide-vue';
export default {
name: 'My Component',
components: { Camera }
};
<script setup>
import { Camera } from '@lucide/vue';
</script>
<template>
<Camera
color="red"
:size="32"
/>
</template>
```
## Props
@@ -80,6 +74,28 @@ To customize the appearance of an icon, you can pass custom properties as props
</template>
```
## With Lucide lab or custom icons
[Lucide lab](https://github.com/lucide-icons/lucide-lab) is a collection of icons that are not part of the Lucide main library.
They can be used by using the `Icon` component.
All props like regular lucide icons can be passed to adjust the icon appearance.
### Using the `Icon` component
This creates a single icon based on the iconNode passed and renders a Lucide icon component.
```vue
<script setup>
import { Icon } from '@lucide/vue';
import { baseball } from '@lucide/lab';
</script>
<template>
<Icon :iconNode="baseball" />
</template>
```
## One generic icon component
It is possible to create one generic icon component to load icons, but it is not recommended.
@@ -91,30 +107,37 @@ The example below imports all ES Modules, so exercise caution when using it. Imp
### Icon Component Example
```vue
<template>
<component :is="icon" />
</template>
<script setup>
import { computed } from 'vue';
import * as icons from "@lucide/vue";
<script>
import * as icons from 'lucide-vue';
export default {
props: {
const props = defineProps({
name: {
type: String,
required: true
}
},
computed: {
icon() {
return icons[this.name];
}
}
};
size: Number,
color: String,
strokeWidth: Number,
defaultClass: String
})
const icon = computed(() => icons[props.name]);
</script>
<template>
<component
:is="icon"
:size="size"
:color="color"
:stroke-width="strokeWidth" :default-class="defaultClass"
/>
</template>
```
#### Using the Icon Component
### Using the Icon Component
All other props listed above also work on the `Icon` Component.
```vue
<template>

View File

@@ -34,6 +34,11 @@
],
"destination": "/icons",
"permanent": false
},
{
"source": "/guide/packages/lucide-vue-next",
"destination": "/guide/packages/lucide-vue",
"permanent": false
}
],
"headers": [

View File

@@ -56,7 +56,6 @@
"account",
"animals",
"arrows",
"brands",
"buildings",
"charts",
"communication",
@@ -134,7 +133,7 @@
"$defs": {
"iconDeprecationReasons": {
"type": "string",
"enum": ["icon.brand"]
"enum": ["icon.renamed"]
},
"aliasDeprecationReasons": {
"type": "string",

View File

@@ -16,8 +16,6 @@
],
"categories": [
"multimedia",
"connectivity",
"devices",
"brands"
"connectivity"
]
}

View File

@@ -10,7 +10,6 @@
"payment"
],
"categories": [
"brands",
"development",
"finance"
]

View File

@@ -1,25 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"ericfennis"
],
"tags": [
"browser",
"logo"
],
"categories": [
"brands"
],
"aliases": [
{
"name": "chrome",
"deprecated": true,
"deprecationReason": "alias.name",
"toBeRemovedInVersion": "v1.0"
}
]
}

View File

@@ -1,17 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10.88 21.94 15.46 14" />
<path d="M21.17 8H12" />
<path d="M3.95 6.06 8.54 14" />
<circle cx="12" cy="12" r="10" />
<circle cx="12" cy="12" r="4" />
</svg>

Before

Width:  |  Height:  |  Size: 377 B

View File

@@ -1,17 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"ericfennis"
],
"tags": [
"logo"
],
"categories": [
"brands",
"development"
]
}

View File

@@ -1,17 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<polygon points="12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2" />
<line x1="12" x2="12" y1="22" y2="15.5" />
<polyline points="22 8.5 12 15.5 2 8.5" />
<polyline points="2 15.5 12 8.5 22 15.5" />
<line x1="12" x2="12" y1="2" y2="8.5" />
</svg>

Before

Width:  |  Height:  |  Size: 454 B

View File

@@ -1,18 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"ericfennis"
],
"tags": [
"logo"
],
"categories": [
"brands",
"development"
]
}

View File

@@ -1,18 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z" />
<polyline points="7.5 4.21 12 6.81 16.5 4.21" />
<polyline points="7.5 19.79 7.5 14.6 3 12" />
<polyline points="21 12 16.5 14.6 16.5 19.79" />
<polyline points="3.27 6.96 12 12.01 20.73 6.96" />
<line x1="12" x2="12" y1="22.08" y2="12" />
</svg>

Before

Width:  |  Height:  |  Size: 595 B

View File

@@ -1,18 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"ahtohbi4"
],
"tags": [
"design",
"social"
],
"categories": [
"brands",
"social",
"design"
]
}

View File

@@ -1,16 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<path d="M19.13 5.09C15.22 9.14 10 10.44 2.25 10.94" />
<path d="M21.75 12.84c-6.62-1.41-12.14 1-16.38 6.32" />
<path d="M8.56 2.75c4.37 6 6 9.42 8 17.72" />
</svg>

Before

Width:  |  Height:  |  Size: 408 B

View File

@@ -1,19 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"ericfennis"
],
"tags": [
"logo",
"social"
],
"categories": [
"social",
"brands"
]
}

View File

@@ -1,13 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z" />
</svg>

Before

Width:  |  Height:  |  Size: 289 B

View File

@@ -1,21 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"mittalyashu",
"ericfennis"
],
"tags": [
"logo",
"design",
"tool"
],
"categories": [
"brands",
"design"
]
}

View File

@@ -1,17 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z" />
<path d="M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z" />
<path d="M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z" />
<path d="M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z" />
<path d="M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z" />
</svg>

Before

Width:  |  Height:  |  Size: 534 B

View File

@@ -1,21 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"mittalyashu",
"ericfennis"
],
"tags": [
"logo",
"design",
"tool"
],
"categories": [
"brands",
"design"
]
}

View File

@@ -1,13 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M5 16V9h14V2H5l14 14h-7m-7 0 7 7v-7m-7 0h7" />
</svg>

Before

Width:  |  Height:  |  Size: 266 B

View File

@@ -1,20 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"ericfennis",
"karsa-mistmere"
],
"tags": [
"logo",
"version control"
],
"categories": [
"brands",
"development"
]
}

View File

@@ -1,14 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4" />
<path d="M9 18c-4.51 2-5-2-7-2" />
</svg>

Before

Width:  |  Height:  |  Size: 509 B

View File

@@ -1,20 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"ericfennis",
"karsa-mistmere"
],
"tags": [
"logo",
"version control"
],
"categories": [
"brands",
"development"
]
}

View File

@@ -1,13 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m22 13.29-3.33-10a.42.42 0 0 0-.14-.18.38.38 0 0 0-.22-.11.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18l-2.26 6.67H8.32L6.1 3.26a.42.42 0 0 0-.1-.18.38.38 0 0 0-.26-.08.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18L2 13.29a.74.74 0 0 0 .27.83L12 21l9.69-6.88a.71.71 0 0 0 .31-.83Z" />
</svg>

Before

Width:  |  Height:  |  Size: 489 B

View File

@@ -12,7 +12,6 @@
],
"categories": [
"shapes",
"brands",
"development"
]
}

View File

@@ -1,21 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"ericfennis"
],
"tags": [
"logo",
"camera",
"social"
],
"categories": [
"brands",
"social",
"photography"
]
}

View File

@@ -1,15 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect width="20" height="20" x="2" y="2" rx="5" ry="5" />
<path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z" />
<line x1="17.5" x2="17.51" y1="6.5" y2="6.5" />
</svg>

Before

Width:  |  Height:  |  Size: 381 B

View File

@@ -1,20 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"okcoker",
"csandman",
"ericfennis"
],
"tags": [
"logo",
"social media",
"social"
],
"categories": [
"social",
"brands"
]
}

View File

@@ -1,15 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z" />
<rect width="4" height="12" x="2" y="9" />
<circle cx="4" cy="4" r="2" />
</svg>

Before

Width:  |  Height:  |  Size: 380 B

View File

@@ -1,18 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"ericfennis"
],
"tags": [
"logo",
"save"
],
"categories": [
"brands"
]
}

View File

@@ -1,14 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M20 3a2 2 0 0 1 2 2v6a1 1 0 0 1-20 0V5a2 2 0 0 1 2-2z" />
<path d="m8 10 4 4 4-4" />
</svg>

Before

Width:  |  Height:  |  Size: 306 B

View File

@@ -1,19 +0,0 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley"
],
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"tags": [
"railway",
"train",
"track",
"line"
],
"categories": [
"transportation",
"navigation"
]
}

View File

@@ -1,15 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M5 15h14" />
<path d="M5 9h14" />
<path d="m14 20-5-5 6-6-5-5" />
</svg>

Before

Width:  |  Height:  |  Size: 289 B

View File

@@ -1,22 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"ashygee",
"wojtekmaj",
"mittalyashu",
"ericfennis"
],
"tags": [
"logo"
],
"categories": [
"account",
"social",
"brands",
"development"
]
}

View File

@@ -1,20 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect width="3" height="8" x="13" y="2" rx="1.5" />
<path d="M19 8.5V10h1.5A1.5 1.5 0 1 0 19 8.5" />
<rect width="3" height="8" x="8" y="14" rx="1.5" />
<path d="M5 15.5V14H3.5A1.5 1.5 0 1 0 5 15.5" />
<rect width="8" height="3" x="14" y="13" rx="1.5" />
<path d="M15.5 19H14v1.5a1.5 1.5 0 1 0 1.5-1.5" />
<rect width="8" height="3" x="2" y="8" rx="1.5" />
<path d="M8.5 5H10V3.5A1.5 1.5 0 1 0 8.5 5" />
</svg>

Before

Width:  |  Height:  |  Size: 628 B

View File

@@ -13,7 +13,6 @@
"productivity"
],
"categories": [
"brands",
"gaming"
]
}

View File

@@ -1,21 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"bdbch",
"csandman",
"mittalyashu",
"ericfennis"
],
"tags": [
"logo",
"brand"
],
"categories": [
"account",
"brands",
"development"
]
}

View File

@@ -1,15 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect width="18" height="18" x="3" y="3" rx="2" ry="2" />
<rect width="3" height="9" x="7" y="7" />
<rect width="3" height="5" x="14" y="7" />
</svg>

Before

Width:  |  Height:  |  Size: 357 B

View File

@@ -1,20 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"ahtohbi4",
"johnletey"
],
"tags": [
"logo",
"social"
],
"categories": [
"brands",
"social",
"account",
"gaming"
]
}

View File

@@ -1,13 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7" />
</svg>

Before

Width:  |  Height:  |  Size: 265 B

View File

@@ -1,21 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"ericfennis",
"karsa-mistmere"
],
"tags": [
"logo",
"social"
],
"categories": [
"brands",
"social",
"account"
]
}

View File

@@ -1,13 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z" />
</svg>

Before

Width:  |  Height:  |  Size: 359 B

View File

@@ -1,24 +0,0 @@
{
"$schema": "../icon.schema.json",
"deprecated": true,
"deprecationReason": "icon.brand",
"toBeRemovedInVersion": "v1.0",
"contributors": [
"colebemis",
"csandman",
"ericfennis",
"karsa-mistmere",
"jguddas"
],
"tags": [
"logo",
"social",
"video",
"play"
],
"categories": [
"multimedia",
"social",
"brands"
]
}

View File

@@ -1,14 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17" />
<path d="m10 15 5-3-5-3z" />
</svg>

Before

Width:  |  Height:  |  Size: 428 B

View File

@@ -24,9 +24,7 @@
"author": "Eric Fennis",
"amdName": "lucide-preact",
"main": "dist/cjs/lucide-preact.js",
"main:umd": "dist/umd/lucide-preact.js",
"module": "dist/esm/lucide-preact.js",
"unpkg": "dist/umd/lucide-preact.min.js",
"typings": "dist/lucide-preact.d.ts",
"files": [
"dist"
@@ -46,7 +44,7 @@
"@lucide/rollup-plugins": "workspace:*",
"@lucide/shared": "workspace:*",
"@preact/preset-vite": "^2.10.2",
"@testing-library/jest-dom": "^6.1.4",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/preact": "^3.2.3",
"jest-serializer-html": "^7.1.0",
"preact": "^10.19.2",

View File

@@ -7,17 +7,6 @@ const outputFileName = 'lucide-preact';
const outputDir = 'dist';
const inputs = [`src/lucide-preact.ts`];
const bundles = [
{
format: 'umd',
inputs,
outputDir,
minify: true,
},
{
format: 'umd',
inputs,
outputDir,
},
{
format: 'cjs',
inputs,
@@ -32,7 +21,7 @@ const bundles = [
];
const configs = bundles
.map(({ inputs, outputDir, format, minify, preserveModules }) =>
.map(({ inputs, outputDir, format, preserveModules }) =>
inputs.map((input) => ({
input,
plugins: plugins({ pkg, minify }),
@@ -44,7 +33,7 @@ const configs = bundles
dir: `${outputDir}/${format}`,
}
: {
file: `${outputDir}/${format}/${outputFileName}${minify ? '.min' : ''}.js`,
file: `${outputDir}/${format}/${outputFileName}.js`,
}),
preserveModules,
format,

View File

@@ -24,9 +24,7 @@
"author": "Eric Fennis",
"amdName": "lucide-react-native",
"main": "dist/cjs/lucide-react-native.js",
"main:umd": "dist/umd/lucide-react-native.js",
"module": "dist/esm/lucide-react-native.js",
"unpkg": "dist/umd/lucide-react-native.min.js",
"typings": "dist/lucide-react-native.d.ts",
"react-native": "dist/esm/lucide-react-native.js",
"sideEffects": false,
@@ -46,7 +44,7 @@
"@lucide/rollup-plugins": "workspace:*",
"@lucide/build-icons": "workspace:*",
"@lucide/shared": "workspace:*",
"@testing-library/jest-dom": "^6.1.6",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^14.1.2",
"@types/prop-types": "^15.7.5",
"@types/react": "^18.0.21",

View File

@@ -22,10 +22,10 @@ const bundles = [
];
const configs = bundles
.map(({ inputs, outputDir, format, minify, preserveModules }) =>
.map(({ inputs, outputDir, format, preserveModules }) =>
inputs.map((input) => ({
input,
plugins: plugins({ pkg, minify }),
plugins: plugins({ pkg }),
external: ['react', 'react-native-svg'],
output: {
name: packageName,
@@ -35,7 +35,7 @@ const configs = bundles
exports: 'auto',
}
: {
file: `${outputDir}/${format}/${outputFileName}${minify ? '.min' : ''}.js`,
file: `${outputDir}/${format}/${outputFileName}.js`,
}),
format,
preserveModules,

View File

@@ -24,9 +24,7 @@
"author": "Eric Fennis",
"amdName": "lucide-react",
"main": "dist/cjs/lucide-react.js",
"main:umd": "dist/umd/lucide-react.js",
"module": "dist/esm/lucide-react.js",
"unpkg": "dist/umd/lucide-react.min.js",
"typings": "dist/lucide-react.d.ts",
"sideEffects": false,
"files": [
@@ -54,7 +52,7 @@
"@lucide/build-icons": "workspace:*",
"@lucide/rollup-plugins": "workspace:*",
"@lucide/shared": "workspace:*",
"@testing-library/jest-dom": "^6.1.6",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^14.1.2",
"@types/react": "^18.2.37",
"@vitejs/plugin-react": "^4.4.1",

View File

@@ -10,17 +10,6 @@ const packageName = 'LucideReact';
const outputFileName = 'lucide-react';
const inputs = [`src/lucide-react.ts`];
const bundles = [
{
format: 'umd',
inputs,
outputDir: 'dist/umd',
minify: true,
},
{
format: 'umd',
inputs,
outputDir: 'dist/umd',
},
{
format: 'cjs',
inputs,
@@ -78,7 +67,7 @@ const configs = bundles
dir: outputDir,
}
: {
file: outputFile ?? `${outputDir}/${outputFileName}${minify ? '.min' : ''}.js`,
file: outputFile ?? `${outputDir}/${outputFileName}.js`,
}),
paths,
entryFileNames,

View File

@@ -74,7 +74,7 @@
"@lucide/shared": "workspace:*",
"@rollup/plugin-babel": "^6.0.4",
"@solidjs/testing-library": "^0.8.10",
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/jest-dom": "^6.6.3",
"babel-preset-solid": "^1.8.12",
"jest-serializer-html": "^7.1.0",
"rollup": "^4.53.3",

View File

@@ -61,7 +61,7 @@
"@lucide/helpers": "workspace:*",
"@sveltejs/package": "^2.2.3",
"@sveltejs/vite-plugin-svelte": "^2.4.2",
"@testing-library/jest-dom": "^6.1.4",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/svelte": "^4.0.2",
"@tsconfig/svelte": "^5.0.0",
"jest-serializer-html": "^7.1.0",

View File

@@ -25,9 +25,7 @@
"amdName": "lucide-vue-next",
"source": "build/lucide-vue-next.js",
"main": "dist/cjs/lucide-vue-next.js",
"main:umd": "dist/umd/lucide-vue-next.js",
"module": "dist/esm/lucide-vue-next.js",
"unpkg": "dist/umd/lucide-vue-next.min.js",
"typings": "dist/lucide-vue-next.d.ts",
"sideEffects": false,
"files": [
@@ -48,7 +46,7 @@
"@lucide/build-icons": "workspace:*",
"@lucide/rollup-plugins": "workspace:*",
"@lucide/shared": "workspace:*",
"@testing-library/jest-dom": "^6.1.6",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/vue": "^8.1.0",
"@vitejs/plugin-vue": "^6.0.2",
"@vue/test-utils": "2.4.6",

View File

@@ -7,17 +7,6 @@ const outputFileName = 'lucide-vue-next';
const outputDir = 'dist';
const inputs = ['src/lucide-vue-next.ts'];
const bundles = [
{
format: 'umd',
inputs,
outputDir,
minify: true,
},
{
format: 'umd',
inputs,
outputDir,
},
{
format: 'cjs',
inputs,
@@ -44,7 +33,7 @@ const configs = bundles
dir: `${outputDir}/${format}`,
}
: {
file: `${outputDir}/${format}/${outputFileName}${minify ? '.min' : ''}.js`,
file: `${outputDir}/${format}/${outputFileName}.js`,
}),
format,
preserveModules,

View File

@@ -3,7 +3,7 @@ import type { FunctionalComponent } from 'vue';
import { IconNode, LucideProps } from './types';
import Icon from './Icon';
// Create interface extending SVGAttributes
var showDeprecationWarning = true;
/**
* Create a Lucide icon component
@@ -13,8 +13,15 @@ import Icon from './Icon';
*/
const createLucideIcon =
(iconName: string, iconNode: IconNode): FunctionalComponent<LucideProps> =>
(props, { slots, attrs }) =>
h(
(props, { slots, attrs }) => {
if (showDeprecationWarning) {
console.warn(
'[lucide-vue-nuxt]: This package is renamed to `@lucide/vue`. Please update your imports to avoid potential issues in the future.',
);
showDeprecationWarning = false;
}
return h(
Icon,
{
...attrs,
@@ -24,5 +31,6 @@ const createLucideIcon =
},
slots,
);
};
export default createLucideIcon;

View File

@@ -12,5 +12,6 @@
"lib": ["ESNext", "DOM"],
"skipLibCheck": true,
"noEmit": true,
"types": ["@testing-library/jest-dom"],
},
}

View File

@@ -1,11 +0,0 @@
import { join } from 'path';
export default function LucideNuxtPlugin() {
this.nuxt.hook('components:dirs', (dirs) => {
dirs.push({
path: join(__dirname, 'dist', 'esm', 'icons'),
prefix: 'Icon',
ignore: ['**/index.js'],
});
});
}

View File

@@ -1,60 +0,0 @@
import plugins, { replace } from '@lucide/rollup-plugins';
import pkg from './package.json' with { type: 'json' };
const packageName = 'LucideVue';
const outputFileName = 'lucide-vue';
const outputDir = 'dist';
const inputs = ['src/lucide-vue.ts'];
const bundles = [
{
format: 'umd',
inputs,
outputDir,
minify: true,
},
{
format: 'umd',
inputs,
outputDir,
},
{
format: 'cjs',
inputs,
outputDir,
},
{
format: 'esm',
inputs,
outputDir,
preserveModules: true,
},
];
const configs = bundles
.map(({ inputs, outputDir, format, minify, preserveModules }) =>
inputs.map((input) => ({
input,
plugins: plugins({ pkg, minify }),
external: ['vue'],
output: {
name: packageName,
...(preserveModules
? {
dir: `${outputDir}/${format}`,
}
: {
file: `${outputDir}/${format}/${outputFileName}${minify ? '.min' : ''}.js`,
}),
format,
preserveModules,
preserveModulesRoot: 'src',
sourcemap: true,
globals: {
vue: 'vue',
},
},
})),
)
.flat();
export default configs;

View File

@@ -1 +0,0 @@
export * from './aliases';

View File

@@ -1,66 +0,0 @@
import { Component } from 'vue';
import defaultAttributes from './defaultAttributes';
import { toKebabCase } from '@lucide/shared';
var showDeprecationWarning = true;
type IconNode = [elementName: string, attrs: Record<string, string>][];
export default (iconName: string, iconNode: IconNode): Component => ({
name: iconName,
functional: true,
props: {
color: {
type: String,
default: 'currentColor',
},
size: {
type: Number,
default: 24,
},
strokeWidth: {
type: Number,
default: 2,
},
absoluteStrokeWidth: {
type: Boolean,
default: false,
},
defaultClass: {
type: String,
default: `lucide-icon lucide lucide-${toKebabCase(iconName).replace('-icon', '')}`,
},
},
render(
createElement,
{ props: { color, size, strokeWidth, absoluteStrokeWidth, defaultClass }, data, children = [] },
) {
if (showDeprecationWarning) {
console.warn(
'[Lucide Vue] This package will be deprecated end of 2023. Please upgrade to Vue 3 and use the latest lucide package for Vue.',
);
showDeprecationWarning = false;
}
return createElement(
'svg',
{
// prettier-ignore
class: [defaultClass, data.class, data.staticClass, data.attrs && data.attrs.class].filter(Boolean),
style: [data.style, data.staticStyle, data.attrs && data.attrs.style].filter(Boolean),
attrs: {
...defaultAttributes,
width: size,
height: size,
stroke: color,
'stroke-width': absoluteStrokeWidth
? (Number(strokeWidth) * 24) / Number(size)
: strokeWidth,
...data.attrs,
},
on: data?.on || {},
},
[...iconNode.map(([tag, attrs]) => createElement(String(tag), { attrs })), ...children],
);
},
});

View File

@@ -1,3 +0,0 @@
export * from './icons';
export * as icons from './icons';
export * from './aliases';

View File

@@ -1,132 +0,0 @@
import { describe, it, expect, vi } from 'vitest';
import { render, fireEvent, cleanup } from '@testing-library/vue';
import { Smile, Pen, Edit2 } from '../src/lucide-vue';
import { afterEach } from 'vitest';
import { VueClass } from '@vue/test-utils';
describe('Using lucide icon components', () => {
afterEach(() => cleanup());
it('should render an component', () => {
const { container } = render(Smile as VueClass<any>);
expect(container).toMatchSnapshot();
});
it('should adjust the size, stroke color and stroke width', () => {
const { container } = render(Smile as VueClass<any>, {
props: {
size: 48,
color: 'red',
strokeWidth: 4,
},
});
const [icon] = document.getElementsByClassName('lucide');
expect(icon.getAttribute('width')).toBe('48');
expect(icon.getAttribute('stroke')).toBe('red');
expect(icon.getAttribute('stroke-width')).toBe('4');
expect(container).toMatchSnapshot();
});
it('should add a class to the element', () => {
const { container } = render(Smile as VueClass<any>, {
attrs: {
class: 'my-icon',
},
});
expect(container).toMatchSnapshot();
const [icon] = document.getElementsByClassName('lucide');
expect(icon).toHaveClass('my-icon');
expect(icon).toHaveClass('lucide-smile');
expect(icon).toHaveClass('lucide');
});
it('should add a style attribute to the element', () => {
const { container } = render(Smile as VueClass<any>, {
attrs: {
style: 'position: absolute',
},
});
expect(container).toMatchSnapshot();
const [icon] = document.getElementsByClassName('lucide');
expect(icon).toHaveStyle({ position: 'absolute' });
});
it('should call the onClick event', async () => {
const onClick = vi.fn();
render(Smile as VueClass<any>, {
listeners: {
click: onClick,
},
});
const [icon] = document.getElementsByClassName('lucide');
await fireEvent.click(icon);
expect(onClick).toHaveBeenCalled();
});
it('should pass children to the icon slot', () => {
const testText = 'Hello World';
const template = `<text>${testText}</text>`;
const { getByText, container } = render(Smile as VueClass<any>, {
slots: {
default: { template },
},
});
const textElement = getByText(testText);
expect(textElement).toBeInTheDocument();
expect(container).toMatchSnapshot();
});
it('should render the alias icon', () => {
const { getByText, container } = render(Pen as VueClass<any>, {
props: {
size: '48',
color: 'red',
strokeWidth: '4',
},
});
const PenIconRenderedHTML = container.innerHTML;
cleanup();
const { container: Edit2Container } = render(Edit2 as VueClass<any>, {
props: {
size: '48',
color: 'red',
strokeWidth: '4',
},
});
expect(PenIconRenderedHTML).toBe(Edit2Container.innerHTML);
});
it('should not scale the strokeWidth when absoluteStrokeWidth is set', () => {
const { getByText, container } = render(Pen as VueClass<any>, {
props: {
size: '48',
color: 'red',
absoluteStrokeWidth: true,
},
});
const [icon] = document.getElementsByClassName('lucide');
expect(icon.getAttribute('width')).toBe('48');
expect(icon.getAttribute('stroke')).toBe('red');
expect(icon.getAttribute('stroke-width')).toBe('1');
});
});

View File

@@ -1 +0,0 @@
import '@testing-library/jest-dom';

View File

@@ -1,19 +0,0 @@
import { defineConfig } from 'vitest/config';
import vue from '@vitejs/plugin-vue2';
export default defineConfig({
plugins: [vue()],
test: {
globals: true,
environment: 'jsdom',
transformMode: {
web: [/\.jsx?$/],
},
setupFiles: './tests/setupVitest.js',
threads: false,
isolate: false,
},
resolve: {
conditions: ['development', 'browser'],
},
});

View File

@@ -61,7 +61,7 @@
"@lucide/helpers": "workspace:*",
"@sveltejs/package": "^2.3.10",
"@sveltejs/vite-plugin-svelte": "^5.0.3",
"@testing-library/jest-dom": "^6.1.4",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/svelte": "^5.2.7",
"@tsconfig/svelte": "^5.0.4",
"jest-serializer-html": "^7.1.0",

View File

@@ -1,20 +1,13 @@
<p align="center">
<a href="https://github.com/lucide-icons/lucide">
<img src="https://lucide.dev/package-logos/lucide-vue.svg" alt="Lucide icon library for Vue 2 applications." width="540">
<img src="https://lucide.dev/package-logos/lucide-vue.svg" alt="Lucide icon library for Vue applications." width="540">
</a>
</p>
<p align="center">
Lucide icon library for Vue 2 applications.
Lucide icon library for Vue applications.
</p>
<div align="center">
[![npm](https://img.shields.io/npm/v/lucide-vue?color=blue)](https://www.npmjs.com/package/lucide-vue)
![NPM Downloads](https://img.shields.io/npm/dw/lucide-vue)
[![GitHub](https://img.shields.io/github/license/lucide-icons/lucide)](https://lucide.dev/license)
</div>
<p align="center">
<a href="https://lucide.dev/guide/">About</a>
·
@@ -27,28 +20,24 @@ Lucide icon library for Vue 2 applications.
# Lucide Vue
Implementation of the lucide icon library for Vue applications.
> :rotating_light:
This package is deprecated. Vue 2 is EOF See [Announcement](https://v2.vuejs.org/eol/). Migrate to Vue 3.
:::
Implementation of the lucide icon library for Vue 3 applications.
## Installation
```sh
pnpm add lucide-vue
pnpm add @lucide/vue
```
```sh
npm install lucide-vue
npm install @lucide/vue
```
```sh
yarn add lucide-vue
yarn add @lucide/vue
```
```sh
bun add lucide-vue
bun add @lucide/vue
```
## Documentation

View File

@@ -1,15 +1,15 @@
{
"name": "lucide-vue",
"name": "@lucide/vue",
"version": "0.0.1",
"author": "Eric Fennis",
"description": "A Lucide icon library package for Vue 2 applications.",
"description": "A Lucide icon library package for Vue applications.",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",
"repository": {
"type": "git",
"url": "https://github.com/lucide-icons/lucide.git",
"directory": "packages/lucide-vue"
"directory": "packages/vue"
},
"keywords": [
"Lucide",
@@ -18,46 +18,45 @@
"Icons",
"Icon",
"SVG",
"Feather Icons",
"Fontawesome",
"Font Awesome"
"Feather Icons"
],
"amdName": "lucide-vue",
"source": "build/lucide-vue.js",
"main": "dist/cjs/lucide-vue.js",
"main:umd": "dist/umd/lucide-vue.js",
"module": "dist/esm/lucide-vue.js",
"unpkg": "dist/umd/lucide-vue.min.js",
"typings": "dist/lucide-vue.d.ts",
"sideEffects": false,
"files": [
"dist",
"nuxt.js"
"dist"
],
"scripts": {
"build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:bundles",
"copy:license": "cp ../../LICENSE ./LICENSE",
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey --withAliases --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts",
"clean": "rm -rf dist && rm -rf ./src/icons/*.ts",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mts --renderUniqueKey --withAliases --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts",
"build:bundles": "rollup -c ./rollup.config.mjs",
"typecheck": "tsc",
"typecheck:watch": "tsc -w",
"test": "pnpm build:icons && vitest run",
"test:watch": "vitest watch",
"version": "pnpm version --git-tag-version=false"
},
"devDependencies": {
"@lucide/build-icons": "workspace:*",
"@lucide/rollup-plugins": "workspace:*",
"@lucide/shared": "workspace:*",
"@testing-library/jest-dom": "^6.1.4",
"@testing-library/vue": "^5.9.0",
"@vitejs/plugin-vue2": "2.2.0",
"@vue/test-utils": "1.3.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/vue": "^8.1.0",
"@vitejs/plugin-vue": "^4.6.2",
"@vue/test-utils": "2.4.5",
"rollup": "^4.53.3",
"rollup-plugin-dts": "^6.1.0",
"typescript": "^5.8.3",
"vite": "^7.2.4",
"vitest": "^4.0.12",
"vue": "2.7.14",
"vue-template-compiler": "2.7.14"
"vue": "^3.4.21"
},
"peerDependencies": {
"vue": "^2.6.12"
"vue": ">=3.0.1"
}
}

View File

@@ -0,0 +1,100 @@
import plugins from '@lucide/rollup-plugins';
import pkg from './package.json' with { type: 'json' };
import dts from 'rollup-plugin-dts';
const packageName = '@lucide/vue';
const outputFileName = 'lucide-vue';
const outputDir = 'dist';
const inputs = ['src/lucide-vue.ts'];
const bundles = [
{
format: 'cjs',
inputs,
outputDir,
},
{
format: 'esm',
inputs,
outputDir,
preserveModules: true,
},
];
const configs = bundles
.map(({ inputs, outputDir, format, minify, preserveModules }) =>
inputs.map((input) => ({
input,
plugins: plugins({ pkg, minify }),
external: ['vue'],
output: {
name: packageName,
...(preserveModules
? {
dir: `${outputDir}/${format}`,
}
: {
file: `${outputDir}/${format}/${outputFileName}.js`,
}),
format,
preserveModules,
preserveModulesRoot: 'src',
sourcemap: true,
globals: {
vue: 'vue',
},
},
})),
)
.flat();
export default [
{
input: inputs[0],
output: [
{
file: `dist/${outputFileName}.d.ts`,
format: 'es',
},
],
plugins: [
dts({
compilerOptions: {
preserveSymlinks: false,
},
}),
],
},
{
input: `src/${outputFileName}.suffixed.ts`,
output: [
{
file: `dist/${outputFileName}.suffixed.d.ts`,
format: 'es',
},
],
plugins: [
dts({
compilerOptions: {
preserveSymlinks: false,
},
}),
],
},
{
input: `src/${outputFileName}.prefixed.ts`,
output: [
{
file: `dist/${outputFileName}.prefixed.d.ts`,
format: 'es',
},
],
plugins: [
dts({
compilerOptions: {
preserveSymlinks: false,
},
}),
],
},
...configs,
];

View File

@@ -1,7 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import base64SVG from '@lucide/build-icons/utils/base64SVG.mjs';
import base64SVG from '@lucide/build-icons/utils/base64SVG';
import defineExportTemplate from '@lucide/build-icons/utils/defineExportTemplate';
export default async ({
export default defineExportTemplate(async({
componentName,
iconName,
children,
@@ -14,20 +14,23 @@ export default async ({
return `
import createLucideIcon from '../createLucideIcon';
import { IconNode } from '../types';
export const __iconNode: IconNode = ${JSON.stringify(children)}
/**
* @component @name ${componentName}
* @description Lucide SVG icon component, renders SVG Element with children.
*
* @preview ![img](data:image/svg+xml;base64,${svgBase64}) - https://lucide.dev/icons/${iconName}
* @see https://lucide.dev/guide/packages/lucide-vue - Documentation
* @see https://lucide.dev/guide/packages/lucide-react - Documentation
*
* @param {Object} props - Lucide icons props and any valid SVG attribute
* @returns {Component} Vue Component
* @returns {JSX.Element} JSX Element
* ${deprecated ? `@deprecated ${deprecationReason}` : ''}
*/
const ${componentName} = createLucideIcon('${componentName}Icon', ${JSON.stringify(children)});
const ${componentName} = createLucideIcon('${iconName}', __iconNode);
export default ${componentName};
`;
};
});

54
packages/vue/src/Icon.ts Normal file
View File

@@ -0,0 +1,54 @@
import { type FunctionalComponent, h } from 'vue';
import { mergeClasses, toKebabCase, toPascalCase, isEmptyString } from '@lucide/shared';
import defaultAttributes from './defaultAttributes';
import { IconNode, LucideProps } from './types';
interface IconProps {
iconNode: IconNode;
name: string;
}
const Icon: FunctionalComponent<LucideProps & IconProps> = (
{
name,
iconNode,
absoluteStrokeWidth,
'absolute-stroke-width': absoluteStrokeWidthKebabCase,
strokeWidth,
'stroke-width': strokeWidthKebabCase,
size = defaultAttributes.width,
color = defaultAttributes.stroke,
...props
},
{ slots },
) => {
return h(
'svg',
{
...defaultAttributes,
...props,
width: size,
height: size,
stroke: color,
'stroke-width':
isEmptyString(absoluteStrokeWidth) ||
isEmptyString(absoluteStrokeWidthKebabCase) ||
absoluteStrokeWidth === true ||
absoluteStrokeWidthKebabCase === true
? (Number(strokeWidth || strokeWidthKebabCase || defaultAttributes['stroke-width']) *
24) /
Number(size)
: strokeWidth || strokeWidthKebabCase || defaultAttributes['stroke-width'],
class: mergeClasses(
'lucide',
props.class,
...(name
? [`lucide-${toKebabCase(toPascalCase(name))}-icon`, `lucide-${toKebabCase(name)}`]
: ['lucide-icon']),
),
},
[...iconNode.map((child) => h(...child)), ...(slots.default ? [slots.default()] : [])],
);
};
export default Icon;

View File

@@ -0,0 +1,3 @@
export * from './aliases';
export * from './prefixed';
export * from './suffixed';

View File

@@ -0,0 +1,28 @@
import { h } from 'vue';
import type { FunctionalComponent } from 'vue';
import { IconNode, LucideProps } from './types';
import Icon from './Icon';
// Create interface extending SVGAttributes
/**
* Create a Lucide icon component
* @param {string} iconName
* @param {array} iconNode
* @returns {FunctionalComponent} LucideIcon
*/
const createLucideIcon =
(iconName: string, iconNode: IconNode): FunctionalComponent<LucideProps> =>
(props, { slots, attrs }) =>
h(
Icon,
{
...attrs,
...props,
iconNode,
name: iconName,
},
slots,
);
export default createLucideIcon;

View File

@@ -1,4 +1,4 @@
const defaultAttributes = {
export default {
xmlns: 'http://www.w3.org/2000/svg',
width: 24,
height: 24,
@@ -9,5 +9,3 @@ const defaultAttributes = {
'stroke-linecap': 'round',
'stroke-linejoin': 'round',
};
export default defaultAttributes;

View File

@@ -0,0 +1,6 @@
export * as icons from './icons';
export * from './aliases/prefixed';
export * from './types';
export { default as createLucideIcon } from './createLucideIcon';
export { default as Icon } from './Icon';

View File

@@ -0,0 +1,6 @@
export * as icons from './icons';
export * from './aliases/suffixed';
export * from './types';
export { default as createLucideIcon } from './createLucideIcon';
export { default as Icon } from './Icon';

View File

@@ -0,0 +1,7 @@
export * from './icons';
export * as icons from './icons';
export * from './aliases';
export * from './types';
export { default as createLucideIcon } from './createLucideIcon';
export { default as Icon } from './Icon';

13
packages/vue/src/types.ts Normal file
View File

@@ -0,0 +1,13 @@
import type { FunctionalComponent, SVGAttributes } from 'vue';
export interface LucideProps extends Partial<SVGAttributes> {
size?: 24 | number;
strokeWidth?: number | string;
absoluteStrokeWidth?: boolean;
}
export type IconNode = [elementName: string, attrs: Record<string, string>][];
export type LucideIcon = FunctionalComponent<LucideProps>;
// Legacy exports
export type SVGProps = LucideProps;

View File

@@ -0,0 +1,35 @@
import { describe, it, expect } from 'vitest';
import { render } from '@testing-library/vue';
import { airVent } from './testIconNodes';
import { Icon } from '../src/lucide-vue';
describe('Using Icon Component', () => {
it('should render icon based on a iconNode', async () => {
const { container } = render(Icon, {
props: {
iconNode: airVent,
name: 'AirVent',
size: 48,
color: 'red',
absoluteStrokeWidth: true,
},
});
expect(container.firstChild).toBeDefined();
});
it('should render icon and match snapshot', async () => {
const { container } = render(Icon, {
props: {
iconNode: airVent,
name: 'AirVent',
size: 48,
color: 'red',
absoluteStrokeWidth: true,
},
});
expect(container.firstChild).toMatchSnapshot();
});
});

View File

@@ -0,0 +1,29 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Using Icon Component > should render icon and match snapshot 1`] = `
<svg
class="lucide lucide-air-vent-icon lucide-air-vent"
fill="none"
height="48"
stroke="red"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="1"
viewBox="0 0 24 24"
width="48"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M6 12H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"
/>
<path
d="M6 8h12"
/>
<path
d="M18.3 17.7a2.5 2.5 0 0 1-3.16 3.83 2.53 2.53 0 0 1-1.14-2V12"
/>
<path
d="M6.6 15.6A2 2 0 1 0 10 17v-5"
/>
</svg>
`;

View File

@@ -0,0 +1,197 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Using lucide icon components > should add a class to the element 1`] = `
<div>
<svg
class="lucide lucide-smile-icon lucide-smile my-icon"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<circle
cx="12"
cy="12"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
/>
<line
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
x1="15"
x2="15.01"
y1="9"
y2="9"
/>
</svg>
</div>
`;
exports[`Using lucide icon components > should add a style attribute to the element 1`] = `
<div>
<svg
class="lucide lucide-smile-icon lucide-smile"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
style="position: absolute;"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<circle
cx="12"
cy="12"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
/>
<line
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
x1="15"
x2="15.01"
y1="9"
y2="9"
/>
</svg>
</div>
`;
exports[`Using lucide icon components > should adjust the size, stroke color and stroke width 1`] = `
<div>
<svg
class="lucide lucide-smile-icon lucide-smile"
fill="none"
height="48"
stroke="red"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="4"
viewBox="0 0 24 24"
width="48"
xmlns="http://www.w3.org/2000/svg"
>
<circle
cx="12"
cy="12"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
/>
<line
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
x1="15"
x2="15.01"
y1="9"
y2="9"
/>
</svg>
</div>
`;
exports[`Using lucide icon components > should pass children to the icon slot 1`] = `
<div>
<svg
class="lucide lucide-smile-icon lucide-smile"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<circle
cx="12"
cy="12"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
/>
<line
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
x1="15"
x2="15.01"
y1="9"
y2="9"
/>
<text>
Hello World
</text>
</svg>
</div>
`;
exports[`Using lucide icon components > should render an component 1`] = `
<div>
<svg
class="lucide lucide-smile-icon lucide-smile"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
>
<circle
cx="12"
cy="12"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
/>
<line
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
x1="15"
x2="15.01"
y1="9"
y2="9"
/>
</svg>
</div>
`;

View File

@@ -3,7 +3,7 @@
exports[`Using lucide icon components > should add a class to the element 1`] = `
<div>
<svg
class="lucide-icon lucide lucide-smile my-icon"
class="lucide my-icon lucide-smile-icon lucide-smile my-icon"
fill="none"
height="24"
stroke="currentColor"
@@ -17,22 +17,18 @@ exports[`Using lucide icon components > should add a class to the element 1`] =
<circle
cx="12"
cy="12"
key="1mglay"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
key="1y1vjs"
/>
<line
key="yxxnd0"
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
key="1p4y9e"
x1="15"
x2="15.01"
y1="9"
@@ -45,14 +41,14 @@ exports[`Using lucide icon components > should add a class to the element 1`] =
exports[`Using lucide icon components > should add a style attribute to the element 1`] = `
<div>
<svg
class="lucide-icon lucide lucide-smile"
class="lucide lucide-smile-icon lucide-smile"
fill="none"
height="24"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
style="position: absolute"
style="position: absolute;"
viewBox="0 0 24 24"
width="24"
xmlns="http://www.w3.org/2000/svg"
@@ -60,22 +56,18 @@ exports[`Using lucide icon components > should add a style attribute to the elem
<circle
cx="12"
cy="12"
key="1mglay"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
key="1y1vjs"
/>
<line
key="yxxnd0"
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
key="1p4y9e"
x1="15"
x2="15.01"
y1="9"
@@ -88,7 +80,7 @@ exports[`Using lucide icon components > should add a style attribute to the elem
exports[`Using lucide icon components > should adjust the size, stroke color and stroke width 1`] = `
<div>
<svg
class="lucide-icon lucide lucide-smile"
class="lucide lucide-smile-icon lucide-smile"
fill="none"
height="48"
stroke="red"
@@ -102,22 +94,18 @@ exports[`Using lucide icon components > should adjust the size, stroke color and
<circle
cx="12"
cy="12"
key="1mglay"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
key="1y1vjs"
/>
<line
key="yxxnd0"
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
key="1p4y9e"
x1="15"
x2="15.01"
y1="9"
@@ -130,7 +118,7 @@ exports[`Using lucide icon components > should adjust the size, stroke color and
exports[`Using lucide icon components > should pass children to the icon slot 1`] = `
<div>
<svg
class="lucide-icon lucide lucide-smile"
class="lucide lucide-smile-icon lucide-smile"
fill="none"
height="24"
stroke="currentColor"
@@ -144,30 +132,28 @@ exports[`Using lucide icon components > should pass children to the icon slot 1`
<circle
cx="12"
cy="12"
key="1mglay"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
key="1y1vjs"
/>
<line
key="yxxnd0"
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
key="1p4y9e"
x1="15"
x2="15.01"
y1="9"
y2="9"
/>
<text>
Hello World
</text>
</svg>
</div>
`;
@@ -175,7 +161,7 @@ exports[`Using lucide icon components > should pass children to the icon slot 1`
exports[`Using lucide icon components > should render an component 1`] = `
<div>
<svg
class="lucide-icon lucide lucide-smile"
class="lucide lucide-smile-icon lucide-smile"
fill="none"
height="24"
stroke="currentColor"
@@ -189,22 +175,18 @@ exports[`Using lucide icon components > should render an component 1`] = `
<circle
cx="12"
cy="12"
key="1mglay"
r="10"
/>
<path
d="M8 14s1.5 2 4 2 4-2 4-2"
key="1y1vjs"
/>
<line
key="yxxnd0"
x1="9"
x2="9.01"
y1="9"
y2="9"
/>
<line
key="1p4y9e"
x1="15"
x2="15.01"
y1="9"

View File

@@ -0,0 +1,183 @@
import { describe, it, expect, vi, afterEach } from 'vitest';
import { render, fireEvent, cleanup } from '@testing-library/vue';
import { Smile, Edit2, Pen } from '../src/lucide-vue';
import defaultAttributes from '../src/defaultAttributes';
describe('Using lucide icon components', () => {
afterEach(() => cleanup());
it('should render an component', () => {
const { container } = render(Smile);
expect(container).toMatchSnapshot();
});
it('should render the icon with the default attributes', () => {
const { container } = render(Smile);
const SVGElement = container.firstElementChild;
expect(SVGElement).toHaveAttribute('xmlns', defaultAttributes.xmlns);
expect(SVGElement).toHaveAttribute('width', String(defaultAttributes.width));
expect(SVGElement).toHaveAttribute('height', String(defaultAttributes.height));
expect(SVGElement).toHaveAttribute('viewBox', defaultAttributes.viewBox);
expect(SVGElement).toHaveAttribute('fill', defaultAttributes.fill);
expect(SVGElement).toHaveAttribute('stroke', defaultAttributes.stroke);
expect(SVGElement).toHaveAttribute('stroke-width', String(defaultAttributes['stroke-width']));
expect(SVGElement).toHaveAttribute('stroke-linecap', defaultAttributes['stroke-linecap']);
expect(SVGElement).toHaveAttribute('stroke-linejoin', defaultAttributes['stroke-linejoin']);
});
it('should adjust the size, stroke color and stroke width', () => {
const { container } = render(Smile, {
props: {
size: 48,
color: 'red',
'stroke-width': 4,
},
});
const SVGElement = container.firstElementChild;
expect(SVGElement).toHaveAttribute('width', '48');
expect(SVGElement).toHaveAttribute('stroke', 'red');
expect(SVGElement).toHaveAttribute('stroke-width', '4');
expect(container).toMatchSnapshot();
});
it('should add a class to the element', () => {
const { container } = render(Smile, {
attrs: {
class: 'my-icon',
},
});
expect(container).toMatchSnapshot();
const icon = container.firstElementChild;
expect(icon).toHaveClass('my-icon');
expect(icon).toHaveClass('lucide');
expect(icon).toHaveClass('lucide-smile-icon');
});
it('should add a style attribute to the element', () => {
const { container } = render(Smile, {
attrs: {
style: 'position: absolute',
},
});
expect(container).toMatchSnapshot();
const icon = container.firstElementChild;
expect(icon).toHaveStyle({ position: 'absolute' });
});
it('should call the onClick event', async () => {
const onClick = vi.fn();
const { container } = render(Smile, {
attrs: {
onClick,
},
});
const icon = container.firstElementChild;
await fireEvent.click(icon);
expect(onClick).toHaveBeenCalled();
});
it('should pass children to the icon slot', () => {
const testText = 'Hello World';
const template = {
name: 'Stub',
template: `<text>${testText}</text>`,
};
const { getByText, container } = render(Smile, {
slots: {
default: template,
},
});
const textElement = getByText(testText);
expect(textElement).toBeInTheDocument();
expect(container).toMatchSnapshot();
});
it('should render the alias icon', () => {
const { container } = render(Pen, {
props: {
size: 48,
color: 'red',
'stroke-width': 4,
},
});
const PenIconRenderedHTML = container.innerHTML;
cleanup();
const { container: Edit2Container } = render(Edit2, {
props: {
size: 48,
color: 'red',
'stroke-width': 4,
},
});
expect(PenIconRenderedHTML).toBe(Edit2Container.innerHTML);
});
it('should not scale the strokeWidth when absoluteStrokeWidth is set', () => {
const { container } = render(Pen, {
props: {
size: 48,
color: 'red',
absoluteStrokeWidth: true,
},
});
const icon = container.firstElementChild;
expect(icon).toHaveAttribute('width', '48');
expect(icon).toHaveAttribute('stroke', 'red');
expect(icon).toHaveAttribute('stroke-width', '1');
});
it('should not scale the strokeWidth when absoluteStrokeWidth is as empty value attribute', () => {
const { container } = render(Pen, {
props: {
size: 48,
color: 'red',
absoluteStrokeWidth: '',
},
});
const icon = container.firstElementChild;
expect(icon).toHaveAttribute('width', '48');
expect(icon).toHaveAttribute('stroke', 'red');
expect(icon).toHaveAttribute('stroke-width', '1');
});
it('should not scale the strokeWidth when absoluteStrokeWidth is written in kebabCase', () => {
const { container } = render(Pen, {
props: {
size: 48,
color: 'red',
'stroke-width': '2',
'absolute-stroke-width': '',
},
});
const icon = container.firstElementChild;
expect(icon).toHaveAttribute('width', '48');
expect(icon).toHaveAttribute('stroke', 'red');
expect(icon).toHaveAttribute('stroke-width', '1');
});
});

View File

@@ -0,0 +1,7 @@
import { afterEach } from 'vitest';
import { cleanup } from '@testing-library/vue';
import '@testing-library/jest-dom/vitest';
afterEach(() => {
cleanup();
});

View File

@@ -0,0 +1,22 @@
import { IconNode } from '../src/types';
export const airVent: IconNode = [
[
'path',
{
d: 'M6 12H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2',
key: 'larmp2',
},
],
['path', { d: 'M6 8h12', key: '6g4wlu' }],
['path', { d: 'M18.3 17.7a2.5 2.5 0 0 1-3.16 3.83 2.53 2.53 0 0 1-1.14-2V12', key: '1bo8pg' }],
['path', { d: 'M6.6 15.6A2 2 0 1 0 10 17v-5', key: 't9h90c' }],
];
export const coffee: IconNode = [
['path', { d: 'M17 8h1a4 4 0 1 1 0 8h-1', key: 'jx4kbh' }],
['path', { d: 'M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4Z', key: '1bxrl0' }],
['line', { x1: '6', x2: '6', y1: '2', y2: '4', key: '1cr9l3' }],
['line', { x1: '10', x2: '10', y1: '2', y2: '4', key: '170wym' }],
['line', { x1: '14', x2: '14', y1: '2', y2: '4', key: '1c5f70' }],
];

View File

@@ -9,9 +9,10 @@
"resolveJsonModule": true,
"isolatedModules": true,
"esModuleInterop": true,
"allowImportingTsExtensions": true,
"lib": ["ESNext", "DOM"],
"skipLibCheck": true,
"noEmit": true,
"types": ["@testing-library/jest-dom"],
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
}

View File

@@ -0,0 +1,11 @@
import { defineConfig } from 'vitest/config'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
test: {
globals: true,
environment: 'jsdom',
setupFiles: './tests/setupVitest.js',
},
});

414
pnpm-lock.yaml generated
View File

@@ -400,7 +400,7 @@ importers:
specifier: ^2.10.2
version: 2.10.2(@babel/core@7.28.5)(preact@10.27.2)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))
'@testing-library/jest-dom':
specifier: ^6.1.4
specifier: ^6.6.3
version: 6.9.1
'@testing-library/preact':
specifier: ^3.2.3
@@ -439,7 +439,7 @@ importers:
specifier: workspace:*
version: link:../shared
'@testing-library/jest-dom':
specifier: ^6.1.6
specifier: ^6.6.3
version: 6.9.1
'@testing-library/react':
specifier: ^14.1.2
@@ -490,7 +490,7 @@ importers:
specifier: workspace:*
version: link:../shared
'@testing-library/jest-dom':
specifier: ^6.1.6
specifier: ^6.6.3
version: 6.9.1
'@testing-library/react':
specifier: ^14.1.2
@@ -562,7 +562,7 @@ importers:
specifier: ^0.8.10
version: 0.8.10(@solidjs/router@0.11.5(solid-js@1.9.10))(solid-js@1.9.10)
'@testing-library/jest-dom':
specifier: ^6.4.2
specifier: ^6.6.3
version: 6.9.1
babel-preset-solid:
specifier: ^1.8.12
@@ -634,7 +634,7 @@ importers:
specifier: ^2.4.2
version: 2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))
'@testing-library/jest-dom':
specifier: ^6.1.4
specifier: ^6.6.3
version: 6.9.1
'@testing-library/svelte':
specifier: ^4.0.2
@@ -667,48 +667,6 @@ importers:
specifier: ^4.0.12
version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
packages/lucide-vue:
devDependencies:
'@lucide/build-icons':
specifier: workspace:*
version: link:../../tools/build-icons
'@lucide/rollup-plugins':
specifier: workspace:*
version: link:../../tools/rollup-plugins
'@lucide/shared':
specifier: workspace:*
version: link:../shared
'@testing-library/jest-dom':
specifier: ^6.1.4
version: 6.9.1
'@testing-library/vue':
specifier: ^5.9.0
version: 5.9.0(vue-template-compiler@2.7.14(vue@2.7.14))(vue@2.7.14)
'@vitejs/plugin-vue2':
specifier: 2.2.0
version: 2.2.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@2.7.14)
'@vue/test-utils':
specifier: 1.3.0
version: 1.3.0(vue-template-compiler@2.7.14(vue@2.7.14))(vue@2.7.14)
rollup:
specifier: ^4.53.3
version: 4.53.3
typescript:
specifier: ^5.8.3
version: 5.9.3
vite:
specifier: ^7.2.4
version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
vitest:
specifier: ^4.0.12
version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
vue:
specifier: 2.7.14
version: 2.7.14
vue-template-compiler:
specifier: 2.7.14
version: 2.7.14(vue@2.7.14)
packages/lucide-vue-next:
devDependencies:
'@lucide/build-icons':
@@ -721,7 +679,7 @@ importers:
specifier: workspace:*
version: link:../shared
'@testing-library/jest-dom':
specifier: ^6.1.6
specifier: ^6.6.3
version: 6.9.1
'@testing-library/vue':
specifier: ^8.1.0
@@ -772,7 +730,7 @@ importers:
specifier: ^5.0.3
version: 5.1.1(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))
'@testing-library/jest-dom':
specifier: ^6.1.4
specifier: ^6.6.3
version: 6.9.1
'@testing-library/svelte':
specifier: ^5.2.7
@@ -805,6 +763,48 @@ importers:
specifier: ^4.0.12
version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
packages/vue:
devDependencies:
'@lucide/build-icons':
specifier: workspace:*
version: link:../../tools/build-icons
'@lucide/rollup-plugins':
specifier: workspace:*
version: link:../../tools/rollup-plugins
'@lucide/shared':
specifier: workspace:*
version: link:../shared
'@testing-library/jest-dom':
specifier: ^6.6.3
version: 6.9.1
'@testing-library/vue':
specifier: ^8.1.0
version: 8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3))
'@vitejs/plugin-vue':
specifier: ^4.6.2
version: 4.6.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3))
'@vue/test-utils':
specifier: 2.4.5
version: 2.4.5
rollup:
specifier: ^4.53.3
version: 4.53.3
rollup-plugin-dts:
specifier: ^6.1.0
version: 6.2.3(rollup@4.53.3)(typescript@5.9.3)
typescript:
specifier: ^5.8.3
version: 5.9.3
vite:
specifier: ^7.2.4
version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
vitest:
specifier: ^4.0.12
version: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
vue:
specifier: ^3.4.21
version: 3.5.24(typescript@5.9.3)
tools/build-font:
dependencies:
fs-extra:
@@ -2351,10 +2351,6 @@ packages:
resolution: {integrity: sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==}
engines: {node: '>=6.9.0'}
'@babel/runtime@7.22.6':
resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==}
engines: {node: '>=6.9.0'}
'@babel/runtime@7.26.0':
resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
engines: {node: '>=6.9.0'}
@@ -5097,13 +5093,6 @@ packages:
vitest:
optional: true
'@testing-library/vue@5.9.0':
resolution: {integrity: sha512-HWvI4s6FayFLmiqGcEMAMfTSO1SV12NukdoyllYMBobFqfO0TalQmfofMtiO+eRz+Amej8Z26dx4/WYIROzfVw==}
engines: {node: '>=14'}
peerDependencies:
vue: ^2.6.10
vue-template-compiler: ^2.6.10
'@testing-library/vue@8.1.0':
resolution: {integrity: sha512-ls4RiHO1ta4mxqqajWRh8158uFObVrrtAPoxk7cIp4HrnQUj/ScKzqz53HxYpG3X6Zb7H2v+0eTGLSoy8HQ2nA==}
engines: {node: '>=14'}
@@ -5623,12 +5612,12 @@ packages:
peerDependencies:
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
'@vitejs/plugin-vue2@2.2.0':
resolution: {integrity: sha512-1km7zEuZ/9QRPvzXSjikbTYGQPG86Mq1baktpC4sXqsXlb02HQKfi+fl8qVS703JM7cgm24Ga9j+RwKmvFn90A==}
'@vitejs/plugin-vue@4.6.2':
resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: ^3.0.0 || ^4.0.0
vue: ^2.7.0-0
vite: ^4.0.0 || ^5.0.0
vue: ^3.2.25
'@vitejs/plugin-vue@5.2.4':
resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
@@ -5688,9 +5677,6 @@ packages:
'@vue/compiler-dom@3.5.24':
resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==}
'@vue/compiler-sfc@2.7.14':
resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==}
'@vue/compiler-sfc@3.5.24':
resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==}
@@ -5723,11 +5709,8 @@ packages:
'@vue/shared@3.5.24':
resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==}
'@vue/test-utils@1.3.0':
resolution: {integrity: sha512-Xk2Xiyj2k5dFb8eYUKkcN9PzqZSppTlx7LaQWBbdA8tqh3jHr/KHX2/YLhNFc/xwDrgeLybqd+4ZCPJSGPIqeA==}
peerDependencies:
vue: 2.x
vue-template-compiler: ^2.x
'@vue/test-utils@2.4.5':
resolution: {integrity: sha512-oo2u7vktOyKUked36R93NB7mg2B+N7Plr8lxp2JBGwr18ch6EggFjixSCdIVVLkT6Qr0z359Xvnafc9dcKyDUg==}
'@vue/test-utils@2.4.6':
resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==}
@@ -6785,10 +6768,6 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
condense-newlines@0.2.1:
resolution: {integrity: sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==}
engines: {node: '>=0.10.0'}
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
@@ -7060,9 +7039,6 @@ packages:
sqlite3:
optional: true
de-indent@1.0.2:
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
@@ -7318,9 +7294,6 @@ packages:
dom-accessibility-api@0.6.3:
resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
dom-event-types@1.1.0:
resolution: {integrity: sha512-jNCX+uNJ3v38BKvPbpki6j5ItVlnSqVV6vDWGS6rExzCMjsc39frLjm1n91o6YaKK6AZl0wLloItW6C6mr61BQ==}
dom-serialize@2.2.1:
resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==}
@@ -8091,10 +8064,6 @@ packages:
exsolve@1.0.8:
resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
extend-shallow@2.0.1:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -8858,9 +8827,6 @@ packages:
resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
engines: {node: '>= 0.4'}
is-bigint@1.0.4:
resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
is-bigint@1.1.0:
resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
engines: {node: '>= 0.4'}
@@ -8869,10 +8835,6 @@ packages:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
is-boolean-object@1.1.2:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
engines: {node: '>= 0.4'}
is-boolean-object@1.2.2:
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
@@ -8899,10 +8861,6 @@ packages:
resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
engines: {node: '>= 0.4'}
is-date-object@1.0.5:
resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
engines: {node: '>= 0.4'}
is-date-object@1.1.0:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
@@ -8921,10 +8879,6 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
hasBin: true
is-extendable@0.1.1:
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
engines: {node: '>=0.10.0'}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@@ -8964,9 +8918,6 @@ packages:
is-lambda@1.0.1:
resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
is-map@2.0.2:
resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -8978,10 +8929,6 @@ packages:
resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
engines: {node: '>= 0.4'}
is-number-object@1.0.7:
resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
engines: {node: '>= 0.4'}
is-number-object@1.1.1:
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
engines: {node: '>= 0.4'}
@@ -9067,9 +9014,6 @@ packages:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
is-weakmap@2.0.1:
resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
is-weakmap@2.0.2:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
@@ -9078,9 +9022,6 @@ packages:
resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
engines: {node: '>= 0.4'}
is-weakset@2.0.2:
resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
is-weakset@2.0.4:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
@@ -9096,10 +9037,6 @@ packages:
resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
engines: {node: '>=18'}
is-whitespace@0.3.0:
resolution: {integrity: sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==}
engines: {node: '>=0.10.0'}
is-wsl@2.2.0:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
@@ -11058,10 +10995,6 @@ packages:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
pretty@2.0.0:
resolution: {integrity: sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==}
engines: {node: '>=0.10.0'}
prismjs@1.30.0:
resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
engines: {node: '>=6'}
@@ -11777,10 +11710,6 @@ packages:
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
engines: {node: '>= 0.4'}
side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
engines: {node: '>= 0.4'}
side-channel@1.1.0:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
@@ -12954,46 +12883,6 @@ packages:
terser:
optional: true
vite@6.3.6:
resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
jiti: '>=1.21.0'
less: '*'
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
peerDependenciesMeta:
'@types/node':
optional: true
jiti:
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
vite@6.4.1:
resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
@@ -13174,15 +13063,6 @@ packages:
'@vue/composition-api':
optional: true
vue-template-compiler@2.7.14:
resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
peerDependencies:
vue: 2.7.14
vue@2.7.14:
resolution: {integrity: sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==}
deprecated: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.
vue@3.5.24:
resolution: {integrity: sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==}
peerDependencies:
@@ -13310,9 +13190,6 @@ packages:
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
which-boxed-primitive@1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
which-boxed-primitive@1.1.1:
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
engines: {node: '>= 0.4'}
@@ -13321,9 +13198,6 @@ packages:
resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
engines: {node: '>= 0.4'}
which-collection@1.0.1:
resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
which-collection@1.0.2:
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
engines: {node: '>= 0.4'}
@@ -15774,10 +15648,6 @@ snapshots:
dependencies:
regenerator-runtime: 0.14.1
'@babel/runtime@7.22.6':
dependencies:
regenerator-runtime: 0.13.11
'@babel/runtime@7.26.0':
dependencies:
regenerator-runtime: 0.14.1
@@ -15834,7 +15704,7 @@ snapshots:
'@babel/parser': 7.28.5
'@babel/template': 7.27.2
'@babel/types': 7.28.5
debug: 4.3.5
debug: 4.4.3
transitivePeerDependencies:
- supports-color
@@ -18166,7 +18036,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0)))(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))':
dependencies:
'@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.20)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))
debug: 4.4.0
debug: 4.4.3
svelte: 4.2.20
vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
transitivePeerDependencies:
@@ -18175,7 +18045,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)))(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))':
dependencies:
'@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.43.14)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))
debug: 4.4.1
debug: 4.4.3
svelte: 5.43.14
vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
transitivePeerDependencies:
@@ -18317,7 +18187,7 @@ snapshots:
'@testing-library/dom@8.20.1':
dependencies:
'@babel/code-frame': 7.27.1
'@babel/runtime': 7.26.0
'@babel/runtime': 7.27.1
'@types/aria-query': 5.0.4
aria-query: 5.1.3
chalk: 4.1.2
@@ -18328,7 +18198,7 @@ snapshots:
'@testing-library/dom@9.3.4':
dependencies:
'@babel/code-frame': 7.27.1
'@babel/runtime': 7.26.0
'@babel/runtime': 7.27.1
'@types/aria-query': 5.0.4
aria-query: 5.1.3
chalk: 4.1.2
@@ -18379,14 +18249,6 @@ snapshots:
vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
vitest: 4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
'@testing-library/vue@5.9.0(vue-template-compiler@2.7.14(vue@2.7.14))(vue@2.7.14)':
dependencies:
'@babel/runtime': 7.22.6
'@testing-library/dom': 9.3.4
'@vue/test-utils': 1.3.0(vue-template-compiler@2.7.14(vue@2.7.14))(vue@2.7.14)
vue: 2.7.14
vue-template-compiler: 2.7.14(vue@2.7.14)
'@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.24)(vue@3.5.24(typescript@5.9.3))':
dependencies:
'@babel/runtime': 7.27.1
@@ -18792,7 +18654,7 @@ snapshots:
dependencies:
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3)
debug: 4.4.0
debug: 4.4.3
eslint: 8.57.1
ts-api-utils: 1.4.3(typescript@5.9.3)
optionalDependencies:
@@ -18838,7 +18700,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/visitor-keys': 6.21.0
debug: 4.4.0
debug: 4.4.3
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.3
@@ -18976,10 +18838,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@vitejs/plugin-vue2@2.2.0(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@2.7.14)':
'@vitejs/plugin-vue@4.6.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0))(vue@3.5.24(typescript@5.9.3))':
dependencies:
vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
vue: 2.7.14
vue: 3.5.24(typescript@5.9.3)
'@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@24.10.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1))(vue@3.5.24(typescript@5.9.3))':
dependencies:
@@ -19001,13 +18863,13 @@ snapshots:
chai: 6.2.1
tinyrainbow: 3.0.3
'@vitest/mocker@4.0.12(vite@6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))':
'@vitest/mocker@4.0.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))':
dependencies:
'@vitest/spy': 4.0.12
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
vite: 6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
'@vitest/pretty-format@4.0.12':
dependencies:
@@ -19056,12 +18918,6 @@ snapshots:
'@vue/compiler-core': 3.5.24
'@vue/shared': 3.5.24
'@vue/compiler-sfc@2.7.14':
dependencies:
'@babel/parser': 7.28.5
postcss: 8.5.6
source-map: 0.6.1
'@vue/compiler-sfc@3.5.24':
dependencies:
'@babel/parser': 7.28.5
@@ -19121,13 +18977,10 @@ snapshots:
'@vue/shared@3.5.24': {}
'@vue/test-utils@1.3.0(vue-template-compiler@2.7.14(vue@2.7.14))(vue@2.7.14)':
'@vue/test-utils@2.4.5':
dependencies:
dom-event-types: 1.1.0
lodash: 4.17.21
pretty: 2.0.0
vue: 2.7.14
vue-template-compiler: 2.7.14(vue@2.7.14)
js-beautify: 1.14.9
vue-component-type-helpers: 2.0.7
'@vue/test-utils@2.4.6':
dependencies:
@@ -20441,12 +20294,6 @@ snapshots:
concat-map@0.0.1: {}
condense-newlines@0.2.1:
dependencies:
extend-shallow: 2.0.1
is-whitespace: 0.3.0
kind-of: 3.2.2
confbox@0.1.8: {}
confbox@0.2.2: {}
@@ -20720,8 +20567,6 @@ snapshots:
db0@0.3.4:
optional: true
de-indent@1.0.2: {}
debug@2.6.9:
dependencies:
ms: 2.0.0
@@ -20775,7 +20620,7 @@ snapshots:
deep-equal@1.1.2:
dependencies:
is-arguments: 1.1.1
is-date-object: 1.0.5
is-date-object: 1.1.0
is-regex: 1.2.1
object-is: 1.1.6
object-keys: 1.1.1
@@ -20789,7 +20634,7 @@ snapshots:
get-intrinsic: 1.3.0
is-arguments: 1.1.1
is-array-buffer: 3.0.5
is-date-object: 1.0.5
is-date-object: 1.1.0
is-regex: 1.2.1
is-shared-array-buffer: 1.0.4
isarray: 2.0.5
@@ -20797,9 +20642,9 @@ snapshots:
object-keys: 1.1.1
object.assign: 4.1.7
regexp.prototype.flags: 1.5.4
side-channel: 1.0.6
which-boxed-primitive: 1.0.2
which-collection: 1.0.1
side-channel: 1.1.0
which-boxed-primitive: 1.1.1
which-collection: 1.0.2
which-typed-array: 1.1.19
deep-is@0.1.4: {}
@@ -20926,8 +20771,6 @@ snapshots:
dom-accessibility-api@0.6.3: {}
dom-event-types@1.1.0: {}
dom-serialize@2.2.1:
dependencies:
custom-event: 1.0.1
@@ -21246,7 +21089,7 @@ snapshots:
get-intrinsic: 1.3.0
has-symbols: 1.1.0
is-arguments: 1.1.1
is-map: 2.0.2
is-map: 2.0.3
is-set: 2.0.3
is-string: 1.1.1
isarray: 2.0.5
@@ -21913,10 +21756,6 @@ snapshots:
exsolve@1.0.8: {}
extend-shallow@2.0.1:
dependencies:
is-extendable: 0.1.1
extend@3.0.2: {}
external-editor@3.1.0:
@@ -22628,7 +22467,7 @@ snapshots:
dependencies:
'@tootallnate/once': 1.1.2
agent-base: 6.0.2
debug: 4.3.3
debug: 4.4.3
transitivePeerDependencies:
- supports-color
@@ -22860,10 +22699,6 @@ snapshots:
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
is-bigint@1.0.4:
dependencies:
has-bigints: 1.1.0
is-bigint@1.1.0:
dependencies:
has-bigints: 1.1.0
@@ -22872,11 +22707,6 @@ snapshots:
dependencies:
binary-extensions: 2.3.0
is-boolean-object@1.1.2:
dependencies:
call-bind: 1.0.8
has-tostringtag: 1.0.2
is-boolean-object@1.2.2:
dependencies:
call-bound: 1.0.4
@@ -22904,10 +22734,6 @@ snapshots:
get-intrinsic: 1.3.0
is-typed-array: 1.1.15
is-date-object@1.0.5:
dependencies:
has-tostringtag: 1.0.2
is-date-object@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -22919,8 +22745,6 @@ snapshots:
is-docker@3.0.0: {}
is-extendable@0.1.1: {}
is-extglob@2.1.1: {}
is-finalizationregistry@1.1.1:
@@ -22952,18 +22776,12 @@ snapshots:
is-lambda@1.0.1: {}
is-map@2.0.2: {}
is-map@2.0.3: {}
is-module@1.0.0: {}
is-negative-zero@2.0.3: {}
is-number-object@1.0.7:
dependencies:
has-tostringtag: 1.0.2
is-number-object@1.1.1:
dependencies:
call-bound: 1.0.4
@@ -23033,19 +22851,12 @@ snapshots:
is-unicode-supported@0.1.0: {}
is-weakmap@2.0.1: {}
is-weakmap@2.0.2: {}
is-weakref@1.1.1:
dependencies:
call-bound: 1.0.4
is-weakset@2.0.2:
dependencies:
call-bind: 1.0.8
get-intrinsic: 1.3.0
is-weakset@2.0.4:
dependencies:
call-bound: 1.0.4
@@ -23057,8 +22868,6 @@ snapshots:
is-what@5.5.0: {}
is-whitespace@0.3.0: {}
is-wsl@2.2.0:
dependencies:
is-docker: 2.2.1
@@ -24049,7 +23858,7 @@ snapshots:
metro-runtime@0.81.0:
dependencies:
'@babel/runtime': 7.26.0
'@babel/runtime': 7.27.1
flow-enums-runtime: 0.0.6
metro-runtime@0.81.5:
@@ -25926,12 +25735,6 @@ snapshots:
ansi-styles: 5.2.0
react-is: 18.2.0
pretty@2.0.0:
dependencies:
condense-newlines: 0.2.1
extend-shallow: 2.0.1
js-beautify: 1.14.9
prismjs@1.30.0: {}
proc-log@4.2.0: {}
@@ -25982,7 +25785,7 @@ snapshots:
qs@6.13.0:
dependencies:
side-channel: 1.0.6
side-channel: 1.1.0
quansync@0.2.11: {}
@@ -26893,13 +26696,6 @@ snapshots:
object-inspect: 1.13.4
side-channel-map: 1.0.1
side-channel@1.0.6:
dependencies:
call-bind: 1.0.8
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -26991,7 +26787,7 @@ snapshots:
socks-proxy-agent@6.2.1:
dependencies:
agent-base: 6.0.2
debug: 4.3.3
debug: 4.4.3
socks: 2.8.3
transitivePeerDependencies:
- supports-color
@@ -26999,7 +26795,7 @@ snapshots:
socks-proxy-agent@7.0.0:
dependencies:
agent-base: 6.0.2
debug: 4.3.3
debug: 4.4.3
socks: 2.8.3
transitivePeerDependencies:
- supports-color
@@ -27600,7 +27396,7 @@ snapshots:
test-exclude@6.0.0:
dependencies:
'@istanbuljs/schema': 0.1.3
glob: 7.2.0
glob: 7.2.3
minimatch: 3.1.2
text-decoder@1.2.3:
@@ -28214,24 +28010,6 @@ snapshots:
stylus: 0.56.0
terser: 5.44.1
vite@6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
rollup: 4.53.3
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 24.10.1
fsevents: 2.3.3
jiti: 2.6.1
less: 4.2.0
sass: 1.77.8
stylus: 0.56.0
terser: 5.44.1
yaml: 2.8.0
vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0):
dependencies:
esbuild: 0.25.10
@@ -28332,7 +28110,7 @@ snapshots:
vitest@4.0.12(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0):
dependencies:
'@vitest/expect': 4.0.12
'@vitest/mocker': 4.0.12(vite@6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))
'@vitest/mocker': 4.0.12(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(terser@5.44.1)(yaml@2.8.0))
'@vitest/pretty-format': 4.0.12
'@vitest/runner': 4.0.12
'@vitest/snapshot': 4.0.12
@@ -28349,7 +28127,7 @@ snapshots:
tinyexec: 0.3.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
vite: 6.3.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.2.0)(sass@1.77.8)(stylus@0.56.0)(terser@5.44.1)(yaml@2.8.0)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
@@ -28383,17 +28161,6 @@ snapshots:
dependencies:
vue: 3.5.24(typescript@5.9.3)
vue-template-compiler@2.7.14(vue@2.7.14):
dependencies:
de-indent: 1.0.2
he: 1.2.0
vue: 2.7.14
vue@2.7.14:
dependencies:
'@vue/compiler-sfc': 2.7.14
csstype: 3.1.3
vue@3.5.24(typescript@5.9.3):
dependencies:
'@vue/compiler-dom': 3.5.24
@@ -28562,14 +28329,6 @@ snapshots:
tr46: 0.0.3
webidl-conversions: 3.0.1
which-boxed-primitive@1.0.2:
dependencies:
is-bigint: 1.0.4
is-boolean-object: 1.1.2
is-number-object: 1.0.7
is-string: 1.1.1
is-symbol: 1.1.1
which-boxed-primitive@1.1.1:
dependencies:
is-bigint: 1.1.0
@@ -28594,13 +28353,6 @@ snapshots:
which-collection: 1.0.2
which-typed-array: 1.1.19
which-collection@1.0.1:
dependencies:
is-map: 2.0.2
is-set: 2.0.3
is-weakmap: 2.0.1
is-weakset: 2.0.2
which-collection@1.0.2:
dependencies:
is-map: 2.0.3

Some files were not shown because too many files have changed in this diff Show More