chore(stage-web): added Web Haptics devtools (#1736)

This commit is contained in:
Neko
2026-04-27 01:57:08 +08:00
committed by GitHub
parent 598f58b5f2
commit 06fd6d9223
4 changed files with 104 additions and 0 deletions
@@ -0,0 +1,77 @@
<script setup lang="ts">
import { Button } from '@proj-airi/ui'
import { useWebHaptics } from 'web-haptics/vue'
const presetButtons = [
{
name: 'success',
label: 'Success',
icon: 'i-solar:check-circle-bold-duotone',
variant: 'primary',
},
{
name: 'nudge',
label: 'Nudge',
icon: 'i-solar:hand-stars-bold-duotone',
variant: 'caution',
},
{
name: 'error',
label: 'Error',
icon: 'i-solar:danger-triangle-bold-duotone',
variant: 'danger',
},
{
name: 'buzz',
label: 'Buzz',
icon: 'i-solar:alarm-bold-duotone',
variant: 'secondary',
},
] as const
const { trigger, isSupported } = useWebHaptics({
debug: true,
})
</script>
<template>
<div :class="['min-h-full flex flex-col gap-4 pb-12']">
<div
:class="[
'inline-flex items-center gap-2 rounded-2xl border px-4 py-3 text-sm font-500 w-fit',
isSupported
? 'border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900/70 dark:bg-emerald-950/40 dark:text-emerald-200'
: 'border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900/70 dark:bg-amber-950/40 dark:text-amber-200',
]"
>
<span :class="[isSupported ? 'i-solar:check-circle-bold-duotone' : 'i-solar:danger-circle-bold-duotone']" />
<span>isSupported: {{ isSupported ? 'true' : 'false' }}</span>
</div>
<div :class="['flex flex-row gap-3']">
<div
v-for="preset in presetButtons"
:key="preset.name"
:class="['flex flex-1']"
>
<Button
block
size="md"
shape="rounded"
:variant="preset.variant"
:icon="preset.icon"
@click="trigger(preset.name)"
>
{{ preset.label }}
</Button>
</div>
</div>
</div>
</template>
<route lang="yaml">
meta:
layout: settings
title: Web Haptics
subtitleKey: tamagotchi.settings.devtools.title
</route>
@@ -74,6 +74,12 @@ const menu = computed(() => [
icon: 'i-solar:transfer-horizontal-bold-duotone',
to: '/devtools/websocket-inspector',
},
{
title: 'Web Haptics',
description: 'Trigger built-in haptic presets and custom pulse patterns',
icon: 'i-solar:bolt-circle-bold-duotone',
to: '/devtools/web-haptics',
},
{
title: 'Plugin Host Debug',
description: 'Inspect plugin host registry and capability state (desktop runtime)',
+6
View File
@@ -34,18 +34,24 @@
],
"scripts": {
"build": "tsdown",
"eval:run": "vieval run --config ./vieval.config.ts",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@moeru/std": "catalog:",
"@proj-airi/pipelines-audio": "workspace:^",
"@proj-airi/server-sdk": "workspace:^",
"@proj-airi/server-shared": "workspace:^",
"@xsai-ext/providers": "catalog:",
"@xsai/generate-speech": "catalog:",
"@xsai/generate-text": "catalog:",
"@xsai/model": "catalog:",
"@xsai/shared": "catalog:",
"@xsai/shared-chat": "catalog:",
"@xsai/stream-text": "catalog:",
"@xsai/tool": "catalog:",
"nanoid": "^5.1.9",
"vieval": "catalog:",
"xsschema": "catalog:",
"zod": "^4.3.6"
},
+15
View File
@@ -2414,6 +2414,9 @@ importers:
'@moeru/std':
specifier: 'catalog:'
version: 0.1.0-beta.17
'@proj-airi/pipelines-audio':
specifier: workspace:^
version: link:../pipelines-audio
'@proj-airi/server-sdk':
specifier: workspace:^
version: link:../server-sdk
@@ -2423,9 +2426,18 @@ importers:
'@xsai-ext/providers':
specifier: 'catalog:'
version: 0.5.0-beta.2
'@xsai/generate-speech':
specifier: 'catalog:'
version: 0.5.0-beta.2
'@xsai/generate-text':
specifier: 'catalog:'
version: 0.5.0-beta.2(patch_hash=306bfb723913596b334140f0d6fa48063f336e3b44024efc1d72bf60d54b15e6)
'@xsai/model':
specifier: 'catalog:'
version: 0.5.0-beta.2
'@xsai/shared':
specifier: 'catalog:'
version: 0.5.0-beta.2
'@xsai/shared-chat':
specifier: 'catalog:'
version: 0.5.0-beta.2(patch_hash=26f2819b987245ec85f216b821ddf73aeb28fd7e611238a2d37250e42f838a01)
@@ -2438,6 +2450,9 @@ importers:
nanoid:
specifier: ^5.1.9
version: 5.1.9
vieval:
specifier: 'catalog:'
version: 0.0.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(chokidar@5.0.0)(dotenv@17.4.2)(esbuild@0.27.2)(giget@2.0.0)(jiti@2.6.1)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(less@4.6.4)(magicast@0.5.2)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)
xsschema:
specifier: 'catalog:'
version: 0.5.0-beta.2(@valibot/to-json-schema@1.0.0-rc.0(valibot@1.3.1(typescript@5.9.3)))(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6)