From 234f245a9ca45b395cf3ddeec37cc25d537d63a3 Mon Sep 17 00:00:00 2001 From: Huakun Date: Fri, 7 Mar 2025 13:00:15 -0500 Subject: [PATCH 01/14] Improve: add global loading screen (#237) * refactor(desktop): move ext loading code in store from +page.ts to +page.svelte try to solve blank screen on slow network * Revert "refactor(desktop): move ext loading code in store from +page.ts to +page.svelte" This reverts commit 4a0a695ce615cee695849c64746ba569680ff8c4. * feat(desktop): add full-screen loading state and border beam animation - Implement full-screen loading component with BorderBeam animation - Add fullScreenLoading flag to appState store - Update extension store pages to use full-screen loading - Add border beam animation to Tailwind config - Enhance page loading experience with visual feedback * feat(desktop): add dance animation to loading screen and update imports - Add Dance component to FullScreenLoading with subtle background effect - Remove unused fade transition import from layout - Update lz-string import in utils to use default import - Clean up compress test imports * feat(desktop): add back button to full-screen loading component - Import ArrowLeftIcon and Constants from @kksh/ui - Add back button with absolute positioning - Remove "Go Home" text button - Enhance loading screen with improved navigation * refactor(desktop): update BorderBeam component to use Svelte 5 runes --- .../components/animations/BorderBeam.svelte | 44 +++++++++++++ .../common/FullScreenLoading.svelte | 33 ++++++++++ apps/desktop/src/lib/stores/appState.ts | 7 +- apps/desktop/src/routes/+layout.svelte | 5 ++ .../routes/app/extension/store/+page.svelte | 37 ++++++++++- .../src/routes/app/extension/store/+page.ts | 64 ++++++++++-------- .../app/extension/store/[identifier]/+page.ts | 66 ++++++++++--------- apps/desktop/tailwind.config.ts | 8 ++- packages/types/src/appState.ts | 1 + .../ui/src/components/layouts/center.svelte | 3 +- packages/utils/__tests__/compress.test.ts | 1 - packages/utils/src/serde.ts | 4 +- 12 files changed, 208 insertions(+), 65 deletions(-) create mode 100644 apps/desktop/src/lib/components/animations/BorderBeam.svelte create mode 100644 apps/desktop/src/lib/components/common/FullScreenLoading.svelte diff --git a/apps/desktop/src/lib/components/animations/BorderBeam.svelte b/apps/desktop/src/lib/components/animations/BorderBeam.svelte new file mode 100644 index 0000000..62b4abb --- /dev/null +++ b/apps/desktop/src/lib/components/animations/BorderBeam.svelte @@ -0,0 +1,44 @@ + + +
diff --git a/apps/desktop/src/lib/components/common/FullScreenLoading.svelte b/apps/desktop/src/lib/components/common/FullScreenLoading.svelte new file mode 100644 index 0000000..0d1119d --- /dev/null +++ b/apps/desktop/src/lib/components/common/FullScreenLoading.svelte @@ -0,0 +1,33 @@ + + + + + + + Loading + + diff --git a/apps/desktop/src/lib/stores/appState.ts b/apps/desktop/src/lib/stores/appState.ts index 8e0e56e..4b0b437 100644 --- a/apps/desktop/src/lib/stores/appState.ts +++ b/apps/desktop/src/lib/stores/appState.ts @@ -8,7 +8,8 @@ export const defaultAppState: AppState = { loadingBar: false, defaultAction: "", actionPanel: undefined, - lockHideOnBlur: false // when dialog is open, we don't hide the app, we lock the hide on blur and unlock when dialog is closed + lockHideOnBlur: false, // when dialog is open, we don't hide the app, we lock the hide on blur and unlock when dialog is closed + fullScreenLoading: false } interface AppStateAPI { @@ -18,6 +19,7 @@ interface AppStateAPI { setDefaultAction: (defaultAction: string | null) => void setActionPanel: (actionPanel?: ActionSchema.ActionPanel) => void setLockHideOnBlur: (lockHideOnBlur: boolean) => void + setFullScreenLoading: (fullScreenLoading: boolean) => void } function createAppState(): Writable & AppStateAPI { @@ -40,6 +42,9 @@ function createAppState(): Writable & AppStateAPI { }, setLockHideOnBlur: (lockHideOnBlur: boolean) => { store.update((state) => ({ ...state, lockHideOnBlur })) + }, + setFullScreenLoading: (fullScreenLoading: boolean) => { + store.update((state) => ({ ...state, fullScreenLoading })) } } } diff --git a/apps/desktop/src/routes/+layout.svelte b/apps/desktop/src/routes/+layout.svelte index 98d1042..cd866f5 100644 --- a/apps/desktop/src/routes/+layout.svelte +++ b/apps/desktop/src/routes/+layout.svelte @@ -2,6 +2,8 @@ import { ParaglideJS } from "@inlang/paraglide-sveltekit" import { i18n } from "$lib/i18n" import "../app.css" + import FullScreenLoading from "@/components/common/FullScreenLoading.svelte" + import { appState } from "@/stores/appState" import { ModeWatcher, ThemeWrapper } from "@kksh/svelte5" import { Toaster } from "svelte-sonner" @@ -12,6 +14,9 @@ + {#if $appState.fullScreenLoading} + + {/if} {@render children()} diff --git a/apps/desktop/src/routes/app/extension/store/+page.svelte b/apps/desktop/src/routes/app/extension/store/+page.svelte index 4805a94..115d426 100644 --- a/apps/desktop/src/routes/app/extension/store/+page.svelte +++ b/apps/desktop/src/routes/app/extension/store/+page.svelte @@ -17,8 +17,9 @@ import { platform } from "@tauri-apps/plugin-os" import { goto } from "$app/navigation" import { ArrowLeft } from "lucide-svelte" - import type { Snippet } from "svelte" + import { onMount, type Snippet } from "svelte" import { toast } from "svelte-sonner" + import type { Action as SvelteAction } from "svelte/action" import { getInstallExtras } from "./[identifier]/helper.js" let { data } = $props() @@ -38,6 +39,38 @@ // ) // } + onMount(() => { + // setTimeout(() => { + // console.log("focus", listviewInputRef) + // listviewInputRef?.focus() + // }, 3_000) + }) + + const inputAction: SvelteAction = (node) => { + // the node has been mounted in the DOM + + $effect(() => { + // setup goes here + console.log("inputAction", node) + listviewInputRef?.focus() + return () => { + // teardown goes here + } + }) + } + + $effect(() => { + function docKeyDown(e: KeyboardEvent) { + if (e.key === "/") { + listviewInputRef?.focus() + } + } + document.addEventListener("keydown", docKeyDown) + return () => { + document.removeEventListener("keydown", docKeyDown) + } + }) + function onExtItemSelected(ext: SBExt) { goto(`./store/${ext.identifier}`) } @@ -142,7 +175,7 @@ { diff --git a/apps/desktop/src/routes/app/extension/store/+page.ts b/apps/desktop/src/routes/app/extension/store/+page.ts index c34e63f..7a8e681 100644 --- a/apps/desktop/src/routes/app/extension/store/+page.ts +++ b/apps/desktop/src/routes/app/extension/store/+page.ts @@ -1,43 +1,51 @@ -import { appConfig, extensions, installedStoreExts } from "@/stores" +import { appConfig, appState, extensions, installedStoreExts } from "@/stores" import { supabaseAPI } from "@/supabase" import type { ExtPackageJsonExtra } from "@kksh/api/models" import { isExtPathInDev, isUpgradable } from "@kksh/extension" import { SBExt } from "@kksh/supabase/models" +import { sleep } from "@kksh/utils" import { error } from "@sveltejs/kit" import { derived, get, type Readable } from "svelte/store" import type { PageLoad } from "./$types" -export const load: PageLoad = async (): Promise<{ +export const load: PageLoad = (): Promise<{ storeExtList: SBExt[] installedStoreExts: Readable installedExtsMap: Readable> upgradableExpsMap: Readable> }> => { - const storeExtList = await supabaseAPI.getExtList() - // map identifier to extItem - const storeExtsMap = Object.fromEntries(storeExtList.map((ext) => [ext.identifier, ext])) - const _appConfig = get(appConfig) - // const installedStoreExts = derived(extensions, ($extensions) => { - // if (!_appConfig.extensionPath) return [] - // return $extensions.filter((ext) => !isExtPathInDev(_appConfig.extensionPath!, ext.extPath)) - // }) - // map installed extension identifier to version - const installedExtsMap = derived(installedStoreExts, ($exts) => - Object.fromEntries($exts.map((ext) => [ext.kunkun.identifier, ext.version])) - ) - const upgradableExpsMap = derived(installedStoreExts, ($exts) => - Object.fromEntries( - $exts.map((ext) => { - const dbExt: SBExt | undefined = storeExtsMap[ext.kunkun.identifier] - return [ext.kunkun.identifier, dbExt ? isUpgradable(dbExt, ext.version) : false] - }) - ) - ) + appState.setFullScreenLoading(true) + return supabaseAPI + .getExtList() + .then(async (storeExtList) => { + // map identifier to extItem + const storeExtsMap = Object.fromEntries(storeExtList.map((ext) => [ext.identifier, ext])) + // const _appConfig = get(appConfig) + // const installedStoreExts = derived(extensions, ($extensions) => { + // if (!_appConfig.extensionPath) return [] + // return $extensions.filter((ext) => !isExtPathInDev(_appConfig.extensionPath!, ext.extPath)) + // }) + // map installed extension identifier to version + const installedExtsMap = derived(installedStoreExts, ($exts) => + Object.fromEntries($exts.map((ext) => [ext.kunkun.identifier, ext.version])) + ) + const upgradableExpsMap = derived(installedStoreExts, ($exts) => + Object.fromEntries( + $exts.map((ext) => { + const dbExt: SBExt | undefined = storeExtsMap[ext.kunkun.identifier] + return [ext.kunkun.identifier, dbExt ? isUpgradable(dbExt, ext.version) : false] + }) + ) + ) - return { - storeExtList, - installedStoreExts, - installedExtsMap, - upgradableExpsMap - } + return { + storeExtList, + installedStoreExts, + installedExtsMap, + upgradableExpsMap + } + }) + .finally(() => { + appState.setFullScreenLoading(false) + }) } diff --git a/apps/desktop/src/routes/app/extension/store/[identifier]/+page.ts b/apps/desktop/src/routes/app/extension/store/[identifier]/+page.ts index 9314102..9994a21 100644 --- a/apps/desktop/src/routes/app/extension/store/[identifier]/+page.ts +++ b/apps/desktop/src/routes/app/extension/store/[identifier]/+page.ts @@ -1,14 +1,15 @@ -import { extensions } from "@/stores" +import { appState, extensions } from "@/stores" import { supabaseAPI } from "@/supabase" import { KunkunExtManifest, type ExtPackageJsonExtra } from "@kksh/api/models" import { ExtPublishMetadata } from "@kksh/supabase/models" import type { Tables } from "@kksh/supabase/types" +import { sleep } from "@kksh/utils" import { error } from "@sveltejs/kit" import { toast } from "svelte-sonner" import * as v from "valibot" import type { PageLoad } from "./$types" -export const load: PageLoad = async ({ +export const load: PageLoad = ({ params }): Promise<{ extPublish: Tables<"ext_publish"> & { metadata: ExtPublishMetadata } @@ -18,36 +19,41 @@ export const load: PageLoad = async ({ identifier: string } }> => { - const { error: dbError, data: extPublish } = await supabaseAPI.getLatestExtPublish( - params.identifier - ) - const metadataParse = v.safeParse(ExtPublishMetadata, extPublish?.metadata ?? {}) - if (dbError) { - return error(400, { - message: dbError.message - }) - } - const metadata = metadataParse.success ? metadataParse.output : {} - const parseManifest = v.safeParse(KunkunExtManifest, extPublish.manifest) - if (!parseManifest.success) { - const errMsg = "Invalid extension manifest, you may need to upgrade your app." - toast.error(errMsg) - throw error(400, errMsg) - } + appState.setFullScreenLoading(true) + return supabaseAPI + .getLatestExtPublish(params.identifier) + .then(async ({ error: dbError, data: extPublish }) => { + const metadataParse = v.safeParse(ExtPublishMetadata, extPublish?.metadata ?? {}) + if (dbError) { + return error(400, { + message: dbError.message + }) + } + const metadata = metadataParse.success ? metadataParse.output : {} + const parseManifest = v.safeParse(KunkunExtManifest, extPublish.manifest) + if (!parseManifest.success) { + const errMsg = "Invalid extension manifest, you may need to upgrade your app." + toast.error(errMsg) + throw error(400, errMsg) + } - const { data: ext, error: extError } = await supabaseAPI.getExtension(params.identifier) - if (extError) { - return error(400, { - message: extError.message - }) - } + const { data: ext, error: extError } = await supabaseAPI.getExtension(params.identifier) + if (extError) { + return error(400, { + message: extError.message + }) + } - return { - extPublish: { ...extPublish, metadata }, - ext, - params, - manifest: parseManifest.output - } + return { + extPublish: { ...extPublish, metadata }, + ext, + params, + manifest: parseManifest.output + } + }) + .finally(() => { + appState.setFullScreenLoading(false) + }) } export const csr = true diff --git a/apps/desktop/tailwind.config.ts b/apps/desktop/tailwind.config.ts index b290bd7..1ac6cb6 100644 --- a/apps/desktop/tailwind.config.ts +++ b/apps/desktop/tailwind.config.ts @@ -86,12 +86,18 @@ const config: Config = { "caret-blink": { "0%,70%,100%": { opacity: "1" }, "20%,50%": { opacity: "0" } + }, + "border-beam": { + "100%": { + "offset-distance": "100%" + } } }, animation: { "accordion-down": "accordion-down 0.2s ease-out", "accordion-up": "accordion-up 0.2s ease-out", - "caret-blink": "caret-blink 1.25s ease-out infinite" + "caret-blink": "caret-blink 1.25s ease-out infinite", + "border-beam": "border-beam calc(var(--duration)*1s) infinite linear" } } }, diff --git a/packages/types/src/appState.ts b/packages/types/src/appState.ts index e6e04f6..969249a 100644 --- a/packages/types/src/appState.ts +++ b/packages/types/src/appState.ts @@ -7,4 +7,5 @@ export interface AppState { defaultAction: string | null actionPanel?: ActionSchema.ActionPanel lockHideOnBlur: boolean + fullScreenLoading: boolean } diff --git a/packages/ui/src/components/layouts/center.svelte b/packages/ui/src/components/layouts/center.svelte index 8cd1456..ca540a4 100644 --- a/packages/ui/src/components/layouts/center.svelte +++ b/packages/ui/src/components/layouts/center.svelte @@ -1,6 +1,7 @@ -
+
{@render children?.()}
diff --git a/packages/utils/__tests__/compress.test.ts b/packages/utils/__tests__/compress.test.ts index c0c3017..d9095c6 100644 --- a/packages/utils/__tests__/compress.test.ts +++ b/packages/utils/__tests__/compress.test.ts @@ -1,5 +1,4 @@ import { expect, test } from "bun:test" -import { compress, decompress } from "lz-string" import { compressString, decompressString } from "../src" test("decompressString", async () => { diff --git a/packages/utils/src/serde.ts b/packages/utils/src/serde.ts index bd0b9fb..42fdd4d 100644 --- a/packages/utils/src/serde.ts +++ b/packages/utils/src/serde.ts @@ -1,4 +1,6 @@ -import { compressToBase64, decompressFromBase64 } from "lz-string" +import lzString from "lz-string" + +const { compressToBase64, decompressFromBase64 } = lzString /** * This file contains the deserialization and compression functions I designed for the grid animation. From b4afcaac6ca48ed257d972cffe1d1e295f6f2347 Mon Sep 17 00:00:00 2001 From: Huakun Date: Mon, 10 Mar 2025 13:59:19 -0400 Subject: [PATCH 02/14] UI updates/fixes (#244) * fix: change icon in manifest * refactor(ui): move BorderBeam component to ui package and update imports * feat(ui): add new animation components and keyframes utility * chore(deps): remove svelte-motion and related dependencies * chore(deps): add svelte-motion and related dependencies * fix(ui): eslint * fix: extension store demo image display * fix(ui): go to settings item in dropdown menu * format --- .../common/FullScreenLoading.svelte | 3 +- apps/desktop/src/routes/app/+page.svelte | 12 +++- .../extension/store/[identifier]/+page.svelte | 4 +- packages/api/src/models/manifest.ts | 2 +- packages/svelte-animation/.gitignore | 34 +++++++++ packages/svelte-animation/README.md | 0 packages/svelte-animation/index.ts | 1 + packages/svelte-animation/package.json | 12 ++++ packages/svelte-animation/src/keyframes.ts | 63 ++++++++++++++++ packages/svelte-animation/src/utils.ts | 6 ++ packages/svelte-animation/tsconfig.json | 27 +++++++ .../permissions/autogenerated/reference.md | 2 - packages/ui/package.json | 5 ++ .../components/animation/AuroraText.svelte | 24 +++++++ .../components/animation}/BorderBeam.svelte | 2 +- .../src/components/animation/MagicCard.svelte | 72 +++++++++++++++++++ .../src/components/animation/RetroGrid.svelte | 34 +++++++++ .../components/animation/ShineBorder.svelte | 39 ++++++++++ .../components/animation/WordRotate.svelte | 35 +++++++++ packages/ui/src/components/animation/index.ts | 7 ++ .../src/components/animation/meteros.svelte | 41 +++++++++++ packages/ui/src/index.ts | 4 ++ pnpm-lock.yaml | 72 ++++++++++++++++++- 23 files changed, 488 insertions(+), 13 deletions(-) create mode 100644 packages/svelte-animation/.gitignore create mode 100644 packages/svelte-animation/README.md create mode 100644 packages/svelte-animation/index.ts create mode 100644 packages/svelte-animation/package.json create mode 100644 packages/svelte-animation/src/keyframes.ts create mode 100644 packages/svelte-animation/src/utils.ts create mode 100644 packages/svelte-animation/tsconfig.json create mode 100644 packages/ui/src/components/animation/AuroraText.svelte rename {apps/desktop/src/lib/components/animations => packages/ui/src/components/animation}/BorderBeam.svelte (97%) create mode 100644 packages/ui/src/components/animation/MagicCard.svelte create mode 100644 packages/ui/src/components/animation/RetroGrid.svelte create mode 100644 packages/ui/src/components/animation/ShineBorder.svelte create mode 100644 packages/ui/src/components/animation/WordRotate.svelte create mode 100644 packages/ui/src/components/animation/index.ts create mode 100644 packages/ui/src/components/animation/meteros.svelte diff --git a/apps/desktop/src/lib/components/common/FullScreenLoading.svelte b/apps/desktop/src/lib/components/common/FullScreenLoading.svelte index 0d1119d..6e77d73 100644 --- a/apps/desktop/src/lib/components/common/FullScreenLoading.svelte +++ b/apps/desktop/src/lib/components/common/FullScreenLoading.svelte @@ -2,9 +2,8 @@ import { appState } from "@/stores" import { cn } from "@/utils" import { Button } from "@kksh/svelte5" - import { Constants, Layouts, TauriLink } from "@kksh/ui" + import { BorderBeam, Constants, Layouts, TauriLink } from "@kksh/ui" import { goto } from "$app/navigation" - import BorderBeam from "$lib/components/animations/BorderBeam.svelte" import { ArrowLeftIcon, LoaderCircleIcon } from "lucide-svelte" import Dance from "../dance/dance.svelte" diff --git a/apps/desktop/src/routes/app/+page.svelte b/apps/desktop/src/routes/app/+page.svelte index 312139b..83b6eac 100644 --- a/apps/desktop/src/routes/app/+page.svelte +++ b/apps/desktop/src/routes/app/+page.svelte @@ -36,7 +36,13 @@ import { platform } from "@tauri-apps/plugin-os" import { exit } from "@tauri-apps/plugin-process" import { goto } from "$app/navigation" - import { ArrowBigUpIcon, CircleXIcon, EllipsisVerticalIcon, RefreshCcwIcon } from "lucide-svelte" + import { + ArrowBigUpIcon, + CircleXIcon, + EllipsisVerticalIcon, + RefreshCcwIcon, + SettingsIcon + } from "lucide-svelte" import { onMount } from "svelte" import { Inspect } from "svelte-inspect-value" @@ -178,8 +184,8 @@ ⌃++R - location.reload()}> - + goto(i18n.resolveRoute("/app/settings"))}> + {m.home_command_input_dropdown_open_preference()} {#if platform() === "macos"} diff --git a/apps/desktop/src/routes/app/extension/store/[identifier]/+page.svelte b/apps/desktop/src/routes/app/extension/store/[identifier]/+page.svelte index 03b4ea9..9a6309d 100644 --- a/apps/desktop/src/routes/app/extension/store/[identifier]/+page.svelte +++ b/apps/desktop/src/routes/app/extension/store/[identifier]/+page.svelte @@ -78,7 +78,9 @@ }) const demoImages = $derived( - extPublish.demo_images.map((src) => supabaseAPI.translateExtensionFilePathToUrl(src)) + extPublish.demo_images.map((src) => + src.startsWith("http") ? src : supabaseAPI.translateExtensionFilePathToUrl(src) + ) ) async function onInstallSelected() { diff --git a/packages/api/src/models/manifest.ts b/packages/api/src/models/manifest.ts index f55435e..2fa8bc0 100644 --- a/packages/api/src/models/manifest.ts +++ b/packages/api/src/models/manifest.ts @@ -9,7 +9,7 @@ import { ShellPermissionScopedSchema } from "../permissions" import { CmdType } from "./extension" -import { Icon } from "./icon" +import { BaseIcon as Icon } from "./icon" export enum OSPlatformEnum { linux = "linux", diff --git a/packages/svelte-animation/.gitignore b/packages/svelte-animation/.gitignore new file mode 100644 index 0000000..a14702c --- /dev/null +++ b/packages/svelte-animation/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/svelte-animation/README.md b/packages/svelte-animation/README.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/svelte-animation/index.ts b/packages/svelte-animation/index.ts new file mode 100644 index 0000000..cc2d4ee --- /dev/null +++ b/packages/svelte-animation/index.ts @@ -0,0 +1 @@ +export * as keyframes from "./src/keyframes" diff --git a/packages/svelte-animation/package.json b/packages/svelte-animation/package.json new file mode 100644 index 0000000..c99ebf5 --- /dev/null +++ b/packages/svelte-animation/package.json @@ -0,0 +1,12 @@ +{ + "name": "@kksh/svelte-animation", + "module": "index.ts", + "type": "module", + "private": true, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5" + } +} diff --git a/packages/svelte-animation/src/keyframes.ts b/packages/svelte-animation/src/keyframes.ts new file mode 100644 index 0000000..6435add --- /dev/null +++ b/packages/svelte-animation/src/keyframes.ts @@ -0,0 +1,63 @@ +import type { Config } from "tailwindcss" + +export const shinePulse: NonNullable["extend"]>["keyframes"] = { + "border-beam": { + "100%": { + "offset-distance": "100%" + } + }, + "text-gradient": { + to: { + backgroundPosition: "200% center" + } + }, + meteor: { + "0%": { transform: "rotate(215deg) translateX(0)", opacity: "1" }, + "70%": { opacity: "1" }, + "100%": { + transform: "rotate(215deg) translateX(-500px)", + opacity: "0" + } + }, + grid: { + "0%": { transform: "translateY(-50%)" }, + "100%": { transform: "translateY(0)" } + }, + "aurora-border": { + "0%, 100%": { borderRadius: "37% 29% 27% 27% / 28% 25% 41% 37%" }, + "25%": { borderRadius: "47% 29% 39% 49% / 61% 19% 66% 26%" }, + "50%": { borderRadius: "57% 23% 47% 72% / 63% 17% 66% 33%" }, + "75%": { borderRadius: "28% 49% 29% 100% / 93% 20% 64% 25%" } + }, + "aurora-1": { + "0%, 100%": { top: "0", right: "0" }, + "50%": { top: "50%", right: "25%" }, + "75%": { top: "25%", right: "50%" } + }, + "aurora-2": { + "0%, 100%": { top: "0", left: "0" }, + "60%": { top: "75%", left: "25%" }, + "85%": { top: "50%", left: "50%" } + }, + "aurora-3": { + "0%, 100%": { bottom: "0", left: "0" }, + "40%": { bottom: "50%", left: "25%" }, + "65%": { bottom: "25%", left: "50%" } + }, + "aurora-4": { + "0%, 100%": { bottom: "0", right: "0" }, + "50%": { bottom: "25%", right: "40%" }, + "90%": { bottom: "50%", right: "25%" } + }, + "shine-pulse": { + "0%": { + "background-position": "0% 0%" + }, + "50%": { + "background-position": "100% 100%" + }, + to: { + "background-position": "0% 0%" + } + } +} diff --git a/packages/svelte-animation/src/utils.ts b/packages/svelte-animation/src/utils.ts new file mode 100644 index 0000000..9a7122c --- /dev/null +++ b/packages/svelte-animation/src/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/packages/svelte-animation/tsconfig.json b/packages/svelte-animation/tsconfig.json new file mode 100644 index 0000000..238655f --- /dev/null +++ b/packages/svelte-animation/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} diff --git a/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md b/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md index 43a78fd..0475fc5 100644 --- a/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md +++ b/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md @@ -1,4 +1,3 @@ - ## Permission Table @@ -7,7 +6,6 @@ -
Description
diff --git a/packages/ui/package.json b/packages/ui/package.json index d38dd41..2e0f428 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -28,6 +28,10 @@ "./extension": { "types": "./src/components/extension/index.ts", "svelte": "./src/components/extension/index.ts" + }, + "./animation": { + "types": "./src/components/animation/index.ts", + "svelte": "./src/components/animation/index.ts" } }, "scripts": { @@ -83,6 +87,7 @@ "shiki-magic-move": "^0.5.2", "svelte-inspect-value": "^0.3.0", "svelte-markdown": "^0.4.1", + "svelte-motion": "^0.12.2", "valibot": "1.0.0-beta.12" } } diff --git a/packages/ui/src/components/animation/AuroraText.svelte b/packages/ui/src/components/animation/AuroraText.svelte new file mode 100644 index 0000000..1b73fa7 --- /dev/null +++ b/packages/ui/src/components/animation/AuroraText.svelte @@ -0,0 +1,24 @@ + + + + {@render children()} + + + + + + + diff --git a/apps/desktop/src/lib/components/animations/BorderBeam.svelte b/packages/ui/src/components/animation/BorderBeam.svelte similarity index 97% rename from apps/desktop/src/lib/components/animations/BorderBeam.svelte rename to packages/ui/src/components/animation/BorderBeam.svelte index 62b4abb..27d055f 100644 --- a/apps/desktop/src/lib/components/animations/BorderBeam.svelte +++ b/packages/ui/src/components/animation/BorderBeam.svelte @@ -1,5 +1,5 @@ + + + +
+
+ + +
+

Magic Card

+
+
+
+ +
+
+
+ + diff --git a/packages/ui/src/components/animation/RetroGrid.svelte b/packages/ui/src/components/animation/RetroGrid.svelte new file mode 100644 index 0000000..0fe112f --- /dev/null +++ b/packages/ui/src/components/animation/RetroGrid.svelte @@ -0,0 +1,34 @@ + + +
+ +
+
+
+ + +
+
diff --git a/packages/ui/src/components/animation/ShineBorder.svelte b/packages/ui/src/components/animation/ShineBorder.svelte new file mode 100644 index 0000000..2af2599 --- /dev/null +++ b/packages/ui/src/components/animation/ShineBorder.svelte @@ -0,0 +1,39 @@ + + +
+
+ + Default +
diff --git a/packages/ui/src/components/animation/WordRotate.svelte b/packages/ui/src/components/animation/WordRotate.svelte new file mode 100644 index 0000000..fac0143 --- /dev/null +++ b/packages/ui/src/components/animation/WordRotate.svelte @@ -0,0 +1,35 @@ + + +
+ {#key index} + +

+ {words[index]} +

+ {/key} +
diff --git a/packages/ui/src/components/animation/index.ts b/packages/ui/src/components/animation/index.ts new file mode 100644 index 0000000..4beeff8 --- /dev/null +++ b/packages/ui/src/components/animation/index.ts @@ -0,0 +1,7 @@ +export { default as GridAnimation } from "./grid-animation.svelte" +export { default as BorderBeam } from "./BorderBeam.svelte" +export { default as Meteors } from "./meteros.svelte" +export { default as RetroGrid } from "./RetroGrid.svelte" +export { default as AuroraText } from "./AuroraText.svelte" +export { default as WordRotate } from "./WordRotate.svelte" +export { default as MagicCard } from "./MagicCard.svelte" diff --git a/packages/ui/src/components/animation/meteros.svelte b/packages/ui/src/components/animation/meteros.svelte new file mode 100644 index 0000000..f46c56a --- /dev/null +++ b/packages/ui/src/components/animation/meteros.svelte @@ -0,0 +1,41 @@ + + +{#each meteorStyles as style, idx} + + +
+
+{/each} diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 462f48c..aec9634 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -9,6 +9,10 @@ export * as Main from "./components/main/index" export * as Extension from "./components/extension/index" export { default as GridAnimation } from "./components/animation/grid-animation.svelte" export { default as ViewTransition } from "./components/transition/view-transition.svelte" +export { default as BorderBeam } from "./components/animation/BorderBeam.svelte" +export { default as Meteors } from "./components/animation/meteros.svelte" +export { default as RetroGrid } from "./components/animation/RetroGrid.svelte" +export { default as AuroraText } from "./components/animation/AuroraText.svelte" export * as Constants from "./constants" export * as Form from "./components/ui/form" export { default as ModeToggle } from "./components/theme/mode-toggle.svelte" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f862101..0b23f7b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -335,7 +335,7 @@ importers: version: 8.25.0(eslint@9.21.0(jiti@2.4.0))(typescript@5.6.3) autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.49) + version: 10.4.20(postcss@8.5.3) bits-ui: specifier: 1.0.0-next.86 version: 1.0.0-next.86(svelte@5.20.5) @@ -791,6 +791,16 @@ importers: specifier: latest version: 1.2.4 + packages/svelte-animation: + dependencies: + typescript: + specifier: ^5 + version: 5.7.3 + devDependencies: + '@types/bun': + specifier: latest + version: 1.2.4 + packages/tauri-plugins/jarvis: dependencies: typescript: @@ -1246,6 +1256,9 @@ importers: svelte-markdown: specifier: ^0.4.1 version: 0.4.1(svelte@5.20.5) + svelte-motion: + specifier: ^0.12.2 + version: 0.12.2(svelte@5.20.5) valibot: specifier: 1.0.0-beta.12 version: 1.0.0-beta.12(typescript@5.7.3) @@ -7835,6 +7848,9 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + framesync@6.1.2: + resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} + fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -8121,6 +8137,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + highlight.js@11.11.1: resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} engines: {node: '>=12.0.0'} @@ -9660,6 +9679,9 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + popmotion@11.0.5: + resolution: {integrity: sha512-la8gPM1WYeFznb/JqF4GiTkRRPZsfaj2+kCxqQgr2MJylMmIKUwBfWW8Wa5fml/8gmtlD5yI01MP1QCZPWmppA==} + portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -10829,6 +10851,9 @@ packages: style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + style-value-types@5.1.2: + resolution: {integrity: sha512-Vs9fNreYF9j6W2VvuDTP7kepALi7sk0xtk2Tu8Yxi9UoajJdEVpNpCov0HsLTqXvNGKX+Uv09pkozVITi1jf3Q==} + styled-jsx@5.1.1: resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -10928,6 +10953,11 @@ packages: peerDependencies: svelte: ^4.0.0 + svelte-motion@0.12.2: + resolution: {integrity: sha512-7RrdRz9iVP55B9HT/C0hYW3pyrKlF61kAby/AkDtOAP0uHFQDrfd0qQetDC81cEsK9b40jt+jfcqSAXcA7LPEw==} + peerDependencies: + svelte: '>=3.35.0 || ^4.0.0 || ^5.0.0 || ^5.0.0-next.0' + svelte-persisted-store@0.12.0: resolution: {integrity: sha512-BdBQr2SGSJ+rDWH8/aEV5GthBJDapVP0GP3fuUCA7TjYG5ctcB+O9Mj9ZC0+Jo1oJMfZUd1y9H68NFRR5MyIJA==} engines: {node: '>=0.14'} @@ -18489,6 +18519,16 @@ snapshots: postcss: 8.5.1 postcss-value-parser: 4.2.0 + autoprefixer@10.4.20(postcss@8.5.3): + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001676 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.3 + postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 @@ -20458,6 +20498,10 @@ snapshots: fraction.js@4.3.7: {} + framesync@6.1.2: + dependencies: + tslib: 2.4.0 + fresh@0.5.2: {} fs-extra@10.1.0: @@ -20777,6 +20821,8 @@ snapshots: he@1.2.0: {} + hey-listen@1.0.8: {} + highlight.js@11.11.1: {} hookable@5.5.3: {} @@ -22432,6 +22478,13 @@ snapshots: pluralize@8.0.0: {} + popmotion@11.0.5: + dependencies: + framesync: 6.1.2 + hey-listen: 1.0.8 + style-value-types: 5.1.2 + tslib: 2.4.0 + portfinder@1.0.32: dependencies: async: 2.6.4 @@ -23653,6 +23706,11 @@ snapshots: dependencies: inline-style-parser: 0.2.4 + style-value-types@5.1.2: + dependencies: + hey-listen: 1.0.8 + tslib: 2.4.0 + styled-jsx@5.1.1(react@18.3.1): dependencies: client-only: 0.0.1 @@ -23769,6 +23827,15 @@ snapshots: marked: 5.1.2 svelte: 5.20.5 + svelte-motion@0.12.2(svelte@5.20.5): + dependencies: + '@types/react': 18.3.12 + framesync: 6.1.2 + popmotion: 11.0.5 + style-value-types: 5.1.2 + svelte: 5.20.5 + tslib: 2.8.1 + svelte-persisted-store@0.12.0(svelte@5.16.6): dependencies: svelte: 5.16.6 @@ -24374,8 +24441,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.4.0: - optional: true + tslib@2.4.0: {} tslib@2.8.1: {} From cd7301255be3ba04668c1fe0f1ebae02839ce4ff Mon Sep 17 00:00:00 2001 From: Huakun Date: Thu, 13 Mar 2025 21:06:33 -0400 Subject: [PATCH 03/14] perf: remove deno and ffmpeg instruction from onboard; use tauri-plugin-svelte store (#245) --- Cargo.lock | 88 +++++++- apps/desktop/package.json | 1 + apps/desktop/src-tauri/Cargo.toml | 1 + .../src-tauri/capabilities/svelte.json | 5 + apps/desktop/src-tauri/src/lib.rs | 1 + apps/desktop/src-tauri/tauri.conf.json | 1 + .../lib/components/context/AppContext.svelte | 6 +- apps/desktop/src/lib/stores/appConfig.ts | 193 +++++++++++------- apps/desktop/src/routes/app/+page.svelte | 1 + .../routes/app/help/onboarding/+page.svelte | 23 ++- .../permissions/autogenerated/reference.md | 2 + packages/types/src/appConfig.ts | 2 +- pnpm-lock.yaml | 84 ++++---- 13 files changed, 284 insertions(+), 124 deletions(-) create mode 100644 apps/desktop/src-tauri/capabilities/svelte.json diff --git a/Cargo.lock b/Cargo.lock index c70f455..b1bf5e6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -705,7 +705,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools", + "itertools 0.12.1", "lazy_static", "lazycell", "log", @@ -1774,6 +1774,20 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04d2cd9c18b9f454ed67da600630b021a8a80bf33f8c95896ab33aaf1c26b728" +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "data-url" version = "0.3.1" @@ -3746,6 +3760,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "0.4.8" @@ -3968,6 +3991,7 @@ dependencies = [ "tauri-plugin-single-instance", "tauri-plugin-store", "tauri-plugin-stronghold", + "tauri-plugin-svelte", "tauri-plugin-system-info", "tauri-plugin-updater", "tauri-plugin-upload", @@ -5693,7 +5717,7 @@ checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", "heck 0.5.0", - "itertools", + "itertools 0.12.1", "log", "multimap", "once_cell", @@ -5713,7 +5737,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools", + "itertools 0.12.1", "proc-macro2", "quote", "syn 2.0.87", @@ -5965,7 +5989,7 @@ dependencies = [ "built", "cfg-if", "interpolate_name", - "itertools", + "itertools 0.12.1", "libc", "libfuzzer-sys", "log", @@ -7977,6 +8001,19 @@ dependencies = [ "zeroize", ] +[[package]] +name = "tauri-plugin-svelte" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab0a4d739af1108c6572e6249113190135c66a45586d0f8f93b3ee532e6176f" +dependencies = [ + "serde", + "tauri", + "tauri-plugin", + "tauri-store", + "tracing", +] + [[package]] name = "tauri-plugin-system-info" version = "2.0.9" @@ -8097,6 +8134,49 @@ dependencies = [ "wry", ] +[[package]] +name = "tauri-store" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4e7c0776d9f8b54fd4788f4e471ce83b4c6cf62079799830a3735582a51fc4" +dependencies = [ + "dashmap", + "futures", + "itertools 0.14.0", + "serde", + "serde_json", + "tauri", + "tauri-store-macros", + "tauri-store-utils", + "thiserror 2.0.3", + "tokio", + "tracing", +] + +[[package]] +name = "tauri-store-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabed02238bc887f75887b315c6a14d9571ab463c1a188cc27ec2f7e917b06c3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "tauri-store-utils" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b983a259b22d622ce74b957140efa161bd75c6bfd47b7bf621c98dd05b1a2474" +dependencies = [ + "futures", + "tauri", + "thiserror 2.0.3", + "tokio", + "tracing", +] + [[package]] name = "tauri-utils" version = "2.1.1" diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 8381a71..d0c2572 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -42,6 +42,7 @@ "sveltekit-superforms": "^2.23.1", "tauri-plugin-clipboard-api": "^2.1.11", "tauri-plugin-shellx-api": "^2.0.16", + "tauri-plugin-svelte": "1.2.1", "tauri-plugin-user-input-api": "workspace:*", "uuid": "^11.1.0" }, diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index f22775d..80f009c 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -71,3 +71,4 @@ tauri-plugin-cli = "2" tauri-plugin-global-shortcut = "2.0.1" tauri-plugin-single-instance = { version = "2", features = ["deep-link"] } tauri-plugin-updater = "2.0.2" +tauri-plugin-svelte = "1.2.1" diff --git a/apps/desktop/src-tauri/capabilities/svelte.json b/apps/desktop/src-tauri/capabilities/svelte.json new file mode 100644 index 0000000..eac7c73 --- /dev/null +++ b/apps/desktop/src-tauri/capabilities/svelte.json @@ -0,0 +1,5 @@ +{ + "identifier": "svelte", + "windows": ["*"], + "permissions": ["svelte:default", "core:event:default"] +} diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs index 7eacd17..9777cb6 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/apps/desktop/src-tauri/src/lib.rs @@ -112,6 +112,7 @@ pub fn run() { .plugin(tauri_plugin_deep_link::init()) .plugin(tauri_plugin_shell::init()) .plugin(tauri_plugin_os::init()) + .plugin(tauri_plugin_svelte::init()) .plugin(tauri_plugin_process::init()) .plugin(tauri_plugin_autostart::init( MacosLauncher::LaunchAgent, diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json index 0fc2bc4..36d32ad 100644 --- a/apps/desktop/src-tauri/tauri.conf.json +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -20,6 +20,7 @@ "url": "/app", "title": "Kunkun", "width": 800, + "label": "main", "visible": false, "height": 600, "decorations": true, diff --git a/apps/desktop/src/lib/components/context/AppContext.svelte b/apps/desktop/src/lib/components/context/AppContext.svelte index f5faa46..ef9990b 100644 --- a/apps/desktop/src/lib/components/context/AppContext.svelte +++ b/apps/desktop/src/lib/components/context/AppContext.svelte @@ -1,8 +1,8 @@ diff --git a/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md b/packages/tauri-plugins/jarvis/permissions/autogenerated/reference.md index 0475fc5..43a78fd 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/types/src/appConfig.ts b/packages/types/src/appConfig.ts index f6ec643..2d6b225 100644 --- a/packages/types/src/appConfig.ts +++ b/packages/types/src/appConfig.ts @@ -23,7 +23,7 @@ export const PersistedAppConfig = v.object({ export type PersistedAppConfig = v.InferOutput -export type AppConfig = PersistedAppConfig & { +export type AppConfigState = PersistedAppConfig & { isInitialized: boolean language: string extensionsInstallDir?: string diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b23f7b..7cc8972 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -144,7 +144,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 '@types/debug': specifier: ^4.1.12 version: 4.1.12 @@ -184,7 +184,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 @@ -281,6 +281,9 @@ importers: tauri-plugin-shellx-api: specifier: ^2.0.16 version: 2.0.16 + tauri-plugin-svelte: + specifier: 1.2.1 + version: 1.2.1 tauri-plugin-user-input-api: specifier: workspace:* version: link:../../vendors/tauri-plugin-user-input @@ -323,7 +326,7 @@ importers: version: 2.3.1 '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 '@types/semver': specifier: ^7.5.8 version: 7.5.8 @@ -335,7 +338,7 @@ importers: version: 8.25.0(eslint@9.21.0(jiti@2.4.0))(typescript@5.6.3) autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.3) + version: 10.4.20(postcss@8.4.49) bits-ui: specifier: 1.0.0-next.86 version: 1.0.0-next.86(svelte@5.20.5) @@ -474,7 +477,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 '@types/lodash': specifier: ^4.17.14 version: 4.17.14 @@ -514,7 +517,7 @@ importers: version: link:../typescript-config '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 packages/config-eslint: dependencies: @@ -557,7 +560,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 packages/extensions/demo-worker-template-ext: dependencies: @@ -585,7 +588,7 @@ importers: version: 11.1.6(rollup@4.34.2)(tslib@2.8.1)(typescript@5.7.3) '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 rollup-plugin-visualizer: specifier: ^5.12.0 version: 5.12.0(rollup@4.34.2) @@ -692,7 +695,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 packages/grpc: dependencies: @@ -711,7 +714,7 @@ importers: version: 0.7.13 '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 '@types/google-protobuf': specifier: ^3.15.12 version: 3.15.12 @@ -739,7 +742,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 verify-package-export: specifier: ^0.0.3 version: 0.0.3(typescript@5.7.3) @@ -767,7 +770,7 @@ importers: version: 2.48.0 '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 '@valibot/to-json-schema': specifier: 1.0.0-beta.4 version: 1.0.0-beta.4(valibot@1.0.0-beta.10(typescript@5.7.3)) @@ -789,7 +792,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 packages/svelte-animation: dependencies: @@ -799,7 +802,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 packages/tauri-plugins/jarvis: dependencies: @@ -818,7 +821,7 @@ importers: version: 2.48.0 '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 packages/templates/template-ext-headless: dependencies: @@ -837,7 +840,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 packages/templates/template-ext-next: dependencies: @@ -1189,7 +1192,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 packages/types: dependencies: @@ -1199,7 +1202,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 packages/typescript-config: {} @@ -1277,7 +1280,7 @@ importers: version: 0.1.15(lucide-svelte@0.471.0(svelte@5.20.5))(svelte-sonner@0.3.28(svelte@5.20.5))(svelte@5.20.5)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.17.3(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.20.5)(vite@6.2.0(@types/node@22.13.1)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.20.5)(vite@6.2.0(@types/node@22.13.1)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.20.5)(typescript@5.7.3))(typescript@5.7.3) '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 '@typescript-eslint/eslint-plugin': specifier: ^8.20.0 version: 8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.21.0(jiti@2.4.0))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.0))(typescript@5.7.3) @@ -1359,7 +1362,7 @@ importers: devDependencies: '@types/bun': specifier: latest - version: 1.2.4 + version: 1.2.5 vendors/tauri-plugin-keyring: dependencies: @@ -2584,6 +2587,7 @@ packages: '@faker-js/faker@9.5.1': resolution: {integrity: sha512-0fzMEDxkExR2cn731kpDaCCnBGBUOIXEi2S1N5l8Hltp6aPf4soTMJ+g4k8r2sI5oB+rpwIW8Uy/6jkwGpnWPg==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} + deprecated: Please update to a newer version '@floating-ui/core@1.6.8': resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} @@ -5267,6 +5271,9 @@ packages: '@tauri-apps/plugin-upload@2.2.1': resolution: {integrity: sha512-2EyVhJYLAp2mJH0UzO3QGU0vPk/YWvAfdI2wXbczyzEZY/AZVa9wConyB1TV/NGhyJRim4LwWgkmnEvcKLkECw==} + '@tauri-store/shared@0.6.0': + resolution: {integrity: sha512-2KBezqqkw68HvvXHEtbbpxyQHDjymBUZl10YuAsNRI8DHFIA0n18WE7NRyQ93+H7IzDP1/B41m2/rcMDHBSiKw==} + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -5308,8 +5315,8 @@ packages: '@types/btoa-lite@1.0.2': resolution: {integrity: sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==} - '@types/bun@1.2.4': - resolution: {integrity: sha512-QtuV5OMR8/rdKJs213iwXDpfVvnskPXY/S0ZiFbsTjQZycuqPbMW8Gf/XhLfwE5njW8sxI2WjISURXPlHypMFA==} + '@types/bun@1.2.5': + resolution: {integrity: sha512-w2OZTzrZTVtbnJew1pdFmgV99H0/L+Pvw+z1P67HaR18MHOzYnTYOi6qzErhK8HyT+DB782ADVPPE92Xu2/Opg==} '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -6369,8 +6376,8 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - bun-types@1.2.4: - resolution: {integrity: sha512-nDPymR207ZZEoWD4AavvEaa/KZe/qlrbMSchqpQwovPZCKc7pwMoENjEtHgMKaAjJhy+x6vfqSBA1QU3bJgs0Q==} + bun-types@1.2.5: + resolution: {integrity: sha512-3oO6LVGGRRKI4kHINx5PIdIgnLRb7l/SprhzqXapmoYkFl5m4j6EvALvbDVuuBFaamB46Ap6HCUxIXNLCGy+tg==} bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} @@ -11102,6 +11109,9 @@ packages: tauri-plugin-shellx-api@2.0.16: resolution: {integrity: sha512-I6o/+IoG6++x4L5d20ciOooOeUEn0bOKvMiYhQxlv1Q3zAZPdpJKjAHJxRpZZwpR6yUY788qiQny7IbTywqLFw==} + tauri-plugin-svelte@1.2.1: + resolution: {integrity: sha512-xusgcHpnXqRt4RO+3UjqAlOCTh5PcxzDEa11Qd8Z3cHz6MMl0PLE6j0ExeAur+dTiZVLEGFsIm6Qd0LY9ED/wA==} + tauri-plugin-system-info-api@2.0.8: resolution: {integrity: sha512-EFdLXNGp6Zu9SNsZCkU+55A8027OnrVw/TQrd0oJHgfZzs4qvm1iMmSvyid4MLftt33iZDhjCzxYijaaOxeKSg==} @@ -17090,6 +17100,10 @@ snapshots: dependencies: '@tauri-apps/api': 2.3.0 + '@tauri-store/shared@0.6.0': + dependencies: + '@tauri-apps/api': 2.3.0 + '@trysound/sax@0.2.0': {} '@ts-graphviz/adapter@2.0.5': @@ -17134,9 +17148,9 @@ snapshots: '@types/btoa-lite@1.0.2': {} - '@types/bun@1.2.4': + '@types/bun@1.2.5': dependencies: - bun-types: 1.2.4 + bun-types: 1.2.5 '@types/cookie@0.6.0': {} @@ -18519,16 +18533,6 @@ snapshots: postcss: 8.5.1 postcss-value-parser: 4.2.0 - autoprefixer@10.4.20(postcss@8.5.3): - dependencies: - browserslist: 4.24.2 - caniuse-lite: 1.0.30001676 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.5.3 - postcss-value-parser: 4.2.0 - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 @@ -18684,7 +18688,7 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bun-types@1.2.4: + bun-types@1.2.5: dependencies: '@types/node': 22.13.1 '@types/ws': 8.5.14 @@ -24268,6 +24272,12 @@ snapshots: dependencies: '@tauri-apps/api': 2.3.0 + tauri-plugin-svelte@1.2.1: + dependencies: + '@tauri-apps/api': 2.3.0 + '@tauri-store/shared': 0.6.0 + svelte: 5.20.5 + tauri-plugin-system-info-api@2.0.8(typescript@5.7.2): dependencies: '@tauri-apps/api': 2.3.0 From 310969e597573ef7d5ab695b9556a01e72be7b9c Mon Sep 17 00:00:00 2001 From: Huakun Date: Thu, 13 Mar 2025 21:30:52 -0400 Subject: [PATCH 04/14] UI Updates (#246) * minor ui updates to shiki * feat: add markdown renderer * feat(ui): add scroll area component and expand markdown renderer * feat(ui): expand markdown syntax highlighting with additional language support * feat(ui): add markdown language support to syntax highlighting * feat(ui): update markdown syntax highlighting theme to GitHub Dark Default * feat(ui): add bash language support to markdown syntax highlighting * feat: add globe component * Change RetroGrid bg color * feat: add headless command list to store detail component * feat: update markdown renderer Replace svelte-markdown with svelte-exmarkdown, with custom tauri link renderer and code highlight support * format and fix eslint --- apps/desktop/package.json | 2 +- deno.lock | 927 +++++++++++++-- .../demo-worker-template-ext/src/index.ts | 54 +- packages/ui/package.json | 13 +- .../ui/src/components/animation/Globe.svelte | 120 ++ .../src/components/animation/MagicCard.svelte | 5 + .../src/components/animation/RetroGrid.svelte | 4 +- packages/ui/src/components/animation/index.ts | 1 + packages/ui/src/components/code/shiki.svelte | 2 +- .../ui/src/components/common/TauriLink.svelte | 18 +- .../extension/StoreExtDetail.svelte | 2 +- .../extension/templates/Markdown.svelte | 4 +- packages/ui/src/components/markdown/A.svelte | 18 + .../src/components/markdown/Markdown.svelte | 88 ++ .../ui/src/components/markdown/Pre.svelte | 25 + packages/ui/src/components/markdown/index.ts | 1 + .../ui/src/components/ui/scroll-area/index.ts | 10 + .../scroll-area/scroll-area-scrollbar.svelte | 29 + .../ui/scroll-area/scroll-area.svelte | 34 + packages/ui/src/index.ts | 1 + pnpm-lock.yaml | 1003 ++++++++++++++++- 21 files changed, 2212 insertions(+), 149 deletions(-) create mode 100644 packages/ui/src/components/animation/Globe.svelte create mode 100644 packages/ui/src/components/markdown/A.svelte create mode 100644 packages/ui/src/components/markdown/Markdown.svelte create mode 100644 packages/ui/src/components/markdown/Pre.svelte create mode 100644 packages/ui/src/components/markdown/index.ts create mode 100644 packages/ui/src/components/ui/scroll-area/index.ts create mode 100644 packages/ui/src/components/ui/scroll-area/scroll-area-scrollbar.svelte create mode 100644 packages/ui/src/components/ui/scroll-area/scroll-area.svelte diff --git a/apps/desktop/package.json b/apps/desktop/package.json index d0c2572..8022b33 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@kksh/desktop", - "version": "0.1.33", + "version": "0.1.34", "description": "", "type": "module", "scripts": { diff --git a/deno.lock b/deno.lock index e3f730a..4d1e175 100644 --- a/deno.lock +++ b/deno.lock @@ -37,6 +37,7 @@ "npm:@rollup/plugin-typescript@^11.1.6": "11.1.6_rollup@4.34.0_tslib@2.8.1_typescript@5.6.3", "npm:@rollup/plugin-typescript@^12.1.2": "12.1.2_rollup@4.34.0_tslib@2.8.1_typescript@5.6.3", "npm:@shikijs/langs@^2.3.2": "2.3.2", + "npm:@shikijs/rehype@^3.2.1": "3.2.1", "npm:@shikijs/themes@^2.3.2": "2.3.2", "npm:@supabase/ssr@~0.5.2": "0.5.2_@supabase+supabase-js@2.48.1", "npm:@supabase/supabase-js@^2.48.0": "2.48.1", @@ -109,6 +110,7 @@ "npm:chalk@^5.4.1": "5.4.1", "npm:class-variance-authority@0.7": "0.7.1", "npm:clsx@^2.1.1": "2.1.1", + "npm:cobe@~0.6.3": "0.6.3", "npm:commander@13": "13.1.0", "npm:commander@^12.1.0": "12.1.0", "npm:console-table-printer@^2.12.1": "2.12.1", @@ -138,6 +140,7 @@ "npm:handlebars@^4.7.8": "4.7.8", "npm:i18next@^23.15.1": "23.16.8", "npm:inquirer@^10.1.2": "10.2.2", + "npm:katex@~0.16.21": "0.16.21", "npm:kkrpc@~0.1.1": "0.1.1_typescript@5.6.3", "npm:kkrpc@~0.1.2": "0.1.2_typescript@5.6.3", "npm:lodash@^4.17.21": "4.17.21", @@ -169,6 +172,10 @@ "npm:react-dom@^18.3.1": "18.3.1_react@18.3.1", "npm:react@18.3.1": "18.3.1", "npm:react@^18.3.1": "18.3.1", + "npm:rehype-class-names@2": "2.0.0", + "npm:rehype-katex@^7.0.1": "7.0.1", + "npm:rehype-raw@7": "7.0.0", + "npm:remark-math@6": "6.0.0", "npm:rollup-plugin-visualizer@^5.12.0": "5.14.0_rollup@4.34.0", "npm:rollup@^4.28.1": "4.34.0", "npm:rollup@^4.30.1": "4.34.0", @@ -179,8 +186,9 @@ "npm:supabase@^2.15.8": "2.15.8", "npm:svelte-check@^4.1.1": "4.1.4_svelte@5.19.6__acorn@8.14.0_typescript@5.6.3", "npm:svelte-check@^4.1.4": "4.1.4_svelte@5.19.6__acorn@8.14.0_typescript@5.6.3", + "npm:svelte-exmarkdown@^4.0.3": "4.0.3_svelte@5.19.6__acorn@8.14.0", "npm:svelte-inspect-value@0.3": "0.3.0_svelte@5.19.6__acorn@8.14.0", - "npm:svelte-markdown@~0.4.1": "0.4.1_svelte@4.2.19", + "npm:svelte-motion@~0.12.2": "0.12.2_svelte@5.19.6__acorn@8.14.0", "npm:svelte-radix@^2.0.1": "2.0.1_svelte@5.19.6__acorn@8.14.0", "npm:svelte-sonner@~0.3.28": "0.3.28_svelte@5.19.6__acorn@8.14.0", "npm:svelte@^5.16.6": "5.19.6_acorn@8.14.0", @@ -1692,9 +1700,9 @@ "@gerrit0/mini-shiki@1.27.2": { "integrity": "sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==", "dependencies": [ - "@shikijs/engine-oniguruma", + "@shikijs/engine-oniguruma@1.29.2", "@shikijs/types@1.29.2", - "@shikijs/vscode-textmate" + "@shikijs/vscode-textmate@10.0.1" ] }, "@grpc/grpc-js@1.12.5": { @@ -4429,27 +4437,51 @@ "@shikijs/core@1.29.2": { "integrity": "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==", "dependencies": [ - "@shikijs/engine-javascript", - "@shikijs/engine-oniguruma", + "@shikijs/engine-javascript@1.29.2", + "@shikijs/engine-oniguruma@1.29.2", "@shikijs/types@1.29.2", - "@shikijs/vscode-textmate", + "@shikijs/vscode-textmate@10.0.1", "@types/hast", - "hast-util-to-html" + "hast-util-to-html@9.0.4" + ] + }, + "@shikijs/core@3.2.1": { + "integrity": "sha512-FhsdxMWYu/C11sFisEp7FMGBtX/OSSbnXZDMBhGuUDBNTdsoZlMSgQv5f90rwvzWAdWIW6VobD+G3IrazxA6dQ==", + "dependencies": [ + "@shikijs/types@3.2.1", + "@shikijs/vscode-textmate@10.0.2", + "@types/hast", + "hast-util-to-html@9.0.5" ] }, "@shikijs/engine-javascript@1.29.2": { "integrity": "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==", "dependencies": [ "@shikijs/types@1.29.2", - "@shikijs/vscode-textmate", - "oniguruma-to-es" + "@shikijs/vscode-textmate@10.0.1", + "oniguruma-to-es@2.3.0" + ] + }, + "@shikijs/engine-javascript@3.2.1": { + "integrity": "sha512-eMdcUzN3FMQYxOmRf2rmU8frikzoSHbQDFH2hIuXsrMO+IBOCI9BeeRkCiBkcLDHeRKbOCtYMJK3D6U32ooU9Q==", + "dependencies": [ + "@shikijs/types@3.2.1", + "@shikijs/vscode-textmate@10.0.2", + "oniguruma-to-es@4.1.0" ] }, "@shikijs/engine-oniguruma@1.29.2": { "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==", "dependencies": [ "@shikijs/types@1.29.2", - "@shikijs/vscode-textmate" + "@shikijs/vscode-textmate@10.0.1" + ] + }, + "@shikijs/engine-oniguruma@3.2.1": { + "integrity": "sha512-wZZAkayEn6qu2+YjenEoFqj0OyQI64EWsNR6/71d1EkG4sxEOFooowKivsWPpaWNBu3sxAG+zPz5kzBL/SsreQ==", + "dependencies": [ + "@shikijs/types@3.2.1", + "@shikijs/vscode-textmate@10.0.2" ] }, "@shikijs/langs@1.29.2": { @@ -4464,6 +4496,23 @@ "@shikijs/types@2.3.2" ] }, + "@shikijs/langs@3.2.1": { + "integrity": "sha512-If0iDHYRSGbihiA8+7uRsgb1er1Yj11pwpX1c6HLYnizDsKAw5iaT3JXj5ZpaimXSWky/IhxTm7C6nkiYVym+A==", + "dependencies": [ + "@shikijs/types@3.2.1" + ] + }, + "@shikijs/rehype@3.2.1": { + "integrity": "sha512-wj4TXI1PQ3TNPyXudUzKfdFIMneTxFym3HKKfWRzbOSAS8P4mECR+ttdUPhYU1dxrXrsatWxTJezOcEjiA0z8g==", + "dependencies": [ + "@shikijs/types@3.2.1", + "@types/hast", + "hast-util-to-string", + "shiki@3.2.1", + "unified", + "unist-util-visit" + ] + }, "@shikijs/themes@1.29.2": { "integrity": "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==", "dependencies": [ @@ -4476,23 +4525,39 @@ "@shikijs/types@2.3.2" ] }, + "@shikijs/themes@3.2.1": { + "integrity": "sha512-k5DKJUT8IldBvAm8WcrDT5+7GA7se6lLksR+2E3SvyqGTyFMzU2F9Gb7rmD+t+Pga1MKrYFxDIeyWjMZWM6uBQ==", + "dependencies": [ + "@shikijs/types@3.2.1" + ] + }, "@shikijs/types@1.29.2": { "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==", "dependencies": [ - "@shikijs/vscode-textmate", + "@shikijs/vscode-textmate@10.0.1", "@types/hast" ] }, "@shikijs/types@2.3.2": { "integrity": "sha512-CBaMY+a3pepyC4SETi7+bSzO0f6hxEQJUUuS4uD7zppzjmrN4ZRtBqxaT+wOan26CR9eeJ5iBhc4qvWEwn7Eeg==", "dependencies": [ - "@shikijs/vscode-textmate", + "@shikijs/vscode-textmate@10.0.1", + "@types/hast" + ] + }, + "@shikijs/types@3.2.1": { + "integrity": "sha512-/NTWAk4KE2M8uac0RhOsIhYQf4pdU0OywQuYDGIGAJ6Mjunxl2cGiuLkvu4HLCMn+OTTLRWkjZITp+aYJv60yA==", + "dependencies": [ + "@shikijs/vscode-textmate@10.0.2", "@types/hast" ] }, "@shikijs/vscode-textmate@10.0.1": { "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==" }, + "@shikijs/vscode-textmate@10.0.2": { + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==" + }, "@sigstore/bundle@3.0.0": { "integrity": "sha512-XDUYX56iMPAn/cdgh/DTJxz5RWmqKV4pwvUAEKEWJl+HzKdCd/24wUa9JYNMlDSCb7SUHAdtksxYX779Nne/Zg==", "dependencies": [ @@ -5783,6 +5848,9 @@ "@types/node@22.5.4" ] }, + "@types/katex@0.16.7": { + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==" + }, "@types/leaflet@1.7.6": { "integrity": "sha512-Emkz3V08QnlelSbpT46OEAx+TBZYTOX2r1yM7W+hWg5+djHtQ1GbEXBDRLaqQDOYcDI51Ss0ayoqoKD4CtLUDA==", "dependencies": [ @@ -5809,9 +5877,6 @@ "@types/pbf" ] }, - "@types/marked@5.0.2": { - "integrity": "sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg==" - }, "@types/mdast@4.0.4": { "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dependencies": [ @@ -7011,6 +7076,9 @@ "resolve@1.22.10" ] }, + "bail@2.0.2": { + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, "balanced-match@1.0.2": { "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, @@ -7020,6 +7088,9 @@ "base64-js@1.5.1": { "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "bcp-47-match@2.0.3": { + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==" + }, "before-after-hook@2.2.3": { "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, @@ -7292,6 +7363,9 @@ "character-entities-legacy@3.0.0": { "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==" }, + "character-entities@2.0.2": { + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + }, "chardet@0.7.0": { "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, @@ -7423,14 +7497,10 @@ "co@4.6.0": { "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" }, - "code-red@1.0.4": { - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "cobe@0.6.3": { + "integrity": "sha512-WHr7X4o1ym94GZ96h7b1pNemZJacbOzd02dZtnVwuC4oWBaLg96PBmp2rIS1SAhUDhhC/QyS9WEqkpZIs/ZBTg==", "dependencies": [ - "@jridgewell/sourcemap-codec", - "@types/estree", - "acorn", - "estree-walker@3.0.3", - "periscopic" + "phenomenon" ] }, "color-convert@2.0.1": { @@ -7633,6 +7703,9 @@ "nth-check" ] }, + "css-selector-parser@3.0.5": { + "integrity": "sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==" + }, "css-tree@2.2.1": { "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dependencies": [ @@ -8025,6 +8098,12 @@ "decimal.js-light@2.5.1": { "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" }, + "decode-named-character-reference@1.1.0": { + "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "dependencies": [ + "character-entities" + ] + }, "dedent@1.5.1": { "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==" }, @@ -8240,6 +8319,9 @@ "path-type@4.0.0" ] }, + "direction@2.0.1": { + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==" + }, "dlv@1.1.3": { "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, @@ -9102,6 +9184,9 @@ "exponential-backoff@3.1.1": { "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, + "extend@3.0.2": { + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "extendable-error@0.1.7": { "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==" }, @@ -9316,6 +9401,12 @@ "fraction.js@4.3.7": { "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, + "framesync@6.1.2": { + "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", + "dependencies": [ + "tslib@2.4.0" + ] + }, "fresh@0.5.2": { "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, @@ -9703,6 +9794,110 @@ "function-bind" ] }, + "hast-util-classnames@3.0.0": { + "integrity": "sha512-tI3JjoGDEBVorMAWK4jNRsfLMYmih1BUOG3VV36pH36njs1IEl7xkNrVTD2mD2yYHmQCa5R/fj61a8IAF4bRaQ==", + "dependencies": [ + "@types/hast", + "space-separated-tokens" + ] + }, + "hast-util-from-dom@5.0.1": { + "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==", + "dependencies": [ + "@types/hast", + "hastscript", + "web-namespaces" + ] + }, + "hast-util-from-html-isomorphic@2.0.0": { + "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", + "dependencies": [ + "@types/hast", + "hast-util-from-dom", + "hast-util-from-html", + "unist-util-remove-position" + ] + }, + "hast-util-from-html@2.0.3": { + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "dependencies": [ + "@types/hast", + "devlop", + "hast-util-from-parse5", + "parse5", + "vfile", + "vfile-message" + ] + }, + "hast-util-from-parse5@8.0.3": { + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "dependencies": [ + "@types/hast", + "@types/unist", + "devlop", + "hastscript", + "property-information@7.0.0", + "vfile", + "vfile-location", + "web-namespaces" + ] + }, + "hast-util-has-property@3.0.0": { + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "dependencies": [ + "@types/hast" + ] + }, + "hast-util-is-element@3.0.0": { + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dependencies": [ + "@types/hast" + ] + }, + "hast-util-parse-selector@4.0.0": { + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dependencies": [ + "@types/hast" + ] + }, + "hast-util-raw@9.1.0": { + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "dependencies": [ + "@types/hast", + "@types/unist", + "@ungap/structured-clone", + "hast-util-from-parse5", + "hast-util-to-parse5", + "html-void-elements", + "mdast-util-to-hast", + "parse5", + "unist-util-position", + "unist-util-visit", + "vfile", + "web-namespaces", + "zwitch" + ] + }, + "hast-util-select@6.0.4": { + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "dependencies": [ + "@types/hast", + "@types/unist", + "bcp-47-match", + "comma-separated-tokens", + "css-selector-parser", + "devlop", + "direction", + "hast-util-has-property", + "hast-util-to-string", + "hast-util-whitespace", + "nth-check", + "property-information@7.0.0", + "space-separated-tokens", + "unist-util-visit", + "zwitch" + ] + }, "hast-util-to-html@9.0.4": { "integrity": "sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==", "dependencies": [ @@ -9713,21 +9908,77 @@ "hast-util-whitespace", "html-void-elements", "mdast-util-to-hast", - "property-information", + "property-information@6.5.0", "space-separated-tokens", "stringify-entities", "zwitch" ] }, + "hast-util-to-html@9.0.5": { + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dependencies": [ + "@types/hast", + "@types/unist", + "ccount", + "comma-separated-tokens", + "hast-util-whitespace", + "html-void-elements", + "mdast-util-to-hast", + "property-information@7.0.0", + "space-separated-tokens", + "stringify-entities", + "zwitch" + ] + }, + "hast-util-to-parse5@8.0.0": { + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dependencies": [ + "@types/hast", + "comma-separated-tokens", + "devlop", + "property-information@6.5.0", + "space-separated-tokens", + "web-namespaces", + "zwitch" + ] + }, + "hast-util-to-string@3.0.1": { + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "dependencies": [ + "@types/hast" + ] + }, + "hast-util-to-text@4.0.2": { + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "dependencies": [ + "@types/hast", + "@types/unist", + "hast-util-is-element", + "unist-util-find-after" + ] + }, "hast-util-whitespace@3.0.0": { "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "dependencies": [ "@types/hast" ] }, + "hastscript@9.0.1": { + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "dependencies": [ + "@types/hast", + "comma-separated-tokens", + "hast-util-parse-selector", + "property-information@7.0.0", + "space-separated-tokens" + ] + }, "he@1.2.0": { "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, + "hey-listen@1.0.8": { + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" + }, "highlight.js@11.11.1": { "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==" }, @@ -10139,6 +10390,9 @@ "is-path-inside@4.0.0": { "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==" }, + "is-plain-obj@4.1.0": { + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, "is-reference@1.2.1": { "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dependencies": [ @@ -10444,6 +10698,12 @@ "safe-buffer@5.2.1" ] }, + "katex@0.16.21": { + "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", + "dependencies": [ + "commander@8.3.0" + ] + }, "kdbush@3.0.0": { "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" }, @@ -10807,6 +11067,9 @@ "long@5.2.4": { "integrity": "sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg==" }, + "longest-streak@3.1.0": { + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==" + }, "loose-envify@1.4.0": { "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": [ @@ -10958,12 +11221,116 @@ "uc.micro" ] }, - "marked@5.1.2": { - "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==" + "markdown-table@3.0.4": { + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==" }, "math-intrinsics@1.1.0": { "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, + "mdast-util-find-and-replace@3.0.2": { + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "dependencies": [ + "@types/mdast", + "escape-string-regexp@5.0.0", + "unist-util-is", + "unist-util-visit-parents" + ] + }, + "mdast-util-from-markdown@2.0.2": { + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dependencies": [ + "@types/mdast", + "@types/unist", + "decode-named-character-reference", + "devlop", + "mdast-util-to-string", + "micromark", + "micromark-util-decode-numeric-character-reference", + "micromark-util-decode-string", + "micromark-util-normalize-identifier", + "micromark-util-symbol", + "micromark-util-types", + "unist-util-stringify-position" + ] + }, + "mdast-util-gfm-autolink-literal@2.0.1": { + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "dependencies": [ + "@types/mdast", + "ccount", + "devlop", + "mdast-util-find-and-replace", + "micromark-util-character" + ] + }, + "mdast-util-gfm-footnote@2.1.0": { + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "dependencies": [ + "@types/mdast", + "devlop", + "mdast-util-from-markdown", + "mdast-util-to-markdown", + "micromark-util-normalize-identifier" + ] + }, + "mdast-util-gfm-strikethrough@2.0.0": { + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dependencies": [ + "@types/mdast", + "mdast-util-from-markdown", + "mdast-util-to-markdown" + ] + }, + "mdast-util-gfm-table@2.0.0": { + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dependencies": [ + "@types/mdast", + "devlop", + "markdown-table", + "mdast-util-from-markdown", + "mdast-util-to-markdown" + ] + }, + "mdast-util-gfm-task-list-item@2.0.0": { + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dependencies": [ + "@types/mdast", + "devlop", + "mdast-util-from-markdown", + "mdast-util-to-markdown" + ] + }, + "mdast-util-gfm@3.1.0": { + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "dependencies": [ + "mdast-util-from-markdown", + "mdast-util-gfm-autolink-literal", + "mdast-util-gfm-footnote", + "mdast-util-gfm-strikethrough", + "mdast-util-gfm-table", + "mdast-util-gfm-task-list-item", + "mdast-util-to-markdown" + ] + }, + "mdast-util-math@3.0.0": { + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "dependencies": [ + "@types/hast", + "@types/mdast", + "devlop", + "longest-streak", + "mdast-util-from-markdown", + "mdast-util-to-markdown", + "unist-util-remove-position" + ] + }, + "mdast-util-phrasing@4.1.0": { + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": [ + "@types/mdast", + "unist-util-is" + ] + }, "mdast-util-to-hast@13.2.0": { "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", "dependencies": [ @@ -10978,6 +11345,26 @@ "vfile" ] }, + "mdast-util-to-markdown@2.1.2": { + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "dependencies": [ + "@types/mdast", + "@types/unist", + "longest-streak", + "mdast-util-phrasing", + "mdast-util-to-string", + "micromark-util-classify-character", + "micromark-util-decode-string", + "unist-util-visit", + "zwitch" + ] + }, + "mdast-util-to-string@4.0.0": { + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": [ + "@types/mdast" + ] + }, "mdn-data@2.0.28": { "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" }, @@ -11002,6 +11389,153 @@ "methods@1.1.2": { "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, + "micromark-core-commonmark@2.0.3": { + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "dependencies": [ + "decode-named-character-reference", + "devlop", + "micromark-factory-destination", + "micromark-factory-label", + "micromark-factory-space", + "micromark-factory-title", + "micromark-factory-whitespace", + "micromark-util-character", + "micromark-util-chunked", + "micromark-util-classify-character", + "micromark-util-html-tag-name", + "micromark-util-normalize-identifier", + "micromark-util-resolve-all", + "micromark-util-subtokenize", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm-autolink-literal@2.1.0": { + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dependencies": [ + "micromark-util-character", + "micromark-util-sanitize-uri", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm-footnote@2.1.0": { + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "dependencies": [ + "devlop", + "micromark-core-commonmark", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-normalize-identifier", + "micromark-util-sanitize-uri", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm-strikethrough@2.1.0": { + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "dependencies": [ + "devlop", + "micromark-util-chunked", + "micromark-util-classify-character", + "micromark-util-resolve-all", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm-table@2.1.1": { + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "dependencies": [ + "devlop", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm-tagfilter@2.0.0": { + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dependencies": [ + "micromark-util-types" + ] + }, + "micromark-extension-gfm-task-list-item@2.1.0": { + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "dependencies": [ + "devlop", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-extension-gfm@3.0.0": { + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dependencies": [ + "micromark-extension-gfm-autolink-literal", + "micromark-extension-gfm-footnote", + "micromark-extension-gfm-strikethrough", + "micromark-extension-gfm-table", + "micromark-extension-gfm-tagfilter", + "micromark-extension-gfm-task-list-item", + "micromark-util-combine-extensions", + "micromark-util-types" + ] + }, + "micromark-extension-math@3.1.0": { + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "dependencies": [ + "@types/katex", + "devlop", + "katex", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-factory-destination@2.0.1": { + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dependencies": [ + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-factory-label@2.0.1": { + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dependencies": [ + "devlop", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-factory-space@2.0.1": { + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dependencies": [ + "micromark-util-character", + "micromark-util-types" + ] + }, + "micromark-factory-title@2.0.1": { + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dependencies": [ + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-factory-whitespace@2.0.1": { + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dependencies": [ + "micromark-factory-space", + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, "micromark-util-character@2.1.1": { "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dependencies": [ @@ -11009,9 +11543,60 @@ "micromark-util-types" ] }, + "micromark-util-chunked@2.0.1": { + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "dependencies": [ + "micromark-util-symbol" + ] + }, + "micromark-util-classify-character@2.0.1": { + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "dependencies": [ + "micromark-util-character", + "micromark-util-symbol", + "micromark-util-types" + ] + }, + "micromark-util-combine-extensions@2.0.1": { + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "dependencies": [ + "micromark-util-chunked", + "micromark-util-types" + ] + }, + "micromark-util-decode-numeric-character-reference@2.0.2": { + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "dependencies": [ + "micromark-util-symbol" + ] + }, + "micromark-util-decode-string@2.0.1": { + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "dependencies": [ + "decode-named-character-reference", + "micromark-util-character", + "micromark-util-decode-numeric-character-reference", + "micromark-util-symbol" + ] + }, "micromark-util-encode@2.0.1": { "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==" }, + "micromark-util-html-tag-name@2.0.1": { + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==" + }, + "micromark-util-normalize-identifier@2.0.1": { + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "dependencies": [ + "micromark-util-symbol" + ] + }, + "micromark-util-resolve-all@2.0.1": { + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "dependencies": [ + "micromark-util-types" + ] + }, "micromark-util-sanitize-uri@2.0.1": { "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dependencies": [ @@ -11020,12 +11605,43 @@ "micromark-util-symbol" ] }, + "micromark-util-subtokenize@2.1.0": { + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "dependencies": [ + "devlop", + "micromark-util-chunked", + "micromark-util-symbol", + "micromark-util-types" + ] + }, "micromark-util-symbol@2.0.1": { "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==" }, "micromark-util-types@2.0.1": { "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==" }, + "micromark@4.0.2": { + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "dependencies": [ + "@types/debug", + "debug@4.4.0", + "decode-named-character-reference", + "devlop", + "micromark-core-commonmark", + "micromark-factory-space", + "micromark-util-character", + "micromark-util-chunked", + "micromark-util-combine-extensions", + "micromark-util-decode-numeric-character-reference", + "micromark-util-encode", + "micromark-util-normalize-identifier", + "micromark-util-resolve-all", + "micromark-util-sanitize-uri", + "micromark-util-subtokenize", + "micromark-util-symbol", + "micromark-util-types" + ] + }, "micromatch@4.0.8": { "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": [ @@ -11803,12 +12419,24 @@ "mimic-fn@4.0.0" ] }, + "oniguruma-parser@0.5.4": { + "integrity": "sha512-yNxcQ8sKvURiTwP0mV6bLQCYE7NKfKRRWunhbZnXgxSmB1OXa1lHrN3o4DZd+0Si0kU5blidK7BcROO8qv5TZA==" + }, "oniguruma-to-es@2.3.0": { "integrity": "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==", "dependencies": [ "emoji-regex-xs", - "regex", - "regex-recursion" + "regex@5.1.1", + "regex-recursion@5.1.1" + ] + }, + "oniguruma-to-es@4.1.0": { + "integrity": "sha512-SNwG909cSLo4vPyyPbU/VJkEc9WOXqu2ycBlfd1UCXLqk1IijcQktSBb2yRQ2UFPsDhpkaf+C1dtT3PkLK/yWA==", + "dependencies": [ + "emoji-regex-xs", + "oniguruma-parser", + "regex@6.0.1", + "regex-recursion@6.0.2" ] }, "only@0.0.2": { @@ -12091,6 +12719,12 @@ "parse-path" ] }, + "parse5@7.2.1": { + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dependencies": [ + "entities" + ] + }, "parseurl@1.3.3": { "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, @@ -12163,13 +12797,8 @@ "perfect-debounce@1.0.0": { "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" }, - "periscopic@3.1.0": { - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": [ - "@types/estree", - "estree-walker@3.0.3", - "is-reference@3.0.3" - ] + "phenomenon@1.6.0": { + "integrity": "sha512-7h9/fjPD3qNlgggzm88cY58l9sudZ6Ey+UmZsizfhtawO6E3srZQXywaNm2lBwT72TbpHYRPy7ytIHeBUD/G0A==" }, "picocolors@1.1.1": { "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" @@ -12209,6 +12838,15 @@ "pluralize@8.0.0": { "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" }, + "popmotion@11.0.5": { + "integrity": "sha512-la8gPM1WYeFznb/JqF4GiTkRRPZsfaj2+kCxqQgr2MJylMmIKUwBfWW8Wa5fml/8gmtlD5yI01MP1QCZPWmppA==", + "dependencies": [ + "framesync", + "hey-listen", + "style-value-types", + "tslib@2.4.0" + ] + }, "portfinder@1.0.32": { "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "dependencies": [ @@ -12660,6 +13298,9 @@ "property-information@6.5.0": { "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==" }, + "property-information@7.0.0": { + "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==" + }, "protobufjs@7.4.0": { "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "dependencies": [ @@ -12980,7 +13621,13 @@ "regex-recursion@5.1.1": { "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==", "dependencies": [ - "regex", + "regex@5.1.1", + "regex-utilities" + ] + }, + "regex-recursion@6.0.2": { + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "dependencies": [ "regex-utilities" ] }, @@ -12993,6 +13640,12 @@ "regex-utilities" ] }, + "regex@6.0.1": { + "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", + "dependencies": [ + "regex-utilities" + ] + }, "regexp.prototype.flags@1.5.4": { "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dependencies": [ @@ -13004,6 +13657,82 @@ "set-function-name" ] }, + "rehype-class-names@2.0.0": { + "integrity": "sha512-jldCIiAEvXKdq8hqr5f5PzNdIDkvHC6zfKhwta9oRoMu7bn0W7qLES/JrrjBvr9rKz3nJ8x4vY1EWI+dhjHVZQ==", + "dependencies": [ + "@types/hast", + "hast-util-classnames", + "hast-util-select", + "unified" + ] + }, + "rehype-katex@7.0.1": { + "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==", + "dependencies": [ + "@types/hast", + "@types/katex", + "hast-util-from-html-isomorphic", + "hast-util-to-text", + "katex", + "unist-util-visit-parents", + "vfile" + ] + }, + "rehype-raw@7.0.0": { + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "dependencies": [ + "@types/hast", + "hast-util-raw", + "vfile" + ] + }, + "remark-gfm@4.0.1": { + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "dependencies": [ + "@types/mdast", + "mdast-util-gfm", + "micromark-extension-gfm", + "remark-parse", + "remark-stringify", + "unified" + ] + }, + "remark-math@6.0.0": { + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "dependencies": [ + "@types/mdast", + "mdast-util-math", + "micromark-extension-math", + "unified" + ] + }, + "remark-parse@11.0.0": { + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": [ + "@types/mdast", + "mdast-util-from-markdown", + "micromark-util-types", + "unified" + ] + }, + "remark-rehype@11.1.1": { + "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", + "dependencies": [ + "@types/hast", + "@types/mdast", + "mdast-util-to-hast", + "unified", + "vfile" + ] + }, + "remark-stringify@11.0.0": { + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dependencies": [ + "@types/mdast", + "mdast-util-to-markdown", + "unified" + ] + }, "repeat-string@1.6.1": { "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" }, @@ -13355,7 +14084,7 @@ "diff-match-patch-es", "ohash", "react", - "shiki", + "shiki@1.29.2", "svelte@5.19.6_acorn@8.14.0", "vue" ] @@ -13363,13 +14092,26 @@ "shiki@1.29.2": { "integrity": "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==", "dependencies": [ - "@shikijs/core", - "@shikijs/engine-javascript", - "@shikijs/engine-oniguruma", + "@shikijs/core@1.29.2", + "@shikijs/engine-javascript@1.29.2", + "@shikijs/engine-oniguruma@1.29.2", "@shikijs/langs@1.29.2", "@shikijs/themes@1.29.2", "@shikijs/types@1.29.2", - "@shikijs/vscode-textmate", + "@shikijs/vscode-textmate@10.0.1", + "@types/hast" + ] + }, + "shiki@3.2.1": { + "integrity": "sha512-VML/2o1/KGYkEf/stJJ+s9Ypn7jUKQPomGLGYso4JJFMFxVDyPNsjsI3MB3KLjlMOeH44gyaPdXC6rik2WXvUQ==", + "dependencies": [ + "@shikijs/core@3.2.1", + "@shikijs/engine-javascript@3.2.1", + "@shikijs/engine-oniguruma@3.2.1", + "@shikijs/langs@3.2.1", + "@shikijs/themes@3.2.1", + "@shikijs/types@3.2.1", + "@shikijs/vscode-textmate@10.0.2", "@types/hast" ] }, @@ -13757,6 +14499,13 @@ "inline-style-parser" ] }, + "style-value-types@5.1.2": { + "integrity": "sha512-Vs9fNreYF9j6W2VvuDTP7kepALi7sk0xtk2Tu8Yxi9UoajJdEVpNpCov0HsLTqXvNGKX+Uv09pkozVITi1jf3Q==", + "dependencies": [ + "hey-listen", + "tslib@2.4.0" + ] + }, "styled-jsx@5.1.1_react@18.3.1": { "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", "dependencies": [ @@ -13855,6 +14604,16 @@ "svelte@5.19.6_acorn@8.14.0" ] }, + "svelte-exmarkdown@4.0.3_svelte@5.19.6__acorn@8.14.0": { + "integrity": "sha512-lUyxDpJAkNTifL5Dw2HY3iHI9grUIfpd16ptJ//sea8ujjbgQU8SMvGmevUyop4Mn5nsBobQZEKdSCLraHjjHQ==", + "dependencies": [ + "remark-gfm", + "remark-parse", + "remark-rehype", + "svelte@5.19.6_acorn@8.14.0", + "unified" + ] + }, "svelte-inspect-value@0.3.0_svelte@5.19.6__acorn@8.14.0": { "integrity": "sha512-nHv+7+FRePs86sgL2I8jlbSrs8/uJmHJ2uxnMk9tVipWdZYYcmGhsmU+7U8lm/1RAZFS63/xSKdceMDyE09y0A==", "dependencies": [ @@ -13864,12 +14623,15 @@ "svelte@5.19.6_acorn@8.14.0" ] }, - "svelte-markdown@0.4.1_svelte@4.2.19": { - "integrity": "sha512-pOlLY6EruKJaWI9my/2bKX8PdTeP5CM0s4VMmwmC2prlOkjAf+AOmTM4wW/l19Y6WZ87YmP8+ZCJCCwBChWjYw==", + "svelte-motion@0.12.2_svelte@5.19.6__acorn@8.14.0": { + "integrity": "sha512-7RrdRz9iVP55B9HT/C0hYW3pyrKlF61kAby/AkDtOAP0uHFQDrfd0qQetDC81cEsK9b40jt+jfcqSAXcA7LPEw==", "dependencies": [ - "@types/marked", - "marked", - "svelte@4.2.19" + "@types/react", + "framesync", + "popmotion", + "style-value-types", + "svelte@5.19.6_acorn@8.14.0", + "tslib@2.8.1" ] }, "svelte-persisted-store@0.12.0_svelte@5.19.6__acorn@8.14.0": { @@ -13907,25 +14669,6 @@ "svelte@5.19.6_acorn@8.14.0" ] }, - "svelte@4.2.19": { - "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", - "dependencies": [ - "@ampproject/remapping", - "@jridgewell/sourcemap-codec", - "@jridgewell/trace-mapping", - "@types/estree", - "acorn", - "aria-query", - "axobject-query", - "code-red", - "css-tree@2.3.1", - "estree-walker@3.0.3", - "is-reference@3.0.3", - "locate-character", - "magic-string", - "periscopic" - ] - }, "svelte@5.19.6_acorn@8.14.0": { "integrity": "sha512-6ydekB3qyqUal+UhfMjmVOjRGtxysR8vuiMhi2nwuBtPJWnctVlsGspjVFB05qmR+TXI1emuqtZt81c0XiFleA==", "dependencies": [ @@ -14296,6 +15039,9 @@ "trim-lines@3.0.1": { "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==" }, + "trough@2.2.0": { + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==" + }, "ts-algebra@2.0.0": { "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==" }, @@ -14603,6 +15349,18 @@ "unicorn-magic@0.1.0": { "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==" }, + "unified@11.0.5": { + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "dependencies": [ + "@types/unist", + "bail", + "devlop", + "extend", + "is-plain-obj", + "trough", + "vfile" + ] + }, "unimport@3.14.6_rollup@4.34.0": { "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==", "dependencies": [ @@ -14653,6 +15411,13 @@ "imurmurhash" ] }, + "unist-util-find-after@5.0.0": { + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dependencies": [ + "@types/unist", + "unist-util-is" + ] + }, "unist-util-is@6.0.0": { "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dependencies": [ @@ -14665,6 +15430,13 @@ "@types/unist" ] }, + "unist-util-remove-position@5.0.0": { + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dependencies": [ + "@types/unist", + "unist-util-visit" + ] + }, "unist-util-stringify-position@4.0.0": { "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dependencies": [ @@ -14941,6 +15713,13 @@ "valibot@1.0.0-beta.11_typescript@5.6.3" ] }, + "vfile-location@5.0.3": { + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "dependencies": [ + "@types/unist", + "vfile" + ] + }, "vfile-message@4.0.2": { "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dependencies": [ @@ -15218,6 +15997,9 @@ "defaults" ] }, + "web-namespaces@2.0.1": { + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==" + }, "web-streams-polyfill@3.3.3": { "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" }, @@ -15753,6 +16535,13 @@ ] } }, + "packages/svelte-animation": { + "packageJson": { + "dependencies": [ + "npm:@types/bun@latest" + ] + } + }, "packages/tauri-plugins/jarvis": { "packageJson": { "dependencies": [ @@ -15930,6 +16719,7 @@ "npm:@jsr/std__semver@^1.0.3", "npm:@kksh/svelte5@~0.1.15", "npm:@shikijs/langs@^2.3.2", + "npm:@shikijs/rehype@^3.2.1", "npm:@shikijs/themes@^2.3.2", "npm:@tanstack/svelte-virtual@^3.13.2", "npm:@types/bun@latest", @@ -15937,6 +16727,7 @@ "npm:@typescript-eslint/parser@^8.20.0", "npm:bits-ui@1.0.0-next.77", "npm:clsx@^2.1.1", + "npm:cobe@~0.6.3", "npm:dompurify@^3.2.3", "npm:eslint-config-prettier@^10.0.1", "npm:eslint-plugin-svelte@^2.46.1", @@ -15945,15 +16736,21 @@ "npm:fuse.js@^7.1.0", "npm:globals@^15.14.0", "npm:gsap@^3.12.7", + "npm:katex@~0.16.21", "npm:lucide-svelte@0.471", "npm:mode-watcher@0.5", "npm:moment@^2.30.1", "npm:paneforge@1.0.0-next.2", "npm:pretty-bytes@^6.1.1", + "npm:rehype-class-names@2", + "npm:rehype-katex@^7.0.1", + "npm:rehype-raw@7", + "npm:remark-math@6", "npm:shiki-magic-move@~0.5.2", "npm:shiki@^1.27.2", + "npm:svelte-exmarkdown@^4.0.3", "npm:svelte-inspect-value@0.3", - "npm:svelte-markdown@~0.4.1", + "npm:svelte-motion@~0.12.2", "npm:svelte-radix@^2.0.1", "npm:svelte-sonner@~0.3.28", "npm:sveltekit-superforms@^2.22.1", diff --git a/packages/extensions/demo-worker-template-ext/src/index.ts b/packages/extensions/demo-worker-template-ext/src/index.ts index 2d44875..1c9e565 100644 --- a/packages/extensions/demo-worker-template-ext/src/index.ts +++ b/packages/extensions/demo-worker-template-ext/src/index.ts @@ -86,42 +86,22 @@ class ExtensionTemplate extends TemplateUiCommand { } async load() { + return ui.render( + new Markdown(` +# Hello World + +[GitHub HuakunShen](https://github.com/HuakunShen) + +![](https://github.com/huakunshen.png) + + + + `) + ) ui.setSearchBarPlaceholder("Search for items") const sections = getSections(2) const items = getItems(5) - return ui.render( - new List.List({ - items: items.map( - (item) => - new List.Item({ - title: item.name, - value: item.id - // icon: new Icon({ - // type: IconType.enum.Iconify, - // value: "mingcute:appstore-fill" - // }) - }) - ), - sections: sections.map( - (section) => - new List.Section({ - title: section.name, - items: section.items.map( - (item) => - new List.Item({ - title: item.name, - value: item.id - }) - ) - }) - ) - }) - ) ui.showLoadingBar(true) - setTimeout(() => { - ui.showLoadingBar(false) - clipboard.paste() - }, 2000) const extPath = await path.extensionDir() const cmd = shell.createCommand("deno", ["run", "/Users/hk/Dev/kunkun/deno.ts"]) cmd.stdout.on("data", (data) => { @@ -189,10 +169,14 @@ class ExtensionTemplate extends TemplateUiCommand { ]), new Markdown(` # Hello World + +[GitHub HuakunShen](https://github.com/HuakunShen) + +![](https://github.com/huakunshen.png) + - - - `) + +`) ], width: 50 }), diff --git a/packages/ui/package.json b/packages/ui/package.json index 2e0f428..f68f6d9 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -32,6 +32,10 @@ "./animation": { "types": "./src/components/animation/index.ts", "svelte": "./src/components/animation/index.ts" + }, + "./markdown": { + "types": "./src/components/markdown/index.ts", + "svelte": "./src/components/markdown/index.ts" } }, "scripts": { @@ -76,17 +80,24 @@ "@internationalized/date": "^3.7.0", "@kksh/supabase": "workspace:*", "@shikijs/langs": "^2.3.2", + "@shikijs/rehype": "^3.2.1", "@shikijs/themes": "^2.3.2", "@std/semver": "npm:@jsr/std__semver@^1.0.3", "@tanstack/svelte-virtual": "^3.13.2", + "cobe": "^0.6.3", "dompurify": "^3.2.3", "fuse.js": "^7.1.0", "gsap": "^3.12.7", + "katex": "^0.16.21", "moment": "^2.30.1", "pretty-bytes": "^6.1.1", + "rehype-class-names": "^2.0.0", + "rehype-katex": "^7.0.1", + "rehype-raw": "^7.0.0", + "remark-math": "^6.0.0", "shiki-magic-move": "^0.5.2", + "svelte-exmarkdown": "^4.0.3", "svelte-inspect-value": "^0.3.0", - "svelte-markdown": "^0.4.1", "svelte-motion": "^0.12.2", "valibot": "1.0.0-beta.12" } diff --git a/packages/ui/src/components/animation/Globe.svelte b/packages/ui/src/components/animation/Globe.svelte new file mode 100644 index 0000000..97991d6 --- /dev/null +++ b/packages/ui/src/components/animation/Globe.svelte @@ -0,0 +1,120 @@ + + +
+ { + pointerInteracting = e.clientX - pointerInteractionMovement + canvas.style.cursor = "grabbing" + }} + onpointerup={() => { + pointerInteracting = null + canvas.style.cursor = "grab" + }} + onpointerout={() => { + pointerInteracting = null + canvas.style.cursor = "grab" + }} + onmousemove={(e) => { + if (pointerInteracting !== null) { + console.log("working") + const delta = e.clientX - pointerInteracting + pointerInteractionMovement = delta + x.set(delta / 200) + } + }} + > +
diff --git a/packages/ui/src/components/animation/MagicCard.svelte b/packages/ui/src/components/animation/MagicCard.svelte index 3d089ec..f7d8012 100644 --- a/packages/ui/src/components/animation/MagicCard.svelte +++ b/packages/ui/src/components/animation/MagicCard.svelte @@ -2,10 +2,12 @@ import { onMount } from "svelte" import { Motion, useMotionTemplate, useMotionValue } from "svelte-motion" import { cn } from "../../utils" + import BorderBeam from "./BorderBeam.svelte" export let gradientSize: number = 200 export let gradientColor: string = "#262626" export let gradientOpacity: number = 0.8 + export let borderBeam: boolean = false let className: string = "" export { className as class } @@ -42,6 +44,9 @@ className )} > + {#if borderBeam} + + {/if}
diff --git a/packages/ui/src/components/animation/RetroGrid.svelte b/packages/ui/src/components/animation/RetroGrid.svelte index 0fe112f..6a80b39 100644 --- a/packages/ui/src/components/animation/RetroGrid.svelte +++ b/packages/ui/src/components/animation/RetroGrid.svelte @@ -29,6 +29,8 @@
diff --git a/packages/ui/src/components/animation/index.ts b/packages/ui/src/components/animation/index.ts index 4beeff8..cde8b67 100644 --- a/packages/ui/src/components/animation/index.ts +++ b/packages/ui/src/components/animation/index.ts @@ -5,3 +5,4 @@ export { default as RetroGrid } from "./RetroGrid.svelte" export { default as AuroraText } from "./AuroraText.svelte" export { default as WordRotate } from "./WordRotate.svelte" export { default as MagicCard } from "./MagicCard.svelte" +export { default as Globe } from "./Globe.svelte" diff --git a/packages/ui/src/components/code/shiki.svelte b/packages/ui/src/components/code/shiki.svelte index f337046..18a21be 100644 --- a/packages/ui/src/components/code/shiki.svelte +++ b/packages/ui/src/components/code/shiki.svelte @@ -36,7 +36,7 @@ {#await highlighter2 then highlighter} ["style"] class?: HTMLAttributes["class"] children: Snippet + ref: HTMLAnchorElement | HTMLButtonElement | null } = $props() // @ts-expect-error window.__TAURI_INTERNALS__ is not defined in the browser const isInTauri = browser ? !!window.__TAURI_INTERNALS__ : false function handleClick() { - open(href) + if (href) { + open(href) + } } {#if isInTauri} {:else} Commands