mirror of
https://github.com/moeru-ai/airi.git
synced 2026-10-30 19:34:10 +08:00
fix(stage-tamagotchi): sync pairing settings and QR state (#2318)
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { isStageTamagotchi } from '@proj-airi/stage-shared'
|
import { isStageTamagotchi } from '@proj-airi/stage-shared'
|
||||||
import { ConnectionSettings } from '@proj-airi/stage-ui/components'
|
import { ConnectionSettings } from '@proj-airi/stage-ui/components'
|
||||||
import { Callout, FieldCheckbox, FieldInput, IconButton, Input, SelectTab } from '@proj-airi/ui'
|
import { Callout, FieldCheckbox, IconButton, Input } from '@proj-airi/ui'
|
||||||
import { refDebounced, useClipboard } from '@vueuse/core'
|
import { refDebounced, useClipboard } from '@vueuse/core'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { computed, shallowRef, watch } from 'vue'
|
import { computed, shallowRef, watch } from 'vue'
|
||||||
@@ -10,10 +10,6 @@ import { useI18n } from 'vue-i18n'
|
|||||||
import ServerChannelQrCard from './server-channel-qr-card.vue'
|
import ServerChannelQrCard from './server-channel-qr-card.vue'
|
||||||
|
|
||||||
import { useServerChannelSettingsStore } from '../../../stores/settings/server-channel'
|
import { useServerChannelSettingsStore } from '../../../stores/settings/server-channel'
|
||||||
import {
|
|
||||||
hostnameFromExposureMode,
|
|
||||||
serverChannelExposureModeFromHostname,
|
|
||||||
} from '../../../stores/settings/server-channel-options'
|
|
||||||
|
|
||||||
const serverChannelSettingsStore = useServerChannelSettingsStore()
|
const serverChannelSettingsStore = useServerChannelSettingsStore()
|
||||||
const { authToken, hostname, lastApplyError, tlsConfig } = storeToRefs(serverChannelSettingsStore)
|
const { authToken, hostname, lastApplyError, tlsConfig } = storeToRefs(serverChannelSettingsStore)
|
||||||
@@ -26,14 +22,13 @@ const websocketTlsEnabled = computed({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const exposureMode = computed({
|
const exposeToAll = computed({
|
||||||
get: () => serverChannelExposureModeFromHostname(hostname.value),
|
get: () => hostname.value === '0.0.0.0',
|
||||||
set: (mode) => {
|
set: (value: boolean) => {
|
||||||
hostname.value = hostnameFromExposureMode(mode, hostname.value)
|
hostname.value = value ? '0.0.0.0' : '127.0.0.1'
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const showAdvancedHostname = computed(() => exposureMode.value === 'advanced')
|
|
||||||
const showDesktopServerControls = computed(() => isStageTamagotchi())
|
const showDesktopServerControls = computed(() => isStageTamagotchi())
|
||||||
const authTokenInput = shallowRef(authToken.value)
|
const authTokenInput = shallowRef(authToken.value)
|
||||||
const authTokenInputDebounced = refDebounced(authTokenInput, 500)
|
const authTokenInputDebounced = refDebounced(authTokenInput, 500)
|
||||||
@@ -42,21 +37,6 @@ const { copied: authTokenCopied, copy: copyAuthToken, isSupported: isClipboardSu
|
|||||||
const authTokenInputType = computed(() => authTokenVisible.value ? 'text' : 'password')
|
const authTokenInputType = computed(() => authTokenVisible.value ? 'text' : 'password')
|
||||||
const canCopyAuthToken = computed(() => isClipboardSupported.value && authTokenInput.value.length > 0)
|
const canCopyAuthToken = computed(() => isClipboardSupported.value && authTokenInput.value.length > 0)
|
||||||
|
|
||||||
const exposureModeOptions = computed(() => [
|
|
||||||
{
|
|
||||||
label: t('settings.pages.connection.server-hostname.options.this-device'),
|
|
||||||
value: 'this-device',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: t('settings.pages.connection.server-hostname.options.all'),
|
|
||||||
value: 'all',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: t('settings.pages.connection.server-hostname.options.advanced'),
|
|
||||||
value: 'advanced',
|
|
||||||
},
|
|
||||||
])
|
|
||||||
|
|
||||||
watch(authToken, (value) => {
|
watch(authToken, (value) => {
|
||||||
if (value !== authTokenInput.value)
|
if (value !== authTokenInput.value)
|
||||||
authTokenInput.value = value
|
authTokenInput.value = value
|
||||||
@@ -77,40 +57,17 @@ watch(authTokenInputDebounced, (value) => {
|
|||||||
>
|
>
|
||||||
{{ lastApplyError }}
|
{{ lastApplyError }}
|
||||||
</Callout>
|
</Callout>
|
||||||
<ConnectionSettings>
|
<ConnectionSettings server-address-disabled>
|
||||||
<template #platform-specific>
|
<template #before-server-address>
|
||||||
<!-- TODO: show connected remote -->
|
|
||||||
<FieldCheckbox
|
<FieldCheckbox
|
||||||
v-model="websocketTlsEnabled"
|
|
||||||
:label="t('settings.websocket-secure-enabled.title')"
|
|
||||||
:description="t('settings.websocket-secure-enabled.description')"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<div
|
|
||||||
v-if="showDesktopServerControls"
|
v-if="showDesktopServerControls"
|
||||||
:class="['flex', 'flex-col', 'gap-2']"
|
v-model="exposeToAll"
|
||||||
>
|
:label="t('settings.pages.connection.server-hostname.label')"
|
||||||
<div :class="['text-sm', 'font-medium', 'text-neutral-900', 'dark:text-neutral-100']">
|
:description="t('settings.pages.connection.server-hostname.description')"
|
||||||
{{ t('settings.pages.connection.server-hostname.label') }}
|
|
||||||
</div>
|
|
||||||
<div :class="['text-xs', 'text-neutral-500', 'dark:text-neutral-400']">
|
|
||||||
{{ t('settings.pages.connection.server-hostname.description') }}
|
|
||||||
</div>
|
|
||||||
<SelectTab
|
|
||||||
v-model="exposureMode"
|
|
||||||
size="sm"
|
|
||||||
:options="exposureModeOptions"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<FieldInput
|
|
||||||
v-if="showDesktopServerControls && showAdvancedHostname"
|
|
||||||
v-model="hostname"
|
|
||||||
:label="t('settings.pages.connection.server-hostname.advanced-label')"
|
|
||||||
:description="t('settings.pages.connection.server-hostname.advanced-description')"
|
|
||||||
placeholder="192.168.1.25"
|
|
||||||
/>
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #platform-specific>
|
||||||
<div
|
<div
|
||||||
v-if="showDesktopServerControls"
|
v-if="showDesktopServerControls"
|
||||||
:class="['max-w-full']"
|
:class="['max-w-full']"
|
||||||
@@ -151,6 +108,12 @@ watch(authTokenInputDebounced, (value) => {
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<FieldCheckbox
|
||||||
|
v-model="websocketTlsEnabled"
|
||||||
|
:label="t('settings.websocket-secure-enabled.title')"
|
||||||
|
:description="t('settings.websocket-secure-enabled.description')"
|
||||||
|
/>
|
||||||
|
|
||||||
<ServerChannelQrCard />
|
<ServerChannelQrCard />
|
||||||
</template>
|
</template>
|
||||||
</ConnectionSettings>
|
</ConnectionSettings>
|
||||||
|
|||||||
+15
-4
@@ -22,11 +22,13 @@ function handleToggleExpanded(visible: boolean, setVisible: (value: boolean) =>
|
|||||||
if (visible)
|
if (visible)
|
||||||
trackDevicePairingQrShown()
|
trackDevicePairingQrShown()
|
||||||
}
|
}
|
||||||
const { authToken, hostname, tlsConfig } = storeToRefs(useServerChannelSettingsStore())
|
const { appliedConfig } = storeToRefs(useServerChannelSettingsStore())
|
||||||
|
|
||||||
const loading = shallowRef(false)
|
const loading = shallowRef(false)
|
||||||
const payload = shallowRef<ServerChannelQrPayload>()
|
const payload = shallowRef<ServerChannelQrPayload>()
|
||||||
const errorMessage = shallowRef('')
|
const errorMessage = shallowRef('')
|
||||||
|
// Only the latest applied-config snapshot can update the rendered QR state.
|
||||||
|
let refreshRequestId = 0
|
||||||
|
|
||||||
const payloadText = computed(() => {
|
const payloadText = computed(() => {
|
||||||
if (!payload.value) {
|
if (!payload.value) {
|
||||||
@@ -63,22 +65,31 @@ const qrCodeSource = computed(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
async function refreshPayload() {
|
async function refreshPayload() {
|
||||||
|
const requestId = ++refreshRequestId
|
||||||
loading.value = true
|
loading.value = true
|
||||||
errorMessage.value = ''
|
errorMessage.value = ''
|
||||||
|
|
||||||
try {
|
try {
|
||||||
payload.value = await getServerChannelQrPayload()
|
const nextPayload = await getServerChannelQrPayload()
|
||||||
|
if (requestId !== refreshRequestId)
|
||||||
|
return
|
||||||
|
|
||||||
|
payload.value = nextPayload
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
|
if (requestId !== refreshRequestId)
|
||||||
|
return
|
||||||
|
|
||||||
payload.value = undefined
|
payload.value = undefined
|
||||||
errorMessage.value = errorMessageFrom(error) ?? t('settings.pages.connection.qr.errors.unavailable')
|
errorMessage.value = errorMessageFrom(error) ?? t('settings.pages.connection.qr.errors.unavailable')
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
loading.value = false
|
if (requestId === refreshRequestId)
|
||||||
|
loading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
watch([hostname, tlsConfig, authToken], () => {
|
watch(appliedConfig, () => {
|
||||||
void refreshPayload()
|
void refreshPayload()
|
||||||
}, { immediate: true })
|
}, { immediate: true })
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
import { describe, expect, it } from 'vitest'
|
|
||||||
|
|
||||||
import { hostnameFromExposureMode, serverChannelExposureModeFromHostname } from './server-channel-options'
|
|
||||||
|
|
||||||
describe('serverChannelExposureModeFromHostname', () => {
|
|
||||||
it('maps loopback hostnames to this-device mode', () => {
|
|
||||||
expect(serverChannelExposureModeFromHostname('127.0.0.1')).toBe('this-device')
|
|
||||||
expect(serverChannelExposureModeFromHostname('localhost')).toBe('this-device')
|
|
||||||
expect(serverChannelExposureModeFromHostname('::1')).toBe('this-device')
|
|
||||||
expect(serverChannelExposureModeFromHostname('')).toBe('this-device')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('maps wildcard bind hostnames to all mode', () => {
|
|
||||||
expect(serverChannelExposureModeFromHostname('0.0.0.0')).toBe('all')
|
|
||||||
expect(serverChannelExposureModeFromHostname('::')).toBe('all')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('maps custom hostnames to advanced mode', () => {
|
|
||||||
expect(serverChannelExposureModeFromHostname('192.168.1.25')).toBe('advanced')
|
|
||||||
expect(serverChannelExposureModeFromHostname('airi.local')).toBe('advanced')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('hostnameFromExposureMode', () => {
|
|
||||||
it('returns a secure loopback hostname for this-device mode', () => {
|
|
||||||
expect(hostnameFromExposureMode('this-device', '192.168.1.25')).toBe('127.0.0.1')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('returns an all-interfaces hostname for all mode', () => {
|
|
||||||
expect(hostnameFromExposureMode('all', '127.0.0.1')).toBe('0.0.0.0')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('uses the manual hostname for advanced mode and trims whitespace', () => {
|
|
||||||
expect(hostnameFromExposureMode('advanced', ' 192.168.1.25 ')).toBe('192.168.1.25')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('falls back to loopback when advanced mode is empty', () => {
|
|
||||||
expect(hostnameFromExposureMode('advanced', ' ')).toBe('127.0.0.1')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
export type ServerChannelExposureMode = 'this-device' | 'all' | 'advanced'
|
|
||||||
|
|
||||||
const LOOPBACK_HOSTNAMES = new Set(['', '127.0.0.1', 'localhost', '::1'])
|
|
||||||
const ALL_INTERFACE_HOSTNAMES = new Set(['0.0.0.0', '::'])
|
|
||||||
|
|
||||||
export function serverChannelExposureModeFromHostname(hostname?: string): ServerChannelExposureMode {
|
|
||||||
const normalizedHostname = hostname?.trim() ?? ''
|
|
||||||
|
|
||||||
if (LOOPBACK_HOSTNAMES.has(normalizedHostname))
|
|
||||||
return 'this-device'
|
|
||||||
|
|
||||||
if (ALL_INTERFACE_HOSTNAMES.has(normalizedHostname))
|
|
||||||
return 'all'
|
|
||||||
|
|
||||||
return 'advanced'
|
|
||||||
}
|
|
||||||
|
|
||||||
export function hostnameFromExposureMode(mode: ServerChannelExposureMode, manualHostname?: string) {
|
|
||||||
if (mode === 'all')
|
|
||||||
return '0.0.0.0'
|
|
||||||
|
|
||||||
if (mode === 'advanced') {
|
|
||||||
const normalizedHostname = manualHostname?.trim() ?? ''
|
|
||||||
return normalizedHostname || '127.0.0.1'
|
|
||||||
}
|
|
||||||
|
|
||||||
return '127.0.0.1'
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { createPinia, setActivePinia } from 'pinia'
|
import { createPinia, disposePinia, setActivePinia } from 'pinia'
|
||||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||||
import { nextTick, ref } from 'vue'
|
import { nextTick, ref } from 'vue'
|
||||||
|
|
||||||
@@ -50,15 +50,18 @@ vi.mock('vue-sonner', () => ({
|
|||||||
|
|
||||||
describe('useServerChannelSettingsStore', async () => {
|
describe('useServerChannelSettingsStore', async () => {
|
||||||
const { useServerChannelSettingsStore } = await import('./server-channel')
|
const { useServerChannelSettingsStore } = await import('./server-channel')
|
||||||
|
let pinia: ReturnType<typeof createPinia>
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
setActivePinia(createPinia())
|
pinia = createPinia()
|
||||||
|
setActivePinia(pinia)
|
||||||
invokeMocks.getConfig.mockClear()
|
invokeMocks.getConfig.mockClear()
|
||||||
invokeMocks.applyConfig.mockClear()
|
invokeMocks.applyConfig.mockClear()
|
||||||
toastError.mockClear()
|
toastError.mockClear()
|
||||||
})
|
})
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
disposePinia(pinia)
|
||||||
vi.restoreAllMocks()
|
vi.restoreAllMocks()
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -81,4 +84,56 @@ describe('useServerChannelSettingsStore', async () => {
|
|||||||
expect(toastError).toHaveBeenCalledWith('apply failed')
|
expect(toastError).toHaveBeenCalledWith('apply failed')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('publishes the applied config only after the main process accepts the change', async () => {
|
||||||
|
let resolveApply: ((config: {
|
||||||
|
authToken: string
|
||||||
|
hostname: string
|
||||||
|
tlsConfig: Record<string, never> | null
|
||||||
|
}) => void) | undefined
|
||||||
|
invokeMocks.applyConfig.mockImplementationOnce(async () => await new Promise((resolve) => {
|
||||||
|
resolveApply = resolve
|
||||||
|
}))
|
||||||
|
|
||||||
|
const store = useServerChannelSettingsStore()
|
||||||
|
|
||||||
|
await vi.waitFor(() => {
|
||||||
|
expect(store.appliedConfig).toEqual({
|
||||||
|
authToken: 'existing-token',
|
||||||
|
hostname: '127.0.0.1',
|
||||||
|
tlsConfig: null,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
store.hostname = '0.0.0.0'
|
||||||
|
await nextTick()
|
||||||
|
|
||||||
|
// ROOT CAUSE:
|
||||||
|
//
|
||||||
|
// The QR card watched the optimistic hostname and requested its payload
|
||||||
|
// while the main process still restarted the server with the new config.
|
||||||
|
// The request read the old loopback config and failed. The accepted config
|
||||||
|
// did not change the hostname again, so the QR card never retried.
|
||||||
|
// We fixed this by publishing the accepted config after the IPC request
|
||||||
|
// completes. The QR card watches that accepted snapshot.
|
||||||
|
expect(store.appliedConfig).toEqual({
|
||||||
|
authToken: 'existing-token',
|
||||||
|
hostname: '127.0.0.1',
|
||||||
|
tlsConfig: null,
|
||||||
|
})
|
||||||
|
|
||||||
|
resolveApply?.({
|
||||||
|
authToken: 'existing-token',
|
||||||
|
hostname: '0.0.0.0',
|
||||||
|
tlsConfig: null,
|
||||||
|
})
|
||||||
|
|
||||||
|
await vi.waitFor(() => {
|
||||||
|
expect(store.appliedConfig).toEqual({
|
||||||
|
authToken: 'existing-token',
|
||||||
|
hostname: '0.0.0.0',
|
||||||
|
tlsConfig: null,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { errorMessageFrom } from '@moeru/std'
|
|||||||
import { useElectronEventaInvoke } from '@proj-airi/electron-vueuse'
|
import { useElectronEventaInvoke } from '@proj-airi/electron-vueuse'
|
||||||
import { useLocalStorage } from '@vueuse/core'
|
import { useLocalStorage } from '@vueuse/core'
|
||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import { ref, watch } from 'vue'
|
import { shallowRef, watch } from 'vue'
|
||||||
import { toast } from 'vue-sonner'
|
import { toast } from 'vue-sonner'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -17,8 +17,9 @@ export const useServerChannelSettingsStore = defineStore('tamagotchi-server-chan
|
|||||||
const tlsConfig = useLocalStorage<{ cert?: string, key?: string, passphrase?: string } | null | undefined>('settings/server-channel/websocket-tls-config', null)
|
const tlsConfig = useLocalStorage<{ cert?: string, key?: string, passphrase?: string } | null | undefined>('settings/server-channel/websocket-tls-config', null)
|
||||||
const hostname = useLocalStorage<string>('settings/server-channel/hostname', '127.0.0.1')
|
const hostname = useLocalStorage<string>('settings/server-channel/hostname', '127.0.0.1')
|
||||||
const authToken = useLocalStorage<string>('settings/server-channel/auth-token', '')
|
const authToken = useLocalStorage<string>('settings/server-channel/auth-token', '')
|
||||||
const lastApplyError = ref<string | null>(null)
|
const lastApplyError = shallowRef<string | null>(null)
|
||||||
const syncingWithServer = ref(false)
|
const syncingWithServer = shallowRef(false)
|
||||||
|
const appliedConfig = shallowRef<ElectronServerChannelConfig>()
|
||||||
|
|
||||||
const getServerChannelConfig = useElectronEventaInvoke(electronGetServerChannelConfig)
|
const getServerChannelConfig = useElectronEventaInvoke(electronGetServerChannelConfig)
|
||||||
const applyServerChannelConfig = useElectronEventaInvoke(electronApplyServerChannelConfig)
|
const applyServerChannelConfig = useElectronEventaInvoke(electronApplyServerChannelConfig)
|
||||||
@@ -32,6 +33,9 @@ export const useServerChannelSettingsStore = defineStore('tamagotchi-server-chan
|
|||||||
if (config.authToken !== undefined) {
|
if (config.authToken !== undefined) {
|
||||||
authToken.value = config.authToken
|
authToken.value = config.authToken
|
||||||
}
|
}
|
||||||
|
// This snapshot changes only after the main process accepts the config.
|
||||||
|
// Consumers that read runtime state must not react to the optimistic fields above.
|
||||||
|
appliedConfig.value = config
|
||||||
syncingWithServer.value = false
|
syncingWithServer.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,6 +78,7 @@ export const useServerChannelSettingsStore = defineStore('tamagotchi-server-chan
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
lastApplyError,
|
lastApplyError,
|
||||||
|
appliedConfig,
|
||||||
refreshServerChannelConfig,
|
refreshServerChannelConfig,
|
||||||
tlsConfig,
|
tlsConfig,
|
||||||
hostname,
|
hostname,
|
||||||
|
|||||||
@@ -258,6 +258,7 @@ Basic text/number input.
|
|||||||
| `type` | `InputType?` | — | HTML input type |
|
| `type` | `InputType?` | — | HTML input type |
|
||||||
| `variant` | `'primary' \| 'secondary' \| 'primary-dimmed'` | `'primary'` | Visual variant |
|
| `variant` | `'primary' \| 'secondary' \| 'primary-dimmed'` | `'primary'` | Visual variant |
|
||||||
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Size |
|
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Size |
|
||||||
|
| `disabled` | `boolean?` | — | Disable editing and focus |
|
||||||
|
|
||||||
**v-model**: `modelValue: string | number`
|
**v-model**: `modelValue: string | number`
|
||||||
|
|
||||||
@@ -517,6 +518,7 @@ All Field components wrap a base input with `label`, `description`, and consiste
|
|||||||
| `description` | `string?` | — | Helper text |
|
| `description` | `string?` | — | Helper text |
|
||||||
| `placeholder` | `string?` | — | Placeholder |
|
| `placeholder` | `string?` | — | Placeholder |
|
||||||
| `required` | `boolean?` | — | Required indicator |
|
| `required` | `boolean?` | — | Required indicator |
|
||||||
|
| `disabled` | `boolean?` | — | Disable editing and focus |
|
||||||
| `type` | `InputType?` | — | Input type |
|
| `type` | `InputType?` | — | Input type |
|
||||||
| `autocomplete` | `string?` | — | Native autocomplete hint |
|
| `autocomplete` | `string?` | — | Native autocomplete hint |
|
||||||
| `inputClass` | `string?` | — | Custom input class |
|
| `inputClass` | `string?` | — | Custom input class |
|
||||||
|
|||||||
@@ -1470,39 +1470,29 @@ pages:
|
|||||||
description: Configure WebSocket server connection
|
description: Configure WebSocket server connection
|
||||||
title: Connection
|
title: Connection
|
||||||
websocket-url:
|
websocket-url:
|
||||||
description: Full address of the WebSocket server (e.g., ws://localhost:6121/ws)
|
description: The address that this app uses to connect to the local server.
|
||||||
label: WebSocket Server Address
|
label: Server Address
|
||||||
placeholder: ws://localhost:6121/ws
|
placeholder: ws://localhost:6121/ws
|
||||||
server-hostname:
|
server-hostname:
|
||||||
label: Expose On Network
|
label: Expose To All
|
||||||
description: >-
|
description: Allow other devices on the local network to connect to this server.
|
||||||
Choose whether the AIRI gateway only listens on this device or can be
|
|
||||||
reached from your local network.
|
|
||||||
advanced-label: Bind Hostname
|
|
||||||
advanced-description: >-
|
|
||||||
Use a specific hostname or IP address when you need manual network
|
|
||||||
binding.
|
|
||||||
options:
|
|
||||||
this-device: This device
|
|
||||||
all: All
|
|
||||||
advanced: Advanced
|
|
||||||
server-auth-token:
|
server-auth-token:
|
||||||
label: Auth Token
|
label: Pairing Token
|
||||||
description: >-
|
description: >-
|
||||||
Security token required by remote clients that connect to this gateway.
|
Other devices use this token to pair with this server. AIRI generates a
|
||||||
When left empty, AIRI generates a new token automatically.
|
token when this field is empty.
|
||||||
placeholder: Auto-generate
|
placeholder: Auto-generate
|
||||||
qr:
|
qr:
|
||||||
title: Connect from Stage Pocket
|
title: Pairing
|
||||||
description: >-
|
description: >-
|
||||||
Scan this QR code from Stage Pocket to try all reachable local network
|
Scan this QR code with the mobile app. The app tries each local address
|
||||||
addresses and save the first working one.
|
and saves the first working address.
|
||||||
refresh: Refresh
|
refresh: Refresh
|
||||||
image-alt: AIRI server channel connection QR code
|
image-alt: AIRI pairing QR code
|
||||||
candidates: Candidate addresses
|
candidates: Candidate addresses
|
||||||
token-hint: >-
|
token-hint: >-
|
||||||
The QR code includes the auth token so Stage Pocket can authenticate
|
The QR code includes the pairing token. Do not share the QR code
|
||||||
after connecting. Do not share it publicly.
|
publicly.
|
||||||
errors:
|
errors:
|
||||||
title: QR code unavailable
|
title: QR code unavailable
|
||||||
unavailable: Failed to prepare the connection QR code.
|
unavailable: Failed to prepare the connection QR code.
|
||||||
@@ -1844,10 +1834,9 @@ tachie:
|
|||||||
render-scale: Render Scale
|
render-scale: Render Scale
|
||||||
shadow: Theme-colored drop shadow
|
shadow: Theme-colored drop shadow
|
||||||
websocket-secure-enabled:
|
websocket-secure-enabled:
|
||||||
title: Enable Secure WebSocket (WSS)
|
title: Serve as Secure WebSocket (WSS)
|
||||||
description: >-
|
description: >-
|
||||||
Enable WSS (WebSocket Secure) to allow HTTPS connections for mobile (pocket)
|
Use WSS for secure mobile connections. AIRI creates a self-signed
|
||||||
in development mode. This will automatically generate a self-signed
|
|
||||||
certificate.
|
certificate.
|
||||||
wip:
|
wip:
|
||||||
title: Work in Progress
|
title: Work in Progress
|
||||||
|
|||||||
@@ -1415,34 +1415,23 @@ pages:
|
|||||||
description: 配置 WebSocket 服务器连接
|
description: 配置 WebSocket 服务器连接
|
||||||
title: 连接
|
title: 连接
|
||||||
websocket-url:
|
websocket-url:
|
||||||
description: WebSocket 服务器的完整地址(例如,ws://localhost:6121/ws)
|
description: 此应用连接本地服务器时使用的地址。
|
||||||
label: WebSocket 服务器地址
|
label: 服务器地址
|
||||||
placeholder: ws://localhost:6121/ws
|
placeholder: ws://localhost:6121/ws
|
||||||
server-hostname:
|
server-hostname:
|
||||||
label: 是否暴露在连接的网络下(WiFi,有线)
|
label: 向所有设备开放
|
||||||
description: >-
|
description: 允许本地网络中的其他设备连接此服务器。
|
||||||
选择是否只允许此设备与 AIRI 进行配对,或是也允许来自其他本地网络的设备进行配对
|
|
||||||
advanced-label: 会监听的 hostname
|
|
||||||
advanced-description: >-
|
|
||||||
当您需要手动绑定时,使用指定的主机名或 IP 地址。
|
|
||||||
options:
|
|
||||||
this-device: 仅此设备
|
|
||||||
all: 本地网络所有人
|
|
||||||
advanced: 高级配置
|
|
||||||
server-auth-token:
|
server-auth-token:
|
||||||
label: 认证凭据
|
label: 配对令牌
|
||||||
description: >-
|
description: 其他设备使用此令牌与服务器配对。如果此字段为空,AIRI 会生成一个令牌。
|
||||||
连接和配对需要安全令牌。如果留空,AIRI 自动生成一个新的令牌。
|
|
||||||
placeholder: 自动生成
|
placeholder: 自动生成
|
||||||
qr:
|
qr:
|
||||||
title: 从 Pocket(口袋)版配对
|
title: 配对
|
||||||
description: >-
|
description: 使用移动应用扫描此二维码。应用会尝试每个本地地址,并保存第一个可用地址。
|
||||||
从 Pocket(口袋)版扫描此二维码以进行配对
|
|
||||||
refresh: 刷新
|
refresh: 刷新
|
||||||
image-alt: AIRI 配对码
|
image-alt: AIRI 配对二维码
|
||||||
candidates: 备选连接地址
|
candidates: 备选连接地址
|
||||||
token-hint: >-
|
token-hint: 二维码包含配对令牌。请勿公开分享此二维码。
|
||||||
二维码包含了认证凭据,所以 Pocket(口袋)版可以自动配对,请不要公开分享此二维码。
|
|
||||||
errors:
|
errors:
|
||||||
title: 二维码暂不可用
|
title: 二维码暂不可用
|
||||||
unavailable: 无法生成配对二维码
|
unavailable: 无法生成配对二维码
|
||||||
@@ -1773,9 +1762,8 @@ tachie:
|
|||||||
render-scale: 渲染缩放
|
render-scale: 渲染缩放
|
||||||
shadow: 主题色动态阴影
|
shadow: 主题色动态阴影
|
||||||
websocket-secure-enabled:
|
websocket-secure-enabled:
|
||||||
title: 启用安全WebSocket (WSS)
|
title: 作为安全 WebSocket (WSS) 提供服务
|
||||||
description: >-
|
description: 使用 WSS 建立安全的移动端连接。AIRI 会创建一个自签名证书。
|
||||||
启用 WSS (WebSocket Secure) 以便在开发模式下允许移动设备(Pocket) 连接HTTPS 。这将自动生成一个自签名证书。
|
|
||||||
wip:
|
wip:
|
||||||
title: 正在开发中
|
title: 正在开发中
|
||||||
description: >-
|
description: >-
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { defineStageTamagotchiScenario } from '../context'
|
import { defineStageTamagotchiScenario } from '../context'
|
||||||
|
|
||||||
const websocketServerAddressPattern = /WebSocket Server Address|WebSocket 服务器地址/i
|
const websocketServerAddressPattern = /(?:WebSocket )?Server Address|(?:WebSocket )?服务器地址/i
|
||||||
|
|
||||||
export default defineStageTamagotchiScenario({
|
export default defineStageTamagotchiScenario({
|
||||||
id: 'settings-connection',
|
id: 'settings-connection',
|
||||||
|
|||||||
@@ -6,6 +6,13 @@ import { useI18n } from 'vue-i18n'
|
|||||||
|
|
||||||
import { useModsServerChannelStore } from '../../../../stores/mods/api/channel-server'
|
import { useModsServerChannelStore } from '../../../../stores/mods/api/channel-server'
|
||||||
|
|
||||||
|
const props = withDefaults(defineProps<{
|
||||||
|
/** Disables the server address field when the runtime owns its value. */
|
||||||
|
serverAddressDisabled?: boolean
|
||||||
|
}>(), {
|
||||||
|
serverAddressDisabled: false,
|
||||||
|
})
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const { websocketUrl } = storeToRefs(useModsServerChannelStore())
|
const { websocketUrl } = storeToRefs(useModsServerChannelStore())
|
||||||
|
|
||||||
@@ -28,11 +35,13 @@ const websocketUrlModel = computed({
|
|||||||
<!-- // TODO: Investigate iOS-only field desync on page entry. The persisted websocketUrl stays correct,
|
<!-- // TODO: Investigate iOS-only field desync on page entry. The persisted websocketUrl stays correct,
|
||||||
but the input can render as if it fell back to the default value when this page mounts. Keep this local
|
but the input can render as if it fell back to the default value when this page mounts. Keep this local
|
||||||
until the FieldInput/Input mount-time model sync is fully understood. -->
|
until the FieldInput/Input mount-time model sync is fully understood. -->
|
||||||
|
<slot name="before-server-address" />
|
||||||
<FieldInput
|
<FieldInput
|
||||||
v-model="websocketUrlModel"
|
v-model="websocketUrlModel"
|
||||||
:label="t('settings.pages.connection.websocket-url.label')"
|
:label="t('settings.pages.connection.websocket-url.label')"
|
||||||
:description="t('settings.pages.connection.websocket-url.description')"
|
:description="t('settings.pages.connection.websocket-url.description')"
|
||||||
:placeholder="t('settings.pages.connection.websocket-url.placeholder')"
|
:placeholder="t('settings.pages.connection.websocket-url.placeholder')"
|
||||||
|
:disabled="props.serverAddressDisabled"
|
||||||
/>
|
/>
|
||||||
<slot name="platform-specific" />
|
<slot name="platform-specific" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ const props = withDefaults(defineProps<{
|
|||||||
* through other means (e.g. all fields are required).
|
* through other means (e.g. all fields are required).
|
||||||
*/
|
*/
|
||||||
required?: boolean
|
required?: boolean
|
||||||
|
/** Disables editing and focus on the input. */
|
||||||
|
disabled?: boolean
|
||||||
/**
|
/**
|
||||||
* Suppress the `*` indicator next to the label without disabling the
|
* Suppress the `*` indicator next to the label without disabling the
|
||||||
* underlying HTML5 `required` validation. Useful for forms where every
|
* underlying HTML5 `required` validation. Useful for forms where every
|
||||||
@@ -60,6 +62,7 @@ const modelValue = defineModel<T>({ required: false })
|
|||||||
:placeholder="props.placeholder"
|
:placeholder="props.placeholder"
|
||||||
:autocomplete="props.autocomplete"
|
:autocomplete="props.autocomplete"
|
||||||
:required="props.required"
|
:required="props.required"
|
||||||
|
:disabled="props.disabled"
|
||||||
:class="props.inputClass"
|
:class="props.inputClass"
|
||||||
/>
|
/>
|
||||||
<Input
|
<Input
|
||||||
@@ -69,6 +72,7 @@ const modelValue = defineModel<T>({ required: false })
|
|||||||
:placeholder="props.placeholder"
|
:placeholder="props.placeholder"
|
||||||
:autocomplete="props.autocomplete"
|
:autocomplete="props.autocomplete"
|
||||||
:required="props.required"
|
:required="props.required"
|
||||||
|
:disabled="props.disabled"
|
||||||
:class="props.inputClass"
|
:class="props.inputClass"
|
||||||
/>
|
/>
|
||||||
<textarea
|
<textarea
|
||||||
@@ -78,6 +82,7 @@ const modelValue = defineModel<T>({ required: false })
|
|||||||
:placeholder="props.placeholder"
|
:placeholder="props.placeholder"
|
||||||
:autocomplete="props.autocomplete"
|
:autocomplete="props.autocomplete"
|
||||||
:required="props.required"
|
:required="props.required"
|
||||||
|
:disabled="props.disabled"
|
||||||
:class="[
|
:class="[
|
||||||
props.inputClass,
|
props.inputClass,
|
||||||
'focus:primary-300 dark:focus:primary-400/50 border-2 border-solid border-neutral-100 dark:border-neutral-900',
|
'focus:primary-300 dark:focus:primary-400/50 border-2 border-solid border-neutral-100 dark:border-neutral-900',
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ const props = withDefaults(defineProps<{
|
|||||||
* the consumer having to drop down to raw HTML.
|
* the consumer having to drop down to raw HTML.
|
||||||
*/
|
*/
|
||||||
required?: boolean
|
required?: boolean
|
||||||
|
/** Disables editing and focus on the native input. */
|
||||||
|
disabled?: boolean
|
||||||
}>(), {
|
}>(), {
|
||||||
variant: 'primary',
|
variant: 'primary',
|
||||||
size: 'md',
|
size: 'md',
|
||||||
@@ -79,6 +81,7 @@ const variantClasses: Record<InputVariant, Record<InputTheme, {
|
|||||||
v-model.number="modelValue"
|
v-model.number="modelValue"
|
||||||
:type="props.type || 'text'"
|
:type="props.type || 'text'"
|
||||||
:required="props.required"
|
:required="props.required"
|
||||||
|
:disabled="props.disabled"
|
||||||
:class="[
|
:class="[
|
||||||
'transition-all duration-200 ease-in-out',
|
'transition-all duration-200 ease-in-out',
|
||||||
'cursor-disabled:not-allowed',
|
'cursor-disabled:not-allowed',
|
||||||
@@ -91,6 +94,7 @@ const variantClasses: Record<InputVariant, Record<InputTheme, {
|
|||||||
v-model="modelValue"
|
v-model="modelValue"
|
||||||
:type="props.type || 'text'"
|
:type="props.type || 'text'"
|
||||||
:required="props.required"
|
:required="props.required"
|
||||||
|
:disabled="props.disabled"
|
||||||
:class="[
|
:class="[
|
||||||
'transition-all duration-200 ease-in-out',
|
'transition-all duration-200 ease-in-out',
|
||||||
'cursor-disabled:not-allowed',
|
'cursor-disabled:not-allowed',
|
||||||
|
|||||||
Generated
+233
-23
@@ -2127,7 +2127,7 @@ importers:
|
|||||||
version: 3.0.2(electron@41.2.1)
|
version: 3.0.2(electron@41.2.1)
|
||||||
'@electron-toolkit/tsconfig':
|
'@electron-toolkit/tsconfig':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 2.0.0(@types/node@25.6.0)
|
version: 2.0.0(@types/node@24.12.2)
|
||||||
'@electron-toolkit/utils':
|
'@electron-toolkit/utils':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 4.0.0(electron@41.2.1)
|
version: 4.0.0(electron@41.2.1)
|
||||||
@@ -2166,7 +2166,7 @@ importers:
|
|||||||
version: 3.1.0
|
version: 3.1.0
|
||||||
'@intlify/unplugin-vue-i18n':
|
'@intlify/unplugin-vue-i18n':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))
|
version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))
|
||||||
'@modelcontextprotocol/sdk':
|
'@modelcontextprotocol/sdk':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 1.30.0(@cfworker/json-schema@4.1.1)(zod@4.4.3)
|
version: 1.30.0(@cfworker/json-schema@4.1.1)(zod@4.4.3)
|
||||||
@@ -2202,10 +2202,10 @@ importers:
|
|||||||
version: link:../../packages/ui-transitions
|
version: link:../../packages/ui-transitions
|
||||||
'@proj-airi/unplugin-fetch':
|
'@proj-airi/unplugin-fetch':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 0.2.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
version: 0.2.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
'@proj-airi/unplugin-live2d-sdk':
|
'@proj-airi/unplugin-live2d-sdk':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 0.1.7(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
version: 0.1.7(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
'@types/audioworklet':
|
'@types/audioworklet':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 0.0.97
|
version: 0.0.97
|
||||||
@@ -2232,7 +2232,7 @@ importers:
|
|||||||
version: 2.10.3
|
version: 2.10.3
|
||||||
'@vitejs/plugin-vue':
|
'@vitejs/plugin-vue':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))
|
version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))
|
||||||
'@vue-macros/volar':
|
'@vue-macros/volar':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3))
|
version: 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3))
|
||||||
@@ -2265,7 +2265,7 @@ importers:
|
|||||||
version: 6.8.3
|
version: 6.8.3
|
||||||
electron-vite:
|
electron-vite:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 5.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
version: 5.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
get-port-please:
|
get-port-please:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 3.2.0
|
version: 3.2.0
|
||||||
@@ -2286,31 +2286,31 @@ importers:
|
|||||||
version: 2.2.6
|
version: 2.2.6
|
||||||
unocss-preset-scrollbar:
|
unocss-preset-scrollbar:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 4.0.0(unocss@66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))
|
version: 4.0.0(unocss@66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))
|
||||||
unplugin-info:
|
unplugin-info:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
unplugin-yaml:
|
unplugin-yaml:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
version: 4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
vite:
|
vite:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
vite-bundle-visualizer:
|
vite-bundle-visualizer:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 1.2.1(rolldown@1.0.0-rc.16)(rollup@4.60.1)
|
version: 1.2.1(rolldown@1.0.0-rc.16)(rollup@4.60.1)
|
||||||
vite-plugin-mkcert:
|
vite-plugin-mkcert:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 2.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
version: 2.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
vite-plugin-vue-devtools:
|
vite-plugin-vue-devtools:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))
|
version: 8.1.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))
|
||||||
vite-plugin-vue-layouts:
|
vite-plugin-vue-layouts:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 0.11.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))
|
version: 0.11.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))
|
||||||
vue-macros:
|
vue-macros:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3))
|
version: 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3))
|
||||||
vue-tsc:
|
vue-tsc:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 3.2.6(typescript@5.9.3)
|
version: 3.2.6(typescript@5.9.3)
|
||||||
@@ -21699,9 +21699,9 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
electron: 41.2.1
|
electron: 41.2.1
|
||||||
|
|
||||||
'@electron-toolkit/tsconfig@2.0.0(@types/node@25.6.0)':
|
'@electron-toolkit/tsconfig@2.0.0(@types/node@24.12.2)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 25.6.0
|
'@types/node': 24.12.2
|
||||||
|
|
||||||
'@electron-toolkit/utils@4.0.0(electron@41.2.1)':
|
'@electron-toolkit/utils@4.0.0(electron@41.2.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -22638,6 +22638,31 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
|
'@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))':
|
||||||
|
dependencies:
|
||||||
|
'@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.7.0))
|
||||||
|
'@intlify/bundle-utils': 11.0.7(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))
|
||||||
|
'@intlify/shared': 11.3.2
|
||||||
|
'@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.2)(@vue/compiler-dom@3.5.32)(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@rollup/pluginutils': 5.3.0(rollup@4.60.1)
|
||||||
|
'@typescript-eslint/scope-manager': 8.63.0
|
||||||
|
'@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3)
|
||||||
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
|
fast-glob: 3.3.3
|
||||||
|
pathe: 2.0.3
|
||||||
|
picocolors: 1.1.1
|
||||||
|
unplugin: 2.3.11
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
vue: 3.5.32(typescript@5.9.3)
|
||||||
|
optionalDependencies:
|
||||||
|
vue-i18n: 11.3.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@vue/compiler-dom'
|
||||||
|
- eslint
|
||||||
|
- rollup
|
||||||
|
- supports-color
|
||||||
|
- typescript
|
||||||
|
|
||||||
'@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))':
|
'@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.7.0))
|
'@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.7.0))
|
||||||
@@ -24768,11 +24793,35 @@ snapshots:
|
|||||||
|
|
||||||
'@proj-airi/unocss-preset-chromatic@1.1.1': {}
|
'@proj-airi/unocss-preset-chromatic@1.1.1': {}
|
||||||
|
|
||||||
|
'@proj-airi/unplugin-fetch@0.2.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||||
|
dependencies:
|
||||||
|
ofetch: 1.5.1
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
|
||||||
'@proj-airi/unplugin-fetch@0.2.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))':
|
'@proj-airi/unplugin-fetch@0.2.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
ofetch: 1.5.1
|
ofetch: 1.5.1
|
||||||
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
|
||||||
|
'@proj-airi/unplugin-live2d-sdk@0.1.7(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)':
|
||||||
|
dependencies:
|
||||||
|
ofetch: 1.5.1
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
yauzl: 3.3.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@types/node'
|
||||||
|
- '@vitejs/devtools'
|
||||||
|
- esbuild
|
||||||
|
- jiti
|
||||||
|
- less
|
||||||
|
- sass
|
||||||
|
- sass-embedded
|
||||||
|
- stylus
|
||||||
|
- sugarss
|
||||||
|
- terser
|
||||||
|
- tsx
|
||||||
|
- yaml
|
||||||
|
|
||||||
'@proj-airi/unplugin-live2d-sdk@0.1.7(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)':
|
'@proj-airi/unplugin-live2d-sdk@0.1.7(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
ofetch: 1.5.1
|
ofetch: 1.5.1
|
||||||
@@ -26507,6 +26556,12 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
|
'@vitejs/plugin-vue@6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))':
|
||||||
|
dependencies:
|
||||||
|
'@rolldown/pluginutils': 1.0.0-rc.13
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
vue: 3.5.32(typescript@5.9.3)
|
||||||
|
|
||||||
'@vitejs/plugin-vue@6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))':
|
'@vitejs/plugin-vue@6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@rolldown/pluginutils': 1.0.0-rc.13
|
'@rolldown/pluginutils': 1.0.0-rc.13
|
||||||
@@ -26782,6 +26837,15 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- vue
|
- vue
|
||||||
|
|
||||||
|
'@vue-macros/devtools@3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||||
|
dependencies:
|
||||||
|
sirv: 3.0.2
|
||||||
|
vue: 3.5.32(typescript@5.9.3)
|
||||||
|
optionalDependencies:
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- typescript
|
||||||
|
|
||||||
'@vue-macros/devtools@3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))':
|
'@vue-macros/devtools@3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
sirv: 3.0.2
|
sirv: 3.0.2
|
||||||
@@ -28936,7 +29000,7 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
electron-vite@5.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
electron-vite@5.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.0
|
'@babel/core': 7.29.0
|
||||||
'@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0)
|
'@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0)
|
||||||
@@ -28944,7 +29008,7 @@ snapshots:
|
|||||||
esbuild: 0.25.12
|
esbuild: 0.25.12
|
||||||
magic-string: 0.30.21
|
magic-string: 0.30.21
|
||||||
picocolors: 1.1.1
|
picocolors: 1.1.1
|
||||||
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -35104,11 +35168,6 @@ snapshots:
|
|||||||
'@unocss/preset-mini': 66.6.8
|
'@unocss/preset-mini': 66.6.8
|
||||||
unocss: 66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
unocss: 66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
|
|
||||||
unocss-preset-scrollbar@4.0.0(unocss@66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))):
|
|
||||||
dependencies:
|
|
||||||
'@unocss/preset-mini': 66.6.8
|
|
||||||
unocss: 66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
|
||||||
|
|
||||||
unocss@66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
unocss@66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@unocss/cli': 66.6.8
|
'@unocss/cli': 66.6.8
|
||||||
@@ -35175,6 +35234,14 @@ snapshots:
|
|||||||
unplugin: 2.3.11
|
unplugin: 2.3.11
|
||||||
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
|
||||||
|
unplugin-combine@2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
|
optionalDependencies:
|
||||||
|
esbuild: 0.27.2
|
||||||
|
rolldown: 1.0.0-rc.16
|
||||||
|
rollup: 4.60.1
|
||||||
|
unplugin: 2.3.11
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
|
||||||
unplugin-combine@2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
unplugin-combine@2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
esbuild: 0.27.2
|
esbuild: 0.27.2
|
||||||
@@ -35196,6 +35263,19 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
unplugin-info@1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
|
dependencies:
|
||||||
|
ci-info: 4.4.0
|
||||||
|
git-url-parse: 16.1.0
|
||||||
|
simple-git: 3.36.0
|
||||||
|
unplugin: 2.3.11
|
||||||
|
optionalDependencies:
|
||||||
|
esbuild: 0.27.2
|
||||||
|
rollup: 4.60.1
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
unplugin-info@1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
unplugin-info@1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
ci-info: 4.4.0
|
ci-info: 4.4.0
|
||||||
@@ -35289,6 +35369,17 @@ snapshots:
|
|||||||
rollup: 2.80.0
|
rollup: 2.80.0
|
||||||
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
|
||||||
|
unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
|
dependencies:
|
||||||
|
'@rollup/pluginutils': 5.3.0(rollup@4.60.1)
|
||||||
|
unplugin: 3.0.0
|
||||||
|
yaml: 2.8.3
|
||||||
|
optionalDependencies:
|
||||||
|
esbuild: 0.27.2
|
||||||
|
rolldown: 1.0.0-rc.16
|
||||||
|
rollup: 4.60.1
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
|
||||||
unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@rollup/pluginutils': 5.3.0(rollup@4.60.1)
|
'@rollup/pluginutils': 5.3.0(rollup@4.60.1)
|
||||||
@@ -35527,12 +35618,22 @@ snapshots:
|
|||||||
- rollup
|
- rollup
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
vite-dev-rpc@1.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
|
dependencies:
|
||||||
|
birpc: 2.9.0
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
vite-hot-client: 2.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
|
|
||||||
vite-dev-rpc@1.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
vite-dev-rpc@1.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
birpc: 2.9.0
|
birpc: 2.9.0
|
||||||
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
vite-hot-client: 2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
vite-hot-client: 2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
|
|
||||||
|
vite-hot-client@2.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
|
dependencies:
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
|
||||||
vite-hot-client@2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
vite-hot-client@2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
@@ -35578,6 +35679,21 @@ snapshots:
|
|||||||
- tsx
|
- tsx
|
||||||
- yaml
|
- yaml
|
||||||
|
|
||||||
|
vite-plugin-inspect@11.3.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
|
dependencies:
|
||||||
|
ansis: 4.2.0
|
||||||
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
|
error-stack-parser-es: 1.0.5
|
||||||
|
ohash: 2.0.11
|
||||||
|
open: 10.2.0
|
||||||
|
perfect-debounce: 2.1.0
|
||||||
|
sirv: 3.0.2
|
||||||
|
unplugin-utils: 0.3.1
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
vite-dev-rpc: 1.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
vite-plugin-inspect@11.3.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
vite-plugin-inspect@11.3.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
ansis: 4.2.0
|
ansis: 4.2.0
|
||||||
@@ -35609,6 +35725,13 @@ snapshots:
|
|||||||
- typescript
|
- typescript
|
||||||
- ws
|
- ws
|
||||||
|
|
||||||
|
vite-plugin-mkcert@2.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
|
dependencies:
|
||||||
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
|
supports-color: 10.2.2
|
||||||
|
undici: 8.1.0
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
|
||||||
vite-plugin-mkcert@2.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
vite-plugin-mkcert@2.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3(supports-color@10.2.2)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
@@ -35627,6 +35750,20 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
vite-plugin-vue-devtools@8.1.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)):
|
||||||
|
dependencies:
|
||||||
|
'@vue/devtools-core': 8.1.1(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue/devtools-kit': 8.1.1
|
||||||
|
'@vue/devtools-shared': 8.1.1
|
||||||
|
sirv: 3.0.2
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
vite-plugin-inspect: 11.3.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
|
vite-plugin-vue-inspector: 5.3.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@nuxt/kit'
|
||||||
|
- supports-color
|
||||||
|
- vue
|
||||||
|
|
||||||
vite-plugin-vue-devtools@8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)):
|
vite-plugin-vue-devtools@8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/devtools-core': 8.1.1(vue@3.5.32(typescript@5.9.3))
|
'@vue/devtools-core': 8.1.1(vue@3.5.32(typescript@5.9.3))
|
||||||
@@ -35641,6 +35778,21 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- vue
|
- vue
|
||||||
|
|
||||||
|
vite-plugin-vue-inspector@5.3.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
|
dependencies:
|
||||||
|
'@babel/core': 7.29.0
|
||||||
|
'@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.29.0)
|
||||||
|
'@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0)
|
||||||
|
'@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0)
|
||||||
|
'@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.29.0)
|
||||||
|
'@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.0)
|
||||||
|
'@vue/compiler-dom': 3.5.32
|
||||||
|
kolorist: 1.8.0
|
||||||
|
magic-string: 0.30.21
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
vite-plugin-vue-inspector@5.3.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
vite-plugin-vue-inspector@5.3.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.29.0
|
'@babel/core': 7.29.0
|
||||||
@@ -35656,6 +35808,16 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
vite-plugin-vue-layouts@0.11.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)):
|
||||||
|
dependencies:
|
||||||
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
|
fast-glob: 3.3.3
|
||||||
|
vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
|
||||||
|
vue: 3.5.32(typescript@5.9.3)
|
||||||
|
vue-router: 5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
vite-plugin-vue-layouts@0.11.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)):
|
vite-plugin-vue-layouts@0.11.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3(supports-color@10.2.2)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
@@ -35921,6 +36083,54 @@ snapshots:
|
|||||||
- vue-tsc
|
- vue-tsc
|
||||||
- webpack
|
- webpack
|
||||||
|
|
||||||
|
vue-macros@3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)):
|
||||||
|
dependencies:
|
||||||
|
'@vue-macros/better-define': 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/boolean-prop': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/chain-call': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/common': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/config': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/define-emit': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/define-models': 3.1.2(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/define-prop': 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/define-props': 3.1.2(@vue-macros/reactivity-transform@3.1.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/define-props-refs': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/define-render': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/define-slots': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/define-stylex': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/devtools': 3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
|
'@vue-macros/export-expose': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/export-props': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/export-render': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/hoist-static': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/jsx-directive': 3.1.2(typescript@5.9.3)
|
||||||
|
'@vue-macros/named-template': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/reactivity-transform': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/script-lang': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/setup-block': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/setup-component': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/setup-sfc': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/short-bind': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/short-emits': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/short-vmodel': 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
'@vue-macros/volar': 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3))
|
||||||
|
unplugin: 2.3.11
|
||||||
|
unplugin-combine: 2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))
|
||||||
|
unplugin-vue-define-options: 3.1.2(vue@3.5.32(typescript@5.9.3))
|
||||||
|
vue: 3.5.32(typescript@5.9.3)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@emnapi/core'
|
||||||
|
- '@emnapi/runtime'
|
||||||
|
- '@rspack/core'
|
||||||
|
- '@vueuse/core'
|
||||||
|
- esbuild
|
||||||
|
- rolldown
|
||||||
|
- rollup
|
||||||
|
- typescript
|
||||||
|
- vite
|
||||||
|
- vue-tsc
|
||||||
|
- webpack
|
||||||
|
|
||||||
vue-macros@3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)):
|
vue-macros@3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue-macros/better-define': 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vue@3.5.32(typescript@5.9.3))
|
'@vue-macros/better-define': 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vue@3.5.32(typescript@5.9.3))
|
||||||
|
|||||||
Reference in New Issue
Block a user