diff --git a/components.json b/components.json
new file mode 100644
index 0000000000..25d52d4e93
--- /dev/null
+++ b/components.json
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "new-york",
+ "rsc": false,
+ "tsx": true,
+ "tailwind": {
+ "config": "",
+ "css": "src/styles/globals.css",
+ "baseColor": "neutral",
+ "cssVariables": true,
+ "prefix": ""
+ },
+ "aliases": {
+ "components": "@renderer",
+ "utils": "@renderer/utils",
+ "ui": "@renderer/ui",
+ "lib": "@renderer/lib",
+ "hooks": "@renderer/hooks"
+ },
+ "iconLibrary": "lucide"
+}
diff --git a/electron.vite.config.ts b/electron.vite.config.ts
index 416d04b385..49a2e824ad 100644
--- a/electron.vite.config.ts
+++ b/electron.vite.config.ts
@@ -1,8 +1,8 @@
+import tailwindcss from '@tailwindcss/vite'
import react from '@vitejs/plugin-react-swc'
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
import { resolve } from 'path'
import { visualizer } from 'rollup-plugin-visualizer'
-
const visualizerPlugin = (type: 'renderer' | 'main') => {
return process.env[`VISUALIZER_${type.toUpperCase()}`] ? [visualizer({ open: true })] : []
}
@@ -64,7 +64,8 @@ export default defineConfig({
]
]
}),
- ...visualizerPlugin('renderer')
+ ...visualizerPlugin('renderer'),
+ tailwindcss()
],
resolve: {
alias: {
diff --git a/package.json b/package.json
index 843465d5db..36b6a49484 100644
--- a/package.json
+++ b/package.json
@@ -70,6 +70,7 @@
"@electron-toolkit/utils": "^3.0.0",
"@electron/notarize": "^2.5.0",
"@langchain/community": "^0.3.36",
+ "@radix-ui/react-slot": "^1.2.2",
"@strongtz/win32-arm64-msvc": "^0.4.7",
"@tanstack/react-query": "^5.27.0",
"@types/react-infinite-scroll-component": "^5.0.0",
@@ -77,6 +78,8 @@
"archiver": "^7.0.1",
"async-mutex": "^0.5.0",
"bufferutil": "^4.0.9",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
"color": "^5.0.0",
"diff": "^7.0.0",
"docx": "^9.0.2",
@@ -92,14 +95,18 @@
"got-scraping": "^4.1.1",
"jsdom": "^26.0.0",
"markdown-it": "^14.1.0",
+ "next-themes": "^0.4.6",
"node-stream-zip": "^1.15.0",
"officeparser": "^4.1.1",
"opendal": "^0.47.11",
"os-proxy-config": "^1.1.2",
"proxy-agent": "^6.5.0",
+ "sonner": "^2.0.3",
+ "tailwind-merge": "^3.2.0",
"tar": "^7.4.3",
"turndown": "^7.2.0",
"turndown-plugin-gfm": "^1.0.2",
+ "tw-animate-css": "^1.2.9",
"undici": "^7.4.0",
"webdav": "^5.8.0",
"ws": "^8.18.1",
@@ -128,6 +135,7 @@
"@reduxjs/toolkit": "^2.2.5",
"@shikijs/markdown-it": "^3.2.2",
"@swc/plugin-styled-components": "^7.1.3",
+ "@tailwindcss/vite": "^4.1.5",
"@tavily/core": "patch:@tavily/core@npm%3A0.3.1#~/.yarn/patches/@tavily-core-npm-0.3.1-fe69bf2bea.patch",
"@tryfabric/martian": "^1.2.4",
"@types/adm-zip": "^0",
@@ -173,7 +181,7 @@
"lint-staged": "^15.5.0",
"lodash": "^4.17.21",
"lru-cache": "^11.1.0",
- "lucide-react": "^0.487.0",
+ "lucide-react": "^0.508.0",
"mime": "^4.0.4",
"npx-scope-finder": "^1.2.0",
"openai": "patch:openai@npm%3A4.96.0#~/.yarn/patches/openai-npm-4.96.0-0665b05cb9.patch",
@@ -203,6 +211,7 @@
"shiki": "^3.2.2",
"string-width": "^7.2.0",
"styled-components": "^6.1.11",
+ "tailwindcss": "^4.1.5",
"tiny-pinyin": "^1.3.2",
"tinycolor2": "^1.6.0",
"tokenx": "^0.4.1",
diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx
index 52b098c957..258aacad46 100644
--- a/src/renderer/src/App.tsx
+++ b/src/renderer/src/App.tsx
@@ -19,6 +19,7 @@ import HomePage from './pages/home/HomePage'
import KnowledgePage from './pages/knowledge/KnowledgePage'
import PaintingsRoutePage from './pages/paintings/PaintingsRoutePage'
import SettingsPage from './pages/settings/SettingsPage'
+import StorePage from './pages/store'
import TranslatePage from './pages/translate/TranslatePage'
function App(): React.ReactElement {
@@ -42,6 +43,7 @@ function App(): React.ReactElement {
} />
} />
} />
+ } />
diff --git a/src/renderer/src/assets/styles/tailwind.css b/src/renderer/src/assets/styles/tailwind.css
new file mode 100644
index 0000000000..02687bd0b8
--- /dev/null
+++ b/src/renderer/src/assets/styles/tailwind.css
@@ -0,0 +1,123 @@
+@import 'tailwindcss';
+@import 'tw-animate-css';
+
+@custom-variant dark (&:is(.dark *));
+
+:root {
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.145 0 0);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.145 0 0);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.145 0 0);
+ --primary: oklch(0.205 0 0);
+ --primary-foreground: oklch(0.985 0 0);
+ --secondary: oklch(0.97 0 0);
+ --secondary-foreground: oklch(0.205 0 0);
+ --muted: oklch(0.97 0 0);
+ --muted-foreground: oklch(0.556 0 0);
+ --accent: oklch(0.97 0 0);
+ --accent-foreground: oklch(0.205 0 0);
+ --destructive: oklch(0.577 0.245 27.325);
+ --destructive-foreground: oklch(0.577 0.245 27.325);
+ --border: oklch(0.922 0 0);
+ --input: oklch(0.922 0 0);
+ --ring: oklch(0.708 0 0);
+ --chart-1: oklch(0.646 0.222 41.116);
+ --chart-2: oklch(0.6 0.118 184.704);
+ --chart-3: oklch(0.398 0.07 227.392);
+ --chart-4: oklch(0.828 0.189 84.429);
+ --chart-5: oklch(0.769 0.188 70.08);
+ --radius: 0.625rem;
+ --sidebar: oklch(0.985 0 0);
+ --sidebar-foreground: oklch(0.145 0 0);
+ --sidebar-primary: oklch(0.205 0 0);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.97 0 0);
+ --sidebar-accent-foreground: oklch(0.205 0 0);
+ --sidebar-border: oklch(0.922 0 0);
+ --sidebar-ring: oklch(0.708 0 0);
+}
+
+.dark {
+ --background: oklch(0.145 0 0);
+ --foreground: oklch(0.985 0 0);
+ --card: oklch(0.145 0 0);
+ --card-foreground: oklch(0.985 0 0);
+ --popover: oklch(0.145 0 0);
+ --popover-foreground: oklch(0.985 0 0);
+ --primary: oklch(0.985 0 0);
+ --primary-foreground: oklch(0.205 0 0);
+ --secondary: oklch(0.269 0 0);
+ --secondary-foreground: oklch(0.985 0 0);
+ --muted: oklch(0.269 0 0);
+ --muted-foreground: oklch(0.708 0 0);
+ --accent: oklch(0.269 0 0);
+ --accent-foreground: oklch(0.985 0 0);
+ --destructive: oklch(0.396 0.141 25.723);
+ --destructive-foreground: oklch(0.637 0.237 25.331);
+ --border: oklch(0.269 0 0);
+ --input: oklch(0.269 0 0);
+ --ring: oklch(0.439 0 0);
+ --chart-1: oklch(0.488 0.243 264.376);
+ --chart-2: oklch(0.696 0.17 162.48);
+ --chart-3: oklch(0.769 0.188 70.08);
+ --chart-4: oklch(0.627 0.265 303.9);
+ --chart-5: oklch(0.645 0.246 16.439);
+ --sidebar: oklch(0.205 0 0);
+ --sidebar-foreground: oklch(0.985 0 0);
+ --sidebar-primary: oklch(0.488 0.243 264.376);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.269 0 0);
+ --sidebar-accent-foreground: oklch(0.985 0 0);
+ --sidebar-border: oklch(0.269 0 0);
+ --sidebar-ring: oklch(0.439 0 0);
+}
+
+@theme inline {
+ --color-background: var(--background);
+ --color-foreground: var(--foreground);
+ --color-card: var(--card);
+ --color-card-foreground: var(--card-foreground);
+ --color-popover: var(--popover);
+ --color-popover-foreground: var(--popover-foreground);
+ --color-primary: var(--primary);
+ --color-primary-foreground: var(--primary-foreground);
+ --color-secondary: var(--secondary);
+ --color-secondary-foreground: var(--secondary-foreground);
+ --color-muted: var(--muted);
+ --color-muted-foreground: var(--muted-foreground);
+ --color-accent: var(--accent);
+ --color-accent-foreground: var(--accent-foreground);
+ --color-destructive: var(--destructive);
+ --color-destructive-foreground: var(--destructive-foreground);
+ --color-border: var(--border);
+ --color-input: var(--input);
+ --color-ring: var(--ring);
+ --color-chart-1: var(--chart-1);
+ --color-chart-2: var(--chart-2);
+ --color-chart-3: var(--chart-3);
+ --color-chart-4: var(--chart-4);
+ --color-chart-5: var(--chart-5);
+ --radius-sm: calc(var(--radius) - 4px);
+ --radius-md: calc(var(--radius) - 2px);
+ --radius-lg: var(--radius);
+ --radius-xl: calc(var(--radius) + 4px);
+ --color-sidebar: var(--sidebar);
+ --color-sidebar-foreground: var(--sidebar-foreground);
+ --color-sidebar-primary: var(--sidebar-primary);
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+ --color-sidebar-accent: var(--sidebar-accent);
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+ --color-sidebar-border: var(--sidebar-border);
+ --color-sidebar-ring: var(--sidebar-ring);
+}
+
+@layer base {
+ * {
+ @apply border-border outline-ring/50;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
diff --git a/src/renderer/src/components/app/Sidebar.tsx b/src/renderer/src/components/app/Sidebar.tsx
index 8b50bdd7d2..7f58de9f5f 100644
--- a/src/renderer/src/components/app/Sidebar.tsx
+++ b/src/renderer/src/components/app/Sidebar.tsx
@@ -11,6 +11,7 @@ import { isEmoji } from '@renderer/utils'
import type { MenuProps } from 'antd'
import { Avatar, Dropdown, Tooltip } from 'antd'
import {
+ Box,
CircleHelp,
FileSearch,
Folder,
@@ -143,7 +144,8 @@ const MainMenus: FC = () => {
translate: ,
minapp: ,
knowledge: ,
- files:
+ files: ,
+ store:
}
const pathMap = {
@@ -153,7 +155,8 @@ const MainMenus: FC = () => {
translate: '/translate',
minapp: '/apps',
knowledge: '/knowledge',
- files: '/files'
+ files: '/files',
+ store: '/store'
}
return sidebarIcons.visible.map((icon) => {
diff --git a/src/renderer/src/entryPoint.tsx b/src/renderer/src/entryPoint.tsx
index bf6a3cb6a5..fc5769da91 100644
--- a/src/renderer/src/entryPoint.tsx
+++ b/src/renderer/src/entryPoint.tsx
@@ -1,5 +1,6 @@
import './assets/styles/index.scss'
import '@ant-design/v5-patch-for-react-19'
+import './assets/styles/tailwind.css'
import { createRoot } from 'react-dom/client'
diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json
index 6ea64e00f5..236f2d6b55 100644
--- a/src/renderer/src/i18n/locales/zh-cn.json
+++ b/src/renderer/src/i18n/locales/zh-cn.json
@@ -1546,6 +1546,13 @@
"enable_privacy_mode": "匿名发送错误报告和数据统计"
}
},
+ "store": {
+ "title": "应用商店",
+ "install": "安装",
+ "uninstall": "卸载",
+ "update": "更新",
+ "update_all": "全部更新"
+ },
"translate": {
"any.language": "任意语言",
"button.translate": "翻译",
diff --git a/src/renderer/src/pages/store/index.tsx b/src/renderer/src/pages/store/index.tsx
new file mode 100644
index 0000000000..323addc1f4
--- /dev/null
+++ b/src/renderer/src/pages/store/index.tsx
@@ -0,0 +1,28 @@
+import { Navbar, NavbarCenter } from '@renderer/components/app/Navbar'
+import { Button } from '@renderer/ui/button'
+import { Toaster } from '@renderer/ui/sonner'
+import { useTranslation } from 'react-i18next'
+import { toast } from 'sonner'
+
+export default function Store() {
+ const { t } = useTranslation()
+ return (
+
+
+ {t('store.title')}
+
+
+
+
+
+
+ )
+}
diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts
index e8f4c2ac32..df7af60f69 100644
--- a/src/renderer/src/store/index.ts
+++ b/src/renderer/src/store/index.ts
@@ -46,7 +46,7 @@ const persistedReducer = persistReducer(
{
key: 'cherry-studio',
storage,
- version: 98,
+ version: 99,
blacklist: ['runtime', 'messages', 'messageBlocks'],
migrate
},
diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts
index f09ce39536..921de83efb 100644
--- a/src/renderer/src/store/migrate.ts
+++ b/src/renderer/src/store/migrate.ts
@@ -1252,6 +1252,22 @@ const migrateConfig = {
} catch (error) {
return state
}
+ },
+ '99': (state: RootState) => {
+ try {
+ return {
+ ...state,
+ settings: {
+ ...state.settings,
+ sidebarIcons: {
+ ...state.settings.sidebarIcons,
+ visible: [...state.settings.sidebarIcons.visible, 'store']
+ }
+ }
+ }
+ } catch (error) {
+ return state
+ }
}
}
diff --git a/src/renderer/src/store/settings.ts b/src/renderer/src/store/settings.ts
index 166ed81d6e..f473ae40a4 100644
--- a/src/renderer/src/store/settings.ts
+++ b/src/renderer/src/store/settings.ts
@@ -6,7 +6,15 @@ import { WebDAVSyncState } from './backup'
export type SendMessageShortcut = 'Enter' | 'Shift+Enter' | 'Ctrl+Enter' | 'Command+Enter'
-export type SidebarIcon = 'assistants' | 'agents' | 'paintings' | 'translate' | 'minapp' | 'knowledge' | 'files'
+export type SidebarIcon =
+ | 'assistants'
+ | 'agents'
+ | 'paintings'
+ | 'translate'
+ | 'minapp'
+ | 'knowledge'
+ | 'files'
+ | 'store'
export const DEFAULT_SIDEBAR_ICONS: SidebarIcon[] = [
'assistants',
@@ -15,7 +23,8 @@ export const DEFAULT_SIDEBAR_ICONS: SidebarIcon[] = [
'translate',
'minapp',
'knowledge',
- 'files'
+ 'files',
+ 'store'
]
export interface NutstoreSyncRuntime extends WebDAVSyncState {}
diff --git a/src/renderer/src/ui/button.tsx b/src/renderer/src/ui/button.tsx
new file mode 100644
index 0000000000..e48aff75d8
--- /dev/null
+++ b/src/renderer/src/ui/button.tsx
@@ -0,0 +1,59 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@renderer/utils/index"
+
+const buttonVariants = cva(
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
+ {
+ variants: {
+ variant: {
+ default:
+ "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
+ destructive:
+ "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
+ outline:
+ "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
+ secondary:
+ "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
+ ghost:
+ "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
+ link: "text-primary underline-offset-4 hover:underline",
+ },
+ size: {
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
+ icon: "size-9",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ }
+)
+
+function Button({
+ className,
+ variant,
+ size,
+ asChild = false,
+ ...props
+}: React.ComponentProps<"button"> &
+ VariantProps & {
+ asChild?: boolean
+ }) {
+ const Comp = asChild ? Slot : "button"
+
+ return (
+
+ )
+}
+
+export { Button, buttonVariants }
diff --git a/src/renderer/src/ui/sonner.tsx b/src/renderer/src/ui/sonner.tsx
new file mode 100644
index 0000000000..cd62aff2b3
--- /dev/null
+++ b/src/renderer/src/ui/sonner.tsx
@@ -0,0 +1,23 @@
+import { useTheme } from "next-themes"
+import { Toaster as Sonner, ToasterProps } from "sonner"
+
+const Toaster = ({ ...props }: ToasterProps) => {
+ const { theme = "system" } = useTheme()
+
+ return (
+
+ )
+}
+
+export { Toaster }
diff --git a/src/renderer/src/utils/index.ts b/src/renderer/src/utils/index.ts
index c8d5abe934..910e510b7e 100644
--- a/src/renderer/src/utils/index.ts
+++ b/src/renderer/src/utils/index.ts
@@ -1,8 +1,9 @@
import { Model } from '@renderer/types'
import { ModalFuncProps } from 'antd/es/modal/interface'
+import { type ClassValue, clsx } from 'clsx'
+import { twMerge } from 'tailwind-merge'
// @ts-ignore next-line`
import { v4 as uuidv4 } from 'uuid'
-
/**
* 异步执行一个函数。
* @param fn 要执行的函数
@@ -208,6 +209,10 @@ export function getMcpConfigSampleFromReadme(readme: string) {
return null
}
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs))
+}
+
export * from './file'
export * from './image'
export * from './json'
diff --git a/tsconfig.json b/tsconfig.json
index b1d115b86f..631b62cad3 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -7,5 +7,11 @@
{
"path": "./tsconfig.web.json"
}
- ]
+ ],
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@renderer/*": ["src/renderer/src/*"],
+ }
+ }
}
diff --git a/tsconfig.node.json b/tsconfig.node.json
index ec30dcfec7..11e2bf70de 100644
--- a/tsconfig.node.json
+++ b/tsconfig.node.json
@@ -10,6 +10,7 @@
],
"compilerOptions": {
"composite": true,
+ "moduleResolution": "bundler",
"types": [
"electron-vite/node"
],
@@ -17,6 +18,7 @@
"paths": {
"@main/*": ["src/main/*"],
"@types": ["src/renderer/src/types/index.ts"],
+ "@components/*": ["packages/components/*"],
"@shared/*": ["packages/shared/*"]
}
}
diff --git a/yarn.lock b/yarn.lock
index c29ea2251c..8a374033f1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -876,6 +876,34 @@ __metadata:
languageName: node
linkType: hard
+"@emnapi/core@npm:^1.4.0, @emnapi/core@npm:^1.4.3":
+ version: 1.4.3
+ resolution: "@emnapi/core@npm:1.4.3"
+ dependencies:
+ "@emnapi/wasi-threads": "npm:1.0.2"
+ tslib: "npm:^2.4.0"
+ checksum: 10c0/e30101d16d37ef3283538a35cad60e22095aff2403fb9226a35330b932eb6740b81364d525537a94eb4fb51355e48ae9b10d779c0dd1cdcd55d71461fe4b45c7
+ languageName: node
+ linkType: hard
+
+"@emnapi/runtime@npm:^1.4.0, @emnapi/runtime@npm:^1.4.3":
+ version: 1.4.3
+ resolution: "@emnapi/runtime@npm:1.4.3"
+ dependencies:
+ tslib: "npm:^2.4.0"
+ checksum: 10c0/3b7ab72d21cb4e034f07df80165265f85f445ef3f581d1bc87b67e5239428baa00200b68a7d5e37a0425c3a78320b541b07f76c5530f6f6f95336a6294ebf30b
+ languageName: node
+ linkType: hard
+
+"@emnapi/wasi-threads@npm:1.0.2, @emnapi/wasi-threads@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "@emnapi/wasi-threads@npm:1.0.2"
+ dependencies:
+ tslib: "npm:^2.4.0"
+ checksum: 10c0/f0621b1fc715221bd2d8332c0ca922617bcd77cdb3050eae50a124eb8923c54fa425d23982dc8f29d505c8798a62d1049bace8b0686098ff9dd82270e06d772e
+ languageName: node
+ linkType: hard
+
"@emotion/hash@npm:^0.8.0":
version: 0.8.0
resolution: "@emotion/hash@npm:0.8.0"
@@ -2685,6 +2713,17 @@ __metadata:
languageName: node
linkType: hard
+"@napi-rs/wasm-runtime@npm:^0.2.9":
+ version: 0.2.9
+ resolution: "@napi-rs/wasm-runtime@npm:0.2.9"
+ dependencies:
+ "@emnapi/core": "npm:^1.4.0"
+ "@emnapi/runtime": "npm:^1.4.0"
+ "@tybys/wasm-util": "npm:^0.9.0"
+ checksum: 10c0/1cc40b854b255f84e12ade634456ba489f6bf90659ef8164a16823c515c294024c96ee2bb81ab51f35493ba9496f62842b960f915dbdcdc1791f221f989e9e59
+ languageName: node
+ linkType: hard
+
"@neon-rs/load@npm:^0.0.4":
version: 0.0.4
resolution: "@neon-rs/load@npm:0.0.4"
@@ -2973,6 +3012,34 @@ __metadata:
languageName: node
linkType: hard
+"@radix-ui/react-compose-refs@npm:1.1.2":
+ version: 1.1.2
+ resolution: "@radix-ui/react-compose-refs@npm:1.1.2"
+ peerDependencies:
+ "@types/react": "*"
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 10c0/d36a9c589eb75d634b9b139c80f916aadaf8a68a7c1c4b8c6c6b88755af1a92f2e343457042089f04cc3f23073619d08bb65419ced1402e9d4e299576d970771
+ languageName: node
+ linkType: hard
+
+"@radix-ui/react-slot@npm:^1.2.2":
+ version: 1.2.2
+ resolution: "@radix-ui/react-slot@npm:1.2.2"
+ dependencies:
+ "@radix-ui/react-compose-refs": "npm:1.1.2"
+ peerDependencies:
+ "@types/react": "*"
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 10c0/74489f5ad11b17444560a1cdd664c01308206ce5cb9fcd46121b45281ece20273948479711411223c1081f709c15409242d51ca6cc57ff81f6335d70e0cbe0b5
+ languageName: node
+ linkType: hard
+
"@rc-component/async-validator@npm:^5.0.3":
version: 5.0.4
resolution: "@rc-component/async-validator@npm:5.0.4"
@@ -3549,6 +3616,167 @@ __metadata:
languageName: node
linkType: hard
+"@tailwindcss/node@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/node@npm:4.1.5"
+ dependencies:
+ enhanced-resolve: "npm:^5.18.1"
+ jiti: "npm:^2.4.2"
+ lightningcss: "npm:1.29.2"
+ tailwindcss: "npm:4.1.5"
+ checksum: 10c0/0db690b8e84b90d0447d26f6f17a496476cf7b075e699aef51dbf6e52669bb28d95618c2e9a1176793be2a98be7ca6dafb3c238628e9963a77c81e334aac26b4
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-android-arm64@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-android-arm64@npm:4.1.5"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-darwin-arm64@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-darwin-arm64@npm:4.1.5"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-darwin-x64@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-darwin-x64@npm:4.1.5"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-freebsd-x64@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-freebsd-x64@npm:4.1.5"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.1.5"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-linux-arm64-gnu@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-linux-arm64-gnu@npm:4.1.5"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-linux-arm64-musl@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-linux-arm64-musl@npm:4.1.5"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-linux-x64-gnu@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-linux-x64-gnu@npm:4.1.5"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-linux-x64-musl@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-linux-x64-musl@npm:4.1.5"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-wasm32-wasi@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-wasm32-wasi@npm:4.1.5"
+ dependencies:
+ "@emnapi/core": "npm:^1.4.3"
+ "@emnapi/runtime": "npm:^1.4.3"
+ "@emnapi/wasi-threads": "npm:^1.0.2"
+ "@napi-rs/wasm-runtime": "npm:^0.2.9"
+ "@tybys/wasm-util": "npm:^0.9.0"
+ tslib: "npm:^2.8.0"
+ conditions: cpu=wasm32
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-win32-arm64-msvc@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-win32-arm64-msvc@npm:4.1.5"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide-win32-x64-msvc@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide-win32-x64-msvc@npm:4.1.5"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/oxide@npm:4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/oxide@npm:4.1.5"
+ dependencies:
+ "@tailwindcss/oxide-android-arm64": "npm:4.1.5"
+ "@tailwindcss/oxide-darwin-arm64": "npm:4.1.5"
+ "@tailwindcss/oxide-darwin-x64": "npm:4.1.5"
+ "@tailwindcss/oxide-freebsd-x64": "npm:4.1.5"
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "npm:4.1.5"
+ "@tailwindcss/oxide-linux-arm64-gnu": "npm:4.1.5"
+ "@tailwindcss/oxide-linux-arm64-musl": "npm:4.1.5"
+ "@tailwindcss/oxide-linux-x64-gnu": "npm:4.1.5"
+ "@tailwindcss/oxide-linux-x64-musl": "npm:4.1.5"
+ "@tailwindcss/oxide-wasm32-wasi": "npm:4.1.5"
+ "@tailwindcss/oxide-win32-arm64-msvc": "npm:4.1.5"
+ "@tailwindcss/oxide-win32-x64-msvc": "npm:4.1.5"
+ dependenciesMeta:
+ "@tailwindcss/oxide-android-arm64":
+ optional: true
+ "@tailwindcss/oxide-darwin-arm64":
+ optional: true
+ "@tailwindcss/oxide-darwin-x64":
+ optional: true
+ "@tailwindcss/oxide-freebsd-x64":
+ optional: true
+ "@tailwindcss/oxide-linux-arm-gnueabihf":
+ optional: true
+ "@tailwindcss/oxide-linux-arm64-gnu":
+ optional: true
+ "@tailwindcss/oxide-linux-arm64-musl":
+ optional: true
+ "@tailwindcss/oxide-linux-x64-gnu":
+ optional: true
+ "@tailwindcss/oxide-linux-x64-musl":
+ optional: true
+ "@tailwindcss/oxide-wasm32-wasi":
+ optional: true
+ "@tailwindcss/oxide-win32-arm64-msvc":
+ optional: true
+ "@tailwindcss/oxide-win32-x64-msvc":
+ optional: true
+ checksum: 10c0/46d076f58839786007c500e627620f7aed33aa446ce7b09a10df21c0471128744c2a3afb9955061e62254f9d701c437deea67e40471cf036900d5b30e5ea653c
+ languageName: node
+ linkType: hard
+
+"@tailwindcss/vite@npm:^4.1.5":
+ version: 4.1.5
+ resolution: "@tailwindcss/vite@npm:4.1.5"
+ dependencies:
+ "@tailwindcss/node": "npm:4.1.5"
+ "@tailwindcss/oxide": "npm:4.1.5"
+ tailwindcss: "npm:4.1.5"
+ peerDependencies:
+ vite: ^5.2.0 || ^6
+ checksum: 10c0/588879114108b7e0f1f0c7b191281f0c332469c45d493826048378ee162f12a10c7f650428ad03a8005af3c720e208f951f7f5d3736f7740250fa037dd0f059d
+ languageName: node
+ linkType: hard
+
"@tanstack/query-core@npm:5.75.5":
version: 5.75.5
resolution: "@tanstack/query-core@npm:5.75.5"
@@ -3621,6 +3849,15 @@ __metadata:
languageName: node
linkType: hard
+"@tybys/wasm-util@npm:^0.9.0":
+ version: 0.9.0
+ resolution: "@tybys/wasm-util@npm:0.9.0"
+ dependencies:
+ tslib: "npm:^2.4.0"
+ checksum: 10c0/f9fde5c554455019f33af6c8215f1a1435028803dc2a2825b077d812bed4209a1a64444a4ca0ce2ea7e1175c8d88e2f9173a36a33c199e8a5c671aa31de8242d
+ languageName: node
+ linkType: hard
+
"@types/adm-zip@npm:^0":
version: 0.5.7
resolution: "@types/adm-zip@npm:0.5.7"
@@ -4400,10 +4637,12 @@ __metadata:
"@modelcontextprotocol/sdk": "npm:^1.10.2"
"@mozilla/readability": "npm:^0.6.0"
"@notionhq/client": "npm:^2.2.15"
+ "@radix-ui/react-slot": "npm:^1.2.2"
"@reduxjs/toolkit": "npm:^2.2.5"
"@shikijs/markdown-it": "npm:^3.2.2"
"@strongtz/win32-arm64-msvc": "npm:^0.4.7"
"@swc/plugin-styled-components": "npm:^7.1.3"
+ "@tailwindcss/vite": "npm:^4.1.5"
"@tanstack/react-query": "npm:^5.27.0"
"@tavily/core": "patch:@tavily/core@npm%3A0.3.1#~/.yarn/patches/@tavily-core-npm-0.3.1-fe69bf2bea.patch"
"@tryfabric/martian": "npm:^1.2.4"
@@ -4433,6 +4672,8 @@ __metadata:
babel-plugin-styled-components: "npm:^2.1.4"
browser-image-compression: "npm:^2.0.2"
bufferutil: "npm:^4.0.9"
+ class-variance-authority: "npm:^0.7.1"
+ clsx: "npm:^2.1.1"
color: "npm:^5.0.0"
dayjs: "npm:^1.11.11"
dexie: "npm:^4.0.8"
@@ -4468,9 +4709,10 @@ __metadata:
lint-staged: "npm:^15.5.0"
lodash: "npm:^4.17.21"
lru-cache: "npm:^11.1.0"
- lucide-react: "npm:^0.487.0"
+ lucide-react: "npm:^0.508.0"
markdown-it: "npm:^14.1.0"
mime: "npm:^4.0.4"
+ next-themes: "npm:^0.4.6"
node-stream-zip: "npm:^1.15.0"
npx-scope-finder: "npm:^1.2.0"
officeparser: "npm:^4.1.1"
@@ -4502,14 +4744,18 @@ __metadata:
rollup-plugin-visualizer: "npm:^5.12.0"
sass: "npm:^1.77.2"
shiki: "npm:^3.2.2"
+ sonner: "npm:^2.0.3"
string-width: "npm:^7.2.0"
styled-components: "npm:^6.1.11"
+ tailwind-merge: "npm:^3.2.0"
+ tailwindcss: "npm:^4.1.5"
tar: "npm:^7.4.3"
tiny-pinyin: "npm:^1.3.2"
tinycolor2: "npm:^1.6.0"
tokenx: "npm:^0.4.1"
turndown: "npm:^7.2.0"
turndown-plugin-gfm: "npm:^1.0.2"
+ tw-animate-css: "npm:^1.2.9"
typescript: "npm:^5.6.2"
undici: "npm:^7.4.0"
uuid: "npm:^10.0.0"
@@ -5752,6 +5998,15 @@ __metadata:
languageName: node
linkType: hard
+"class-variance-authority@npm:^0.7.1":
+ version: 0.7.1
+ resolution: "class-variance-authority@npm:0.7.1"
+ dependencies:
+ clsx: "npm:^2.1.1"
+ checksum: 10c0/0f438cea22131808b99272de0fa933c2532d5659773bfec0c583de7b3f038378996d3350683426b8e9c74a6286699382106d71fbec52f0dd5fbb191792cccb5b
+ languageName: node
+ linkType: hard
+
"classcat@npm:^5.0.3":
version: 5.0.5
resolution: "classcat@npm:5.0.5"
@@ -5856,6 +6111,13 @@ __metadata:
languageName: node
linkType: hard
+"clsx@npm:^2.1.1":
+ version: 2.1.1
+ resolution: "clsx@npm:2.1.1"
+ checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839
+ languageName: node
+ linkType: hard
+
"code-point-at@npm:^1.0.0":
version: 1.1.0
resolution: "code-point-at@npm:1.1.0"
@@ -6705,6 +6967,13 @@ __metadata:
languageName: node
linkType: hard
+"detect-libc@npm:^2.0.3":
+ version: 2.0.4
+ resolution: "detect-libc@npm:2.0.4"
+ checksum: 10c0/c15541f836eba4b1f521e4eecc28eefefdbc10a94d3b8cb4c507689f332cc111babb95deda66f2de050b22122113189986d5190be97d51b5a2b23b938415e67c
+ languageName: node
+ linkType: hard
+
"detect-node@npm:^2.0.4":
version: 2.1.0
resolution: "detect-node@npm:2.1.0"
@@ -7200,6 +7469,16 @@ __metadata:
languageName: node
linkType: hard
+"enhanced-resolve@npm:^5.18.1":
+ version: 5.18.1
+ resolution: "enhanced-resolve@npm:5.18.1"
+ dependencies:
+ graceful-fs: "npm:^4.2.4"
+ tapable: "npm:^2.2.0"
+ checksum: 10c0/4cffd9b125225184e2abed9fdf0ed3dbd2224c873b165d0838fd066cde32e0918626cba2f1f4bf6860762f13a7e2364fd89a82b99566be2873d813573ac71846
+ languageName: node
+ linkType: hard
+
"entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0":
version: 4.5.0
resolution: "entities@npm:4.5.0"
@@ -10227,6 +10506,15 @@ __metadata:
languageName: node
linkType: hard
+"jiti@npm:^2.4.2":
+ version: 2.4.2
+ resolution: "jiti@npm:2.4.2"
+ bin:
+ jiti: lib/jiti-cli.mjs
+ checksum: 10c0/4ceac133a08c8faff7eac84aabb917e85e8257f5ad659e843004ce76e981c457c390a220881748ac67ba1b940b9b729b30fb85cbaf6e7989f04b6002c94da331
+ languageName: node
+ linkType: hard
+
"jpeg-js@npm:^0.4.2":
version: 0.4.4
resolution: "jpeg-js@npm:0.4.4"
@@ -10780,6 +11068,116 @@ __metadata:
languageName: node
linkType: hard
+"lightningcss-darwin-arm64@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-darwin-arm64@npm:1.29.2"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"lightningcss-darwin-x64@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-darwin-x64@npm:1.29.2"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss-freebsd-x64@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-freebsd-x64@npm:1.29.2"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-arm-gnueabihf@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-linux-arm-gnueabihf@npm:1.29.2"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-arm64-gnu@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-linux-arm64-gnu@npm:1.29.2"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-arm64-musl@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-linux-arm64-musl@npm:1.29.2"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-x64-gnu@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-linux-x64-gnu@npm:1.29.2"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-x64-musl@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-linux-x64-musl@npm:1.29.2"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"lightningcss-win32-arm64-msvc@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-win32-arm64-msvc@npm:1.29.2"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"lightningcss-win32-x64-msvc@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss-win32-x64-msvc@npm:1.29.2"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss@npm:1.29.2":
+ version: 1.29.2
+ resolution: "lightningcss@npm:1.29.2"
+ dependencies:
+ detect-libc: "npm:^2.0.3"
+ lightningcss-darwin-arm64: "npm:1.29.2"
+ lightningcss-darwin-x64: "npm:1.29.2"
+ lightningcss-freebsd-x64: "npm:1.29.2"
+ lightningcss-linux-arm-gnueabihf: "npm:1.29.2"
+ lightningcss-linux-arm64-gnu: "npm:1.29.2"
+ lightningcss-linux-arm64-musl: "npm:1.29.2"
+ lightningcss-linux-x64-gnu: "npm:1.29.2"
+ lightningcss-linux-x64-musl: "npm:1.29.2"
+ lightningcss-win32-arm64-msvc: "npm:1.29.2"
+ lightningcss-win32-x64-msvc: "npm:1.29.2"
+ dependenciesMeta:
+ lightningcss-darwin-arm64:
+ optional: true
+ lightningcss-darwin-x64:
+ optional: true
+ lightningcss-freebsd-x64:
+ optional: true
+ lightningcss-linux-arm-gnueabihf:
+ optional: true
+ lightningcss-linux-arm64-gnu:
+ optional: true
+ lightningcss-linux-arm64-musl:
+ optional: true
+ lightningcss-linux-x64-gnu:
+ optional: true
+ lightningcss-linux-x64-musl:
+ optional: true
+ lightningcss-win32-arm64-msvc:
+ optional: true
+ lightningcss-win32-x64-msvc:
+ optional: true
+ checksum: 10c0/e06bb99c98e9f56cfcf37b5ce0e0198cdeeac2993ef2e5b878b6b0934fff54c7528f38bf8875e7bd71e64c9b20b29c0cada222d1e0089c8f94c1159bbb5d611f
+ languageName: node
+ linkType: hard
+
"lilconfig@npm:^3.1.3":
version: 3.1.3
resolution: "lilconfig@npm:3.1.3"
@@ -11014,12 +11412,12 @@ __metadata:
languageName: node
linkType: hard
-"lucide-react@npm:^0.487.0":
- version: 0.487.0
- resolution: "lucide-react@npm:0.487.0"
+"lucide-react@npm:^0.508.0":
+ version: 0.508.0
+ resolution: "lucide-react@npm:0.508.0"
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
- checksum: 10c0/7177778c584b8e9545957bef28e95841c4be1b3bf473f9e2e64454c3e183d7ed0bc977c9f7b5446088023c7000151b7a3b27398d4f70025bf343782192f653ca
+ checksum: 10c0/8eb9bc74ebeba85967328c236c5300aa2070d073e79cb88b6c968fd5d805d028aa3a64649d6b7711e92b5e2e873d8c961641d691e135e0e43056d3be1e3e7f87
languageName: node
linkType: hard
@@ -12493,6 +12891,16 @@ __metadata:
languageName: node
linkType: hard
+"next-themes@npm:^0.4.6":
+ version: 0.4.6
+ resolution: "next-themes@npm:0.4.6"
+ peerDependencies:
+ react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+ checksum: 10c0/83590c11d359ce7e4ced14f6ea9dd7a691d5ce6843fe2dc520fc27e29ae1c535118478d03e7f172609c41b1ef1b8da6b8dd2d2acd6cd79cac1abbdbd5b99f2c4
+ languageName: node
+ linkType: hard
+
"node-abi@npm:^2.7.0":
version: 2.30.1
resolution: "node-abi@npm:2.30.1"
@@ -15833,6 +16241,16 @@ __metadata:
languageName: node
linkType: hard
+"sonner@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "sonner@npm:2.0.3"
+ peerDependencies:
+ react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ checksum: 10c0/59f84142f7a692dd1ec90e6df2003a70ff0b325eaef1d5dd17ad250e7f992b71053824f1a7ab3912f8c4caa5ce30523a096b5f5108b3e8ae13f906048691aca1
+ languageName: node
+ linkType: hard
+
"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1":
version: 1.2.1
resolution: "source-map-js@npm:1.2.1"
@@ -16355,6 +16773,27 @@ __metadata:
languageName: node
linkType: hard
+"tailwind-merge@npm:^3.2.0":
+ version: 3.2.0
+ resolution: "tailwind-merge@npm:3.2.0"
+ checksum: 10c0/294f6c2db0df74405bff126107107426c3126a70a1717d78e8d6811db65546c9bb3d61282bdb8d9fbded23f6bc8ec3e8e61031a4f53265f90b7f3dba558f88f4
+ languageName: node
+ linkType: hard
+
+"tailwindcss@npm:4.1.5, tailwindcss@npm:^4.1.5":
+ version: 4.1.5
+ resolution: "tailwindcss@npm:4.1.5"
+ checksum: 10c0/19fd0709f8c8d706d28a936f6ae7ad371d8586ea38e17a68ab5ba1c1c5d97ffcc8eba144f1b5c91c1534aa8df053a26c298863272a3357161a1dd9849b89339c
+ languageName: node
+ linkType: hard
+
+"tapable@npm:^2.2.0":
+ version: 2.2.1
+ resolution: "tapable@npm:2.2.1"
+ checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9
+ languageName: node
+ linkType: hard
+
"tar-fs@npm:^2.0.0":
version: 2.1.2
resolution: "tar-fs@npm:2.1.2"
@@ -16794,7 +17233,7 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.8.1":
+"tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2, tslib@npm:^2.8.0, tslib@npm:^2.8.1":
version: 2.8.1
resolution: "tslib@npm:2.8.1"
checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
@@ -16826,6 +17265,13 @@ __metadata:
languageName: node
linkType: hard
+"tw-animate-css@npm:^1.2.9":
+ version: 1.2.9
+ resolution: "tw-animate-css@npm:1.2.9"
+ checksum: 10c0/ffbd6dfbb34490a8752b185b40192168ce4bfa69949d153dc831d9471dec2758501f27f1784b6615de7da73a546d01d7201ed691f5220fe3e0a53694cb275a3a
+ languageName: node
+ linkType: hard
+
"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0":
version: 0.14.5
resolution: "tweetnacl@npm:0.14.5"