diff --git a/apps/desktop/src/lib/cmds/builtin.ts b/apps/desktop/src/lib/cmds/builtin.ts index c976321..68f1337 100644 --- a/apps/desktop/src/lib/cmds/builtin.ts +++ b/apps/desktop/src/lib/cmds/builtin.ts @@ -159,6 +159,61 @@ export const rawBuiltinCmds: BuiltinCmd[] = [ }, keywords: ["extension", "window", "troubleshooter"] }, + { + name: "Help (Install Deno)", + icon: { + type: IconEnum.Iconify, + value: "simple-icons:deno" + }, + description: "", + function: async () => { + appState.clearSearchTerm() + goto("/app/help/deno-install") + }, + keywords: ["help", "deno", "install"] + }, + { + name: "Help (Install ffmpeg)", + icon: { + type: IconEnum.Iconify, + value: "logos:ffmpeg-icon" + }, + description: "", + function: async () => { + appState.clearSearchTerm() + goto("/app/help/ffmpeg-install") + }, + keywords: ["help", "ffmpeg", "install"] + }, + { + name: "Help (Install homebrew)", + icon: { + type: IconEnum.Iconify, + value: "devicon:homebrew" + }, + description: "", + function: async () => { + appState.clearSearchTerm() + goto("/app/help/brew-install") + }, + keywords: ["help", "brew", "install", "homebrew"] + }, + { + name: "On Boarding (Dev Only)", + icon: { + type: IconEnum.Iconify, + value: "fluent-mdl2:onboarding" + }, + description: "", + function: async () => { + appState.clearSearchTerm() + goto("/app/help/onboarding") + }, + flags: { + dev: true, + developer: true + } + }, { name: "Extension Permission Inspector", icon: { diff --git a/apps/desktop/src/lib/components/common/install-code-block.svelte b/apps/desktop/src/lib/components/common/install-code-block.svelte new file mode 100644 index 0000000..64d6ff3 --- /dev/null +++ b/apps/desktop/src/lib/components/common/install-code-block.svelte @@ -0,0 +1,81 @@ + + +
+ + + +
diff --git a/apps/desktop/src/lib/components/standalone/general-settings.svelte b/apps/desktop/src/lib/components/standalone/general-settings.svelte new file mode 100644 index 0000000..fdcae90 --- /dev/null +++ b/apps/desktop/src/lib/components/standalone/general-settings.svelte @@ -0,0 +1,53 @@ + + + + + diff --git a/apps/desktop/src/lib/components/standalone/help/brew-install.svelte b/apps/desktop/src/lib/components/standalone/help/brew-install.svelte new file mode 100644 index 0000000..f9c0693 --- /dev/null +++ b/apps/desktop/src/lib/components/standalone/help/brew-install.svelte @@ -0,0 +1,59 @@ + + +

Install Homebrew

+ + Homebrew Website + + +{#if _platform !== "macos"} +

Homebrew is only available on MacOS.

+{/if} +{#if alreadyInstalled} +
+ + Homebrew is already installed at +
{brewPath}
+
+{:else} +
+ + Homebrew is not installed +
+{/if} +

+ Some extensions require Homebrew to enable advanced features. Homebrew is optional but + recommended. +

+ + diff --git a/apps/desktop/src/lib/components/standalone/help/deno-install.svelte b/apps/desktop/src/lib/components/standalone/help/deno-install.svelte new file mode 100644 index 0000000..fddfbf8 --- /dev/null +++ b/apps/desktop/src/lib/components/standalone/help/deno-install.svelte @@ -0,0 +1,161 @@ + + + + +

Install Deno

+

+ Some extensions require Deno to enable advanced features. Deno provides a secure, sandboxed + runtime environment for executing extension code safely. It is optional but recommended. +

+

Choose any installation method below.

+

+ If you are unsure, you can use Auto Install. +

+

+ After installation, ensure the `deno` command is accessible from your system's PATH. +

+{#if _platform === "macos" || _platform === "linux"} +

+ Installation with curl command likely requires manual + configuration. So auto install is disabled. Please copy the command and run it in a terminal. +

+{/if} +{#if denoPath} +
+ + Deno is already installed at +
{denoPath}
+
+{:else} +
+ + Deno is not installed +
+{/if} + +
+ + Windows + MacOS + Linux + +
+ + + {#if brewPath} + + {/if} + + + + {#if scoopPath} + + {/if} + {#if chocoPath} + + {/if} + {#if wingetPath} + + {/if} + + + + +
+{#if cargoPath} +

+ Seeing this message means `cargo` is detected and you are a programmer. `cargo install` allows + you to install `deno` from rust source code. But rust compiles super slow (a few minutes), so + auto install is disabled. If you really want to use this method, please copy the command and run + it in a terminal. +

+ +{/if} diff --git a/apps/desktop/src/lib/components/standalone/help/ffmpeg-install.svelte b/apps/desktop/src/lib/components/standalone/help/ffmpeg-install.svelte new file mode 100644 index 0000000..5542212 --- /dev/null +++ b/apps/desktop/src/lib/components/standalone/help/ffmpeg-install.svelte @@ -0,0 +1,121 @@ + + +

Install ffmpeg

+

+ Some extensions require ffmpeg to enable advanced features. ffmpeg is optional but recommended. +

+

+ For example, the YouTube video downloader extension requires `ffmpeg` to merge audio and video; + `ffmpeg` is also used in video processing extensions. +

+{#if alreadyInstalled} +
+ + ffmpeg is already installed at +
{ffmpegPath}
+
+{:else} +
+ + ffmpeg is not installed +
+{/if} + + ffmpeg Website + + +

+ You can install ffmpeg from the official website, but it's much easier if you use a package + manager of your platform. +

+ +
+ + Windows + MacOS + Linux + +
+ + {#if !brewPath} +

+ Homebrew is not installed. Please install Homebrew first. +

+ {/if} + +
+ + {#if !chocoPath} +

+ Chocolatey is not installed. Please install Chocolatey first. +

+ {/if} + +
+ + {#if !aptPath} +

+ `apt` is not installed. Please install `apt` first. +

+

+ If you are on a different distro, I believe you can figure it out as a Linux user. +

+ {/if} + +
+
diff --git a/apps/desktop/src/lib/stores/appConfig.ts b/apps/desktop/src/lib/stores/appConfig.ts index 40bbb72..9d58536 100644 --- a/apps/desktop/src/lib/stores/appConfig.ts +++ b/apps/desktop/src/lib/stores/appConfig.ts @@ -5,7 +5,7 @@ import { PersistedAppConfig, type AppConfig } from "@kksh/types" import { debug, error } from "@tauri-apps/plugin-log" import * as os from "@tauri-apps/plugin-os" import { load } from "@tauri-apps/plugin-store" -import { get } from "svelte/store" +import { get, writable } from "svelte/store" import * as v from "valibot" export const defaultAppConfig: AppConfig = { @@ -29,12 +29,15 @@ export const defaultAppConfig: AppConfig = { developerMode: false } +export const appConfigLoaded = writable(false) + interface AppConfigAPI { init: () => Promise get: () => AppConfig setTheme: (theme: ThemeConfig) => void setDevExtensionPath: (devExtensionPath: string | null) => void setTriggerHotkey: (triggerHotkey: string[]) => void + setOnBoarded: (onBoarded: boolean) => void } function createAppConfig(): WithSyncStore & AppConfigAPI { @@ -61,7 +64,7 @@ function createAppConfig(): WithSyncStore & AppConfigAPI { await persistStore.clear() await persistStore.set("config", v.parse(PersistedAppConfig, defaultAppConfig)) } - + appConfigLoaded.set(true) store.subscribe(async (config) => { console.log("Saving app config", config) await persistStore.set("config", config) @@ -80,6 +83,9 @@ function createAppConfig(): WithSyncStore & AppConfigAPI { setTriggerHotkey: (triggerHotkey: string[]) => { store.update((config) => ({ ...config, triggerHotkey })) }, + setOnBoarded: (onBoarded: boolean) => { + store.update((config) => ({ ...config, onBoarded })) + }, init } } diff --git a/apps/desktop/src/routes/app/+layout.svelte b/apps/desktop/src/routes/app/+layout.svelte index 050b713..5bd891e 100644 --- a/apps/desktop/src/routes/app/+layout.svelte +++ b/apps/desktop/src/routes/app/+layout.svelte @@ -101,7 +101,7 @@ - + {@render children()} diff --git a/apps/desktop/src/routes/app/+page.svelte b/apps/desktop/src/routes/app/+page.svelte index 85e9bb2..97d20f3 100644 --- a/apps/desktop/src/routes/app/+page.svelte +++ b/apps/desktop/src/routes/app/+page.svelte @@ -3,7 +3,14 @@ import { commandLaunchers } from "@/cmds" import { builtinCmds } from "@/cmds/builtin" import { systemCommands } from "@/cmds/system" - import { appConfig, appState, devStoreExts, installedStoreExts, quickLinks } from "@/stores" + import { + appConfig, + appConfigLoaded, + appState, + devStoreExts, + installedStoreExts, + quickLinks + } from "@/stores" import { cmdQueries } from "@/stores/cmdQuery" import { isKeyboardEventFromInputElement } from "@/utils/dom" import Icon from "@iconify/svelte" @@ -22,6 +29,7 @@ import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow" import { getCurrentWindow, Window } from "@tauri-apps/api/window" import { exit } from "@tauri-apps/plugin-process" + import { goto } from "$app/navigation" import { ArrowBigUpIcon, CircleXIcon, EllipsisVerticalIcon, RefreshCcwIcon } from "lucide-svelte" import { onMount } from "svelte" @@ -36,12 +44,23 @@ onMount(() => { Promise.all([Window.getByLabel("splashscreen"), getCurrentWindow()]).then( ([splashscreenWin, mainWin]) => { - mainWin.show() if (splashscreenWin) { splashscreenWin.close() } + + mainWin.show() } ) + + appConfigLoaded.subscribe((loaded) => { + // wait for appConfig store to be loaded, it's async and saved to disk when changed, so we use another store appConfigLoaded + // to keep track of the loading status + if (loaded) { + if (!appConfig.get().onBoarded) { + goto("/app/help/onboarding") + } + } + }) }) diff --git a/apps/desktop/src/routes/app/help/brew-install/+page.svelte b/apps/desktop/src/routes/app/help/brew-install/+page.svelte new file mode 100644 index 0000000..26b3289 --- /dev/null +++ b/apps/desktop/src/routes/app/help/brew-install/+page.svelte @@ -0,0 +1,16 @@ + + + + + +
+ +
diff --git a/apps/desktop/src/routes/app/help/deno-install/+page.svelte b/apps/desktop/src/routes/app/help/deno-install/+page.svelte new file mode 100644 index 0000000..f9d703f --- /dev/null +++ b/apps/desktop/src/routes/app/help/deno-install/+page.svelte @@ -0,0 +1,15 @@ + + + + +
+ +
diff --git a/apps/desktop/src/routes/app/help/ffmpeg-install/+page.svelte b/apps/desktop/src/routes/app/help/ffmpeg-install/+page.svelte new file mode 100644 index 0000000..9945a00 --- /dev/null +++ b/apps/desktop/src/routes/app/help/ffmpeg-install/+page.svelte @@ -0,0 +1,15 @@ + + + + +
+ +
diff --git a/apps/desktop/src/routes/app/help/onboarding/+page.svelte b/apps/desktop/src/routes/app/help/onboarding/+page.svelte new file mode 100644 index 0000000..c4fab08 --- /dev/null +++ b/apps/desktop/src/routes/app/help/onboarding/+page.svelte @@ -0,0 +1,64 @@ + + +
+
+ {#if step === Step.Welcome} +

Welcome to Kunkun

+

+ This is a on boarding page to help you set up Kunkun with some basic settings and optional + dependencies. +

+
Click Next to continue
+ {:else if step === Step.GeneralSettings} +

General Settings

+ You can change these settings later in the settings page. + + {:else if step === Step.DenoInstall} + + {:else if step === Step.FFmpegInstall} + + {/if} +
+ diff --git a/apps/desktop/src/routes/app/help/onboarding/steps.ts b/apps/desktop/src/routes/app/help/onboarding/steps.ts new file mode 100644 index 0000000..ad25490 --- /dev/null +++ b/apps/desktop/src/routes/app/help/onboarding/steps.ts @@ -0,0 +1,6 @@ +export enum Step { + Welcome = 0, + GeneralSettings = 1, + DenoInstall = 2, + FFmpegInstall = 3 +} diff --git a/apps/desktop/src/routes/app/settings/+page.svelte b/apps/desktop/src/routes/app/settings/+page.svelte index 7e39f73..cd429b4 100644 --- a/apps/desktop/src/routes/app/settings/+page.svelte +++ b/apps/desktop/src/routes/app/settings/+page.svelte @@ -1,70 +1,7 @@
- -
    -
  • - Launch at Login - -
  • -
  • - Hotkey - - - -
  • -
  • - Menu Bar Icon - -
  • -
  • - Hide On Blur - -
  • -
  • - Extension Auto Upgrade - -
  • -
  • - Dev Extension HMR - -
  • -
  • - Join Beta Updates - -
  • - -
  • - Developer Mode - -
  • - - -
- +
- - diff --git a/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md b/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md index 7020b75..19f9805 100644 --- a/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md +++ b/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md @@ -1,3 +1,4 @@ + ## Permission Table @@ -6,6 +7,7 @@ +
Description
diff --git a/packages/ui/package.json b/packages/ui/package.json index ab988ee..ba7afbd 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -60,6 +60,7 @@ "@internationalized/date": "^3.6.0", "@std/semver": "npm:@jsr/std__semver@^1.0.3", "gsap": "^3.12.5", + "shiki-magic-move": "^0.5.2", "svelte-markdown": "^0.4.1" } } diff --git a/packages/ui/src/components/code/shiki.svelte b/packages/ui/src/components/code/shiki.svelte index 6b7b0dd..2ce1b5c 100644 --- a/packages/ui/src/components/code/shiki.svelte +++ b/packages/ui/src/components/code/shiki.svelte @@ -2,49 +2,39 @@ -
- {@html html} -
+{#await highlighter2 then highlighter} + +{/await} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c228f50..c23af70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1091,6 +1091,9 @@ importers: gsap: specifier: ^3.12.5 version: 3.12.5 + shiki-magic-move: + specifier: ^0.5.2 + version: 0.5.2(react@18.3.1)(shiki@1.24.2)(svelte@5.16.2)(vue@3.5.13(typescript@5.7.2)) svelte-markdown: specifier: ^0.4.1 version: 0.4.1(svelte@5.16.2) @@ -6059,6 +6062,9 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff-match-patch-es@0.1.1: + resolution: {integrity: sha512-+wE0HYKRuRdfsnpEFh41kTd0GlYFSDQacz2bQ4dwMDvYGtofqtYdJ6Gl4ZOgUPqPi7v8LSqMY0+/OedmIPHBZw==} + diff@7.0.0: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} @@ -9175,6 +9181,26 @@ packages: engines: {node: '>=4'} hasBin: true + shiki-magic-move@0.5.2: + resolution: {integrity: sha512-Y5EHPD+IPiUUFFMEKu6RE8wELsKp8CYgf420Z+EXVljOvyBakiR9rjt/1Cm0VcSr9rkyQANw6fTE1PqcNOnAGA==} + peerDependencies: + react: ^18.2.0 || ^19.0.0 + shiki: ^1.1.6 + solid-js: ^1.9.1 + svelte: ^5.0.0-0 + vue: ^3.4.0 + peerDependenciesMeta: + react: + optional: true + shiki: + optional: true + solid-js: + optional: true + svelte: + optional: true + vue: + optional: true + shiki@1.24.2: resolution: {integrity: sha512-TR1fi6mkRrzW+SKT5G6uKuc32Dj2EEa7Kj0k8kGqiBINb+C1TiflVOiT9ta6GqOJtC4fraxO5SLUaKBcSY38Fg==} @@ -15653,6 +15679,13 @@ snapshots: '@vue/shared': 3.5.13 vue: 3.5.13(typescript@5.6.3) + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.2))': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.7.2) + optional: true + '@vue/shared@3.5.13': {} '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.6.3))': @@ -16830,6 +16863,8 @@ snapshots: didyoumean@1.2.2: {} + diff-match-patch-es@0.1.1: {} + diff@7.0.0: {} dir-glob@3.0.1: @@ -17157,8 +17192,8 @@ snapshots: '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.2(eslint@8.57.1) eslint-plugin-react-hooks: 5.0.0(eslint@8.57.1) @@ -17186,37 +17221,37 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.15.0(eslint@8.57.1)(typescript@5.6.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -17227,7 +17262,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -20464,6 +20499,16 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 + shiki-magic-move@0.5.2(react@18.3.1)(shiki@1.24.2)(svelte@5.16.2)(vue@3.5.13(typescript@5.7.2)): + dependencies: + diff-match-patch-es: 0.1.1 + ohash: 1.1.4 + optionalDependencies: + react: 18.3.1 + shiki: 1.24.2 + svelte: 5.16.2 + vue: 3.5.13(typescript@5.7.2) + shiki@1.24.2: dependencies: '@shikijs/core': 1.24.2 @@ -22130,6 +22175,17 @@ snapshots: optionalDependencies: typescript: 5.6.3 + vue@3.5.13(typescript@5.7.2): + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.2)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.7.2 + optional: true + walkdir@0.4.1: {} wcwidth@1.0.1: