diff --git a/.github/workflows/deploy-huggingface-spaces.yml b/.github/workflows/deploy-huggingface-spaces.yml index e43946e9b..70662ac2a 100644 --- a/.github/workflows/deploy-huggingface-spaces.yml +++ b/.github/workflows/deploy-huggingface-spaces.yml @@ -15,18 +15,6 @@ jobs: fetch-depth: 0 lfs: true - - run: |- - git clone https://$HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/moeru-ai/moonshine-web-vue --depth 1 apps/moonshine-web/dist - env: - HF_TOKEN: ${{ secrets.HF_TOKEN }} - HF_USERNAME: ${{ secrets.HF_USERNAME }} - - - run: |- - git clone https://$HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/moeru-ai/whisper-webgpu-vue --depth 1 apps/whisper-webgpu/dist - env: - HF_TOKEN: ${{ secrets.HF_TOKEN }} - HF_USERNAME: ${{ secrets.HF_USERNAME }} - - run: |- git clone https://$HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/moeru-ai/airi --depth 1 apps/stage-web/dist env: @@ -45,48 +33,6 @@ jobs: TARGET_HUGGINGFACE_SPACE: 'true' VITE_APP_TARGET_HUGGINGFACE_SPACE: 'true' - - id: moonshine_web_diff - working-directory: ./apps/moonshine-web/dist - run: |- - git lfs ls-files --all - git add . - if [[ -n $(git status --porcelain) ]]; then - echo "changes=true" >> "$GITHUB_OUTPUT"; - fi - - - if: steps.moonshine_web_diff.outputs.changes == 'true' - working-directory: ./apps/moonshine-web/dist - env: - HF_TOKEN: ${{ secrets.HF_TOKEN }} - HF_USERNAME: ${{ secrets.HF_USERNAME }} - run: |- - git config --local user.email "neko@ayaka.moe" - git config --local user.name "Neko Ayaka" - git commit -m "release: build ${{ github.sha }}" - git lfs push origin main --all - git push -f - - - id: whisper_webgpu_diff - working-directory: ./apps/whisper-webgpu/dist - run: |- - git lfs ls-files --all - git add . - if [[ -n $(git status --porcelain) ]]; then - echo "changes=true" >> "$GITHUB_OUTPUT"; - fi - - - if: steps.whisper_webgpu_diff.outputs.changes == 'true' - working-directory: ./apps/whisper-webgpu/dist - env: - HF_TOKEN: ${{ secrets.HF_TOKEN }} - HF_USERNAME: ${{ secrets.HF_USERNAME }} - run: |- - git config --local user.email "neko@ayaka.moe" - git config --local user.name "Neko Ayaka" - git commit -m "release: build ${{ github.sha }}" - git lfs push origin main --all - git push -f - - id: airi_diff working-directory: ./apps/stage-web/dist run: |- diff --git a/apps/moonshine-web/.dockerignore b/apps/moonshine-web/.dockerignore deleted file mode 100644 index f06235c46..000000000 --- a/apps/moonshine-web/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist diff --git a/apps/moonshine-web/Dockerfile b/apps/moonshine-web/Dockerfile deleted file mode 100644 index 3e3a684a8..000000000 --- a/apps/moonshine-web/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM node:20-alpine as build-stage - -WORKDIR /app -RUN corepack enable - -COPY .npmrc package.json pnpm-lock.yaml ./ -RUN --mount=type=cache,id=pnpm-store,target=/root/.pnpm-store \ - pnpm install --frozen-lockfile - -COPY . . -RUN pnpm build - -FROM nginx:stable-alpine as production-stage - -COPY --from=build-stage /app/dist /usr/share/nginx/html -EXPOSE 80 - -CMD ["nginx", "-g", "daemon off;"] diff --git a/apps/moonshine-web/README.md b/apps/moonshine-web/README.md deleted file mode 100644 index 1a6398b77..000000000 --- a/apps/moonshine-web/README.md +++ /dev/null @@ -1,57 +0,0 @@ -

Moonshine Web (Vue)

- -

- [Try it] -

- -> Heavily inspired by [Realtime in-browser speech recognition](https://huggingface.co/spaces/webml-community/moonshine-web) - -# Moonshine Web - -A simple Vue + Vite application for running [Moonshine Base](https://huggingface.co/onnx-community/moonshine-base-ONNX), a powerful speech-to-text model optimized for fast and accurate automatic speech recognition (ASR) on resource-constrained devices. It runs locally in the browser using Transformers.js and WebGPU-acceleration (or WASM as a fallback). - -## Getting Started - -Follow the steps below to set up and run the application. - -### 1. Clone the Repository - -Clone the examples repository from GitHub: - -```sh -git clone https://github.com/moeru-ai/airi.git -``` - -### 2. Navigate to the Project Directory - -Change your working directory to the `moonshine-web` folder: - -```sh -cd packages/moonshine-web -``` - -### 3. Install Dependencies - -Install the necessary dependencies using npm: - -```sh -npm i -``` - -### 4. Run the Development Server - -Start the development server: - -```sh -npm run dev -``` - -The application should now be running locally. Open your browser and go to `http://localhost:5175` to see it in action. - -## Acknowledgements - -The audio visualizer was adapted from Wael Yasmina's [amazing tutorial](https://waelyasmina.net/articles/how-to-create-a-3d-audio-visualizer-using-three-js/). - -Great thanks to what Xenova have done. - -> [Source code](https://github.com/huggingface/transformers.js-examples/tree/38a883dd465d70d7368b86b95aa0678895ca4e83/moonshine-web) diff --git a/apps/moonshine-web/index.html b/apps/moonshine-web/index.html deleted file mode 100644 index 8c9a99585..000000000 --- a/apps/moonshine-web/index.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - Moonshine Web (Vue) - - - - - - - -
- - - - diff --git a/apps/moonshine-web/netlify.toml b/apps/moonshine-web/netlify.toml deleted file mode 100755 index f47c2b2f6..000000000 --- a/apps/moonshine-web/netlify.toml +++ /dev/null @@ -1,19 +0,0 @@ -[build] -base = "/" -command = "pnpm -F @proj-airi/moonshine-web... run build" -publish = "/apps/moonshine-web/dist" - -[build.environment] -NODE_VERSION = "23" - -[[redirects]] -from = "/assets/*" -to = "/assets/:splat" -status = 200 -force = true - -[[redirects]] -from = "/*" -to = "/index.html" -status = 200 -force = false diff --git a/apps/moonshine-web/package.json b/apps/moonshine-web/package.json deleted file mode 100644 index 013b1130f..000000000 --- a/apps/moonshine-web/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@proj-airi/moonshine-web", - "type": "module", - "private": true, - "description": "Yet another WebGPU based STT + VAD with Moonshine model re-implemented", - "author": { - "name": "Neko Ayaka", - "email": "neko@ayaka.moe", - "url": "https://github.com/nekomeowww" - }, - "license": "MIT", - "scripts": { - "build": "vite build", - "dev": "vite --port 5175", - "lint": "eslint .", - "preview": "vite preview", - "typecheck": "vue-tsc --noEmit" - }, - "dependencies": { - "@tresjs/core": "^4.3.3", - "@unocss/reset": "^66.1.0-beta.3", - "@vueuse/core": "^12.8.2", - "@vueuse/motion": "^2.2.6", - "ofetch": "^1.4.1", - "three": "^0.174.0", - "vue": "^3.5.13" - }, - "devDependencies": { - "@huggingface/transformers": "^3.4.0", - "@types/audioworklet": "^0.0.71", - "@types/three": "^0.174.0", - "@vitejs/plugin-vue": "^5.2.1", - "@webgpu/types": "^0.1.55", - "hfup": "workspace:^", - "vue-tsc": "^2.2.8" - } -} diff --git a/apps/moonshine-web/public/banner.png b/apps/moonshine-web/public/banner.png deleted file mode 100644 index 37f81a37d..000000000 Binary files a/apps/moonshine-web/public/banner.png and /dev/null differ diff --git a/apps/moonshine-web/public/logo.png b/apps/moonshine-web/public/logo.png deleted file mode 100644 index 084b9f637..000000000 Binary files a/apps/moonshine-web/public/logo.png and /dev/null differ diff --git a/apps/moonshine-web/src/App.vue b/apps/moonshine-web/src/App.vue deleted file mode 100644 index 10cc67e7c..000000000 --- a/apps/moonshine-web/src/App.vue +++ /dev/null @@ -1,280 +0,0 @@ - - - - - diff --git a/apps/moonshine-web/src/components/AnimatedMesh.vue b/apps/moonshine-web/src/components/AnimatedMesh.vue deleted file mode 100644 index ee323aa76..000000000 --- a/apps/moonshine-web/src/components/AnimatedMesh.vue +++ /dev/null @@ -1,62 +0,0 @@ - - - diff --git a/apps/moonshine-web/src/components/BloomScene.vue b/apps/moonshine-web/src/components/BloomScene.vue deleted file mode 100644 index 91bbb2daa..000000000 --- a/apps/moonshine-web/src/components/BloomScene.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - diff --git a/apps/moonshine-web/src/constants/index.ts b/apps/moonshine-web/src/constants/index.ts deleted file mode 100644 index 4d67fe4c0..000000000 --- a/apps/moonshine-web/src/constants/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Sample rate of the audio. - * Coindicentally, this is the same for both models (Moonshine and Silero VAD) - */ -export const SAMPLE_RATE = 16000 -export const SAMPLE_RATE_MS = SAMPLE_RATE / 1000 - -/** - * Probabilities ABOVE this value are considered as SPEECH - */ -export const SPEECH_THRESHOLD = 0.3 - -/** - * If current state is SPEECH, and the probability of the next state - * is below this value, it is considered as NON-SPEECH. - */ -export const EXIT_THRESHOLD = 0.1 - -/** - * After each speech chunk, wait for at least this amount of silence - * before considering the next chunk as a new speech chunk - */ -export const MIN_SILENCE_DURATION_MS = 400 -export const MIN_SILENCE_DURATION_SAMPLES - = MIN_SILENCE_DURATION_MS * SAMPLE_RATE_MS - -/** - * Pad the speech chunk with this amount each side - */ -export const SPEECH_PAD_MS = 80 -export const SPEECH_PAD_SAMPLES = SPEECH_PAD_MS * SAMPLE_RATE_MS - -/** - * Final speech chunks below this duration are discarded - */ -export const MIN_SPEECH_DURATION_SAMPLES = 250 * SAMPLE_RATE_MS // 250 ms - -/** - * Maximum duration of audio that can be handled by Moonshine - */ -export const MAX_BUFFER_DURATION = 30 - -/** - * Size of the incoming buffers - */ -export const NEW_BUFFER_SIZE = 512 - -/** - * The number of previous buffers to keep, to ensure the audio is padded correctly - */ -export const MAX_NUM_PREV_BUFFERS = Math.ceil( - SPEECH_PAD_SAMPLES / NEW_BUFFER_SIZE, -) diff --git a/apps/moonshine-web/src/libs/processor.ts b/apps/moonshine-web/src/libs/processor.ts deleted file mode 100644 index cbd1eed57..000000000 --- a/apps/moonshine-web/src/libs/processor.ts +++ /dev/null @@ -1,40 +0,0 @@ -const MIN_CHUNK_SIZE = 512 -let globalPointer = 0 -const globalBuffer = new Float32Array(MIN_CHUNK_SIZE) - -class VADProcessor extends AudioWorkletProcessor { - process(inputs: Float32Array[][], _outputs: Float32Array[][], _parameters: Record): boolean { - const buffer = inputs[0][0] - if (!buffer) - return false // buffer is null when the stream ends - - if (buffer.length > MIN_CHUNK_SIZE) { - // If the buffer is larger than the minimum chunk size, send the entire buffer - this.port.postMessage({ buffer }) - } - else { - const remaining = MIN_CHUNK_SIZE - globalPointer - if (buffer.length >= remaining) { - // If the buffer is larger than (or equal to) the remaining space in the global buffer, copy the remaining space - globalBuffer.set(buffer.subarray(0, remaining), globalPointer) - - // Send the global buffer - this.port.postMessage({ buffer: globalBuffer }) - - // Reset the global buffer and set the remaining buffer - globalBuffer.fill(0) - globalBuffer.set(buffer.subarray(remaining), 0) - globalPointer = buffer.length - remaining - } - else { - // If the buffer is smaller than the remaining space in the global buffer, copy the buffer to the global buffer - globalBuffer.set(buffer, globalPointer) - globalPointer += buffer.length - } - } - - return true // Keep the processor alive - } -} - -registerProcessor('vad-processor', VADProcessor) diff --git a/apps/moonshine-web/src/libs/types.ts b/apps/moonshine-web/src/libs/types.ts deleted file mode 100644 index ebafabdef..000000000 --- a/apps/moonshine-web/src/libs/types.ts +++ /dev/null @@ -1,59 +0,0 @@ -export enum MessageType { - Status = 'status', - Output = 'output', - Info = 'info', - Request = 'request', - Error = 'error', - Load = 'load', -} - -export enum MessageStatus { - RecordingStart = 'recording_start', - RecordingEnd = 'recording_end', - Ready = 'ready', -} - -export enum Duration { - UntilNext = 'until_next', -} - -export interface MessageEventStatus { - type: MessageType.Status - status: MessageStatus - message: string - duration?: Duration -} - -export interface MessageEventOutput { - type: MessageType.Output - buffer: Float32Array - message: string - start: number - end: number - duration: number -} - -export interface MessageEventInfo { - type: MessageType.Info - message: string - duration?: Duration.UntilNext -} - -export interface MessageEventBufferRequest { - type: MessageType.Request - buffer: Float32Array - message?: string -} - -export interface MessageEventError { - type: MessageType.Error - error: unknown - message?: string -} - -export interface MessageEventLoad { - type: MessageType.Load - message?: string -} - -export type MessageEvent = MessageEventError | MessageEventStatus | MessageEventOutput | MessageEventInfo | MessageEventBufferRequest | MessageEventLoad diff --git a/apps/moonshine-web/src/libs/worker.ts b/apps/moonshine-web/src/libs/worker.ts deleted file mode 100644 index 3d81df2d5..000000000 --- a/apps/moonshine-web/src/libs/worker.ts +++ /dev/null @@ -1,275 +0,0 @@ -/* eslint-disable no-restricted-globals */ -import type { AutomaticSpeechRecognitionPipeline, PreTrainedModel } from '@huggingface/transformers' -import type { MessageEvent as InternalMessageEvent, MessageEventBufferRequest, MessageEventError, MessageEventInfo, MessageEventOutput, MessageEventStatus } from './types' - -import { AutoModel, pipeline, Tensor } from '@huggingface/transformers' - -import { - EXIT_THRESHOLD, - MAX_BUFFER_DURATION, - MAX_NUM_PREV_BUFFERS, - MIN_SILENCE_DURATION_SAMPLES, - MIN_SPEECH_DURATION_SAMPLES, - SAMPLE_RATE, - SPEECH_PAD_SAMPLES, - SPEECH_THRESHOLD, -} from '../constants' -import { supportsWebGPU } from '../utils' -import { Duration, MessageStatus, MessageType } from './types' - -export type DType = Record>[2]['dtype']>, string>[string]> -export type Device = Extract>[2]['device']>, Record>, 'webgpu' | 'wasm'> -export type PretrainedConfig = NonNullable[1]>['config'] - -// Load models -let silero_vad: PreTrainedModel -let transcriber: AutomaticSpeechRecognitionPipeline - -// Transformers.js currently doesn't support simultaneous inference, -// so we need to chain the inference promises. -let inferenceChain = Promise.resolve() - -// Global audio buffer to store incoming audio -const BUFFER = new Float32Array(MAX_BUFFER_DURATION * SAMPLE_RATE) -let bufferPointer = 0 - -// Initial state for VAD -const sr = new Tensor('int64', [SAMPLE_RATE], []) -let state = new Tensor('float32', new Float32Array(2 * 1 * 128), [2, 1, 128]) - -// Whether we are in the process of adding audio to the buffer -let isRecording = false - -// Track the number of samples after the last speech chunk -let postSpeechSamples = 0 - -const DEVICE_DTYPE_CONFIGS: Record = { - webgpu: { - encoder_model: 'fp32', - decoder_model_merged: 'q4', - }, - wasm: { - encoder_model: 'fp32', - decoder_model_merged: 'q8', - }, -} - -async function newVADModel() { - // Load models - return await AutoModel.from_pretrained( - 'onnx-community/silero-vad', - { - config: { model_type: 'custom' } as PretrainedConfig, - dtype: 'fp32', // Full-precision - }, - ).catch((error) => { - self.postMessage({ type: MessageType.Error, error } satisfies MessageEventError) - throw error - }) -} - -async function newAutomaticSpeechRecognitionPipeline(device: Device) { - return await pipeline( - 'automatic-speech-recognition', - 'onnx-community/moonshine-base-ONNX', // or "onnx-community/whisper-tiny.en", - { - device, - dtype: DEVICE_DTYPE_CONFIGS[device], - }, - ).catch((error) => { - self.postMessage({ type: MessageType.Error, error } satisfies MessageEventError) - throw error - }) -} - -/** - * Perform Voice Activity Detection (VAD) - * @param {Float32Array} buffer The new audio buffer - * @returns {Promise} `true` if the buffer is speech, `false` otherwise. - */ -async function vad(buffer: Float32Array) { - if (silero_vad === undefined) { - console.warn('VAD model not loaded yet') - return false - } - - const input = new Tensor('float32', buffer, [1, buffer.length]) - const { stateN, output } = await (inferenceChain = inferenceChain.then(_ => silero_vad({ input, sr, state }))) - state = stateN // Update state - const isSpeech = output.data[0] - - // Use heuristics to determine if the buffer is speech or not - return ( - // Case 1: We are above the threshold (definitely speech) - isSpeech > SPEECH_THRESHOLD - // Case 2: We are in the process of recording, and the probability is above the negative (exit) threshold - || (isRecording && isSpeech >= EXIT_THRESHOLD) - ) -} - -/** - * Transcribe the audio buffer - * @param {Float32Array} buffer The audio buffer - * @param {object} data Additional data - * @param {number} data.start The start time of the speech segment - * @param {number} data.end The end time of the speech segment - * @param {number} data.duration The duration of the speech segment - */ -async function transcribe(buffer: Float32Array, data: { start: number, end: number, duration: number }) { - if (transcriber === undefined) { - console.warn('Transcriber model not loaded yet') - return - } - - // @ts-expect-error - chain - const { text }: { text: string } = await (inferenceChain = inferenceChain.then(_ => transcriber(buffer))) - self.postMessage({ type: MessageType.Output, buffer, message: text, ...data } satisfies MessageEventOutput) -} - -function reset(offset = 0) { - self.postMessage({ - type: MessageType.Status, - status: MessageStatus.RecordingEnd, - message: 'Transcribing...', - duration: Duration.UntilNext, - } satisfies MessageEventStatus) - - BUFFER.fill(0, offset) - bufferPointer = offset - isRecording = false - postSpeechSamples = 0 -} - -const prevBuffers: Array> = [] - -function dispatchForTranscriptionAndResetAudioBuffer(overflow?: Float32Array) { -// Get start and end time of the speech segment, minus the padding - const now = Date.now() - const end - = now - ((postSpeechSamples + SPEECH_PAD_SAMPLES) / SAMPLE_RATE) * 1000 - const start = end - (bufferPointer / SAMPLE_RATE) * 1000 - const duration = end - start - const overflowLength = overflow?.length ?? 0 - - // Send the audio buffer to the worker - const buffer = BUFFER.slice(0, bufferPointer + SPEECH_PAD_SAMPLES) - - const prevLength = prevBuffers.reduce((acc, b) => acc + b.length, 0) - const paddedBuffer = new Float32Array(prevLength + buffer.length) - let offset = 0 - for (const prev of prevBuffers) { - paddedBuffer.set(prev, offset) - offset += prev.length - } - - paddedBuffer.set(buffer, offset) - transcribe(paddedBuffer, { start, end, duration }) - - // Set overflow (if present) and reset the rest of the audio buffer - if (overflow) { - BUFFER.set(overflow, 0) - } - - reset(overflowLength) -} - -async function load() { - const device = (await supportsWebGPU()) ? 'webgpu' : 'wasm' - self.postMessage({ type: MessageType.Info, message: `Using device: "${device}"` } satisfies MessageEventInfo) - self.postMessage({ - type: MessageType.Info, - message: 'Loading models...', - duration: Duration.UntilNext, - } satisfies MessageEventInfo) - - // Load models - silero_vad = await newVADModel() - transcriber = await newAutomaticSpeechRecognitionPipeline(device) - - await transcriber(new Float32Array(SAMPLE_RATE)) // Compile shaders - self.postMessage({ type: 'status', status: 'ready', message: 'Ready!' }) - - self.onmessage = async (event) => { - const { buffer } = event.data as MessageEventBufferRequest - - const wasRecording = isRecording // Save current state - const isSpeech = await vad(buffer) - - if (!wasRecording && !isSpeech) { - // We are not recording, and the buffer is not speech, - // so we will probably discard the buffer. So, we insert - // into a FIFO queue with maximum size of PREV_BUFFER_SIZE - if (prevBuffers.length >= MAX_NUM_PREV_BUFFERS) { - // If the queue is full, we discard the oldest buffer - prevBuffers.shift() - } - - prevBuffers.push(buffer) - return - } - - const remaining = BUFFER.length - bufferPointer - if (buffer.length >= remaining) { - // The buffer is larger than (or equal to) the remaining space in the global buffer, - // so we perform transcription and copy the overflow to the global buffer - BUFFER.set(buffer.subarray(0, remaining), bufferPointer) - bufferPointer += remaining - - // Dispatch the audio buffer - const overflow = buffer.subarray(remaining) - dispatchForTranscriptionAndResetAudioBuffer(overflow) - return - } - else { - // The buffer is smaller than the remaining space in the global buffer, - // so we copy it to the global buffer - BUFFER.set(buffer, bufferPointer) - bufferPointer += buffer.length - } - - if (isSpeech) { - if (!isRecording) { - // Indicate start of recording - self.postMessage({ - type: MessageType.Status, - status: MessageStatus.RecordingStart, - message: 'Listening...', - duration: Duration.UntilNext, - } satisfies MessageEventStatus) - } - // Start or continue recording - isRecording = true - postSpeechSamples = 0 // Reset the post-speech samples - return - } - - postSpeechSamples += buffer.length - - // At this point we're confident that we were recording (wasRecording === true), but the latest buffer is not speech. - // So, we check whether we have reached the end of the current audio chunk. - if (postSpeechSamples < MIN_SILENCE_DURATION_SAMPLES) { - // There was a short pause, but not long enough to consider the end of a speech chunk - // (e.g., the speaker took a breath), so we continue recording - return - } - - if (bufferPointer < MIN_SPEECH_DURATION_SAMPLES) { - // The entire buffer (including the new chunk) is smaller than the minimum - // duration of a speech chunk, so we can safely discard the buffer. - reset() - return - } - - dispatchForTranscriptionAndResetAudioBuffer() - } -} - -self.addEventListener('message', (event) => { - const { type } = event.data as InternalMessageEvent - - switch (type) { - case MessageType.Load: - load() - break - } -}) diff --git a/apps/moonshine-web/src/main.ts b/apps/moonshine-web/src/main.ts deleted file mode 100644 index af0b83f13..000000000 --- a/apps/moonshine-web/src/main.ts +++ /dev/null @@ -1,14 +0,0 @@ -import Tres from '@tresjs/core' -import { MotionPlugin } from '@vueuse/motion' -import { createApp } from 'vue' - -import App from './App.vue' - -import '@unocss/reset/tailwind.css' -import './styles/main.css' -import 'uno.css' - -createApp(App) - .use(MotionPlugin) - .use(Tres) - .mount('#app') diff --git a/apps/moonshine-web/src/styles/main.css b/apps/moonshine-web/src/styles/main.css deleted file mode 100644 index 47e10875f..000000000 --- a/apps/moonshine-web/src/styles/main.css +++ /dev/null @@ -1,18 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap'); - -* { - font-family: 'Poppins', sans-serif; -} - -html { - overflow: hidden; -} - -html, -body, -#app { - margin: 0; - padding: 0; - height: 100%; - width: 100%; -} diff --git a/apps/moonshine-web/src/utils/index.ts b/apps/moonshine-web/src/utils/index.ts deleted file mode 100644 index ef9bd2e76..000000000 --- a/apps/moonshine-web/src/utils/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -export function formatDate(timestamp: number) { - return new Date(timestamp).toLocaleString('zh', { - hour12: false, - year: 'numeric', - month: 'numeric', - day: 'numeric', - hour: 'numeric', - minute: 'numeric', - second: 'numeric', - fractionalSecondDigits: 3, - }) -} - -export async function supportsWebGPU() { - try { - if (!('gpu' in navigator) || !navigator.gpu) - return false - - await navigator.gpu.requestAdapter() - return true - } - catch (e) { - console.error(e) - return false - } -} diff --git a/apps/moonshine-web/tsconfig.json b/apps/moonshine-web/tsconfig.json deleted file mode 100644 index b7f0d5aae..000000000 --- a/apps/moonshine-web/tsconfig.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "jsx": "preserve", - "lib": [ - "DOM", - "ESNext", - "WebWorker" - ], - "module": "ESNext", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "types": [ - "vitest", - "vite/client", - // Currently AudioWorkletProcessor type is missing, we need to add it manually through @types/audioworklet - // https://github.com/microsoft/TypeScript/issues/28308#issuecomment-1512509870 - "@types/audioworklet", - // @webgpu/types - // https://www.npmjs.com/package/@webgpu/types - "@webgpu/types" - ], - "allowJs": true, - "strict": true, - "strictNullChecks": true, - "noUnusedLocals": true, - "noEmit": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "skipLibCheck": true - }, - "exclude": ["dist", "node_modules", "cypress"] -} diff --git a/apps/moonshine-web/uno.config.ts b/apps/moonshine-web/uno.config.ts deleted file mode 100644 index a80859ddc..000000000 --- a/apps/moonshine-web/uno.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - defineConfig, - presetAttributify, - presetIcons, - presetTypography, - presetWebFonts, - presetWind3, - transformerDirectives, - transformerVariantGroup, -} from 'unocss' - -export default defineConfig({ - presets: [ - presetWind3(), - presetAttributify(), - presetTypography(), - presetWebFonts({ - fonts: { - sans: 'DM Sans', - serif: 'DM Serif Display', - mono: 'DM Mono', - }, - }), - presetIcons({ - scale: 1.2, - }), - ], - transformers: [ - transformerDirectives(), - transformerVariantGroup(), - ], - safelist: 'prose prose-sm m-auto text-left'.split(' '), -}) diff --git a/apps/moonshine-web/vite.config.ts b/apps/moonshine-web/vite.config.ts deleted file mode 100644 index 6e1158110..000000000 --- a/apps/moonshine-web/vite.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { templateCompilerOptions } from '@tresjs/core' -import Vue from '@vitejs/plugin-vue' -import { LFS, SpaceCard } from 'hfup/vite' -import Unocss from 'unocss/vite' -import { defineConfig } from 'vite' - -export default defineConfig({ - plugins: [ - Vue({ - // Other config - ...templateCompilerOptions, - }), - // https://github.com/antfu/unocss - // see uno.config.ts for config - Unocss(), - - // HuggingFace Spaces - LFS(), - SpaceCard({ - title: 'Moonshine Web (Vue)', - emoji: '🌙', - colorFrom: 'yellow', - colorTo: 'yellow', - sdk: 'static', - pinned: false, - license: 'mit', - models: ['onnx-community/moonshine-base-ONNX'], - short_description: 'Yet another Real-time in-browser STT, re-implemented in Vue', - thumbnail: 'https://raw.githubusercontent.com/moeru-ai/airi/refs/heads/main/packages/moonshine-web/public/banner.png', - }), - ], - worker: { format: 'es' }, -}) diff --git a/apps/stage-web/package.json b/apps/stage-web/package.json index df98f0276..c29201ee5 100644 --- a/apps/stage-web/package.json +++ b/apps/stage-web/package.json @@ -97,7 +97,7 @@ "@intlify/unplugin-vue-i18n": "^6.0.3", "@proj-airi/drizzle-duckdb-wasm": "workspace:^", "@proj-airi/elevenlabs": "workspace:^", - "@proj-airi/lobe-icons": "workspace:^", + "@proj-airi/lobe-icons": "^0.3.6", "@proj-airi/provider-transformers": "workspace:^", "@proj-airi/ui-transitions": "workspace:^", "@proj-airi/unplugin-download": "workspace:^", diff --git a/apps/whisper-webgpu/.dockerignore b/apps/whisper-webgpu/.dockerignore deleted file mode 100644 index f06235c46..000000000 --- a/apps/whisper-webgpu/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist diff --git a/apps/whisper-webgpu/Dockerfile b/apps/whisper-webgpu/Dockerfile deleted file mode 100644 index 3e3a684a8..000000000 --- a/apps/whisper-webgpu/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM node:20-alpine as build-stage - -WORKDIR /app -RUN corepack enable - -COPY .npmrc package.json pnpm-lock.yaml ./ -RUN --mount=type=cache,id=pnpm-store,target=/root/.pnpm-store \ - pnpm install --frozen-lockfile - -COPY . . -RUN pnpm build - -FROM nginx:stable-alpine as production-stage - -COPY --from=build-stage /app/dist /usr/share/nginx/html -EXPOSE 80 - -CMD ["nginx", "-g", "daemon off;"] diff --git a/apps/whisper-webgpu/README.md b/apps/whisper-webgpu/README.md deleted file mode 100644 index 654d97bf2..000000000 --- a/apps/whisper-webgpu/README.md +++ /dev/null @@ -1,13 +0,0 @@ -

Whisper Realtime Demo (WebGPU)

- -

- [Try it] -

- -> Heavily inspired by [Real-time Whisper WebGPU](https://huggingface.co/spaces/Xenova/realtime-whisper-webgpu) - -## Acknowledgements - -Great thanks to what Xenova have done. - -> [Source code](https://github.com/huggingface/transformers.js/tree/7a58d6e11968dd85dc87ce37b2ab37213165889a/examples/webgpu-whisper) diff --git a/apps/whisper-webgpu/index.html b/apps/whisper-webgpu/index.html deleted file mode 100644 index 1ce8f2ac2..000000000 --- a/apps/whisper-webgpu/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - Whisper Realtime (WebGPU) - - - - - -
- - - - diff --git a/apps/whisper-webgpu/netlify.toml b/apps/whisper-webgpu/netlify.toml deleted file mode 100755 index bb7589c39..000000000 --- a/apps/whisper-webgpu/netlify.toml +++ /dev/null @@ -1,19 +0,0 @@ -[build] -base = "/" -command = "pnpm -F @proj-airi/whisper-webgpu... run build" -publish = "/apps/whisper-webgpu/dist" - -[build.environment] -NODE_VERSION = "23" - -[[redirects]] -from = "/assets/*" -to = "/assets/:splat" -status = 200 -force = true - -[[redirects]] -from = "/*" -to = "/index.html" -status = 200 -force = false diff --git a/apps/whisper-webgpu/package.json b/apps/whisper-webgpu/package.json deleted file mode 100644 index 88121491d..000000000 --- a/apps/whisper-webgpu/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@proj-airi/whisper-webgpu", - "type": "module", - "private": true, - "description": "Yet another WebGPU based Whisper Realtime STT re-implemented", - "author": { - "name": "Neko Ayaka", - "email": "neko@ayaka.moe", - "url": "https://github.com/nekomeowww" - }, - "license": "MIT", - "scripts": { - "build": "vite build", - "dev": "vite --port 5174", - "lint": "eslint .", - "preview": "vite preview", - "typecheck": "vue-tsc --noEmit" - }, - "dependencies": { - "@unocss/reset": "^66.1.0-beta.3", - "@vueuse/core": "^12.8.2", - "ofetch": "^1.4.1", - "vue": "^3.5.13" - }, - "devDependencies": { - "@huggingface/transformers": "^3.4.0", - "@vitejs/plugin-vue": "^5.2.1", - "@webgpu/types": "^0.1.55", - "hfup": "workspace:^", - "vue-tsc": "^2.2.8" - } -} diff --git a/apps/whisper-webgpu/public/banner.png b/apps/whisper-webgpu/public/banner.png deleted file mode 100644 index b9b0e75f4..000000000 Binary files a/apps/whisper-webgpu/public/banner.png and /dev/null differ diff --git a/apps/whisper-webgpu/public/logo.png b/apps/whisper-webgpu/public/logo.png deleted file mode 100644 index fc3b13f6b..000000000 Binary files a/apps/whisper-webgpu/public/logo.png and /dev/null differ diff --git a/apps/whisper-webgpu/src/App.vue b/apps/whisper-webgpu/src/App.vue deleted file mode 100644 index 8037b93a4..000000000 --- a/apps/whisper-webgpu/src/App.vue +++ /dev/null @@ -1,257 +0,0 @@ - - - diff --git a/apps/whisper-webgpu/src/components/AudioVisualizer.vue b/apps/whisper-webgpu/src/components/AudioVisualizer.vue deleted file mode 100644 index f68a696da..000000000 --- a/apps/whisper-webgpu/src/components/AudioVisualizer.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - diff --git a/apps/whisper-webgpu/src/components/Progress.vue b/apps/whisper-webgpu/src/components/Progress.vue deleted file mode 100644 index b9637d7bb..000000000 --- a/apps/whisper-webgpu/src/components/Progress.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/apps/whisper-webgpu/src/components/WhisperLanguageSelect.vue b/apps/whisper-webgpu/src/components/WhisperLanguageSelect.vue deleted file mode 100644 index 0c481fd24..000000000 --- a/apps/whisper-webgpu/src/components/WhisperLanguageSelect.vue +++ /dev/null @@ -1,129 +0,0 @@ - - - diff --git a/apps/whisper-webgpu/src/libs/types.ts b/apps/whisper-webgpu/src/libs/types.ts deleted file mode 100644 index 4b0eb3e2d..000000000 --- a/apps/whisper-webgpu/src/libs/types.ts +++ /dev/null @@ -1,66 +0,0 @@ -export interface EventLoading { - status: 'loading' - data: string -} - -export interface EventInitiate { - status: 'initiate' - name: string - file: string - // Not used - progress?: number - loaded?: number - total?: number -} - -export interface EventDownload { - status: 'download' - name: string - file: string - // Not used - progress?: number - loaded?: number - total?: number -} - -export interface EventProgress { - status: 'progress' - name: string - file: string - progress: number - loaded: number - total: number -} - -export interface EventDone { - status: 'done' - name: string - file: string - // Not used - progress?: number - loaded?: number - total?: number -} - -export interface EventReady { - status: 'ready' -} - -export interface EventStart { - status: 'start' -} - -export interface EventUpdate { - status: 'update' - tps: number - output: string - numTokens: number -} - -export interface EventComplete { - status: 'complete' - output: string[] -} - -export type MessageEvents = EventLoading | EventInitiate | EventDownload | EventProgress | EventDone | EventReady | EventStart | EventUpdate | EventComplete -export type ProgressMessageEvents = EventInitiate | EventProgress | EventDone diff --git a/apps/whisper-webgpu/src/libs/worker.ts b/apps/whisper-webgpu/src/libs/worker.ts deleted file mode 100644 index f35275ae9..000000000 --- a/apps/whisper-webgpu/src/libs/worker.ts +++ /dev/null @@ -1,150 +0,0 @@ -/* eslint-disable no-restricted-globals */ -import type { - ModelOutput, - PreTrainedTokenizer, - Processor, - ProgressCallback, - Tensor, - WhisperModel, -} from '@huggingface/transformers' - -import { - AutoProcessor, - AutoTokenizer, - full, - TextStreamer, - WhisperForConditionalGeneration, -} from '@huggingface/transformers' - -const MAX_NEW_TOKENS = 64 - -/** - * This class uses the Singleton pattern to ensure that only one instance of the model is loaded. - */ -class AutomaticSpeechRecognitionPipeline { - static model_id: string | null = null - static tokenizer: Promise - static processor: Promise - static model: Promise - - static async getInstance(progress_callback?: ProgressCallback) { - this.model_id = 'onnx-community/whisper-base' - - this.tokenizer ??= AutoTokenizer.from_pretrained(this.model_id, { - progress_callback, - }) - - this.processor ??= AutoProcessor.from_pretrained(this.model_id, { - progress_callback, - }) - - this.model ??= WhisperForConditionalGeneration.from_pretrained(this.model_id, { - dtype: { - encoder_model: 'fp32', // 'fp16' works too - decoder_model_merged: 'q4', // or 'fp32' ('fp16' is broken) - }, - device: 'webgpu', - progress_callback, - }) as Promise as Promise - - return Promise.all([this.tokenizer, this.processor, this.model]) - } -} - -let processing = false -async function generate({ audio, language }: { audio: ArrayBuffer, language: string }) { - if (processing) - return - processing = true - - // Tell the main thread we are starting - self.postMessage({ status: 'start' }) - - // Retrieve the text-generation pipeline. - const [tokenizer, processor, model] = await AutomaticSpeechRecognitionPipeline.getInstance() - - let startTime - let numTokens = 0 - const callback_function = (output: ModelOutput | Tensor) => { - startTime ??= performance.now() - - let tps - if (numTokens++ > 0) { - tps = numTokens / (performance.now() - startTime) * 1000 - } - - self.postMessage({ - status: 'update', - output, - tps, - numTokens, - }) - } - - const streamer = new TextStreamer(tokenizer, { - skip_prompt: true, - decode_kwargs: { - skip_special_tokens: true, - }, - callback_function, - }) - - const inputs = await processor(audio) - - const outputs = await model.generate({ - ...inputs, - max_new_tokens: MAX_NEW_TOKENS, - language, - streamer, - }) - - const outputText = tokenizer.batch_decode(outputs as Tensor, { skip_special_tokens: true }) - - // Send the output back to the main thread - self.postMessage({ - status: 'complete', - output: outputText, - }) - processing = false -} - -async function load() { - self.postMessage({ - status: 'loading', - data: 'Loading model...', - }) - - // Load the pipeline and save it for future use. - const [_tokenizer, _processor, model] = await AutomaticSpeechRecognitionPipeline.getInstance((x) => { - // We also add a progress callback to the pipeline so that we can - // track model loading. - self.postMessage(x) - }) - - self.postMessage({ - status: 'loading', - data: 'Compiling shaders and warming up model...', - }) - - // Run model with dummy input to compile shaders - await model.generate({ - input_features: full([1, 80, 3000], 0.0), - max_new_tokens: 1, - } as Record) - - self.postMessage({ status: 'ready' }) -} -// Listen for messages from the main thread -self.addEventListener('message', async (e) => { - const { type, data } = e.data - - switch (type) { - case 'load': - load() - break - - case 'generate': - generate(data) - break - } -}) diff --git a/apps/whisper-webgpu/src/main.ts b/apps/whisper-webgpu/src/main.ts deleted file mode 100644 index 8ce0833cc..000000000 --- a/apps/whisper-webgpu/src/main.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createApp } from 'vue' - -import App from './App.vue' - -import '@unocss/reset/tailwind.css' -import './styles/main.css' -import 'uno.css' - -createApp(App) - .mount('#app') diff --git a/apps/whisper-webgpu/src/shims.d.ts b/apps/whisper-webgpu/src/shims.d.ts deleted file mode 100644 index 1b6668502..000000000 --- a/apps/whisper-webgpu/src/shims.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -declare interface Window { - // extend the window -} - -declare module '*.vue' { - import type { DefineComponent } from 'vue' - - const component: DefineComponent - export default component -} diff --git a/apps/whisper-webgpu/src/styles/main.css b/apps/whisper-webgpu/src/styles/main.css deleted file mode 100644 index 5c3821aad..000000000 --- a/apps/whisper-webgpu/src/styles/main.css +++ /dev/null @@ -1,39 +0,0 @@ -html, -body, -#app { - height: 100%; - margin: 0; - padding: 0; -} - -html.dark { - background: #121212; - color-scheme: dark; -} - -.scrollbar-thin::-webkit-scrollbar { - @apply w-2; -} - -.scrollbar-thin::-webkit-scrollbar-track { - @apply rounded-full bg-gray-100 dark:bg-gray-700; -} - -.scrollbar-thin::-webkit-scrollbar-thumb { - @apply rounded-full bg-gray-300 dark:bg-gray-600; -} - -.scrollbar-thin::-webkit-scrollbar-thumb:hover { - @apply bg-gray-500; -} - -.animation-delay-200 { - animation-delay: 200ms; -} -.animation-delay-400 { - animation-delay: 400ms; -} - -.overflow-wrap-anywhere { - overflow-wrap: anywhere; -} diff --git a/apps/whisper-webgpu/tsconfig.json b/apps/whisper-webgpu/tsconfig.json deleted file mode 100644 index 8b5b99e40..000000000 --- a/apps/whisper-webgpu/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "jsx": "preserve", - "lib": [ - "DOM", - "ESNext", - "WebWorker" - ], - "module": "ESNext", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "types": [ - "vitest", - "vite/client", - "@webgpu/types" - ], - "allowJs": true, - "strict": true, - "strictNullChecks": true, - "noUnusedLocals": true, - "noEmit": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "skipLibCheck": true - }, - "exclude": ["dist", "node_modules", "cypress"] -} diff --git a/apps/whisper-webgpu/uno.config.ts b/apps/whisper-webgpu/uno.config.ts deleted file mode 100644 index a0d5791fd..000000000 --- a/apps/whisper-webgpu/uno.config.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - defineConfig, - presetAttributify, - presetIcons, - presetTypography, - presetWebFonts, - presetWind3, - transformerDirectives, - transformerVariantGroup, -} from 'unocss' - -export default defineConfig({ - presets: [ - presetWind3(), - presetAttributify(), - presetTypography(), - presetWebFonts({ - fonts: { - sans: 'DM Sans', - serif: 'DM Serif Display', - mono: 'DM Mono', - cute: 'Kiwi Maru', - cuteen: 'Sniglet', - }, - }), - presetIcons({ - scale: 1.2, - }), - ], - transformers: [ - transformerDirectives(), - transformerVariantGroup(), - ], - safelist: 'prose prose-sm m-auto text-left'.split(' '), -}) diff --git a/apps/whisper-webgpu/vite.config.ts b/apps/whisper-webgpu/vite.config.ts deleted file mode 100644 index d38a48374..000000000 --- a/apps/whisper-webgpu/vite.config.ts +++ /dev/null @@ -1,28 +0,0 @@ -import Vue from '@vitejs/plugin-vue' -import { LFS, SpaceCard } from 'hfup/vite' -import Unocss from 'unocss/vite' -import { defineConfig } from 'vite' - -export default defineConfig({ - plugins: [ - Vue(), - // https://github.com/antfu/unocss - // see uno.config.ts for config - Unocss(), - - // HuggingFace Spaces - LFS(), - SpaceCard({ - title: 'Real-time Whisper WebGPU (Vue)', - emoji: '🎤', - colorFrom: 'blue', - colorTo: 'blue', - sdk: 'static', - pinned: false, - license: 'mit', - models: ['onnx-community/whisper-base'], - short_description: 'Yet another Real-time Whisper with WebGPU, written in Vue', - thumbnail: 'https://raw.githubusercontent.com/moeru-ai/airi/refs/heads/main/packages/whisper-webgpu/public/banner.png', - }), - ], -}) diff --git a/packages/lobe-icons/build.config.ts b/packages/lobe-icons/build.config.ts deleted file mode 100644 index 89d546953..000000000 --- a/packages/lobe-icons/build.config.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { writeFile } from 'node:fs/promises' -import { join } from 'node:path' -import { importDirectory } from '@iconify/tools' -import { getPackageInfo, isPackageExists } from 'local-pkg' -import { defineBuildConfig } from 'unbuild' - -import packageJSON from './package.json' - -function json(any: any) { - return JSON.stringify(any, null, 2) -} - -export default defineBuildConfig({ - entries: [ - { builder: 'rollup', input: 'src/index.ts', outDir: 'dist', declaration: true }, - { builder: 'mkdist', input: './src', outDir: './dist', pattern: ['**/*.json'] }, - ], - externals: [ - './metadata.json', - './icons.json', - './chars.json', - './info.json', - ], - rollup: { - emitCJS: true, - }, - declaration: true, - sourcemap: false, - failOnWarn: false, - hooks: { - 'build:done': async () => { - if (!isPackageExists('@lobehub/icons-static-svg')) - throw new Error('Package @lobehub/icons-static-svg not found') - - const pkg = await getPackageInfo('@lobehub/icons-static-svg') - if (!pkg) - throw new Error('Package @lobehub/icons-static-svg not found') - - const iconSetData = await importDirectory(join(pkg.rootPath, 'icons'), { prefix: 'lobe-icons', ignoreImportErrors: 'warn' }) - const iconJSONData = iconSetData.export() - - await writeFile('./dist/metadata.json', json({ categories: iconSetData.categories }), { encoding: 'utf8' }) - await writeFile('./dist/icons.json', json(iconJSONData), { encoding: 'utf8' }) - await writeFile('./dist/chars.json', json({}), { encoding: 'utf8' }) - await writeFile('./dist/info.json', json({ - prefix: 'lobe-icons', - name: 'Lobe Icons', - total: Object.keys(iconJSONData.icons).length, - version: packageJSON.version, - author: { - name: packageJSON.author.name, - url: packageJSON.author.url, - }, - license: { - title: 'MIT', - spdx: 'MIT', - }, - samples: [ - 'openai', - 'deepseek', - 'claude', - ], - height: 20, - displayHeight: 20, - category: 'Logos 20px', - tags: [ - 'AI', - 'Models', - 'LLM', - 'Lobe', - ], - palette: false, - }), { encoding: 'utf8' }) - }, - }, -}) diff --git a/packages/lobe-icons/package.json b/packages/lobe-icons/package.json deleted file mode 100644 index acec8f28d..000000000 --- a/packages/lobe-icons/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@proj-airi/lobe-icons", - "type": "module", - "version": "0.3.6", - "description": "Iconify JSON IconSet port for @lobehub/icons", - "author": { - "name": "Neko Ayaka", - "email": "neko@ayaka.moe", - "url": "https://github.com/nekomeowww" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/moeru-ai/airi.git", - "directory": "packages/lobe-icons" - }, - "exports": { - "./*": "./*", - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.cjs" - }, - "./icons.json": "./dist/icons.json", - "./info.json": "./dist/info.json", - "./metadata.json": "./dist/metadata.json" - }, - "main": "./dist/index.cjs", - "module": "./dist/index.mjs", - "types": "./dist/index.d.ts", - "files": [ - "README.md", - "dist", - "package.json" - ], - "scripts": { - "dev": "unbuild", - "stub": "unbuild", - "build": "unbuild" - }, - "devDependencies": { - "@iconify/tools": "^4.1.1", - "@lobehub/icons-static-svg": "^1.30.0", - "local-pkg": "^1.1.1" - } -} diff --git a/packages/lobe-icons/src/index.ts b/packages/lobe-icons/src/index.ts deleted file mode 100644 index be0d5c518..000000000 --- a/packages/lobe-icons/src/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -// @ts-expect-error - This is a generated file -import chars from './chars.json' -// @ts-expect-error - This is a generated file -import icons from './icons.json' -// @ts-expect-error - This is a generated file -import info from './info.json' -// @ts-expect-error - This is a generated file -import metadata from './metadata.json' - -export { - chars, - icons, - info, - metadata, -} diff --git a/packages/lobe-icons/tsconfig.json b/packages/lobe-icons/tsconfig.json deleted file mode 100644 index 20ac4007e..000000000 --- a/packages/lobe-icons/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "lib": [ - "ESNext" - ], - "module": "ESNext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "types": [ - "vite/client" - ], - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": [ - "src/**/*.ts" - ] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc838fdaf..ab4dd298e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,52 +123,6 @@ importers: specifier: ^3.0.8 version: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.9)(@vitest/browser@3.0.8)(jiti@2.4.2)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(less@4.2.1)(msw@2.7.3(@types/node@22.13.9)(typescript@5.8.2))(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0) - apps/moonshine-web: - dependencies: - '@tresjs/core': - specifier: ^4.3.3 - version: 4.3.3(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) - '@unocss/reset': - specifier: ^66.1.0-beta.3 - version: 66.1.0-beta.3 - '@vueuse/core': - specifier: ^12.8.2 - version: 12.8.2(typescript@5.8.2) - '@vueuse/motion': - specifier: ^2.2.6 - version: 2.2.6(magicast@0.3.5)(rollup@4.34.9)(vue@3.5.13(typescript@5.8.2)) - ofetch: - specifier: ^1.4.1 - version: 1.4.1 - three: - specifier: ^0.174.0 - version: 0.174.0 - vue: - specifier: ^3.5.13 - version: 3.5.13(typescript@5.8.2) - devDependencies: - '@huggingface/transformers': - specifier: ^3.4.0 - version: 3.4.0 - '@types/audioworklet': - specifier: ^0.0.71 - version: 0.0.71 - '@types/three': - specifier: ^0.174.0 - version: 0.174.0 - '@vitejs/plugin-vue': - specifier: ^5.2.1 - version: 5.2.1(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) - '@webgpu/types': - specifier: ^0.1.55 - version: 0.1.55 - hfup: - specifier: workspace:^ - version: link:../../packages/hfup - vue-tsc: - specifier: ^2.2.8 - version: 2.2.8(typescript@5.8.2) - apps/stage-tamagotchi: dependencies: '@11labs/client': @@ -242,7 +196,7 @@ importers: version: 0.0.22 '@tresjs/cientos': specifier: ^4.1.0 - version: 4.1.0(@tresjs/core@4.3.3(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)))(@types/three@0.174.0)(react@18.3.1)(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) + version: 4.2.0(@tresjs/core@4.3.3(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)))(@types/three@0.174.0)(react@18.3.1)(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) '@tresjs/core': specifier: ^4.3.3 version: 4.3.3(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) @@ -696,8 +650,8 @@ importers: specifier: workspace:^ version: link:../../packages/elevenlabs '@proj-airi/lobe-icons': - specifier: workspace:^ - version: link:../../packages/lobe-icons + specifier: ^0.3.6 + version: 0.3.6 '@proj-airi/provider-transformers': specifier: workspace:^ version: link:../../packages/provider-transformers @@ -768,37 +722,6 @@ importers: specifier: ^2.2.8 version: 2.2.8(typescript@5.8.2) - apps/whisper-webgpu: - dependencies: - '@unocss/reset': - specifier: ^66.1.0-beta.3 - version: 66.1.0-beta.3 - '@vueuse/core': - specifier: ^12.8.2 - version: 12.8.2(typescript@5.8.2) - ofetch: - specifier: ^1.4.1 - version: 1.4.1 - vue: - specifier: ^3.5.13 - version: 3.5.13(typescript@5.8.2) - devDependencies: - '@huggingface/transformers': - specifier: ^3.4.0 - version: 3.4.0 - '@vitejs/plugin-vue': - specifier: ^5.2.1 - version: 5.2.1(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) - '@webgpu/types': - specifier: ^0.1.55 - version: 0.1.55 - hfup: - specifier: workspace:^ - version: link:../../packages/hfup - vue-tsc: - specifier: ^2.2.8 - version: 2.2.8(typescript@5.8.2) - docs: dependencies: '@astrojs/starlight': @@ -958,18 +881,6 @@ importers: specifier: ^6.2.1 version: 6.2.1(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0) - packages/lobe-icons: - devDependencies: - '@iconify/tools': - specifier: ^4.1.1 - version: 4.1.1 - '@lobehub/icons-static-svg': - specifier: ^1.30.0 - version: 1.30.0 - local-pkg: - specifier: ^1.1.1 - version: 1.1.1 - packages/provider-transformers: dependencies: '@huggingface/transformers': @@ -2045,10 +1956,6 @@ packages: resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.7': - resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} - engines: {node: '>=6.9.0'} - '@babel/types@7.26.9': resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} engines: {node: '>=6.9.0'} @@ -3093,9 +3000,6 @@ packages: '@iconify-json/vscode-icons@1.2.16': resolution: {integrity: sha512-hstc2yVq2UJ6v6FrgjftzXRvphGZBsKxvSeXoFLP1Hgx89TPZKrGE5SV6vqsoeIlLYaQ7OZbXmAoVGroTfGmVQ==} - '@iconify/tools@4.1.1': - resolution: {integrity: sha512-Hybu/HGhv6T8nLQhiG9rKx+ekF7NNpPOEQAy7JRSKht3s3dcFSsPccYzk24Znc9MTxrR6Gak3cg6CPP5dyvS2Q==} - '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -3340,9 +3244,6 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@lobehub/icons-static-svg@1.30.0': - resolution: {integrity: sha512-hb5XNClogtrgYQs5ThXRXMnWLjjoi2Rvguu0d0DP4Rg6wO42t94Vd1cPjN0hKc/CvhpjKKGIvY6tFEGFGf4a5A==} - '@malept/cross-spawn-promise@1.1.1': resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==} engines: {node: '>= 10'} @@ -3978,6 +3879,9 @@ packages: '@polka/url@1.0.0-next.24': resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} + '@proj-airi/lobe-icons@0.3.6': + resolution: {integrity: sha512-fOCpzksIEDr2GrzAQ+RlhYtrFm3PM4jjlp815tTW4lxxIT4CQt5F8vPn60aCpEns4gAMUC8A+YKxFInWYY/Mmw==} + '@proj-airi/server-sdk@0.1.4': resolution: {integrity: sha512-iyOtnFcQJL0xs+BZ8flDbxkCdrS5kMZrLBmQI//fmYj3yV0ny7TpVwvvPsJaqtcDfrYDOjmQ+JOu4R/YntHVxg==} @@ -4325,13 +4229,6 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@tresjs/cientos@4.1.0': - resolution: {integrity: sha512-vhYQ6HbcuswLngyHgHj+L6FAgtedhmbH83+xQbPgJmEGAUqu+91PQeH+Hujgk/6U444hObq1FwUZWClrrjXatQ==} - peerDependencies: - '@tresjs/core': '>=4.2.1' - three: '>=0.133' - vue: '>=3.3' - '@tresjs/cientos@4.2.0': resolution: {integrity: sha512-jc7Mo5ydelbYjV1cY70WoVVtD4g2IV0iucHibhoTOlZI8/Q1ppyK5QaIcdUBa3wkDkPIK8F/PG3fJ5O95WtnRA==} peerDependencies: @@ -4361,9 +4258,6 @@ packages: '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - '@types/audioworklet@0.0.71': - resolution: {integrity: sha512-bi5UKn9UXQaDPN9C3gVIT7D1CbPRlJyUPqfTqpLOUVh2cRoPdCscrVPuBkXiJV2JvHH/4bXvmYDSg7SmC7wuXA==} - '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -4580,9 +4474,6 @@ packages: '@types/node@20.17.11': resolution: {integrity: sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==} - '@types/node@22.13.8': - resolution: {integrity: sha512-G3EfaZS+iOGYWLLRCEAXdWK9my08oHNZ+FHluRiggIYJPOXzhOiDgpVCUHaUvyIC5/fj7C/p637jdzC666AOKQ==} - '@types/node@22.13.9': resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} @@ -4619,9 +4510,6 @@ packages: '@types/statuses@2.0.5': resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} - '@types/tar@6.1.13': - resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} - '@types/three@0.174.0': resolution: {integrity: sha512-De/+vZnfg2aVWNiuy1Ldu+n2ydgw1osinmiZTAn0necE++eOfsygL8JpZgFjR2uHmAPo89MkxBj3JJ+2BMe+Uw==} @@ -4670,10 +4558,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.24.1': - resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.26.0': resolution: {integrity: sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4685,33 +4569,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.24.1': - resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.26.0': resolution: {integrity: sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.24.1': - resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/typescript-estree@8.26.0': resolution: {integrity: sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.24.1': - resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.26.0': resolution: {integrity: sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4719,10 +4586,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.24.1': - resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.26.0': resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5209,14 +5072,6 @@ packages: typescript: optional: true - '@vue/language-core@2.2.6': - resolution: {integrity: sha512-7IQTvwVOvhYSzcizZ2hAdqJjI+SaJS2GO7EnDlSlQ77drwl5UzNa2IZm9pO9MdMxrlw24CGI/Lo3xpCjM26veg==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@vue/language-core@2.2.8': resolution: {integrity: sha512-rrzB0wPGBvcwaSNRriVWdNAbHQWSf0NlGqgKHK5mEkXpefjUlVRP62u03KvwZpvKVjRnBIQ/Lwre+Mx9N6juUQ==} peerDependencies: @@ -5414,10 +5269,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansis@3.16.0: - resolution: {integrity: sha512-sU7d/tfZiYrsIAXbdL/CNZld5bCkruzwT5KmqmadCJYxuLxHAOBjidxD5+iLmN/6xEfjcQq1l7OpsiCBlc4LzA==} - engines: {node: '>=14'} - ansis@3.17.0: resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} engines: {node: '>=14'} @@ -5595,9 +5446,6 @@ packages: axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} - axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -5864,13 +5712,6 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.0.0: - resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} - engines: {node: '>=18.17'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -6697,11 +6538,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true - electron-builder-squirrel-windows@24.13.3: resolution: {integrity: sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==} @@ -6758,9 +6594,6 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - encoding-sniffer@0.2.0: - resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} - encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -6821,10 +6654,6 @@ packages: resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} engines: {node: '>= 0.4'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -7341,10 +7170,6 @@ packages: '@75lb/nature': optional: true - find-up-simple@1.0.0: - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} - engines: {node: '>=18'} - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -7501,10 +7326,6 @@ packages: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -7618,9 +7439,6 @@ packages: glsl-tokenizer@2.1.5: resolution: {integrity: sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -7671,10 +7489,6 @@ packages: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -7693,10 +7507,6 @@ packages: hash-sum@2.0.0: resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -7805,9 +7615,6 @@ packages: htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - htmlparser2@9.1.0: - resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} - http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} @@ -8375,10 +8182,6 @@ packages: resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} engines: {node: '>=14'} - local-pkg@1.1.0: - resolution: {integrity: sha512-xbZBuX6gYIWrlLmZG43aAVer4ocntYO09vPy9lxd6Ns8DnR4U7N+IIeDkubinqFOHHzoMlPxTxwo0jhE7oYjAw==} - engines: {node: '>=14'} - local-pkg@1.1.1: resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} @@ -8879,10 +8682,6 @@ packages: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} - minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} - minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} @@ -8940,10 +8739,6 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -8979,11 +8774,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.0.9: - resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==} - engines: {node: ^18 || >=20} - hasBin: true - nanoid@5.1.3: resolution: {integrity: sha512-zAbEOEr7u2CbxwoMRlz/pNSpRP0FdAU4pRaYunCdEezWohXFs+a0Xw7RfkKaezMsmSM1vttcLthJtwRnVtOfHQ==} engines: {node: ^18 || >=20} @@ -9342,12 +9132,6 @@ packages: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} @@ -9935,9 +9719,6 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} @@ -9962,17 +9743,10 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} - qs@6.13.1: - resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} - engines: {node: '>=0.6'} - qs@6.14.0: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - quansync@0.2.6: - resolution: {integrity: sha512-u3TuxVTuJtkTxKGk5oZ7K2/o+l0/cC6J8SOyaaSnrnroqvcVy7xBxtvBUyd+Xa8cGoCr87XmQj4NR6W+zbqH8w==} - quansync@0.2.8: resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==} @@ -10438,10 +10212,6 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - side-channel@1.1.0: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} @@ -11075,9 +10845,6 @@ packages: unconfig@7.0.0: resolution: {integrity: sha512-G5CJSoG6ZTxgzCJblEfgpdRK2tos9+UdD2WtecDUVfImzQ0hFjwpH5RVvGMhP4pRpC9ML7NrC4qBsBl0Ttj35A==} - unconfig@7.1.0: - resolution: {integrity: sha512-4rNuVn7UJXvRCPFk4CT/VfoCEh9VTtohLAmPzMkSKjAnesnsSDsIKt0kso8sSeZji2Js31iOWQhY6R8pFP6UVQ==} - unconfig@7.3.0: resolution: {integrity: sha512-UWYFZinVx2ZRE5Dzp2kI4xBkNC//veYakve1BeaAa7CNrf9TckEKlBiFUSrHOuoEDgu1URhNy219ZXsprIrvjQ==} @@ -11886,6 +11653,7 @@ packages: yaeti@0.0.6: resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} engines: {node: '>=0.10.32'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -11897,10 +11665,6 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml-eslint-parser@1.2.3: - resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} - engines: {node: ^14.17.0 || >=16.0.0} - yaml-eslint-parser@1.3.0: resolution: {integrity: sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==} engines: {node: ^14.17.0 || >=16.0.0} @@ -12223,7 +11987,7 @@ snapshots: '@babel/parser': 7.26.7 '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 @@ -12235,19 +11999,19 @@ snapshots: '@babel/generator@7.26.2': dependencies: '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color @@ -12293,14 +12057,14 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color @@ -12315,7 +12079,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 '@babel/helper-plugin-utils@7.25.9': {} @@ -12340,20 +12104,20 @@ snapshots: '@babel/helper-simple-access@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 '@babel/helper-string-parser@7.25.9': {} @@ -12365,18 +12129,18 @@ snapshots: dependencies: '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color '@babel/helpers@7.26.0': dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 '@babel/parser@7.26.7': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': dependencies: @@ -12876,7 +12640,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 esutils: 2.0.3 '@babel/runtime@7.26.7': @@ -12889,7 +12653,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 '@babel/traverse@7.25.9': dependencies: @@ -12897,17 +12661,12 @@ snapshots: '@babel/generator': 7.26.2 '@babel/parser': 7.26.7 '@babel/template': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.7': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.26.9': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -13192,7 +12951,7 @@ snapshots: dependencies: '@types/eslint': 9.6.1 '@types/estree': 1.0.6 - '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/types': 8.26.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -13741,23 +13500,6 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify/tools@4.1.1': - dependencies: - '@iconify/types': 2.0.0 - '@iconify/utils': 2.3.0 - '@types/tar': 6.1.13 - axios: 1.7.9 - cheerio: 1.0.0 - domhandler: 5.0.3 - extract-zip: 2.0.1 - local-pkg: 0.5.1 - pathe: 1.1.2 - svgo: 3.3.2 - tar: 6.2.1 - transitivePeerDependencies: - - debug - - supports-color - '@iconify/types@2.0.0': {} '@iconify/utils@2.3.0': @@ -13768,7 +13510,7 @@ snapshots: debug: 4.4.0 globals: 15.15.0 kolorist: 1.8.0 - local-pkg: 1.1.0 + local-pkg: 1.1.1 mlly: 1.7.4 transitivePeerDependencies: - supports-color @@ -13892,7 +13634,7 @@ snapshots: jsonc-eslint-parser: 2.4.0 mlly: 1.7.4 source-map-js: 1.2.1 - yaml-eslint-parser: 1.2.3 + yaml-eslint-parser: 1.3.0 optionalDependencies: vue-i18n: 11.1.2(vue@3.5.13(typescript@5.8.2)) @@ -13922,8 +13664,8 @@ snapshots: '@intlify/shared': 11.1.2 '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) '@rollup/pluginutils': 5.1.4(rollup@2.79.1) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) debug: 4.4.0 fast-glob: 3.3.3 js-yaml: 4.1.0 @@ -13949,8 +13691,8 @@ snapshots: '@intlify/shared': 11.1.2 '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) '@rollup/pluginutils': 5.1.4(rollup@4.34.9) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.2) debug: 4.4.0 fast-glob: 3.3.3 js-yaml: 4.1.0 @@ -14015,8 +13757,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.5.0 - '@lobehub/icons-static-svg@1.30.0': {} - '@malept/cross-spawn-promise@1.1.1': dependencies: cross-spawn: 7.0.6 @@ -14699,6 +14439,8 @@ snapshots: '@polka/url@1.0.0-next.24': {} + '@proj-airi/lobe-icons@0.3.6': {} + '@proj-airi/server-sdk@0.1.4': dependencies: '@proj-airi/server-shared': 0.1.4 @@ -15001,7 +14743,7 @@ snapshots: '@stylistic/eslint-plugin@4.2.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) eslint-visitor-keys: 4.2.0 espree: 10.3.0 @@ -15050,23 +14792,6 @@ snapshots: '@tootallnate/once@2.0.0': {} - '@tresjs/cientos@4.1.0(@tresjs/core@4.3.3(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)))(@types/three@0.174.0)(react@18.3.1)(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2))': - dependencies: - '@tresjs/core': 4.3.3(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) - '@vueuse/core': 12.8.2(typescript@5.8.2) - camera-controls: 2.9.0(three@0.174.0) - stats-gl: 2.4.2(@types/three@0.174.0)(three@0.174.0) - stats.js: 0.17.0 - three: 0.174.0 - three-custom-shader-material: 5.4.0(react@18.3.1)(three@0.174.0) - three-stdlib: 2.34.0(three@0.174.0) - vue: 3.5.13(typescript@5.8.2) - transitivePeerDependencies: - - '@react-three/fiber' - - '@types/three' - - react - - typescript - '@tresjs/cientos@4.2.0(@tresjs/core@4.3.3(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)))(@types/three@0.174.0)(react@18.3.1)(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2))': dependencies: '@tresjs/core': 4.3.3(three@0.174.0)(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) @@ -15109,12 +14834,10 @@ snapshots: '@types/aria-query@5.0.4': {} - '@types/audioworklet@0.0.71': {} - '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 @@ -15122,18 +14845,18 @@ snapshots: '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 optional: true '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 optional: true '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 optional: true '@types/cacheable-request@6.0.3': @@ -15344,7 +15067,7 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 18.19.79 + '@types/node': 22.13.9 form-data: 4.0.0 '@types/node-rsa@1.1.4': @@ -15366,10 +15089,6 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/node@22.13.8': - dependencies: - undici-types: 6.20.0 - '@types/node@22.13.9': dependencies: undici-types: 6.20.0 @@ -15411,11 +15130,6 @@ snapshots: '@types/statuses@2.0.5': {} - '@types/tar@6.1.13': - dependencies: - '@types/node': 22.13.9 - minipass: 4.2.8 - '@types/three@0.174.0': dependencies: '@tweenjs/tween.js': 23.1.3 @@ -15448,7 +15162,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.13.8 + '@types/node': 22.13.9 '@typescript-eslint/eslint-plugin@8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: @@ -15479,11 +15193,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.24.1': - dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 - '@typescript-eslint/scope-manager@8.26.0': dependencies: '@typescript-eslint/types': 8.26.0 @@ -15500,24 +15209,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.24.1': {} - '@typescript-eslint/types@8.26.0': {} - '@typescript-eslint/typescript-estree@8.24.1(typescript@5.8.2)': - dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.26.0(typescript@5.8.2)': dependencies: '@typescript-eslint/types': 8.26.0 @@ -15532,17 +15225,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.8.2) - eslint: 9.21.0(jiti@2.4.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) @@ -15554,11 +15236,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.24.1': - dependencies: - '@typescript-eslint/types': 8.24.1 - eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.26.0': dependencies: '@typescript-eslint/types': 8.26.0 @@ -15654,7 +15331,7 @@ snapshots: '@unocss/eslint-plugin@66.1.0-beta.3(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@unocss/config': 66.1.0-beta.3 '@unocss/core': 66.1.0-beta.3 '@unocss/rule-utils': 66.1.0-beta.3 @@ -15970,7 +15647,7 @@ snapshots: dependencies: '@vue-macros/common': 1.16.1(vue@3.5.13(typescript@5.8.2)) make-synchronized: 0.2.9 - unconfig: 7.1.0 + unconfig: 7.3.0 transitivePeerDependencies: - vue @@ -16242,7 +15919,7 @@ snapshots: '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.26.0) '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 '@vue/babel-helper-vue-transform-on': 1.1.5 camelcase: 6.3.0 html-tags: 3.3.1 @@ -16296,7 +15973,7 @@ snapshots: '@vue/devtools-kit': 7.7.2 '@vue/devtools-shared': 7.7.2 mitt: 3.0.1 - nanoid: 5.0.9 + nanoid: 5.1.3 pathe: 2.0.3 vite-hot-client: 0.2.4(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)) vue: 3.5.13(typescript@5.8.2) @@ -16343,19 +16020,6 @@ snapshots: optionalDependencies: typescript: 5.8.2 - '@vue/language-core@2.2.6(typescript@5.8.2)': - dependencies: - '@volar/language-core': 2.4.11 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.13 - alien-signals: 1.0.3 - minimatch: 9.0.5 - muggle-string: 0.4.1 - path-browserify: 1.0.1 - optionalDependencies: - typescript: 5.8.2 - '@vue/language-core@2.2.8(typescript@5.8.2)': dependencies: '@volar/language-core': 2.4.11 @@ -16634,8 +16298,6 @@ snapshots: ansi-styles@6.2.1: {} - ansis@3.16.0: {} - ansis@3.17.0: {} anymatch@3.1.3: @@ -16686,7 +16348,7 @@ snapshots: chromium-pickle-js: 0.2.0 debug: 4.4.0 dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3) - ejs: 3.1.9 + ejs: 3.1.10 electron-builder-squirrel-windows: 24.13.3(dmg-builder@24.13.3) electron-publish: 24.13.1 form-data: 4.0.0 @@ -16964,14 +16626,6 @@ snapshots: transitivePeerDependencies: - debug - axios@1.7.9: - dependencies: - follow-redirects: 1.15.9(debug@4.4.0) - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - axobject-query@4.1.0: {} babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): @@ -17249,10 +16903,10 @@ snapshots: call-bind@1.0.7: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 call-bound@1.0.3: @@ -17329,7 +16983,7 @@ snapshots: changelogithub@13.13.0(magicast@0.3.5): dependencies: - ansis: 3.16.0 + ansis: 3.17.0 c12: 3.0.2(magicast@0.3.5) cac: 6.7.14 changelogen: 0.5.7(magicast@0.3.5) @@ -17350,29 +17004,6 @@ snapshots: check-error@2.1.1: {} - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.1.0 - - cheerio@1.0.0: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.1.0 - encoding-sniffer: 0.2.0 - htmlparser2: 9.1.0 - parse5: 7.1.2 - parse5-htmlparser2-tree-adapter: 7.1.0 - parse5-parser-stream: 7.1.2 - undici: 6.21.1 - whatwg-mimetype: 4.0.0 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -17530,7 +17161,7 @@ snapshots: compressible@2.0.18: dependencies: - mime-db: 1.52.0 + mime-db: 1.53.0 compression@1.8.0: dependencies: @@ -17944,9 +17575,9 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-lazy-prop@2.0.0: {} @@ -18147,10 +17778,6 @@ snapshots: dependencies: jake: 10.8.6 - ejs@3.1.9: - dependencies: - jake: 10.8.6 - electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3): dependencies: app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) @@ -18240,11 +17867,6 @@ snapshots: encodeurl@2.0.0: {} - encoding-sniffer@0.2.0: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding: 3.1.1 - encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -18354,10 +17976,6 @@ snapshots: unbox-primitive: 1.0.2 which-typed-array: 1.1.11 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -18654,8 +18272,8 @@ snapshots: eslint-plugin-import-x@4.6.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: '@types/doctrine': 0.0.9 - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) debug: 4.4.0 doctrine: 3.0.0 enhanced-resolve: 5.17.1 @@ -18718,8 +18336,8 @@ snapshots: eslint-plugin-perfectionist@4.9.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -19207,8 +18825,6 @@ snapshots: find-replace@5.0.2: {} - find-up-simple@1.0.0: {} - find-up-simple@1.0.1: {} find-up@4.1.0: @@ -19363,14 +18979,6 @@ snapshots: get-east-asian-width@1.2.0: {} - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -19523,10 +19131,6 @@ snapshots: dependencies: through2: 0.6.5 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - gopd@1.2.0: {} got@11.8.6: @@ -19590,12 +19194,10 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 has-proto@1.0.1: {} - has-symbols@1.0.3: {} - has-symbols@1.1.0: {} has-tostringtag@1.0.0: @@ -19612,10 +19214,6 @@ snapshots: hash-sum@2.0.0: optional: true - hasown@2.0.0: - dependencies: - function-bind: 1.1.2 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -19847,13 +19445,6 @@ snapshots: domutils: 2.8.0 entities: 2.2.0 - htmlparser2@9.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.1.0 - entities: 4.5.0 - http-cache-semantics@4.1.1: {} http-errors@2.0.0: @@ -20039,7 +19630,7 @@ snapshots: is-core-module@2.13.1: dependencies: - hasown: 2.0.0 + hasown: 2.0.2 is-date-object@1.0.5: dependencies: @@ -20444,12 +20035,7 @@ snapshots: dependencies: mlly: 1.7.4 pkg-types: 1.3.1 - - local-pkg@1.1.0: - dependencies: - mlly: 1.7.4 - pkg-types: 1.3.1 - quansync: 0.2.6 + optional: true local-pkg@1.1.1: dependencies: @@ -20569,7 +20155,7 @@ snapshots: magicast@0.3.5: dependencies: '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 source-map-js: 1.2.1 make-dir@2.1.0: @@ -21290,8 +20876,6 @@ snapshots: dependencies: yallist: 4.0.0 - minipass@4.2.8: {} - minipass@5.0.0: {} minipass@7.1.2: {} @@ -21346,8 +20930,6 @@ snapshots: mri@1.2.0: {} - mrmime@2.0.0: {} - mrmime@2.0.1: {} ms@2.0.0: {} @@ -21387,8 +20969,6 @@ snapshots: nanoid@3.3.8: {} - nanoid@5.0.9: {} - nanoid@5.1.3: {} natural-compare@1.4.0: {} @@ -21798,15 +21378,6 @@ snapshots: parse-node-version@1.0.1: optional: true - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.1.2 - - parse5-parser-stream@7.1.2: - dependencies: - parse5: 7.1.2 - parse5@7.1.2: dependencies: entities: 4.5.0 @@ -22227,7 +21798,7 @@ snapshots: preferred-pm@4.1.1: dependencies: - find-up-simple: 1.0.0 + find-up-simple: 1.0.1 find-yarn-workspace-root2: 1.2.16 which-pm: 3.0.1 @@ -22466,8 +22037,6 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-from-env@1.1.0: {} - prr@1.0.1: optional: true @@ -22488,18 +22057,12 @@ snapshots: qs@6.13.0: dependencies: - side-channel: 1.0.6 - - qs@6.13.1: - dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 qs@6.14.0: dependencies: side-channel: 1.1.0 - quansync@0.2.6: {} - quansync@0.2.8: {} querystringify@2.2.0: {} @@ -22520,7 +22083,7 @@ snapshots: aria-hidden: 1.2.4 defu: 6.1.4 fast-deep-equal: 3.1.3 - nanoid: 5.0.9 + nanoid: 5.1.3 vue: 3.5.13(typescript@5.8.2) transitivePeerDependencies: - '@vue/composition-api' @@ -22577,7 +22140,7 @@ snapshots: read-package-up@11.0.0: dependencies: - find-up-simple: 1.0.0 + find-up-simple: 1.0.1 read-pkg: 9.0.1 type-fest: 4.33.0 @@ -23126,8 +22689,8 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 set-function-name@2.0.1: @@ -23216,13 +22779,6 @@ snapshots: object-inspect: 1.13.3 side-channel-map: 1.0.1 - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.3 - side-channel@1.1.0: dependencies: es-errors: 1.3.0 @@ -23250,7 +22806,7 @@ snapshots: sirv@3.0.1: dependencies: '@polka/url': 1.0.0-next.24 - mrmime: 2.0.0 + mrmime: 2.0.1 totalist: 3.0.1 sisteransi@1.0.5: {} @@ -23616,12 +23172,12 @@ snapshots: taze@18.6.0: dependencies: '@antfu/ni': 23.3.1 - find-up-simple: 1.0.0 + find-up-simple: 1.0.1 ofetch: 1.4.1 package-manager-detector: 0.2.9 pathe: 2.0.3 tinyexec: 0.3.2 - unconfig: 7.1.0 + unconfig: 7.3.0 yaml: 2.7.0 yargs: 17.7.2 @@ -23791,7 +23347,7 @@ snapshots: dependencies: '@rollup/pluginutils': 5.1.4(rollup@2.79.1) '@volar/language-core': 2.4.11 - '@vue/language-core': 2.2.6(typescript@5.8.2) + '@vue/language-core': 2.2.8(typescript@5.8.2) muggle-string: 0.4.1 transitivePeerDependencies: - rollup @@ -23801,7 +23357,7 @@ snapshots: dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.34.9) '@volar/language-core': 2.4.11 - '@vue/language-core': 2.2.6(typescript@5.8.2) + '@vue/language-core': 2.2.8(typescript@5.8.2) muggle-string: 0.4.1 transitivePeerDependencies: - rollup @@ -23952,12 +23508,6 @@ snapshots: defu: 6.1.4 jiti: 2.4.2 - unconfig@7.1.0: - dependencies: - '@antfu/utils': 8.1.0 - defu: 6.1.4 - jiti: 2.4.2 - unconfig@7.3.0: dependencies: '@antfu/utils': 9.1.0 @@ -24170,7 +23720,7 @@ snapshots: unplugin-auto-import@19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(@vueuse/core@12.8.2(typescript@5.8.2)): dependencies: - local-pkg: 1.1.0 + local-pkg: 1.1.1 magic-string: 0.30.17 picomatch: 4.0.2 unimport: 4.1.2 @@ -24182,7 +23732,7 @@ snapshots: unplugin-auto-import@19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.34.9))(@vueuse/core@12.8.2(typescript@5.8.2)): dependencies: - local-pkg: 1.1.0 + local-pkg: 1.1.1 magic-string: 0.30.17 picomatch: 4.0.2 unimport: 4.1.2 @@ -24215,7 +23765,7 @@ snapshots: dependencies: chokidar: 3.6.0 debug: 4.4.0 - local-pkg: 1.1.0 + local-pkg: 1.1.1 magic-string: 0.30.17 mlly: 1.7.4 tinyglobby: 0.2.12 @@ -24232,7 +23782,7 @@ snapshots: dependencies: chokidar: 3.6.0 debug: 4.4.0 - local-pkg: 1.1.0 + local-pkg: 1.1.1 magic-string: 0.30.17 mlly: 1.7.4 tinyglobby: 0.2.12 @@ -24410,7 +23960,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/standalone': 7.26.2 - '@babel/types': 7.26.7 + '@babel/types': 7.26.9 defu: 6.1.4 jiti: 2.4.2 mri: 1.2.0 @@ -24442,7 +23992,7 @@ snapshots: url@0.11.4: dependencies: punycode: 1.4.1 - qs: 6.13.1 + qs: 6.14.0 utf-8-validate@5.0.10: dependencies: @@ -24596,7 +24146,7 @@ snapshots: vite-plugin-inspect@11.0.0(vite@6.2.1(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)): dependencies: - ansis: 3.16.0 + ansis: 3.17.0 debug: 4.4.0 error-stack-parser-es: 1.0.5 ohash: 2.0.5 @@ -24823,8 +24373,10 @@ snapshots: whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 + optional: true - whatwg-mimetype@4.0.0: {} + whatwg-mimetype@4.0.0: + optional: true whatwg-url@14.0.0: dependencies: @@ -25077,12 +24629,6 @@ snapshots: yallist@5.0.0: {} - yaml-eslint-parser@1.2.3: - dependencies: - eslint-visitor-keys: 3.4.3 - lodash: 4.17.21 - yaml: 2.7.0 - yaml-eslint-parser@1.3.0: dependencies: eslint-visitor-keys: 3.4.3