Merge branch 'v3' into feat/init-blog

This commit is contained in:
HugoRCD
2025-07-02 10:14:42 +02:00
19 changed files with 805 additions and 273 deletions

View File

@@ -0,0 +1,43 @@
<script setup lang="ts">
const open = ref(false)
const anchor = ref({ x: 0, y: 0 })
const reference = computed(() => ({
getBoundingClientRect: () =>
({
width: 0,
height: 0,
left: anchor.value.x,
right: anchor.value.x,
top: anchor.value.y,
bottom: anchor.value.y,
...anchor.value
} as DOMRect)
}))
</script>
<template>
<UPopover
:open="open"
:reference="reference"
:content="{ side: 'top', sideOffset: 16, updatePositionStrategy: 'always' }"
>
<div
class="flex items-center justify-center rounded-md border border-dashed border-accented text-sm aspect-video w-72"
@pointerenter="open = true"
@pointerleave="open = false"
@pointermove="(ev) => {
anchor.x = ev.clientX
anchor.y = ev.clientY
}"
>
Hover me
</div>
<template #content>
<div class="p-4">
{{ anchor.x.toFixed(0) }} - {{ anchor.y.toFixed(0) }}
</div>
</template>
</UPopover>
</template>

View File

@@ -0,0 +1,159 @@
<script setup lang="ts">
import { h, resolveComponent } from 'vue'
import type { ContextMenuItem, TableColumn, TableRow } from '@nuxt/ui'
import { useClipboard } from '@vueuse/core'
const UBadge = resolveComponent('UBadge')
const UCheckbox = resolveComponent('UCheckbox')
const toast = useToast()
const { copy } = useClipboard()
type Payment = {
id: string
date: string
status: 'paid' | 'failed' | 'refunded'
email: string
amount: number
}
const data = ref<Payment[]>([{
id: '4600',
date: '2024-03-11T15:30:00',
status: 'paid',
email: 'james.anderson@example.com',
amount: 594
}, {
id: '4599',
date: '2024-03-11T10:10:00',
status: 'failed',
email: 'mia.white@example.com',
amount: 276
}, {
id: '4598',
date: '2024-03-11T08:50:00',
status: 'refunded',
email: 'william.brown@example.com',
amount: 315
}, {
id: '4597',
date: '2024-03-10T19:45:00',
status: 'paid',
email: 'emma.davis@example.com',
amount: 529
}, {
id: '4596',
date: '2024-03-10T15:55:00',
status: 'paid',
email: 'ethan.harris@example.com',
amount: 639
}])
const columns: TableColumn<Payment>[] = [{
id: 'select',
header: ({ table }) => h(UCheckbox, {
'modelValue': table.getIsSomePageRowsSelected() ? 'indeterminate' : table.getIsAllPageRowsSelected(),
'onUpdate:modelValue': (value: boolean | 'indeterminate') => table.toggleAllPageRowsSelected(!!value),
'aria-label': 'Select all'
}),
cell: ({ row }) => h(UCheckbox, {
'modelValue': row.getIsSelected(),
'onUpdate:modelValue': (value: boolean | 'indeterminate') => row.toggleSelected(!!value),
'aria-label': 'Select row'
})
}, {
accessorKey: 'id',
header: '#',
cell: ({ row }) => `#${row.getValue('id')}`
}, {
accessorKey: 'date',
header: 'Date',
cell: ({ row }) => {
return new Date(row.getValue('date')).toLocaleString('en-US', {
day: 'numeric',
month: 'short',
hour: '2-digit',
minute: '2-digit',
hour12: false
})
}
}, {
accessorKey: 'status',
header: 'Status',
cell: ({ row }) => {
const color = ({
paid: 'success' as const,
failed: 'error' as const,
refunded: 'neutral' as const
})[row.getValue('status') as string]
return h(UBadge, { class: 'capitalize', variant: 'subtle', color }, () => row.getValue('status'))
}
}, {
accessorKey: 'email',
header: 'Email'
}, {
accessorKey: 'amount',
header: () => h('div', { class: 'text-right' }, 'Amount'),
cell: ({ row }) => {
const amount = Number.parseFloat(row.getValue('amount'))
const formatted = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'EUR'
}).format(amount)
return h('div', { class: 'text-right font-medium' }, formatted)
}
}]
const items = ref<ContextMenuItem[]>([])
function getRowItems(row: TableRow<Payment>) {
return [{
type: 'label' as const,
label: 'Actions'
}, {
label: 'Copy payment ID',
onSelect() {
copy(row.original.id)
toast.add({
title: 'Payment ID copied to clipboard!',
color: 'success',
icon: 'i-lucide-circle-check'
})
}
}, {
label: row.getIsExpanded() ? 'Collapse' : 'Expand',
onSelect() {
row.toggleExpanded()
}
}, {
type: 'separator' as const
}, {
label: 'View customer'
}, {
label: 'View payment details'
}]
}
function onContextmenu(_e: Event, row: TableRow<Payment>) {
items.value = getRowItems(row)
}
</script>
<template>
<UContextMenu :items="items">
<UTable
:data="data"
:columns="columns"
class="flex-1"
@contextmenu="onContextmenu"
>
<template #expanded="{ row }">
<pre>{{ row.original }}</pre>
</template>
</UTable>
</UContextMenu>
</template>

View File

@@ -0,0 +1,157 @@
<script setup lang="ts">
import { h, resolveComponent } from 'vue'
import type { TableColumn, TableRow } from '@nuxt/ui'
const UBadge = resolveComponent('UBadge')
const UCheckbox = resolveComponent('UCheckbox')
type Payment = {
id: string
date: string
status: 'paid' | 'failed' | 'refunded'
email: string
amount: number
}
const data = ref<Payment[]>([{
id: '4600',
date: '2024-03-11T15:30:00',
status: 'paid',
email: 'james.anderson@example.com',
amount: 594
}, {
id: '4599',
date: '2024-03-11T10:10:00',
status: 'failed',
email: 'mia.white@example.com',
amount: 276
}, {
id: '4598',
date: '2024-03-11T08:50:00',
status: 'refunded',
email: 'william.brown@example.com',
amount: 315
}, {
id: '4597',
date: '2024-03-10T19:45:00',
status: 'paid',
email: 'emma.davis@example.com',
amount: 529
}, {
id: '4596',
date: '2024-03-10T15:55:00',
status: 'paid',
email: 'ethan.harris@example.com',
amount: 639
}])
const columns: TableColumn<Payment>[] = [{
id: 'select',
header: ({ table }) => h(UCheckbox, {
'modelValue': table.getIsSomePageRowsSelected() ? 'indeterminate' : table.getIsAllPageRowsSelected(),
'onUpdate:modelValue': (value: boolean | 'indeterminate') => table.toggleAllPageRowsSelected(!!value),
'aria-label': 'Select all'
}),
cell: ({ row }) => h(UCheckbox, {
'modelValue': row.getIsSelected(),
'onUpdate:modelValue': (value: boolean | 'indeterminate') => row.toggleSelected(!!value),
'aria-label': 'Select row'
})
}, {
accessorKey: 'id',
header: '#',
cell: ({ row }) => `#${row.getValue('id')}`
}, {
accessorKey: 'date',
header: 'Date',
cell: ({ row }) => {
return new Date(row.getValue('date')).toLocaleString('en-US', {
day: 'numeric',
month: 'short',
hour: '2-digit',
minute: '2-digit',
hour12: false
})
}
}, {
accessorKey: 'status',
header: 'Status',
cell: ({ row }) => {
const color = ({
paid: 'success' as const,
failed: 'error' as const,
refunded: 'neutral' as const
})[row.getValue('status') as string]
return h(UBadge, { class: 'capitalize', variant: 'subtle', color }, () => row.getValue('status'))
}
}, {
accessorKey: 'email',
header: 'Email'
}, {
accessorKey: 'amount',
header: () => h('div', { class: 'text-right' }, 'Amount'),
cell: ({ row }) => {
const amount = Number.parseFloat(row.getValue('amount'))
const formatted = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'EUR'
}).format(amount)
return h('div', { class: 'text-right font-medium' }, formatted)
}
}]
const anchor = ref({ x: 0, y: 0 })
const reference = computed(() => ({
getBoundingClientRect: () =>
({
width: 0,
height: 0,
left: anchor.value.x,
right: anchor.value.x,
top: anchor.value.y,
bottom: anchor.value.y,
...anchor.value
} as DOMRect)
}))
const open = ref(false)
const openDebounced = refDebounced(open, 10)
const selectedRow = ref<TableRow<Payment> | null>(null)
function onHover(_e: Event, row: TableRow<Payment> | null) {
selectedRow.value = row
open.value = !!row
}
</script>
<template>
<div class="flex w-full flex-1 gap-1">
<UTable
:data="data"
:columns="columns"
class="flex-1"
@pointermove="(ev: PointerEvent) => {
anchor.x = ev.clientX
anchor.y = ev.clientY
}"
@hover="onHover"
/>
<UPopover
:content="{ side: 'top', sideOffset: 16, updatePositionStrategy: 'always' }"
:open="openDebounced"
:reference="reference"
>
<template #content>
<div class="p-4">
{{ selectedRow?.original?.id }}
</div>
</template>
</UPopover>
</div>
</template>

View File

@@ -112,7 +112,7 @@ function onSelect(row: TableRow<Payment>, e?: Event) {
</script>
<template>
<div class=" flex w-full flex-1 gap-1">
<div class="flex w-full flex-1 gap-1">
<div class="flex-1">
<UTable
ref="table"

View File

@@ -16,12 +16,12 @@ function handleMessage(message) {
async function handleFormatMessage(message) {
if (!globalThis.prettier) {
await Promise.all([
import('https://cdn.jsdelivr.net/npm/prettier@3.5.2/standalone.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.5.2/plugins/babel.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.5.2/plugins/estree.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.5.2/plugins/html.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.5.2/plugins/markdown.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.5.2/plugins/typescript.js')
import('https://cdn.jsdelivr.net/npm/prettier@3.6.2/standalone.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.6.2/plugins/babel.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.6.2/plugins/estree.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.6.2/plugins/html.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.6.2/plugins/markdown.js'),
import('https://cdn.jsdelivr.net/npm/prettier@3.6.2/plugins/typescript.js')
])
}

View File

@@ -32,6 +32,12 @@ props:
You can use any name from the <https://icones.js.org> collection.
::
::warning
When using collections with a dash (`-`), you need to separate the icon name from the collection name with a colon (`:`) as `@iconify/vue` does not handle this case like `@nuxt/icon`. For example, instead of `i-simple-icons-github` you need to write `i-simple-icons:github` or `simple-icons:github`.
Learn more about the [Iconify naming convention](https://iconify.design/docs/icon-components/vue/#icon).
::
### Component Props
Some components also have an `icon` prop to display an icon, like the [Button](/components/button) for example:

View File

@@ -51,6 +51,17 @@ props:
---
::
### Max Length :badge{label="Soon" class="align-text-top"}
Use the `max-length` prop to set the maximum number of characters allowed in a tag.
::component-code
---
props:
maxLength: 4
---
::
### Color
Use the `color` prop to change the ring color when the InputTags is focused.

View File

@@ -202,6 +202,16 @@ name: 'popover-command-palette-example'
---
::
### With following cursor :badge{label="Soon" class="align-text-top"}
You can make the Popover follow the cursor when hovering over an element using the [`reference`](https://reka-ui.com/docs/components/tooltip#trigger) prop:
::component-example
---
name: 'popover-cursor-example'
---
::
### With anchor slot
You can use the `#anchor` slot to position the Popover against a custom element.

View File

@@ -266,8 +266,8 @@ You can group rows based on a given column value and show/hide sub rows via some
#### Important parts:
* Add prop `grouping` to `UTable` component with an array of column ids you want to group by.
* Add prop `grouping-options` to `UTable`. It must include `getGroupedRowModel`, you can import it from `@tanstack/vue-table` or implement your own.
* Add `grouping` prop with an array of column ids you want to group by.
* Add `grouping-options` prop. It must include `getGroupedRowModel`, you can import it from `@tanstack/vue-table` or implement your own.
* Expand rows via `row.toggleExpanded()` method on any cell of the row. Keep in mind, it also toggles `#expanded` slot.
* Use `aggregateFn` on column definition to define how to aggregate the rows.
* `agregatedCell` renderer on column definition only works if there is no `cell` renderer.
@@ -304,19 +304,19 @@ class: '!p-0'
You can use the `row-selection` prop to control the selection state of the rows (can be binded with `v-model`).
::
### With `@select` event
### With row select event
You can add a `@select` listener to make rows clickable. The handler function receives the `TableRow` instance as the first argument and an optional `Event` as the second argument.
You can add a `@select` listener to make rows clickable with or without a checkbox column.
::note
You can use this to navigate to a page, open a modal or even to select the row manually.
The handler function receives the `TableRow` instance as the first argument and an optional `Event` as the second argument.
::
::component-example
---
prettier: true
collapse: true
name: 'table-row-selection-event-example'
name: 'table-row-select-event-example'
highlights:
- 123
- 130
@@ -324,6 +324,54 @@ class: '!p-0'
---
::
::tip
You can use this to navigate to a page, open a modal or even to select the row manually.
::
### With row context menu event :badge{label="Soon" class="align-text-top"}
You can add a `@contextmenu` listener to make rows right clickable and wrap the Table in a [ContextMenu](/components/context-menu) component to display row actions for example.
::note
The handler function receives the `Event` and `TableRow` instance as the first and second arguments respectively.
::
::component-example
---
prettier: true
collapse: true
name: 'table-row-context-menu-event-example'
highlights:
- 130
- 170
class: '!p-0'
---
::
### With row hover event :badge{label="Soon" class="align-text-top"}
You can add a `@hover` listener to make rows hoverable and use a [Popover](/components/popover) or a [Tooltip](/components/tooltip) component to display row details for example.
::note
The handler function receives the `Event` and `TableRow` instance as the first and second arguments respectively.
::
::component-example
---
prettier: true
collapse: true
name: 'table-row-hover-event-example'
highlights:
- 126
- 149
class: '!p-0'
---
::
::note
This example is similar as the Popover [with following cursor example](/components/popover#with-following-cursor) and uses a [`refDebounced`](https://vueuse.org/shared/refDebounced/#refdebounced) to prevent the Popover from opening and closing too quickly when moving the cursor from one row to another.
::
### With column sorting
You can update a column `header` to render a [Button](/components/button) component inside the `header` to toggle the sorting state using the TanStack Table [Sorting APIs](https://tanstack.com/table/latest/docs/api/features/sorting).

View File

@@ -196,10 +196,6 @@ name: 'tooltip-cursor-example'
---
::
::note
This example is based on Reka UI's [Tooltip Cursor](https://reka-ui.com/examples/tooltip-cursor) example.
::
## API
### Props

View File

@@ -30,7 +30,7 @@
"joi": "^17.13.3",
"maska": "^3.1.1",
"motion-v": "^1.3.1",
"nuxt": "^3.17.5",
"nuxt": "^3.17.6",
"nuxt-component-meta": "^0.12.0",
"nuxt-llms": "^0.1.3",
"nuxt-og-image": "^5.1.8",

View File

@@ -116,8 +116,8 @@
"@internationalized/number": "^3.6.3",
"@nuxt/fonts": "^0.11.4",
"@nuxt/icon": "^1.15.0",
"@nuxt/kit": "^3.17.5",
"@nuxt/schema": "^3.17.5",
"@nuxt/kit": "^3.17.6",
"@nuxt/schema": "^3.17.6",
"@nuxtjs/color-mode": "^3.5.2",
"@standard-schema/spec": "^1.0.0",
"@tailwindcss/postcss": "^4.1.11",
@@ -163,7 +163,7 @@
"embla-carousel": "^8.6.0",
"eslint": "^9.30.0",
"happy-dom": "^18.0.1",
"nuxt": "^3.17.5",
"nuxt": "^3.17.6",
"release-it": "^19.0.3",
"vitest": "^3.2.4",
"vitest-environment-nuxt": "^1.0.1",

View File

@@ -3,7 +3,7 @@ import { h, resolveComponent } from 'vue'
import { upperFirst } from 'scule'
import type { TableColumn, TableRow } from '@nuxt/ui'
import { getPaginationRowModel } from '@tanstack/vue-table'
import { useClipboard } from '@vueuse/core'
import { useClipboard, refDebounced } from '@vueuse/core'
const UButton = resolveComponent('UButton')
const UCheckbox = resolveComponent('UCheckbox')
@@ -147,6 +147,35 @@ const data = ref<Payment[]>([{
const currentID = ref(4601)
function getRowItems(row: TableRow<Payment>) {
return [{
type: 'label' as const,
label: 'Actions'
}, {
label: 'Copy payment ID',
onSelect() {
copy(row.original.id)
toast.add({
title: 'Payment ID copied to clipboard!',
color: 'success',
icon: 'i-lucide-circle-check'
})
}
}, {
label: row.getIsExpanded() ? 'Collapse' : 'Expand',
onSelect() {
row.toggleExpanded()
}
}, {
type: 'separator' as const
}, {
label: 'View customer'
}, {
label: 'View payment details'
}]
}
const columns: TableColumn<Payment>[] = [{
id: 'select',
header: ({ table }) => h(UCheckbox, {
@@ -227,38 +256,11 @@ const columns: TableColumn<Payment>[] = [{
id: 'actions',
enableHiding: false,
cell: ({ row }) => {
const items = [{
type: 'label',
label: 'Actions'
}, {
label: 'Copy payment ID',
onSelect() {
copy(row.original.id)
toast.add({
title: 'Payment ID copied to clipboard!',
color: 'success',
icon: 'i-lucide-circle-check'
})
}
}, {
label: row.getIsExpanded() ? 'Collapse' : 'Expand',
onSelect() {
row.toggleExpanded()
}
}, {
type: 'separator'
}, {
label: 'View customer'
}, {
label: 'View payment details'
}]
return h('div', { class: 'text-right' }, h(UDropdownMenu, {
'content': {
align: 'end'
},
items,
'items': getRowItems(row),
'aria-label': 'Actions dropdown'
}, () => h(UButton, {
'icon': 'i-lucide-ellipsis-vertical',
@@ -296,8 +298,41 @@ function randomize() {
data.value = data.value.sort(() => Math.random() - 0.5)
}
const rowSelection = ref<Record<string, boolean>>({})
function onSelect(row: TableRow<Payment>) {
console.log(row)
row.toggleSelected(!row.getIsSelected())
}
const contextmenuRow = ref<TableRow<Payment> | null>(null)
const contextmenuItems = computed(() => contextmenuRow.value ? getRowItems(contextmenuRow.value) : [])
function onContextmenu(e: Event, row: TableRow<Payment>) {
contextmenuRow.value = row
}
const popoverOpen = ref(false)
const popoverOpenDebounced = refDebounced(popoverOpen, 1)
const popoverAnchor = ref({ x: 0, y: 0 })
const popoverRow = ref<TableRow<Payment> | null>(null)
const reference = computed(() => ({
getBoundingClientRect: () =>
({
width: 0,
height: 0,
left: popoverAnchor.value.x,
right: popoverAnchor.value.x,
top: popoverAnchor.value.y,
bottom: popoverAnchor.value.y,
...popoverAnchor.value
} as DOMRect)
}))
function onHover(_e: Event, row: TableRow<Payment> | null) {
popoverRow.value = row
popoverOpen.value = !!row
}
onMounted(() => {
@@ -344,27 +379,44 @@ onMounted(() => {
</UDropdownMenu>
</div>
<UTable
ref="table"
:data="data"
:columns="columns"
:column-pinning="columnPinning"
:loading="loading"
:pagination="pagination"
:pagination-options="{
getPaginationRowModel: getPaginationRowModel()
}"
:ui="{
tr: 'divide-x divide-default'
}"
sticky
class="border border-accented rounded-sm"
@select="onSelect"
>
<template #expanded="{ row }">
<pre>{{ row.original }}</pre>
<UContextMenu :items="contextmenuItems">
<UTable
ref="table"
:data="data"
:columns="columns"
:column-pinning="columnPinning"
:row-selection="rowSelection"
:loading="loading"
:pagination="pagination"
:pagination-options="{
getPaginationRowModel: getPaginationRowModel()
}"
:ui="{
tr: 'divide-x divide-default'
}"
sticky
class="border border-accented rounded-sm"
@select="onSelect"
@contextmenu="onContextmenu"
@pointermove="(ev: PointerEvent) => {
popoverAnchor.x = ev.clientX
popoverAnchor.y = ev.clientY
}"
@hover="onHover"
>
<template #expanded="{ row }">
<pre>{{ row.original }}</pre>
</template>
</UTable>
</UContextMenu>
<UPopover :content="{ side: 'top', sideOffset: 16, updatePositionStrategy: 'always' }" :open="popoverOpenDebounced" :reference="reference">
<template #content>
<div class="p-4">
{{ popoverRow?.original?.id }}
</div>
</template>
</UTable>
</UPopover>
<div class="flex items-center justify-between gap-3">
<div class="text-sm text-muted">

View File

@@ -14,7 +14,7 @@
"@internationalized/date": "^3.8.2",
"@nuxt/ui": "workspace:*",
"@nuxthub/core": "^0.9.0",
"nuxt": "^3.17.5",
"nuxt": "^3.17.6",
"zod": "^3.25.67"
},
"devDependencies": {

402
pnpm-lock.yaml generated
View File

@@ -35,11 +35,11 @@ importers:
specifier: ^1.15.0
version: 1.15.0(magicast@0.3.5)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
'@nuxt/kit':
specifier: ^3.17.5
version: 3.17.5(magicast@0.3.5)
specifier: ^3.17.6
version: 3.17.6(magicast@0.3.5)
'@nuxt/schema':
specifier: ^3.17.5
version: 3.17.5
specifier: ^3.17.6
version: 3.17.6
'@nuxtjs/color-mode':
specifier: ^3.5.2
version: 3.5.2(magicast@0.3.5)
@@ -144,10 +144,10 @@ importers:
version: 2.3.5
unplugin-auto-import:
specifier: ^19.3.0
version: 19.3.0(@nuxt/kit@3.17.5(magicast@0.3.5))(@vueuse/core@13.4.0(vue@3.5.17(typescript@5.8.3)))
version: 19.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(@vueuse/core@13.4.0(vue@3.5.17(typescript@5.8.3)))
unplugin-vue-components:
specifier: ^28.8.0
version: 28.8.0(@babel/parser@7.27.7)(@nuxt/kit@3.17.5(magicast@0.3.5))(vue@3.5.17(typescript@5.8.3))
version: 28.8.0(@babel/parser@7.27.7)(@nuxt/kit@3.17.6(magicast@0.3.5))(vue@3.5.17(typescript@5.8.3))
valibot:
specifier: ^1.0.0
version: 1.1.0(typescript@5.8.3)
@@ -192,8 +192,8 @@ importers:
specifier: ^18.0.1
version: 18.0.1
nuxt:
specifier: ^3.17.5
version: 3.17.5(@parcel/watcher@2.5.1)(@types/node@24.0.7)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0)
specifier: ^3.17.6
version: 3.17.6(@parcel/watcher@2.5.1)(@types/node@24.0.7)(@vue/compiler-sfc@3.5.17)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0)
release-it:
specifier: ^19.0.3
version: 19.0.3(@types/node@24.0.7)(magicast@0.3.5)
@@ -268,7 +268,7 @@ importers:
version: 13.4.0(axios@1.10.0)(fuse.js@7.1.0)(jwt-decode@4.0.0)(sortablejs@1.15.6)(vue@3.5.17(typescript@5.8.3))
'@vueuse/nuxt':
specifier: ^13.4.0
version: 13.4.0(magicast@0.3.5)(nuxt@3.17.5(@parcel/watcher@2.5.1)(@types/node@24.0.7)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
version: 13.4.0(magicast@0.3.5)(nuxt@3.17.6(@parcel/watcher@2.5.1)(@types/node@24.0.7)(@vue/compiler-sfc@3.5.17)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
ai:
specifier: ^4.3.16
version: 4.3.16(react@19.1.0)(zod@3.25.67)
@@ -288,8 +288,8 @@ importers:
specifier: ^1.3.1
version: 1.3.1(react@19.1.0)(vue@3.5.17(typescript@5.8.3))
nuxt:
specifier: ^3.17.5
version: 3.17.5(@parcel/watcher@2.5.1)(@types/node@24.0.7)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0)
specifier: ^3.17.6
version: 3.17.6(@parcel/watcher@2.5.1)(@types/node@24.0.7)(@vue/compiler-sfc@3.5.17)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0)
nuxt-component-meta:
specifier: ^0.12.0
version: 0.12.0(magicast@0.3.5)
@@ -349,8 +349,8 @@ importers:
specifier: ^0.9.0
version: 0.9.0(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1)(magicast@0.3.5)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))
nuxt:
specifier: ^3.17.5
version: 3.17.5(@parcel/watcher@2.5.1)(@types/node@24.0.7)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0)
specifier: ^3.17.6
version: 3.17.6(@parcel/watcher@2.5.1)(@types/node@24.0.7)(@vue/compiler-sfc@3.5.17)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0)
zod:
specifier: ^3.25.67
version: 3.25.67
@@ -1528,8 +1528,8 @@ packages:
resolution: {integrity: sha512-/B58GeEmme7bkmQUrXzEw8P9sJb9BkMaYZqLDtq8ZdDLEddE3P4nVya8RQPB+p4b7EdqWajpPqdy1A2ZPLev/A==}
engines: {node: '>=18.20.6'}
'@nuxt/kit@3.17.5':
resolution: {integrity: sha512-NdCepmA+S/SzgcaL3oYUeSlXGYO6BXGr9K/m1D0t0O9rApF8CSq/QQ+ja5KYaYMO1kZAEWH4s2XVcE3uPrrAVg==}
'@nuxt/kit@3.17.6':
resolution: {integrity: sha512-8PKRwoEF70IXVrpGEJZ4g4V2WtE9RjSMgSZLLa0HZCoyT+QczJcJe3kho/XKnJOnNnHep4WqciTD7p4qRRtBqw==}
engines: {node: '>=18.12.0'}
'@nuxt/module-builder@1.0.1':
@@ -1540,8 +1540,8 @@ packages:
'@nuxt/cli': ^3.24.1
typescript: ^5.8.3
'@nuxt/schema@3.17.5':
resolution: {integrity: sha512-A1DSQk2uXqRHXlgLWDeFCyZk/yPo9oMBMb9OsbVko9NLv9du2DO2cs9RQ68Amvdk8O2nG7/FxAMNnkMdQ8OexA==}
'@nuxt/schema@3.17.6':
resolution: {integrity: sha512-ahm0yz6CrSaZ4pS0iuVod9lVRXNDNIidKWLLBx2naGNM6rW+sdFV9gxjvUS3+rLW+swa4HCKE6J5bjOl//oyqQ==}
engines: {node: ^14.18.0 || >=16.10.0}
'@nuxt/telemetry@2.6.6':
@@ -1607,8 +1607,8 @@ packages:
zod:
optional: true
'@nuxt/vite-builder@3.17.5':
resolution: {integrity: sha512-SKlm73FuuPj1ZdVJ1JQfUed/lO5l7iJMbM+9K+CMXnifu7vV2ITaSxu8uZ/ice1FeLYwOZKEsjnJXB0QpqDArQ==}
'@nuxt/vite-builder@3.17.6':
resolution: {integrity: sha512-D7bf0BE2nDFj23ryKuSakQFDETt5rpnMTlaoDsRElrApFRvMNzF7pYHuHjvPELsi0UmaqCb8sZn6ki0GALEu2A==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0.0}
peerDependencies:
vue: ^3.3.4
@@ -1736,91 +1736,97 @@ packages:
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
'@oxc-parser/binding-darwin-arm64@0.72.3':
resolution: {integrity: sha512-g6wgcfL7At4wHNHutl0NmPZTAju+cUSmSX5WGUMyTJmozRzhx8E9a2KL4rTqNJPwEpbCFrgC29qX9f4fpDnUpA==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-android-arm64@0.75.0':
resolution: {integrity: sha512-nSHUHCO59G+kbixFVc7dK1j3l1EU3nVNLkj47ysCyl7RW3Z9cwCITp7SVwm+gl3ufCuVU4bkaBpgFnesnqZeDg==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [android]
'@oxc-parser/binding-darwin-arm64@0.75.0':
resolution: {integrity: sha512-Wnx2L/gX39/9ZkohpW9R46eQTavBFnqsoAFaRgOnUsLW/+rtZIacMwwxZCfBhLY/tNlBWEUbTxlN6bvN/hPbKw==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [darwin]
'@oxc-parser/binding-darwin-x64@0.72.3':
resolution: {integrity: sha512-pc+tplB2fd0AqdnXY90FguqSF2OwbxXwrMOLAMmsUiK4/ytr8Z/ftd49+d27GgvQJKeg2LfnIbskaQtY/j2tAA==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-darwin-x64@0.75.0':
resolution: {integrity: sha512-jXOYe/K7YLE8xN2dDBcaZ78dxfXWXtPMZBOzg2j0YignThagLX4KgDCqEVlMbQY4MymzpqrY0TzSXjCI9MCfvA==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [darwin]
'@oxc-parser/binding-freebsd-x64@0.72.3':
resolution: {integrity: sha512-igBR6rOvL8t5SBm1f1rjtWNsjB53HNrM3au582JpYzWxOqCjeA5Jlm9KZbjQJC+J8SPB9xyljM7G+6yGZ2UAkQ==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-freebsd-x64@0.75.0':
resolution: {integrity: sha512-Qz/iLccz8ecbeH0jterDVZcw9xmbuJn0/Jo+yc3+tqd3Iwirp+UbY/6c7SOkFFciF1dNN4G2FLpmDQSSWFZdjw==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [freebsd]
'@oxc-parser/binding-linux-arm-gnueabihf@0.72.3':
resolution: {integrity: sha512-/izdr3wg7bK+2RmNhZXC2fQwxbaTH3ELeqdR+Wg4FiEJ/C7ZBIjfB0E734bZGgbDu+rbEJTBlbG77XzY0wRX/Q==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-linux-arm-gnueabihf@0.75.0':
resolution: {integrity: sha512-OQomvh7PfJjzKSfG0lNcTru+QYXYzETrU4YZsWBWcJyV4pKJ6ZoRn4BOlY9QVH3F8htN890/agTQfNtEAzp23g==}
engines: {node: '>=20.0.0'}
cpu: [arm]
os: [linux]
'@oxc-parser/binding-linux-arm-musleabihf@0.72.3':
resolution: {integrity: sha512-Vz7C+qJb22HIFl3zXMlwvlTOR+MaIp5ps78060zsdeZh2PUGlYuUYkYXtGEjJV3kc8aKFj79XKqAY1EPG2NWQA==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-linux-arm-musleabihf@0.75.0':
resolution: {integrity: sha512-solH8uhoWkqHaVLGdBjB6cxbKugqRjxiEdXOQYeNXJo5d5gJxLW6WFhLhRedajwVtxVaKhcNNW4vrwuhU85OXA==}
engines: {node: '>=20.0.0'}
cpu: [arm]
os: [linux]
'@oxc-parser/binding-linux-arm64-gnu@0.72.3':
resolution: {integrity: sha512-nomoMe2VpVxW767jhF+G3mDGmE0U6nvvi5nw9Edqd/5DIylQfq/lEGUWL7qITk+E72YXBsnwHtpRRlIAJOMyZg==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-linux-arm64-gnu@0.75.0':
resolution: {integrity: sha512-CrYqeI5/TY8x/G/KvprDaxB9V6Wpudby1sXVpncz4Azzoyg+mIRGgWOl+ZbX/O9uwpCrFr0TPf2JY7cl3baLAA==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [linux]
'@oxc-parser/binding-linux-arm64-musl@0.72.3':
resolution: {integrity: sha512-4DswiIK5dI7hFqcMKWtZ7IZnWkRuskh6poI1ad4gkY2p678NOGtl6uOGCCRlDmLOOhp3R27u4VCTzQ6zra977w==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-linux-arm64-musl@0.75.0':
resolution: {integrity: sha512-dQK0rLN6ha5cGahgA4j7zqLH6rtDd5TdNApBo5JFannCLzpr9TQ1QUecYggx70+vLrmm/PMKCMnwR0uuvLbq8g==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [linux]
'@oxc-parser/binding-linux-riscv64-gnu@0.72.3':
resolution: {integrity: sha512-R9GEiA4WFPGU/3RxAhEd6SaMdpqongGTvGEyTvYCS/MAQyXKxX/LFvc2xwjdvESpjIemmc/12aTTq6if28vHkQ==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-linux-riscv64-gnu@0.75.0':
resolution: {integrity: sha512-thRPaGeeKuVFI1fTY+G5zeh5w34eUYszliA/2qpAsb1yWfq+imHgsdloFLi3wW1CiR1mnk6AhKFoj7u3JGVWTA==}
engines: {node: '>=20.0.0'}
cpu: [riscv64]
os: [linux]
'@oxc-parser/binding-linux-s390x-gnu@0.72.3':
resolution: {integrity: sha512-/sEYJQMVqikZO8gK9VDPT4zXo9du3gvvu8jp6erMmW5ev+14PErWRypJjktp0qoTj+uq4MzXro0tg7U+t5hP1w==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-linux-s390x-gnu@0.75.0':
resolution: {integrity: sha512-ku2ckoJeXXLe6ZiWFXXYALpfmAtoPUzsWOlFf7HssOYbhHEm/RH9yw/GoUNRwZdz1uSi6tYzNvLZ915irffK/w==}
engines: {node: '>=20.0.0'}
cpu: [s390x]
os: [linux]
'@oxc-parser/binding-linux-x64-gnu@0.72.3':
resolution: {integrity: sha512-hlyljEZ0sMPKJQCd5pxnRh2sAf/w+Ot2iJecgV9Hl3brrYrYCK2kofC0DFaJM3NRmG/8ZB3PlxnSRSKZTocwCw==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-linux-x64-gnu@0.75.0':
resolution: {integrity: sha512-223VDGrX7cnmhSSRimnL+/eOCp/ABU4Iobfnelz5zbQKRpijQQjk8Ohx2kb7aZ5Q0dY09fDSUNjY/iOBBFaRIg==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [linux]
'@oxc-parser/binding-linux-x64-musl@0.72.3':
resolution: {integrity: sha512-T17S8ORqAIq+YDFMvLfbNdAiYHYDM1+sLMNhesR5eWBtyTHX510/NbgEvcNemO9N6BNR7m4A9o+q468UG+dmbg==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-linux-x64-musl@0.75.0':
resolution: {integrity: sha512-WVdpo3EA53PTZt3p2fdmPgoF9jIichRcpd2GmuZV58P3wlFWq9iKefdD4M87mskzdxwGUiMQlPiktNcsZZWMkQ==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [linux]
'@oxc-parser/binding-wasm32-wasi@0.72.3':
resolution: {integrity: sha512-x0Ojn/jyRUk6MllvVB/puSvI2tczZBIYweKVYHNv1nBatjPRiqo+6/uXiKrZwSfGLkGARrKkTuHSa5RdZBMOdA==}
'@oxc-parser/binding-wasm32-wasi@0.75.0':
resolution: {integrity: sha512-SPXt1nYkmjuGDh7ZfnfarObQq8AnnvA+m+hmcOqXVSxLJWZQhXDF6AHaS0dzKhpIDHWjScbTp5c9eqINLbPh7g==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
'@oxc-parser/binding-win32-arm64-msvc@0.72.3':
resolution: {integrity: sha512-kRVAl87ugRjLZTm9vGUyiXU50mqxLPHY81rgnZUP1HtNcqcmTQtM/wUKQL2UdqvhA6xm6zciqzqCgJfU+RW8uA==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-win32-arm64-msvc@0.75.0':
resolution: {integrity: sha512-YBEBK1K5nC6GkQykdtGjKCY+/QvmKiG2blmTOKNUXnsSyDNDivJSClpjb+UrziR87skxnvcn3GbMPY08aG2AVg==}
engines: {node: '>=20.0.0'}
cpu: [arm64]
os: [win32]
'@oxc-parser/binding-win32-x64-msvc@0.72.3':
resolution: {integrity: sha512-vpVdoGAP5iGE5tIEPJgr7FkQJZA+sKjMkg5x1jarWJ1nnBamfGsfYiZum4QjCfW7jb+pl42rHVSS3lRmMPcyrQ==}
engines: {node: '>=14.0.0'}
'@oxc-parser/binding-win32-x64-msvc@0.75.0':
resolution: {integrity: sha512-o1f+JB8zFObz+5fvmMlP0ykBUkcVN1STjEHmRahD0TOZG1EJeUvz6xaLXr7EHeRW8z5ftEEGJK5nLlitwLXxCQ==}
engines: {node: '>=20.0.0'}
cpu: [x64]
os: [win32]
'@oxc-project/types@0.72.3':
resolution: {integrity: sha512-CfAC4wrmMkUoISpQkFAIfMVvlPfQV3xg7ZlcqPXPOIMQhdKIId44G8W0mCPgtpWdFFAyJ+SFtiM+9vbyCkoVng==}
'@oxc-project/types@0.75.0':
resolution: {integrity: sha512-QMW+06WOXs7+F301Y3X0VpmWhwuQVc/X/RP2zF9OIwvSMmsif3xURS2wxbakFIABYsytgBcHpUcFepVS0Qnd3A==}
'@parcel/watcher-android-arm64@2.5.1':
resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
@@ -2731,9 +2737,9 @@ packages:
'@volar/typescript@2.4.15':
resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==}
'@vue-macros/common@1.16.1':
resolution: {integrity: sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==}
engines: {node: '>=16.14.0'}
'@vue-macros/common@3.0.0-beta.15':
resolution: {integrity: sha512-DMgq/rIh1H20WYNWU7krIbEfJRYDDhy7ix64GlT4AVUJZZWCZ5pxiYVJR3A3GmWQPkn7Pg7i3oIiGqu4JGC65w==}
engines: {node: '>=20.18.0'}
peerDependencies:
vue: ^2.7.0 || ^3.2.25
peerDependenciesMeta:
@@ -3031,9 +3037,9 @@ packages:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
ast-kit@1.4.3:
resolution: {integrity: sha512-MdJqjpodkS5J149zN0Po+HPshkTdUyrvF7CKTafUgv69vBSPtncrj+3IiUgqdd7ElIEkbeXCsEouBUwLrw9Ilg==}
engines: {node: '>=16.14.0'}
ast-kit@2.1.1:
resolution: {integrity: sha512-mfh6a7gKXE8pDlxTvqIc/syH/P3RkzbOF6LeHdcKztLEzYe6IMsRCL7N8vI7hqTGWNxpkCuuRTpT21xNWqhRtQ==}
engines: {node: '>=20.18.0'}
ast-module-types@6.0.1:
resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==}
@@ -3043,9 +3049,9 @@ packages:
resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
engines: {node: '>=4'}
ast-walker-scope@0.6.2:
resolution: {integrity: sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==}
engines: {node: '>=16.14.0'}
ast-walker-scope@0.8.1:
resolution: {integrity: sha512-72XOdbzQCMKERvFrxAykatn2pu7osPNq/sNUzwcHdWzwPvOsNpPqkawfDXVvQbA2RT+ivtsMNjYdojTUZitt1A==}
engines: {node: '>=20.18.0'}
async-retry@1.3.3:
resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
@@ -5184,9 +5190,9 @@ packages:
magic-regexp@0.8.0:
resolution: {integrity: sha512-lOSLWdE156csDYwCTIGiAymOLN7Epu/TU5e/oAnISZfU6qP+pgjkE+xbVjVn3yLPKN8n1G2yIAYTAM5KRk6/ow==}
magic-string-ast@0.7.1:
resolution: {integrity: sha512-ub9iytsEbT7Yw/Pd29mSo/cNQpaEu67zR1VVcXDiYjSFwzeBxNdTd0FMnSslLQXiRj8uGPzwsaoefrMD5XAmdw==}
engines: {node: '>=16.14.0'}
magic-string-ast@1.0.0:
resolution: {integrity: sha512-8rbuNizut2gW94kv7pqgt0dvk+AHLPVIm0iJtpSgQJ9dx21eWx5SBel8z3jp1xtC0j6/iyK3AWGhAR1H61s7LA==}
engines: {node: '>=20.18.0'}
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
@@ -5676,9 +5682,9 @@ packages:
nuxt-site-config@3.2.2:
resolution: {integrity: sha512-0zCo8nZKk11F4oEWvioTPpxYesJtiwWGfanh1coOfPmvGdYuCcJ/pusy8zdPb6xQkvAYqpTZUy7KKfjXjrE8rA==}
nuxt@3.17.5:
resolution: {integrity: sha512-HWTWpM1/RDcCt9DlnzrPcNvUmGqc62IhlZJvr7COSfnJq2lKYiBKIIesEaOF+57Qjw7TfLPc1DQVBNtxfKBxEw==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0.0}
nuxt@3.17.6:
resolution: {integrity: sha512-kOsoJk7YvlcUChJXhCrVP18zRWKquUdrZSoJX8bCcQ54OhFOr4s2VhsxnbJVP7AtCiBSLbKuQt6ZBO7lE159Aw==}
engines: {node: ^20.9.0 || >=22.0.0}
hasBin: true
peerDependencies:
'@parcel/watcher': ^2.1.0
@@ -5756,9 +5762,9 @@ packages:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
oxc-parser@0.72.3:
resolution: {integrity: sha512-JYQeJKDcUTTZ/uTdJ+fZBGFjAjkLD1h0p3Tf44ZYXRcoMk+57d81paNPFAAwzrzzqhZmkGvKKXDxwyhJXYZlpg==}
engines: {node: '>=14.0.0'}
oxc-parser@0.75.0:
resolution: {integrity: sha512-WbgEAOXvO327lFz12U+utDzNDt5+gM9gRCLfi/q3oUaoVd7tzVNlbxhJCS9PBM97tEDghJQXbnr6vqzqvU2TPQ==}
engines: {node: '>=20.0.0'}
p-event@6.0.1:
resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==}
@@ -5918,8 +5924,8 @@ packages:
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
pkg-types@2.1.1:
resolution: {integrity: sha512-eY0QFb6eSwc9+0d/5D2lFFUq+A3n3QNGSy/X2Nvp+6MfzGw2u6EbA7S80actgjY1lkvvI0pqB+a4hioMh443Ew==}
pkg-types@2.2.0:
resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==}
playwright-core@1.53.1:
resolution: {integrity: sha512-Z46Oq7tLAyT0lGoFx4DOuB1IA9D1TPj0QkYxpPVUnGDqHHvDpCftu1J2hM2PiWsNMoZh8+LQaarAWcDfPBc6zg==}
@@ -7120,10 +7126,11 @@ packages:
'@nuxt/kit':
optional: true
unplugin-vue-router@0.12.0:
resolution: {integrity: sha512-xjgheKU0MegvXQcy62GVea0LjyOdMxN0/QH+ijN29W62ZlMhG7o7K+0AYqfpprvPwpWtuRjiyC5jnV2SxWye2w==}
unplugin-vue-router@0.14.0:
resolution: {integrity: sha512-ipjunvS5e2aFHBAUFuLbHl2aHKbXXXBhTxGT9wZx66fNVPdEQzVVitF8nODr1plANhTTa3UZ+DQu9uyLngMzoQ==}
peerDependencies:
vue-router: ^4.4.0
'@vue/compiler-sfc': ^3.5.17
vue-router: ^4.5.1
peerDependenciesMeta:
vue-router:
optional: true
@@ -8765,7 +8772,7 @@ snapshots:
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 1.0.0
pkg-types: 2.1.1
pkg-types: 2.2.0
scule: 1.3.0
semver: 7.7.2
std-env: 3.9.0
@@ -8777,7 +8784,7 @@ snapshots:
'@nuxt/content@3.6.1(better-sqlite3@12.2.0)(magicast@0.3.5)':
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@nuxtjs/mdc': 0.17.0(magicast@0.3.5)
'@shikijs/langs': 3.7.0
'@sqlite.org/sqlite-wasm': 3.50.1-build1
@@ -8807,7 +8814,7 @@ snapshots:
nypm: 0.6.0
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
remark-mdc: 3.6.0
scule: 1.3.0
shiki: 3.7.0
@@ -8836,8 +8843,8 @@ snapshots:
'@nuxt/devtools-kit@2.6.0(magicast@0.3.5)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))':
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/schema': 3.17.5
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@nuxt/schema': 3.17.6
execa: 8.0.1
vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)
transitivePeerDependencies:
@@ -8850,7 +8857,7 @@ snapshots:
execa: 8.0.1
magicast: 0.3.5
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
prompts: 2.4.2
semver: 7.7.2
@@ -8858,7 +8865,7 @@ snapshots:
dependencies:
'@nuxt/devtools-kit': 2.6.0(magicast@0.3.5)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))
'@nuxt/devtools-wizard': 2.6.0
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@vue/devtools-core': 7.7.7(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
'@vue/devtools-kit': 7.7.7
birpc: 2.4.0
@@ -8878,14 +8885,14 @@ snapshots:
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 1.0.0
pkg-types: 2.1.1
pkg-types: 2.2.0
semver: 7.7.2
simple-git: 3.28.0
sirv: 3.0.1
structured-clone-es: 1.0.0
tinyglobby: 0.2.14
vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)
vite-plugin-inspect: 11.3.0(@nuxt/kit@3.17.5(magicast@0.3.5))(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))
vite-plugin-inspect: 11.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))
vite-plugin-vue-tracer: 1.0.0(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
which: 5.0.0
ws: 8.18.3
@@ -8937,7 +8944,7 @@ snapshots:
'@nuxt/fonts@0.11.4(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1)(magicast@0.3.5)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))':
dependencies:
'@nuxt/devtools-kit': 2.6.0(magicast@0.3.5)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
consola: 3.4.2
css-tree: 3.1.0
defu: 6.1.4
@@ -8986,7 +8993,7 @@ snapshots:
'@iconify/utils': 2.3.0
'@iconify/vue': 5.0.0(vue@3.5.17(typescript@5.8.3))
'@nuxt/devtools-kit': 2.6.0(magicast@0.3.5)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
consola: 3.4.2
local-pkg: 1.1.1
mlly: 1.7.4
@@ -9003,7 +9010,7 @@ snapshots:
'@nuxt/image@1.10.0(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1)(magicast@0.3.5)':
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
consola: 3.4.2
defu: 6.1.4
h3: 1.15.3
@@ -9037,7 +9044,7 @@ snapshots:
- magicast
- uploadthing
'@nuxt/kit@3.17.5(magicast@0.3.5)':
'@nuxt/kit@3.17.6(magicast@0.3.5)':
dependencies:
c12: 3.0.4(magicast@0.3.5)
consola: 3.4.2
@@ -9052,7 +9059,7 @@ snapshots:
mlly: 1.7.4
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
scule: 1.3.0
semver: 7.7.2
std-env: 3.9.0
@@ -9075,7 +9082,7 @@ snapshots:
mkdist: 2.3.0(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))
mlly: 1.7.4
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
tsconfck: 3.1.6(typescript@5.8.3)
typescript: 5.8.3
unbuild: 3.5.0(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))
@@ -9087,7 +9094,7 @@ snapshots:
- vue
- vue-tsc
'@nuxt/schema@3.17.5':
'@nuxt/schema@3.17.6':
dependencies:
'@vue/shared': 3.5.17
consola: 3.4.2
@@ -9097,7 +9104,7 @@ snapshots:
'@nuxt/telemetry@2.6.6(magicast@0.3.5)':
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
citty: 0.1.6
consola: 3.4.2
destr: 2.0.5
@@ -9114,8 +9121,8 @@ snapshots:
'@nuxt/test-utils@3.19.1(@types/node@24.0.7)(@vue/test-utils@2.4.6)(happy-dom@18.0.1)(jiti@2.4.2)(lightningcss@1.30.1)(magicast@0.3.5)(playwright-core@1.53.1)(terser@5.43.1)(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.7)(happy-dom@18.0.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0)':
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/schema': 3.17.5
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@nuxt/schema': 3.17.6
c12: 3.0.4(magicast@0.3.5)
consola: 3.4.2
defu: 6.1.4
@@ -9163,8 +9170,8 @@ snapshots:
'@nuxt/ui-pro@https://pkg.pr.new/@nuxt/ui-pro@3d48704(@babel/parser@7.27.7)(joi@17.13.3)(magicast@0.3.5)(react@19.1.0)(superstruct@2.0.2)(typescript@5.8.3)(valibot@1.1.0(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))(yup@1.6.1)(zod@3.25.67)':
dependencies:
'@ai-sdk/vue': 1.2.12(vue@3.5.17(typescript@5.8.3))(zod@3.25.67)
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/schema': 3.17.5
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@nuxt/schema': 3.17.6
'@nuxt/ui': 'link:'
'@standard-schema/spec': 1.0.0
'@vueuse/core': 13.4.0(vue@3.5.17(typescript@5.8.3))
@@ -9176,13 +9183,13 @@ snapshots:
ofetch: 1.4.1
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
scule: 1.3.0
tinyglobby: 0.2.14
typescript: 5.8.3
unplugin: 2.3.5
unplugin-auto-import: 19.3.0(@nuxt/kit@3.17.5(magicast@0.3.5))(@vueuse/core@13.4.0(vue@3.5.17(typescript@5.8.3)))
unplugin-vue-components: 28.8.0(@babel/parser@7.27.7)(@nuxt/kit@3.17.5(magicast@0.3.5))(vue@3.5.17(typescript@5.8.3))
unplugin-auto-import: 19.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(@vueuse/core@13.4.0(vue@3.5.17(typescript@5.8.3)))
unplugin-vue-components: 28.8.0(@babel/parser@7.27.7)(@nuxt/kit@3.17.6(magicast@0.3.5))(vue@3.5.17(typescript@5.8.3))
optionalDependencies:
joi: 17.13.3
superstruct: 2.0.2
@@ -9199,9 +9206,9 @@ snapshots:
- supports-color
- vue
'@nuxt/vite-builder@3.17.5(@types/node@24.0.7)(eslint@9.30.0(jiti@2.4.2))(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))(yaml@2.8.0)':
'@nuxt/vite-builder@3.17.6(@types/node@24.0.7)(eslint@9.30.0(jiti@2.4.2))(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))(yaml@2.8.0)':
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@rollup/plugin-replace': 6.0.2(rollup@4.34.9)
'@vitejs/plugin-vue': 5.2.4(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
'@vitejs/plugin-vue-jsx': 4.2.0(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
@@ -9223,13 +9230,12 @@ snapshots:
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 1.0.0
pkg-types: 2.1.1
pkg-types: 2.2.0
postcss: 8.5.6
rollup-plugin-visualizer: 6.0.3(rollup@4.34.9)
std-env: 3.9.0
ufo: 1.6.1
unenv: 2.0.0-rc.18
unplugin: 2.3.5
vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)
vite-node: 3.2.4(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)
vite-plugin-checker: 0.9.3(eslint@9.30.0(jiti@2.4.2))(meow@13.2.0)(optionator@0.9.4)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))
@@ -9264,7 +9270,7 @@ snapshots:
dependencies:
'@cloudflare/workers-types': 4.20250628.0
'@nuxt/devtools-kit': 2.6.0(magicast@0.3.5)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@uploadthing/mime-types': 0.3.5
citty: 0.1.6
confbox: 0.2.2
@@ -9275,7 +9281,7 @@ snapshots:
nitro-cloudflare-dev: 0.2.2
ofetch: 1.4.1
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
std-env: 3.9.0
ufo: 1.6.1
uncrypto: 0.1.3
@@ -9305,7 +9311,7 @@ snapshots:
'@nuxtjs/color-mode@3.5.2(magicast@0.3.5)':
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
pathe: 1.1.2
pkg-types: 1.3.1
semver: 7.7.2
@@ -9314,7 +9320,7 @@ snapshots:
'@nuxtjs/mdc@0.17.0(magicast@0.3.5)':
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@shikijs/langs': 3.7.0
'@shikijs/themes': 3.7.0
'@shikijs/transformers': 3.7.0
@@ -9363,7 +9369,7 @@ snapshots:
'@nuxtjs/plausible@1.2.0(magicast@0.3.5)':
dependencies:
'@barbapapazes/plausible-tracker': 0.5.6
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
defu: 6.1.4
ufo: 1.6.1
transitivePeerDependencies:
@@ -9497,51 +9503,54 @@ snapshots:
'@opentelemetry/api@1.9.0': {}
'@oxc-parser/binding-darwin-arm64@0.72.3':
'@oxc-parser/binding-android-arm64@0.75.0':
optional: true
'@oxc-parser/binding-darwin-x64@0.72.3':
'@oxc-parser/binding-darwin-arm64@0.75.0':
optional: true
'@oxc-parser/binding-freebsd-x64@0.72.3':
'@oxc-parser/binding-darwin-x64@0.75.0':
optional: true
'@oxc-parser/binding-linux-arm-gnueabihf@0.72.3':
'@oxc-parser/binding-freebsd-x64@0.75.0':
optional: true
'@oxc-parser/binding-linux-arm-musleabihf@0.72.3':
'@oxc-parser/binding-linux-arm-gnueabihf@0.75.0':
optional: true
'@oxc-parser/binding-linux-arm64-gnu@0.72.3':
'@oxc-parser/binding-linux-arm-musleabihf@0.75.0':
optional: true
'@oxc-parser/binding-linux-arm64-musl@0.72.3':
'@oxc-parser/binding-linux-arm64-gnu@0.75.0':
optional: true
'@oxc-parser/binding-linux-riscv64-gnu@0.72.3':
'@oxc-parser/binding-linux-arm64-musl@0.75.0':
optional: true
'@oxc-parser/binding-linux-s390x-gnu@0.72.3':
'@oxc-parser/binding-linux-riscv64-gnu@0.75.0':
optional: true
'@oxc-parser/binding-linux-x64-gnu@0.72.3':
'@oxc-parser/binding-linux-s390x-gnu@0.75.0':
optional: true
'@oxc-parser/binding-linux-x64-musl@0.72.3':
'@oxc-parser/binding-linux-x64-gnu@0.75.0':
optional: true
'@oxc-parser/binding-wasm32-wasi@0.72.3':
'@oxc-parser/binding-linux-x64-musl@0.75.0':
optional: true
'@oxc-parser/binding-wasm32-wasi@0.75.0':
dependencies:
'@napi-rs/wasm-runtime': 0.2.11
optional: true
'@oxc-parser/binding-win32-arm64-msvc@0.72.3':
'@oxc-parser/binding-win32-arm64-msvc@0.75.0':
optional: true
'@oxc-parser/binding-win32-x64-msvc@0.72.3':
'@oxc-parser/binding-win32-x64-msvc@0.75.0':
optional: true
'@oxc-project/types@0.72.3': {}
'@oxc-project/types@0.75.0': {}
'@parcel/watcher-android-arm64@2.5.1':
optional: true
@@ -10378,14 +10387,13 @@ snapshots:
path-browserify: 1.0.1
vscode-uri: 3.1.0
'@vue-macros/common@1.16.1(vue@3.5.17(typescript@5.8.3))':
'@vue-macros/common@3.0.0-beta.15(vue@3.5.17(typescript@5.8.3))':
dependencies:
'@vue/compiler-sfc': 3.5.17
ast-kit: 1.4.3
ast-kit: 2.1.1
local-pkg: 1.1.1
magic-string-ast: 0.7.1
pathe: 2.0.3
picomatch: 4.0.2
magic-string-ast: 1.0.0
unplugin-utils: 0.2.4
optionalDependencies:
vue: 3.5.17(typescript@5.8.3)
@@ -10566,13 +10574,13 @@ snapshots:
'@vueuse/metadata@13.4.0': {}
'@vueuse/nuxt@13.4.0(magicast@0.3.5)(nuxt@3.17.5(@parcel/watcher@2.5.1)(@types/node@24.0.7)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
'@vueuse/nuxt@13.4.0(magicast@0.3.5)(nuxt@3.17.6(@parcel/watcher@2.5.1)(@types/node@24.0.7)(@vue/compiler-sfc@3.5.17)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@vueuse/core': 13.4.0(vue@3.5.17(typescript@5.8.3))
'@vueuse/metadata': 13.4.0
local-pkg: 1.1.1
nuxt: 3.17.5(@parcel/watcher@2.5.1)(@types/node@24.0.7)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0)
nuxt: 3.17.6(@parcel/watcher@2.5.1)(@types/node@24.0.7)(@vue/compiler-sfc@3.5.17)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0)
vue: 3.5.17(typescript@5.8.3)
transitivePeerDependencies:
- magicast
@@ -10728,7 +10736,7 @@ snapshots:
assertion-error@2.0.1: {}
ast-kit@1.4.3:
ast-kit@2.1.1:
dependencies:
'@babel/parser': 7.27.7
pathe: 2.0.3
@@ -10739,10 +10747,10 @@ snapshots:
dependencies:
tslib: 2.8.1
ast-walker-scope@0.6.2:
ast-walker-scope@0.8.1:
dependencies:
'@babel/parser': 7.27.7
ast-kit: 1.4.3
ast-kit: 2.1.1
async-retry@1.3.3:
dependencies:
@@ -10898,7 +10906,7 @@ snapshots:
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 1.0.0
pkg-types: 2.1.1
pkg-types: 2.2.0
rc9: 2.1.2
optionalDependencies:
magicast: 0.3.5
@@ -12957,7 +12965,7 @@ snapshots:
local-pkg@1.1.1:
dependencies:
mlly: 1.7.4
pkg-types: 2.1.1
pkg-types: 2.2.0
quansync: 0.2.10
locate-path@6.0.0:
@@ -13046,7 +13054,7 @@ snapshots:
ufo: 1.6.1
unplugin: 2.3.5
magic-string-ast@0.7.1:
magic-string-ast@1.0.0:
dependencies:
magic-string: 0.30.17
@@ -13484,7 +13492,7 @@ snapshots:
jiti: 1.21.7
mlly: 1.7.4
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
postcss: 8.5.6
postcss-nested: 7.0.2(postcss@8.5.6)
semver: 7.7.2
@@ -13571,7 +13579,7 @@ snapshots:
dependencies:
consola: 3.4.2
mlly: 1.7.4
pkg-types: 2.1.1
pkg-types: 2.2.0
nitropack@2.11.13(better-sqlite3@12.2.0):
dependencies:
@@ -13623,7 +13631,7 @@ snapshots:
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 1.0.0
pkg-types: 2.1.1
pkg-types: 2.2.0
pretty-bytes: 6.1.1
radix3: 1.1.2
rollup: 4.34.9
@@ -13752,7 +13760,7 @@ snapshots:
nuxt-component-meta@0.11.0(magicast@0.3.5):
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
citty: 0.1.6
mlly: 1.7.4
ohash: 2.0.11
@@ -13765,7 +13773,7 @@ snapshots:
nuxt-component-meta@0.12.0(magicast@0.3.5):
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
citty: 0.1.6
mlly: 1.7.4
ohash: 2.0.11
@@ -13778,14 +13786,14 @@ snapshots:
nuxt-llms@0.1.3(magicast@0.3.5):
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
transitivePeerDependencies:
- magicast
nuxt-og-image@5.1.8(@unhead/vue@2.0.11(vue@3.5.17(typescript@5.8.3)))(magicast@0.3.5)(unstorage@1.16.0(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1))(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)):
dependencies:
'@nuxt/devtools-kit': 2.6.0(magicast@0.3.5)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@resvg/resvg-js': 2.6.2
'@resvg/resvg-wasm': 2.6.2
'@unhead/vue': 2.0.11(vue@3.5.17(typescript@5.8.3))
@@ -13803,7 +13811,7 @@ snapshots:
ofetch: 1.4.1
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
playwright-core: 1.53.1
radix3: 1.1.2
satori: 0.15.2
@@ -13824,8 +13832,8 @@ snapshots:
nuxt-site-config-kit@3.2.2(magicast@0.3.5)(vue@3.5.17(typescript@5.8.3)):
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
pkg-types: 2.1.1
'@nuxt/kit': 3.17.6(magicast@0.3.5)
pkg-types: 2.2.0
site-config-stack: 3.2.2(vue@3.5.17(typescript@5.8.3))
std-env: 3.9.0
ufo: 1.6.1
@@ -13835,10 +13843,10 @@ snapshots:
nuxt-site-config@3.2.2(magicast@0.3.5)(vue@3.5.17(typescript@5.8.3)):
dependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
nuxt-site-config-kit: 3.2.2(magicast@0.3.5)(vue@3.5.17(typescript@5.8.3))
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
sirv: 3.0.1
site-config-stack: 3.2.2(vue@3.5.17(typescript@5.8.3))
ufo: 1.6.1
@@ -13846,15 +13854,15 @@ snapshots:
- magicast
- vue
nuxt@3.17.5(@parcel/watcher@2.5.1)(@types/node@24.0.7)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0):
nuxt@3.17.6(@parcel/watcher@2.5.1)(@types/node@24.0.7)(@vue/compiler-sfc@3.5.17)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.30.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue-tsc@2.2.10(typescript@5.8.3))(yaml@2.8.0):
dependencies:
'@nuxt/cli': 3.25.1(magicast@0.3.5)
'@nuxt/devalue': 2.0.2
'@nuxt/devtools': 2.6.0(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/schema': 3.17.5
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@nuxt/schema': 3.17.6
'@nuxt/telemetry': 2.6.6(magicast@0.3.5)
'@nuxt/vite-builder': 3.17.5(@types/node@24.0.7)(eslint@9.30.0(jiti@2.4.2))(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))(yaml@2.8.0)
'@nuxt/vite-builder': 3.17.6(@types/node@24.0.7)(eslint@9.30.0(jiti@2.4.2))(lightningcss@1.30.1)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.43.1)(typescript@5.8.3)(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))(yaml@2.8.0)
'@unhead/vue': 2.0.11(vue@3.5.17(typescript@5.8.3))
'@vue/shared': 3.5.17
c12: 3.0.4(magicast@0.3.5)
@@ -13886,10 +13894,10 @@ snapshots:
ofetch: 1.4.1
ohash: 2.0.11
on-change: 5.0.1
oxc-parser: 0.72.3
oxc-parser: 0.75.0
pathe: 2.0.3
perfect-debounce: 1.0.0
pkg-types: 2.1.1
pkg-types: 2.2.0
radix3: 1.1.2
scule: 1.3.0
semver: 7.7.2
@@ -13902,7 +13910,7 @@ snapshots:
unctx: 2.4.1
unimport: 4.1.1
unplugin: 2.3.5
unplugin-vue-router: 0.12.0(vue-router@4.5.1(vue@3.5.17(typescript@5.8.3)))(vue@3.5.17(typescript@5.8.3))
unplugin-vue-router: 0.14.0(@vue/compiler-sfc@3.5.17)(vue-router@4.5.1(vue@3.5.17(typescript@5.8.3)))(vue@3.5.17(typescript@5.8.3))
unstorage: 1.16.0(db0@0.3.2(better-sqlite3@12.2.0))(ioredis@5.6.1)
untyped: 2.0.0
vue: 3.5.17(typescript@5.8.3)
@@ -13929,6 +13937,7 @@ snapshots:
- '@upstash/redis'
- '@vercel/blob'
- '@vercel/kv'
- '@vue/compiler-sfc'
- aws4fetch
- better-sqlite3
- bufferutil
@@ -13970,7 +13979,7 @@ snapshots:
citty: 0.1.6
consola: 3.4.2
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
tinyexec: 0.3.2
object-inspect@1.13.4: {}
@@ -14054,24 +14063,25 @@ snapshots:
os-tmpdir@1.0.2: {}
oxc-parser@0.72.3:
oxc-parser@0.75.0:
dependencies:
'@oxc-project/types': 0.72.3
'@oxc-project/types': 0.75.0
optionalDependencies:
'@oxc-parser/binding-darwin-arm64': 0.72.3
'@oxc-parser/binding-darwin-x64': 0.72.3
'@oxc-parser/binding-freebsd-x64': 0.72.3
'@oxc-parser/binding-linux-arm-gnueabihf': 0.72.3
'@oxc-parser/binding-linux-arm-musleabihf': 0.72.3
'@oxc-parser/binding-linux-arm64-gnu': 0.72.3
'@oxc-parser/binding-linux-arm64-musl': 0.72.3
'@oxc-parser/binding-linux-riscv64-gnu': 0.72.3
'@oxc-parser/binding-linux-s390x-gnu': 0.72.3
'@oxc-parser/binding-linux-x64-gnu': 0.72.3
'@oxc-parser/binding-linux-x64-musl': 0.72.3
'@oxc-parser/binding-wasm32-wasi': 0.72.3
'@oxc-parser/binding-win32-arm64-msvc': 0.72.3
'@oxc-parser/binding-win32-x64-msvc': 0.72.3
'@oxc-parser/binding-android-arm64': 0.75.0
'@oxc-parser/binding-darwin-arm64': 0.75.0
'@oxc-parser/binding-darwin-x64': 0.75.0
'@oxc-parser/binding-freebsd-x64': 0.75.0
'@oxc-parser/binding-linux-arm-gnueabihf': 0.75.0
'@oxc-parser/binding-linux-arm-musleabihf': 0.75.0
'@oxc-parser/binding-linux-arm64-gnu': 0.75.0
'@oxc-parser/binding-linux-arm64-musl': 0.75.0
'@oxc-parser/binding-linux-riscv64-gnu': 0.75.0
'@oxc-parser/binding-linux-s390x-gnu': 0.75.0
'@oxc-parser/binding-linux-x64-gnu': 0.75.0
'@oxc-parser/binding-linux-x64-musl': 0.75.0
'@oxc-parser/binding-wasm32-wasi': 0.75.0
'@oxc-parser/binding-win32-arm64-msvc': 0.75.0
'@oxc-parser/binding-win32-x64-msvc': 0.75.0
p-event@6.0.1:
dependencies:
@@ -14225,7 +14235,7 @@ snapshots:
mlly: 1.7.4
pathe: 2.0.3
pkg-types@2.1.1:
pkg-types@2.2.0:
dependencies:
confbox: 0.2.2
exsolve: 1.0.7
@@ -15509,7 +15519,7 @@ snapshots:
mkdist: 2.3.0(typescript@5.8.3)(vue-sfc-transformer@0.1.16(@vue/compiler-core@3.5.17)(esbuild@0.25.5)(vue@3.5.17(typescript@5.8.3)))(vue-tsc@2.2.10(typescript@5.8.3))(vue@3.5.17(typescript@5.8.3))
mlly: 1.7.4
pathe: 2.0.3
pkg-types: 2.1.1
pkg-types: 2.2.0
pretty-bytes: 6.1.1
rollup: 4.34.9
rollup-plugin-dts: 6.2.1(rollup@4.34.9)(typescript@5.8.3)
@@ -15654,7 +15664,7 @@ snapshots:
dependencies:
normalize-path: 2.1.1
unplugin-auto-import@19.3.0(@nuxt/kit@3.17.5(magicast@0.3.5))(@vueuse/core@13.4.0(vue@3.5.17(typescript@5.8.3))):
unplugin-auto-import@19.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(@vueuse/core@13.4.0(vue@3.5.17(typescript@5.8.3))):
dependencies:
local-pkg: 1.1.1
magic-string: 0.30.17
@@ -15663,7 +15673,7 @@ snapshots:
unplugin: 2.3.5
unplugin-utils: 0.2.4
optionalDependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
'@vueuse/core': 13.4.0(vue@3.5.17(typescript@5.8.3))
unplugin-utils@0.2.4:
@@ -15671,7 +15681,7 @@ snapshots:
pathe: 2.0.3
picomatch: 4.0.2
unplugin-vue-components@28.8.0(@babel/parser@7.27.7)(@nuxt/kit@3.17.5(magicast@0.3.5))(vue@3.5.17(typescript@5.8.3)):
unplugin-vue-components@28.8.0(@babel/parser@7.27.7)(@nuxt/kit@3.17.6(magicast@0.3.5))(vue@3.5.17(typescript@5.8.3)):
dependencies:
chokidar: 3.6.0
debug: 4.3.7
@@ -15684,23 +15694,23 @@ snapshots:
vue: 3.5.17(typescript@5.8.3)
optionalDependencies:
'@babel/parser': 7.27.7
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
transitivePeerDependencies:
- supports-color
unplugin-vue-router@0.12.0(vue-router@4.5.1(vue@3.5.17(typescript@5.8.3)))(vue@3.5.17(typescript@5.8.3)):
unplugin-vue-router@0.14.0(@vue/compiler-sfc@3.5.17)(vue-router@4.5.1(vue@3.5.17(typescript@5.8.3)))(vue@3.5.17(typescript@5.8.3)):
dependencies:
'@babel/types': 7.27.7
'@vue-macros/common': 1.16.1(vue@3.5.17(typescript@5.8.3))
ast-walker-scope: 0.6.2
'@vue-macros/common': 3.0.0-beta.15(vue@3.5.17(typescript@5.8.3))
'@vue/compiler-sfc': 3.5.17
ast-walker-scope: 0.8.1
chokidar: 3.6.0
fast-glob: 3.3.3
json5: 2.2.3
local-pkg: 1.1.1
magic-string: 0.30.17
micromatch: 4.0.8
mlly: 1.7.4
pathe: 2.0.3
picomatch: 4.0.2
scule: 1.3.0
unplugin: 2.3.5
unplugin-utils: 0.2.4
@@ -15885,7 +15895,7 @@ snapshots:
typescript: 5.8.3
vue-tsc: 2.2.10(typescript@5.8.3)
vite-plugin-inspect@11.3.0(@nuxt/kit@3.17.5(magicast@0.3.5))(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)):
vite-plugin-inspect@11.3.0(@nuxt/kit@3.17.6(magicast@0.3.5))(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)):
dependencies:
ansis: 4.1.0
debug: 4.3.7
@@ -15898,7 +15908,7 @@ snapshots:
vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0)
vite-dev-rpc: 1.1.0(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))
optionalDependencies:
'@nuxt/kit': 3.17.5(magicast@0.3.5)
'@nuxt/kit': 3.17.6(magicast@0.3.5)
transitivePeerDependencies:
- supports-color

View File

@@ -18,6 +18,8 @@ export interface InputTagsProps<T extends InputTagItem = InputTagItem> extends P
as?: any
/** The placeholder text when the input is empty. */
placeholder?: string
/** The maximum number of character allowed. */
maxLength?: number
/**
* @defaultValue 'primary'
*/
@@ -182,6 +184,7 @@ defineExpose({
ref="inputRef"
v-bind="{ ...$attrs, ...ariaAttrs }"
:placeholder="placeholder"
:max-length="maxLength"
:class="ui.input({ class: props.ui?.input })"
/>

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import type { PopoverRootProps, HoverCardRootProps, PopoverRootEmits, PopoverContentProps, PopoverContentEmits, PopoverArrowProps } from 'reka-ui'
import type { PopoverRootProps, HoverCardRootProps, PopoverRootEmits, PopoverContentProps, PopoverContentEmits, PopoverArrowProps, HoverCardTriggerProps } from 'reka-ui'
import type { AppConfig } from '@nuxt/schema'
import theme from '#build/ui/popover'
import type { EmitsToProps, ComponentConfig } from '../types/utils'
@@ -27,6 +27,12 @@ export interface PopoverProps extends PopoverRootProps, Pick<HoverCardRootProps,
* @defaultValue true
*/
portal?: boolean | string | HTMLElement
/**
* The reference (or anchor) element that is being referred to for positioning.
*
* If not provided will use the current component as anchor.
*/
reference?: HoverCardTriggerProps['reference']
/**
* When `false`, the popover will not close when clicking outside or pressing escape.
* @defaultValue true
@@ -100,7 +106,7 @@ const Component = computed(() => props.mode === 'hover' ? HoverCard : Popover)
<template>
<Component.Root v-slot="{ open }" v-bind="rootProps">
<Component.Trigger v-if="!!slots.default" as-child :class="props.class">
<Component.Trigger v-if="!!slots.default || !!reference" as-child :reference="reference" :class="props.class">
<slot :open="open" />
</Component.Trigger>

View File

@@ -165,6 +165,8 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
*/
facetedOptions?: FacetedOptions<T>
onSelect?: (row: TableRow<T>, e?: Event) => void
onHover?: (e: Event, row: TableRow<T> | null) => void
onContextmenu?: ((e: Event, row: TableRow<T>) => void) | Array<((e: Event, row: TableRow<T>) => void)>
class?: any
ui?: Table['slots']
}
@@ -313,7 +315,7 @@ function valueUpdater<T extends Updater<any>>(updaterOrValue: T, ref: Ref) {
ref.value = typeof updaterOrValue === 'function' ? updaterOrValue(ref.value) : updaterOrValue
}
function handleRowSelect(row: TableRow<T>, e: Event) {
function onRowSelect(e: Event, row: TableRow<T>) {
if (!props.onSelect) {
return
}
@@ -326,9 +328,30 @@ function handleRowSelect(row: TableRow<T>, e: Event) {
e.preventDefault()
e.stopPropagation()
// FIXME: `e` should be the first argument for consistency
props.onSelect(row, e)
}
function onRowHover(e: Event, row: TableRow<T> | null) {
if (!props.onHover) {
return
}
props.onHover(e, row)
}
function onRowContextmenu(e: Event, row: TableRow<T>) {
if (!props.onContextmenu) {
return
}
if (Array.isArray(props.onContextmenu)) {
props.onContextmenu.forEach(fn => fn(e, row))
} else {
props.onContextmenu(e, row)
}
}
watch(
() => props.data, () => {
data.value = props.data ? [...props.data] : []
@@ -382,7 +405,7 @@ defineExpose({
<template v-for="row in tableApi.getRowModel().rows" :key="row.id">
<tr
:data-selected="row.getIsSelected()"
:data-selectable="!!props.onSelect"
:data-selectable="!!props.onSelect || !!props.onHover || !!props.onContextmenu"
:data-expanded="row.getIsExpanded()"
:role="props.onSelect ? 'button' : undefined"
:tabindex="props.onSelect ? 0 : undefined"
@@ -392,7 +415,10 @@ defineExpose({
typeof tableApi.options.meta?.class?.tr === 'function' ? tableApi.options.meta.class.tr(row) : tableApi.options.meta?.class?.tr
]
})"
@click="handleRowSelect(row, $event)"
@click="onRowSelect($event, row)"
@pointerenter="onRowHover($event, row)"
@pointerleave="onRowHover($event, null)"
@contextmenu="onRowContextmenu($event, row)"
>
<td
v-for="cell in row.getVisibleCells()"

View File

@@ -27,6 +27,11 @@ export interface TooltipProps extends TooltipRootProps {
* @defaultValue true
*/
portal?: boolean | string | HTMLElement
/**
* The reference (or anchor) element that is being referred to for positioning.
*
* If not provided will use the current component as anchor.
*/
reference?: TooltipTriggerProps['reference']
class?: any
ui?: Tooltip['slots']