diff --git a/.dumirc.ts b/.dumirc.ts index c956c78a..bb765231 100644 --- a/.dumirc.ts +++ b/.dumirc.ts @@ -14,7 +14,11 @@ export default defineConfig({ footer: 'Made with ❤️ by 蚂蚁集团 - AFX & 数字科技', logo: 'https://mdn.alipayobjects.com/huamei_re70wt/afts/img/A*Mo27Sr3kS4kAAAAAAAAAAAAADmuEAQ/original', }, - mfsu: false, + title: '@ant-design/pro-chat', + resolve: { + docDirs: ['docs'], + atomDirs: [{ type: 'component', dir: 'src/components' }], + }, outputPath: 'docs-dist', html2sketch: {}, extraBabelPlugins: ['antd-style'], diff --git a/README.md b/README.md index 0f53ec23..8c4a743b 100644 --- a/README.md +++ b/README.md @@ -62,11 +62,7 @@ $ pnpm install antd // peerDependencies ```js const nextConfig = { - transpilePackages: [ - '@ant-design/pro-chat', - '@ant-design/pro-editor', - 'react-intersection-observer', - ], + transpilePackages: ['@ant-design/pro-chat', 'react-intersection-observer'], }; ``` diff --git a/README.zh-CN.md b/README.zh-CN.md index 5eda5c20..087920dd 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -60,11 +60,7 @@ $ pnpm install antd // peerDependencies ```js const nextConfig = { - transpilePackages: [ - '@ant-design/pro-chat', - '@ant-design/pro-editor', - 'react-intersection-observer', - ], + transpilePackages: ['@ant-design/pro-chat', 'react-intersection-observer'], }; ``` diff --git a/src/ProChat/__test__/__snapshots__/demo.test.tsx.snap b/__test__/__snapshots__/demo.test.tsx.snap similarity index 100% rename from src/ProChat/__test__/__snapshots__/demo.test.tsx.snap rename to __test__/__snapshots__/demo.test.tsx.snap diff --git a/src/ProChat/__test__/demo.test.tsx b/__test__/demo.test.tsx similarity index 100% rename from src/ProChat/__test__/demo.test.tsx rename to __test__/demo.test.tsx diff --git a/src/ProChat/__test__/index.test.tsx b/__test__/index.test.tsx similarity index 77% rename from src/ProChat/__test__/index.test.tsx rename to __test__/index.test.tsx index d27af85a..4adb6f14 100644 --- a/src/ProChat/__test__/index.test.tsx +++ b/__test__/index.test.tsx @@ -6,12 +6,12 @@ describe('ProChat', () => { it('input area render worked', () => { const wrapper = render( { - return
RenderInputArea
; + inputAreaRender={() => { + return
inputAreaRender
; }} />, ); - expect(wrapper.getByText('RenderInputArea')).toBeInTheDocument(); + expect(wrapper.getByText('inputAreaRender')).toBeInTheDocument(); }); it('i18n worked', () => { diff --git a/demos/chatgpt-nextjs/README.md b/demos/chatgpt-nextjs/README.md deleted file mode 100644 index c4033664..00000000 --- a/demos/chatgpt-nextjs/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/demos/chatgpt-nextjs/next-env.d.ts b/demos/chatgpt-nextjs/next-env.d.ts deleted file mode 100644 index 4f11a03d..00000000 --- a/demos/chatgpt-nextjs/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/demos/chatgpt-nextjs/next.config.js b/demos/chatgpt-nextjs/next.config.js deleted file mode 100644 index 8b066925..00000000 --- a/demos/chatgpt-nextjs/next.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - transpilePackages: [ - '@ant-design/pro-editor', - '@ant-design/pro-chat', - 'react-intersection-observer', - ], -}; - -module.exports = nextConfig; diff --git a/demos/chatgpt-nextjs/package.json b/demos/chatgpt-nextjs/package.json deleted file mode 100644 index f0f45a55..00000000 --- a/demos/chatgpt-nextjs/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "chatgpt-nextjs", - "version": "0.1.0", - "private": true, - "scripts": { - "build": "next build", - "dev": "next dev", - "lint": "next lint", - "start": "next start" - }, - "dependencies": { - "@ant-design/pro-chat": "^1.2.0", - "@ant-design/pro-editor": "^0.38.0", - "ai": "^2.2.31", - "antd": "^5.12.8", - "antd-style": "^3.6.1", - "next": "14.0.4", - "openai": "^4.24.7", - "react": "^18", - "react-dom": "^18" - }, - "devDependencies": { - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.0.4", - "typescript": "^5" - } -} diff --git a/demos/chatgpt-nextjs/src/app/api/openai/route.ts b/demos/chatgpt-nextjs/src/app/api/openai/route.ts deleted file mode 100644 index 0117b65e..00000000 --- a/demos/chatgpt-nextjs/src/app/api/openai/route.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { OpenAIStream, StreamingTextResponse } from 'ai'; -import OpenAI from 'openai'; - -export async function POST(request: Request) { - const { messages = [] }: Partial<{ messages: Array }> = await request.json(); - - const openai = new OpenAI({ - apiKey: 'OpenAI Key', // your openai key - baseURL: 'base url', // if u dont need change baseUrl,you can delete this line - }); - - const PickMessages = messages.map((message) => { - return { - role: message.role, - content: message.content, - }; - }); - - const response = await openai.chat.completions.create({ - model: 'gpt-3.5-turbo', - messages: [...PickMessages], - stream: true, - }); - - const stream = OpenAIStream(response); - return new StreamingTextResponse(stream); -} diff --git a/demos/chatgpt-nextjs/src/app/chatgpt/index.tsx b/demos/chatgpt-nextjs/src/app/chatgpt/index.tsx deleted file mode 100644 index af545c7e..00000000 --- a/demos/chatgpt-nextjs/src/app/chatgpt/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -'use client'; -import { ProChat } from '@ant-design/pro-chat'; -import { useTheme } from 'antd-style'; -import { useEffect, useState } from 'react'; - -export default function Home() { - const theme = useTheme(); - const [showComponent, setShowComponent] = useState(false); - - useEffect(() => setShowComponent(true), []); - - return ( -
- {showComponent && ( - { - const response = await fetch('/api/openai', { - method: 'POST', - body: JSON.stringify({ messages: messages }), - }); - return response; - }} - /> - )} -
- ); -} diff --git a/demos/chatgpt-nextjs/src/app/globals.css b/demos/chatgpt-nextjs/src/app/globals.css deleted file mode 100644 index d4f491e1..00000000 --- a/demos/chatgpt-nextjs/src/app/globals.css +++ /dev/null @@ -1,107 +0,0 @@ -:root { - --max-width: 1100px; - --border-radius: 12px; - --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', - 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', - 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; - - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; - - --primary-glow: conic-gradient( - from 180deg at 50% 50%, - #16abff33 0deg, - #0885ff33 55deg, - #54d6ff33 120deg, - #0071ff33 160deg, - transparent 360deg - ); - --secondary-glow: radial-gradient( - rgba(255, 255, 255, 1), - rgba(255, 255, 255, 0) - ); - - --tile-start-rgb: 239, 245, 249; - --tile-end-rgb: 228, 232, 233; - --tile-border: conic-gradient( - #00000080, - #00000040, - #00000030, - #00000020, - #00000010, - #00000010, - #00000080 - ); - - --callout-rgb: 238, 240, 241; - --callout-border-rgb: 172, 175, 176; - --card-rgb: 180, 185, 188; - --card-border-rgb: 131, 134, 135; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - - --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); - --secondary-glow: linear-gradient( - to bottom right, - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0.3) - ); - - --tile-start-rgb: 2, 13, 46; - --tile-end-rgb: 2, 5, 19; - --tile-border: conic-gradient( - #ffffff80, - #ffffff40, - #ffffff30, - #ffffff20, - #ffffff10, - #ffffff10, - #ffffff80 - ); - - --callout-rgb: 20, 20, 20; - --callout-border-rgb: 108, 108, 108; - --card-rgb: 100, 100, 100; - --card-border-rgb: 200, 200, 200; - } -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} - -a { - color: inherit; - text-decoration: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} diff --git a/demos/chatgpt-nextjs/src/app/layout.tsx b/demos/chatgpt-nextjs/src/app/layout.tsx deleted file mode 100644 index 0f24671a..00000000 --- a/demos/chatgpt-nextjs/src/app/layout.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { Metadata } from 'next'; -import { Inter } from 'next/font/google'; -import './globals.css'; - -const inter = Inter({ subsets: ['latin'] }); - -export const metadata: Metadata = { - title: 'Create Next App', - description: 'Generated by create next app', -}; - -export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - {children} - - ); -} diff --git a/demos/chatgpt-nextjs/src/app/page.tsx b/demos/chatgpt-nextjs/src/app/page.tsx deleted file mode 100644 index 92ba7b9a..00000000 --- a/demos/chatgpt-nextjs/src/app/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import Page from './chatgpt'; - -const Index = () => ( - <> - - -); - -export default Index; diff --git a/demos/chatgpt-nextjs/tsconfig.json b/demos/chatgpt-nextjs/tsconfig.json deleted file mode 100644 index e59724b2..00000000 --- a/demos/chatgpt-nextjs/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/demos/qwen-nextjs/README.md b/demos/qwen-nextjs/README.md deleted file mode 100644 index c4033664..00000000 --- a/demos/qwen-nextjs/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/demos/qwen-nextjs/next-env.d.ts b/demos/qwen-nextjs/next-env.d.ts deleted file mode 100644 index 4f11a03d..00000000 --- a/demos/qwen-nextjs/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/demos/qwen-nextjs/next.config.js b/demos/qwen-nextjs/next.config.js deleted file mode 100644 index 8b066925..00000000 --- a/demos/qwen-nextjs/next.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - transpilePackages: [ - '@ant-design/pro-editor', - '@ant-design/pro-chat', - 'react-intersection-observer', - ], -}; - -module.exports = nextConfig; diff --git a/demos/qwen-nextjs/package.json b/demos/qwen-nextjs/package.json deleted file mode 100644 index 496d369f..00000000 --- a/demos/qwen-nextjs/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "qwen-nextjs", - "version": "0.1.0", - "private": true, - "scripts": { - "build": "next build", - "dev": "next dev", - "lint": "next lint", - "start": "next start" - }, - "dependencies": { - "@ant-design/pro-chat": "^1.2.0", - "@ant-design/pro-editor": "^0.38.0", - "antd": "^5.12.8", - "antd-style": "^3.6.1", - "next": "14.0.4", - "react": "^18", - "react-dom": "^18" - }, - "devDependencies": { - "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", - "eslint": "^8", - "eslint-config-next": "14.0.4", - "typescript": "^5" - } -} diff --git a/demos/qwen-nextjs/src/app/globals.css b/demos/qwen-nextjs/src/app/globals.css deleted file mode 100644 index cb1208fd..00000000 --- a/demos/qwen-nextjs/src/app/globals.css +++ /dev/null @@ -1,102 +0,0 @@ -:root { - --max-width: 1100px; - --border-radius: 12px; - --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', 'Roboto Mono', - 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', 'Fira Mono', 'Droid Sans Mono', - 'Courier New', monospace; - - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; - - --primary-glow: conic-gradient( - from 180deg at 50% 50%, - #16abff33 0deg, - #0885ff33 55deg, - #54d6ff33 120deg, - #0071ff33 160deg, - transparent 360deg - ); - --secondary-glow: radial-gradient(rgba(255, 255, 255, 1), rgba(255, 255, 255, 0)); - - --tile-start-rgb: 239, 245, 249; - --tile-end-rgb: 228, 232, 233; - --tile-border: conic-gradient( - #00000080, - #00000040, - #00000030, - #00000020, - #00000010, - #00000010, - #00000080 - ); - - --callout-rgb: 238, 240, 241; - --callout-border-rgb: 172, 175, 176; - --card-rgb: 180, 185, 188; - --card-border-rgb: 131, 134, 135; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - - --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); - --secondary-glow: linear-gradient( - to bottom right, - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0.3) - ); - - --tile-start-rgb: 2, 13, 46; - --tile-end-rgb: 2, 5, 19; - --tile-border: conic-gradient( - #ffffff80, - #ffffff40, - #ffffff30, - #ffffff20, - #ffffff10, - #ffffff10, - #ffffff80 - ); - - --callout-rgb: 20, 20, 20; - --callout-border-rgb: 108, 108, 108; - --card-rgb: 100, 100, 100; - --card-border-rgb: 200, 200, 200; - } -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body, -#root { - max-width: 100vw; - overflow-x: hidden; - height: 100%; -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient(to bottom, transparent, rgb(var(--background-end-rgb))) - rgb(var(--background-start-rgb)); -} - -a { - color: inherit; - text-decoration: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} diff --git a/demos/qwen-nextjs/src/app/layout.tsx b/demos/qwen-nextjs/src/app/layout.tsx deleted file mode 100644 index 0f24671a..00000000 --- a/demos/qwen-nextjs/src/app/layout.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { Metadata } from 'next'; -import { Inter } from 'next/font/google'; -import './globals.css'; - -const inter = Inter({ subsets: ['latin'] }); - -export const metadata: Metadata = { - title: 'Create Next App', - description: 'Generated by create next app', -}; - -export default function RootLayout({ children }: { children: React.ReactNode }) { - return ( - - {children} - - ); -} diff --git a/demos/qwen-nextjs/src/app/page.tsx b/demos/qwen-nextjs/src/app/page.tsx deleted file mode 100644 index 3addb399..00000000 --- a/demos/qwen-nextjs/src/app/page.tsx +++ /dev/null @@ -1,38 +0,0 @@ -'use client'; -import { useState, useEffect } from 'react' -import { ProChat } from '@ant-design/pro-chat'; -import { useTheme } from 'antd-style'; - -export default function Home() { - - const theme = useTheme(); - const [showComponent, setShowComponent] = useState(false) - - useEffect(() => setShowComponent(true), []) - - return ( -
- { - showComponent && { - const response = await fetch('/api/qwen', { - method: 'POST', - body: JSON.stringify({ messages: messages }), - }); - const data = await response.json(); - return new Response(data.output?.text); - }} - /> - } -
- ); -} - diff --git a/demos/qwen-nextjs/src/app/qwen/route.ts b/demos/qwen-nextjs/src/app/qwen/route.ts deleted file mode 100644 index 64ae475d..00000000 --- a/demos/qwen-nextjs/src/app/qwen/route.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { NextResponse } from 'next/server'; - -export async function POST(request: Request) { - const { messages = [] }: Partial<{ messages: Array }> = await request.json(); - try { - const apiKey = 'Your-Api-Key'; // 你的 API 密钥 - const response = await fetch( - 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation', - { - method: 'POST', - headers: { - Authorization: 'Bearer ' + apiKey, - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - model: 'qwen-turbo', - input: { - messages: [ - { - role: 'system', - content: 'You are a helpful assistant.', - }, - ...messages, - ], - }, - parameters: {}, - }), - }, - ); - const data = await response.json(); - return NextResponse.json(data); - } catch (error) { - return NextResponse.error(); - } -} diff --git a/demos/qwen-nextjs/tsconfig.json b/demos/qwen-nextjs/tsconfig.json deleted file mode 100644 index e59724b2..00000000 --- a/demos/qwen-nextjs/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "plugins": [ - { - "name": "next" - } - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/docs/guide/demos/base.tsx b/docs/guide/demos/base.tsx index fa19a525..b39b4fa5 100644 --- a/docs/guide/demos/base.tsx +++ b/docs/guide/demos/base.tsx @@ -1,23 +1,117 @@ /** * compact: true */ +import { + ClockCircleOutlined, + CopyOutlined, + DeleteOutlined, + EditOutlined, + ReloadOutlined, + SyncOutlined, +} from '@ant-design/icons'; import { ProChat } from '@ant-design/pro-chat'; +import { ConfigProvider, Popover, Space, Tag, Timeline } from 'antd'; import { useTheme } from 'antd-style'; export default () => { const theme = useTheme(); return ( -
- { - const mockedData: string = `这是一段模拟的对话数据。本次会话传入了${messages.length}条消息`; - return new Response(mockedData); - }} - /> -
+ +
+ { + const mockedData: string = `这是一段模拟的对话数据。本次会话传入了${messages.length}条消息`; + return new Response(mockedData); + }} + chatItemRenderConfig={{ + contentBeforeRender: (_, content) => { + return ( + <> + , + color: 'red', + children: 'Technical testing 2015-09-01', + }, + { + children: 'Network problems being solved 2015-09-01', + }, + ]} + /> + } + > + } color="processing"> + Technical testing 2015-09-01 + + +
{content}
+ + ); + }, + contentAfterRender: (item, dom) => { + return ( +
+ + + + + + + + +
+ ); + }, + }} + actionsRender={(actions, props) => { + return [ +
{ + console.log('custom action'); + }} + style={{ + cursor: 'pointer', + padding: '4px 8px', + borderRadius: 4, + }} + > + 自定义操作 +
, + ...actions, + ]; + }} + /> +
+
); }; diff --git a/docs/guide/demos/controled-servers-push.tsx b/docs/guide/demos/controled-servers-push.tsx index 872952c3..6b195460 100644 --- a/docs/guide/demos/controled-servers-push.tsx +++ b/docs/guide/demos/controled-servers-push.tsx @@ -12,13 +12,13 @@ import { MockResponse } from './mocks/streamResponse'; export default () => { const theme = useTheme(); - const [chats, setChats] = useState>[]>( - Object.values(example.initialChats), + const [chatList, setChatList] = useState>[]>( + Object.values(example.initialChatsList), ); useEffect(() => { setTimeout(() => { - setChats([ - ...chats, + setChatList([ + ...chatList, { id: 'VbtDpzsi', content: `当前对话剩余的 token 数量为 100`, @@ -31,9 +31,9 @@ export default () => { return (
{ - setChats(chats); + chatList={chatList} + onChatsChange={(chatList) => { + setChatList(chatList); }} chatItemRenderConfig={{ render: (item, dom, defaultDom) => { @@ -46,14 +46,14 @@ export default () => { justifyContent: 'center', }} > - +
); } return defaultDom; }, }} - request={async (messages) => { + sendMessageRequest={async (messages) => { const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; const mockResponse = new MockResponse(mockedData, 100); diff --git a/docs/guide/demos/doc-mode.tsx b/docs/guide/demos/doc-mode.tsx index c5555a28..82f5ba4d 100644 --- a/docs/guide/demos/doc-mode.tsx +++ b/docs/guide/demos/doc-mode.tsx @@ -12,16 +12,15 @@ export default () => { return (
{ + sendMessageRequest={async (messages) => { const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; const mockResponse = new MockResponse(mockedData, 100); return mockResponse.getResponse(); }} - chats={example.chats} + chatList={example.chatList} config={example.config} />
diff --git a/docs/guide/demos/renderInputArea.tsx b/docs/guide/demos/inputAreaRender.tsx similarity index 100% rename from docs/guide/demos/renderInputArea.tsx rename to docs/guide/demos/inputAreaRender.tsx diff --git a/docs/guide/demos/mocks/fullFeature.ts b/docs/guide/demos/mocks/fullFeature.ts index 314f6f20..00709a72 100644 --- a/docs/guide/demos/mocks/fullFeature.ts +++ b/docs/guide/demos/mocks/fullFeature.ts @@ -1,5 +1,5 @@ export const example = { - initialChats: [ + initialChatsList: [ { content: '你是谁?', createAt: 1697862242452, @@ -22,7 +22,7 @@ export const example = { updateAt: 1697862243540, }, ], - chats: [ + chatList: [ { content: '请展示完整的会话高亮效果?', createAt: 1697862242452, diff --git a/docs/guide/demos/styles-chatitem.tsx b/docs/guide/demos/styles-chatitem.tsx index c5de30ef..39436cff 100644 --- a/docs/guide/demos/styles-chatitem.tsx +++ b/docs/guide/demos/styles-chatitem.tsx @@ -8,14 +8,16 @@ import { example } from './mocks/fullFeature'; export default () => { const theme = useTheme(); - const [chats, setChats] = useState>[]>(example.initialChats); + const [chatList, setChatList] = useState>[]>( + example.initialChatsList, + ); return (
{ - setChats(chats); + chatList={chatList} + onChatsChange={(chatList) => { + setChatList(chatList); }} chatItemRenderConfig={{ contentRender: (_, defaultContent) => { @@ -31,7 +33,7 @@ export default () => { ); }, }} - request={async (messages) => { + sendMessageRequest={async (messages) => { const mockedData: string = `这是一段模拟的对话数据。本次会话传入了${messages.length}条消息`; return new Response(mockedData); }} diff --git a/docs/guide/demos/styles-className.tsx b/docs/guide/demos/styles-className.tsx index 85897edb..a001e5bd 100644 --- a/docs/guide/demos/styles-className.tsx +++ b/docs/guide/demos/styles-className.tsx @@ -8,7 +8,9 @@ import { example } from './mocks/fullFeature'; export default () => { const theme = useTheme(); - const [chats, setChats] = useState>[]>(example.initialChats); + const [chatList, setChatList] = useState>[]>( + example.initialChatsList, + ); const CustomClassName = cx( css(` @@ -21,9 +23,9 @@ export default () => { return (
{ - setChats(chats); + chatList={chatList} + onChatsChange={(chatList) => { + setChatList(chatList); }} chatItemRenderConfig={{ contentRender: (_, defaultContent) => { @@ -39,7 +41,7 @@ export default () => { ); }, }} - request={async (messages) => { + sendMessageRequest={async (messages) => { const mockedData: string = `这是一段模拟的对话数据。本次会话传入了${messages.length}条消息`; return new Response(mockedData); }} diff --git a/docs/guide/demos/styles-darkmode.tsx b/docs/guide/demos/styles-darkmode.tsx index 000bbcb9..934c8a62 100644 --- a/docs/guide/demos/styles-darkmode.tsx +++ b/docs/guide/demos/styles-darkmode.tsx @@ -8,7 +8,9 @@ import { useState } from 'react'; import { example } from './mocks/fullFeature'; export default () => { - const [chats, setChats] = useState>[]>(example.initialChats); + const [chatList, setChatList] = useState>[]>( + example.initialChatsList, + ); return ( { >
{ - setChats(chats); + chatList={chatList} + onChatsChange={(chatList) => { + setChatList(chatList); }} - request={async (messages) => { + sendMessageRequest={async (messages) => { const mockedData: string = `这是一段模拟的对话数据。本次会话传入了${messages.length}条消息`; return new Response(mockedData); }} diff --git a/docs/guide/demos/styles-inputarea.tsx b/docs/guide/demos/styles-inputarea.tsx index c05fbf81..ca138827 100644 --- a/docs/guide/demos/styles-inputarea.tsx +++ b/docs/guide/demos/styles-inputarea.tsx @@ -20,7 +20,7 @@ export default () => { fontWeight: 800, }, }} - request={async (messages) => { + sendMessageRequest={async (messages) => { const mockedData: string = `这是一段模拟的对话数据。本次会话传入了${messages.length}条消息`; return new Response(mockedData); }} diff --git a/docs/guide/initial.en-US.md b/docs/guide/initial.en-US.md index 2b9d1758..81c92105 100644 --- a/docs/guide/initial.en-US.md +++ b/docs/guide/initial.en-US.md @@ -39,7 +39,7 @@ In the above example, we passed in a custom message with a Markdown formatted li ## Initialize data -`initialChats` is a property used to initialize chat data. By setting `initialChats`,We can load the previously saved chat records and display them in the ProChat component. The example code is as follows: +`initialChatsList` is a property used to initialize chat data. By setting `initialChatsList`,We can load the previously saved chat records and display them in the ProChat component. The example code is as follows: ```tsx import { ProChat } from '@ant-design/pro-chat'; @@ -50,13 +50,13 @@ export default () => { const theme = useTheme(); return (
- +
); }; ``` -In the above code, we pass `example.chats` as the initial chat data to the ProChat component. Note that when using this attribute, it is necessary to provide the initial chat data in the correct format. +In the above code, we pass `example.chatList` as the initial chat data to the ProChat component. Note that when using this attribute, it is necessary to provide the initial chat data in the correct format. ## Using a skeleton screen @@ -64,21 +64,20 @@ When the data is not ready yet, the `loading` attribute can be used to display t ```tsx import { ProChat } from '@ant-design/pro-chat'; -import { Button, Divider } from 'antd'; +import { Button, Flex, Divider } from 'antd'; import { useTheme } from 'antd-style'; import { useState } from 'react'; -import { Flexbox } from 'react-layout-kit'; import { example } from './demos/mocks/fullFeature'; export default () => { const [loading, setLoading] = useState(true); const theme = useTheme(); - const [chats, setChats] = useState(example.initialChats); + const [chatList, setChatList] = useState(example.initialChatsList); return ( - - + + - + - - + + ); }; ``` diff --git a/docs/guide/initial.md b/docs/guide/initial.md index a8e2c146..12f3870a 100644 --- a/docs/guide/initial.md +++ b/docs/guide/initial.md @@ -39,7 +39,7 @@ export default () => { ## 初始化数据 -`initialChats` 是用于初始化聊天数据的属性。通过设置 `initialChats`,我们可以加载之前保存的聊天记录,并在 ProChat 组件中展示出来。示例代码如下: +`initialChatsList` 是用于初始化聊天数据的属性。通过设置 `initialChatsList`,我们可以加载之前保存的聊天记录,并在 ProChat 组件中展示出来。示例代码如下: ```tsx import { ProChat } from '@ant-design/pro-chat'; @@ -50,13 +50,13 @@ export default () => { const theme = useTheme(); return (
- +
); }; ``` -上述代码中,我们将 `example.chats` 作为初始聊天数据传递给 ProChat 组件。注意,在使用该属性时需要提供正确格式的初始聊天数据。 +上述代码中,我们将 `example.chatList` 作为初始聊天数据传递给 ProChat 组件。注意,在使用该属性时需要提供正确格式的初始聊天数据。 ## 使用骨架屏 @@ -74,11 +74,11 @@ export default () => { const [loading, setLoading] = useState(true); const theme = useTheme(); - const [chats, setChats] = useState(example.initialChats); + const [chatList, setChatList] = useState(example.initialChatsList); return ( - - + + - + - - + + ); }; ``` diff --git a/docs/guide/intro-start.en-US.md b/docs/guide/intro-start.en-US.md index 41bf825a..b7c028a0 100644 --- a/docs/guide/intro-start.en-US.md +++ b/docs/guide/intro-start.en-US.md @@ -15,7 +15,6 @@ ProEditor is positioned as a component library for the front-end to quickly buil ## Install ```bash -# @ant-design/pro-editor based on antd and antd-style,which need to be installed in the project $ npm install antd antd-style -S $ npm install @ant-design/pro-chat -S ``` diff --git a/docs/guide/intro-start.md b/docs/guide/intro-start.md index d3280b90..839ab5a1 100644 --- a/docs/guide/intro-start.md +++ b/docs/guide/intro-start.md @@ -15,7 +15,6 @@ ProEditor 定位为 Chat 对话模式下,给前端提供快速搭建对话内 ## 安装 ```bash -# @ant-design/pro-editor 基于 antd 和 antd-style,需要在项目中安装 $ npm install antd antd-style -S $ npm install @ant-design/pro-chat -S ``` diff --git a/docs/guide/multimodal.en-US.md b/docs/guide/multimodal.en-US.md index aa926a84..2cd6b8f7 100644 --- a/docs/guide/multimodal.en-US.md +++ b/docs/guide/multimodal.en-US.md @@ -22,17 +22,17 @@ These design details are not very numerous, and for some models, they may not ne ## Custom input section -We provide an API for renderInputArea to help you support multi-modal situations, as well as integrate and interact with ProChat's data streams +We provide an API for inputAreaRender to help you support multi-modal situations, as well as integrate and interact with ProChat's data streams ```ts - renderInputArea?: ( + inputAreaRender?: ( defaultDom: ReactNode, onMessageSend: (message: string) => void | Promise, onClearAllHistory: () => void, ) => ReactNode; ``` -renderInputArea have three parameters: +inputAreaRender have three parameters: - defaultDom :The default rendering dom, if you want to wrap or add some small content, you can directly combine it on this basis - onMessageSend :The method of sending data, which is essentially the same as ProChat.sendMessage (Hooks), is used to send a data stream to ProChat @@ -42,7 +42,7 @@ Now you can freely combine the current content and various requirements you plan ## A demonstration case of uploading an image - + Let's break down this case in detail diff --git a/docs/guide/multimodal.md b/docs/guide/multimodal.md index 9213d690..8b5629c1 100644 --- a/docs/guide/multimodal.md +++ b/docs/guide/multimodal.md @@ -42,7 +42,7 @@ inputAreaRender 共有三个参数: ## 一个图片上传的演示案例 - + 我们来详细拆解下这个案例 diff --git a/docs/guide/nextjs.en-US.md b/docs/guide/nextjs.en-US.md index c3bfed5b..14f009cd 100644 --- a/docs/guide/nextjs.en-US.md +++ b/docs/guide/nextjs.en-US.md @@ -32,11 +32,7 @@ Due to Next.js being a CSR, SSR isomorphic React framework, and ProChat only pro /** @type {import('next').NextConfig} */ const nextConfig = { // Convert pure ESM modules to node compatible modules - transpilePackages: [ - '@ant-design/pro-chat', - 'react-intersection-observer', - '@ant-design/pro-editor', - ], + transpilePackages: ['@ant-design/pro-chat', 'react-intersection-observer'], }; ``` diff --git a/docs/guide/nextjs.md b/docs/guide/nextjs.md index 96b7a099..671730c6 100644 --- a/docs/guide/nextjs.md +++ b/docs/guide/nextjs.md @@ -32,11 +32,7 @@ pnpm install @ant-design/pro-chat /** @type {import('next').NextConfig} */ const nextConfig = { // 将纯 esm 模块转为 node 兼容模块 - transpilePackages: [ - '@ant-design/pro-chat', - 'react-intersection-observer', - '@ant-design/pro-editor', - ], + transpilePackages: ['@ant-design/pro-chat', 'react-intersection-observer'], }; ``` diff --git a/docs/guide/qwen.en-US.md b/docs/guide/qwen.en-US.md index fb443070..5a7951ef 100644 --- a/docs/guide/qwen.en-US.md +++ b/docs/guide/qwen.en-US.md @@ -27,11 +27,7 @@ Modify the `transpilePackages` in `next.config.(m)js` to add relevant dependenci ```ts /** @type {import('next').NextConfig} */ const nextConfig = { - transpilePackages: [ - '@ant-design/pro-editor', - '@ant-design/pro-chat', - 'react-intersection-observer', - ], + transpilePackages: ['@ant-design/pro-chat', 'react-intersection-observer'], }; module.exports = nextConfig; ``` diff --git a/docs/guide/qwen.md b/docs/guide/qwen.md index 62312ba1..e924684d 100644 --- a/docs/guide/qwen.md +++ b/docs/guide/qwen.md @@ -27,11 +27,7 @@ npx create-next-app@latest ```ts /** @type {import('next').NextConfig} */ const nextConfig = { - transpilePackages: [ - '@ant-design/pro-editor', - '@ant-design/pro-chat', - 'react-intersection-observer', - ], + transpilePackages: ['@ant-design/pro-chat', 'react-intersection-observer'], }; module.exports = nextConfig; ``` diff --git a/docs/guide/servers-push.en-US.md b/docs/guide/servers-push.en-US.md index 1bc80d1a..022dcb2c 100644 --- a/docs/guide/servers-push.en-US.md +++ b/docs/guide/servers-push.en-US.md @@ -24,7 +24,7 @@ ProChat is very flexible in this situation, and we offer several methods to help ### Controlled mode -In this case, we waited for 3 seconds before actively pushing a notification, and then controlled it through chats and placed it in the last piece of content +In this case, we waited for 3 seconds before actively pushing a notification, and then controlled it through chatList and placed it in the last piece of content > In this case, we also used the render in chatitemRenderConfig to customize a special format of information. For more information about this API, please refer to [Deep Customization Conversation Content](./chatItemRenderConfig.md) diff --git a/docs/guide/servers-push.md b/docs/guide/servers-push.md index a28e29c4..97f506c0 100644 --- a/docs/guide/servers-push.md +++ b/docs/guide/servers-push.md @@ -25,7 +25,7 @@ ProChat 在这种情况下很灵活,我们提供几种方法来帮助你 ### 受控模式 -在这个案例里面,我们等待 3s 后主动推送了一条通知,然后通过 chats 进行受控放到了最后一条内容中 +在这个案例里面,我们等待 3s 后主动推送了一条通知,然后通过 chatList 进行受控放到了最后一条内容中 > 这个案例里面我们还使用了 chatItemRenderConfig 里面的 render 自定义了一条特殊格式的信息,关于这个 api 的更多信息可见[深度自定义对话内容](./chatItemRenderConfig.md) diff --git a/docs/guide/storage.en-US.md b/docs/guide/storage.en-US.md index 56ba2013..11a512f1 100644 --- a/docs/guide/storage.en-US.md +++ b/docs/guide/storage.en-US.md @@ -12,7 +12,7 @@ nav: ## Introduction -When using the ProChat component, you can initialize chat data through the `initialChats` property. This article explains how to use common browser caching strategies for initialization and populate that data into the `initialChats` attribute. +When using the ProChat component, you can initialize chat data through the `initialChatsList` property. This article explains how to use common browser caching strategies for initialization and populate that data into the `initialChatsList` attribute. > In actual business scenarios, data should typically reside on the backend and be distributed by it; however, this document provides examples of logic that only uses the frontend. @@ -24,12 +24,12 @@ localStorage is a persistent storage solution provided by browsers that allows d - During component loading, first check whether there exists cached chat data. - If cached data exists, retrieve it from localStorage -- Fill it into the initialChats property. +- Fill it into the initialChatsList property. - Update new content into the browser cache as needed ### Retrieving Cache Information -Step one involves fetching data from the cache and inserting it into ProChat's `initialChats` +Step one involves fetching data from the cache and inserting it into ProChat's `initialChatsList` > I've simulated some cached data here; in reality, these cached data will persist unless manually cleared by the browser, carrying over whatever content was previously stored. @@ -44,10 +44,10 @@ export default () => { const [cachedChats, setCachedChats] = useState(null); // Simulate adding some data to localStorage initially useEffect(() => { - const cachedData = localStorage.getItem('chats'); + const cachedData = localStorage.getItem('chatList'); if (!cachedData) { localStorage.setItem( - 'chats', + 'chatList', JSON.stringify({ ZGxiX2p4: { content: '昨天的当天是明天的什么?', @@ -71,7 +71,7 @@ export default () => { }, []); useEffect(() => { - const cachedData = localStorage.getItem('chats'); + const cachedData = localStorage.getItem('chatList'); if (cachedData) { setCachedChats(JSON.parse(cachedData)); } @@ -79,7 +79,7 @@ export default () => { return (
- {cachedChats ? : <>} + {cachedChats ? : <>}
); }; @@ -99,7 +99,7 @@ export default () => { const [cachedChats, setCachedChats] = useState(null); useEffect(() => { - const cachedData = localStorage.getItem('chats'); + const cachedData = localStorage.getItem('chatList'); if (cachedData) { setCachedChats(JSON.parse(cachedData)); } @@ -109,12 +109,12 @@ export default () => {
{cachedChats ? ( { + initialChatsList={cachedChats} + onChatsChange={(chatList) => { localStorage.setItem( - 'chats', + 'chatList', JSON.stringify({ - ...chats, + ...chatList, }), ); }} @@ -133,10 +133,10 @@ export default () => { ## Note -### What's the difference between initialChats and chats? +### What's the difference between initialChatsList and chatList? -From a logical perspective, initialChats is used only during initialization; the ProChat component will not update based on changes to initialChats. +From a logical perspective, initialChatsList is used only during initialization; the ProChat component will not update based on changes to initialChatsList. -On the other hand, chats is a controlled API, where any subsequent changes to chats will cause ProChat to update. If you can ensure that chats will trigger updates only once, then you could also use chats for initialization. +On the other hand, chatList is a controlled API, where any subsequent changes to chatList will cause ProChat to update. If you can ensure that chatList will trigger updates only once, then you could also use chatList for initialization. -> That's why if initialChats is empty initially, and later updated through a method like setState, ProChat won't update because initialization has already completed. Therefore, please ensure that the current value of initialChats is non-null when passed to ProChat. +> That's why if initialChatsList is empty initially, and later updated through a method like setState, ProChat won't update because initialization has already completed. Therefore, please ensure that the current value of initialChatsList is non-null when passed to ProChat. diff --git a/docs/guide/storage.md b/docs/guide/storage.md index 72a855b7..faa078ab 100644 --- a/docs/guide/storage.md +++ b/docs/guide/storage.md @@ -12,7 +12,7 @@ nav: ## 介绍 -在使用 ProChat 组件时,可以通过 `initialChats` 属性来初始化聊天数据。本文将介绍如何使用常用的浏览器缓存方案来进行初始化,并填充到 `initialChats` 中。 +在使用 ProChat 组件时,可以通过 `initialChatsList` 属性来初始化聊天数据。本文将介绍如何使用常用的浏览器缓存方案来进行初始化,并填充到 `initialChatsList` 中。 > 当然在真实的业务场景下,其实数据都应该存在后台,然后统一由后台进行派发,这里还是提供一些只使用前端的逻辑。 @@ -24,12 +24,12 @@ localStorage 是一种浏览器提供的持久化存储解决方案,可以将 - 在组件加载时,首先检查是否存在已经缓存的聊天数据。 - 如果存在缓存数据,则从 `localStorage` 中获取该数据。 -- 将获取到的数据填充到 `initialChats` 属性中。 +- 将获取到的数据填充到 `initialChatsList` 属性中。 - 更新新的内容到浏览器缓存中。 ### 拿到缓存信息 -第一步,从缓存中拿到数据并塞入到 ProChat 的 initialChats 中去。 +第一步,从缓存中拿到数据并塞入到 ProChat 的 initialChatsList 中去。 > 我在这里 mock 了缓存数据,真实情况下,这些缓存数据如果不手动清理,浏览器会带上上次你存好的内容。 @@ -44,10 +44,10 @@ export default () => { const [cachedChats, setCachedChats] = useState(null); // 模拟先让 localStorage 有一些数据 useEffect(() => { - const cachedData = localStorage.getItem('chats'); + const cachedData = localStorage.getItem('chatList'); if (!cachedData) { localStorage.setItem( - 'chats', + 'chatList', JSON.stringify({ ZGxiX2p4: { content: '昨天的当天是明天的什么?', @@ -71,7 +71,7 @@ export default () => { }, []); useEffect(() => { - const cachedData = localStorage.getItem('chats'); + const cachedData = localStorage.getItem('chatList'); if (cachedData) { setCachedChats(JSON.parse(cachedData)); } @@ -79,7 +79,7 @@ export default () => { return (
- {cachedChats ? : <>} + {cachedChats ? : <>}
); }; @@ -99,7 +99,7 @@ export default () => { const [cachedChats, setCachedChats] = useState(null); useEffect(() => { - const cachedData = localStorage.getItem('chats'); + const cachedData = localStorage.getItem('chatList'); if (cachedData) { setCachedChats(JSON.parse(cachedData)); } @@ -109,12 +109,12 @@ export default () => {
{cachedChats ? ( { + initialChatsList={cachedChats} + onChatsChange={(chatList) => { localStorage.setItem( - 'chats', + 'chatList', JSON.stringify({ - ...chats, + ...chatList, }), ); }} @@ -133,10 +133,10 @@ export default () => { ## 注意点 -### initialChats 和 chats 有什么不同? +### initialChatsList 和 chatList 有什么不同? -从语言逻辑上说 initialChats 只会作用于初始化的时候,ProChat 并不会随着 initialChats 的变化从而导致更新。 +从语言逻辑上说 initialChatsList 只会作用于初始化的时候,ProChat 并不会随着 initialChatsList 的变化从而导致更新。 -而 chats 是一个受控的 api,所有后续 chats 的变化都会导致 ProChat 进行更新,如果你可以保证 chats 只会触发一次,那么当然你也可以使用 chats 进行初始化。 +而 chatList 是一个受控的 api,所有后续 chatList 的变化都会导致 ProChat 进行更新,如果你可以保证 chatList 只会触发一次,那么当然你也可以使用 chatList 进行初始化。 -> 这也是为什么如果一开始 initialChats 为空,下次通过 SetState 等数据方法进行变化后,ProChat 不会更新的原因,因为初始化已经结束了,所以请保证给到当前的 initialChats 是有值的。 +> 这也是为什么如果一开始 initialChatsList 为空,下次通过 SetState 等数据方法进行变化后,ProChat 不会更新的原因,因为初始化已经结束了,所以请保证给到当前的 initialChatsList 是有值的。 diff --git a/docs/guide/useProChat.en-US.md b/docs/guide/useProChat.en-US.md deleted file mode 100644 index 292f86d8..00000000 --- a/docs/guide/useProChat.en-US.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: useProChat -group: - title: Hooks -nav: - title: Documents - order: 0 ---- diff --git a/docs/guide/useProChat.md b/docs/guide/useProChat.md deleted file mode 100644 index 5faa97b5..00000000 --- a/docs/guide/useProChat.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: useProChat -group: - title: Hooks -nav: - title: 文档 - order: 0 ---- diff --git a/docs/guide/whyUseProChat.en-US.md b/docs/guide/whyUseProChat.en-US.md index 9b631e7f..44e7bcc4 100644 --- a/docs/guide/whyUseProChat.en-US.md +++ b/docs/guide/whyUseProChat.en-US.md @@ -71,8 +71,6 @@ Another headache for the front-end is [parsing rendering] Like the following, if you write it yourself, you need to parse the content of the String section and decide which to use and what to render. We have already built-in some renderers for you: Markdown rendering, terminal command concatenation, jump links, and other commonly used renderers - - For multi line code blocks, we have strengthened the interaction ability of code block components, making them have advanced functions such as folding and unfolding, and changing highlighted languages, thereby helping you better view the code generated by AI in daily use of AI models. diff --git a/docs/guide/whyUseProChat.md b/docs/guide/whyUseProChat.md index 05eabaa7..9e47daa4 100644 --- a/docs/guide/whyUseProChat.md +++ b/docs/guide/whyUseProChat.md @@ -71,8 +71,6 @@ export default () => { 像是下面这种,如果你自己写,你需要对 String 部分的内容解析,然后决定哪些用什么渲染,我们已经帮你内置好了一些渲染器:Markdown 渲染、终端命令拼接、跳转链接等等常用的渲染器 - - 而针对多行代码块,我们则强化了代码块组件的交互能力,使之具有折叠展开、更换高亮语言等进阶功能,进而帮助你在日常使用 AI 大模型中更好地查看AI生成的代码。 diff --git a/package.json b/package.json index 58c63944..69cb3960 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,11 @@ { "name": "@ant-design/pro-chat", - "version": "1.12.1", + "version": "2.1.14", "description": "a solution for ai chat", "keywords": [ "ai", "ant-design", + "lui", "chat" ], "homepage": "https://github.com/ant-design/pro-chat", @@ -60,30 +61,24 @@ ] }, "dependencies": { + "@ant-design/cssinjs": "^1.18.5", "@ant-design/icons": "^5.3.0", - "@ant-design/pro-editor": "latest", "@babel/runtime": "^7.23.9", - "@emotion/react": "^11.11.4", - "@testing-library/jest-dom": "^6.4.2", + "@types/classnames": "^2.3.1", + "classnames": "^2.5.1", "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.10", - "emoji-regex": "^10.3.0", - "fast-deep-equal": "^3.1.3", - "immer": "^10.0.3", + "framer-motion": "^11.0.28", "lodash-es": "^4.17.21", - "lucide-react": "^0.288.0", - "nanoid": "^5.0.6", "polished": "^4.3.1", "rc-resize-observer": "^1.4.0", - "rc-util": "^5.38.2", - "react-intersection-observer": "^9.8.1", - "react-layout-kit": "^1.7.4", - "react-markdown": "^8.0.7", - "zustand": "^4.5.1", - "zustand-utils": "^1.3.2" + "rc-util": "^5.39.1", + "react-markdown": "^9.0.1", + "remark-gfm": "^4.0.0" }, "devDependencies": { "@commitlint/cli": "^17.8.1", + "@testing-library/jest-dom": "^6.4.2", "@testing-library/react": "^14.2.1", "@types/chroma-js": "^2.4.4", "@types/glob": "^8.1.0", @@ -128,6 +123,11 @@ "antd-style": "^3", "react": "^18" }, + "optionalDependencies": { + "antd": "^5.14.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a6592785..3dbf22f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,45 +5,33 @@ settings: excludeLinksFromLockfile: false dependencies: + '@ant-design/cssinjs': + specifier: ^1.18.5 + version: 1.19.1(react-dom@18.2.0)(react@18.2.0) '@ant-design/icons': specifier: ^5.3.0 - version: 5.3.0(react-dom@18.2.0)(react@18.2.0) - '@ant-design/pro-editor': - specifier: latest - version: 0.41.0(@emotion/react@11.11.4)(@types/react@18.2.31)(antd-style@3.6.1)(antd@5.14.2)(react-dom@18.2.0)(react@18.2.0) + version: 5.3.6(react-dom@18.2.0)(react@18.2.0) '@babel/runtime': specifier: ^7.23.9 - version: 7.23.9 - '@emotion/react': - specifier: ^11.11.4 - version: 11.11.4(@types/react@18.2.31)(react@18.2.0) - '@testing-library/jest-dom': - specifier: ^6.4.2 - version: 6.4.2(jest@29.7.0)(vitest@1.3.1) + version: 7.24.4 + '@types/classnames': + specifier: ^2.3.1 + version: 2.3.1 + classnames: + specifier: ^2.5.1 + version: 2.5.1 copy-to-clipboard: specifier: ^3.3.3 version: 3.3.3 dayjs: specifier: ^1.11.10 version: 1.11.10 - emoji-regex: - specifier: ^10.3.0 - version: 10.3.0 - fast-deep-equal: - specifier: ^3.1.3 - version: 3.1.3 - immer: - specifier: ^10.0.3 - version: 10.0.3 + framer-motion: + specifier: ^11.0.28 + version: 11.0.28(react-dom@18.2.0)(react@18.2.0) lodash-es: specifier: ^4.17.21 version: 4.17.21 - lucide-react: - specifier: ^0.288.0 - version: 0.288.0(react@18.2.0) - nanoid: - specifier: ^5.0.6 - version: 5.0.6 polished: specifier: ^4.3.1 version: 4.3.1 @@ -51,31 +39,36 @@ dependencies: specifier: ^1.4.0 version: 1.4.0(react-dom@18.2.0)(react@18.2.0) rc-util: - specifier: ^5.38.2 - version: 5.38.2(react-dom@18.2.0)(react@18.2.0) - react-intersection-observer: - specifier: ^9.8.1 - version: 9.8.1(react-dom@18.2.0)(react@18.2.0) - react-layout-kit: - specifier: ^1.7.4 - version: 1.7.4(react@18.2.0) + specifier: ^5.39.1 + version: 5.39.1(react-dom@18.2.0)(react@18.2.0) react-markdown: - specifier: ^8.0.7 - version: 8.0.7(@types/react@18.2.31)(react@18.2.0) - zustand: - specifier: ^4.5.1 - version: 4.5.1(@types/react@18.2.31)(immer@10.0.3)(react@18.2.0) - zustand-utils: - specifier: ^1.3.2 - version: 1.3.2(react@18.2.0)(zustand@4.5.1) + specifier: ^9.0.1 + version: 9.0.1(@types/react@18.2.31)(react@18.2.0) + remark-gfm: + specifier: ^4.0.0 + version: 4.0.0 + +optionalDependencies: + antd: + specifier: ^5.14.2 + version: 5.16.1(react-dom@18.2.0)(react@18.2.0) + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) devDependencies: '@commitlint/cli': specifier: ^17.8.1 version: 17.8.1 + '@testing-library/jest-dom': + specifier: ^6.4.2 + version: 6.4.2(jest@29.7.0)(vitest@1.4.0) '@testing-library/react': specifier: ^14.2.1 - version: 14.2.1(react-dom@18.2.0)(react@18.2.0) + version: 14.3.0(react-dom@18.2.0)(react@18.2.0) '@types/chroma-js': specifier: ^2.4.4 version: 2.4.4 @@ -90,22 +83,19 @@ devDependencies: version: 18.2.31 '@types/react-dom': specifier: ^18.2.19 - version: 18.2.19 + version: 18.2.24 '@umijs/lint': specifier: ^4.1.2 - version: 4.1.2(eslint@8.57.0)(jest@29.7.0)(stylelint@15.11.0)(typescript@5.3.3) + version: 4.1.8(eslint@8.57.0)(jest@29.7.0)(stylelint@15.11.0)(typescript@5.4.5) '@vitest/coverage-v8': specifier: latest - version: 1.3.1(vitest@1.3.1) + version: 1.4.0(vitest@1.4.0) ai: specifier: ^2.2.37 - version: 2.2.37(react@18.2.0)(solid-js@1.8.15)(svelte@4.2.12)(vue@3.4.20) - antd: - specifier: ^5.14.2 - version: 5.14.2(react-dom@18.2.0)(react@18.2.0) + version: 2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.13)(vue@3.4.21) antd-style: specifier: ^3.6.1 - version: 3.6.1(@types/react@18.2.31)(antd@5.14.2)(react-dom@18.2.0)(react@18.2.0) + version: 3.6.2(@types/react@18.2.31)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0) babel-plugin-antd-style: specifier: ^1.0.4 version: 1.0.4 @@ -123,19 +113,19 @@ devDependencies: version: 7.0.3 dumi: specifier: ^2.2.17 - version: 2.2.17(@babel/core@7.23.9)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(stylelint@15.11.0)(typescript@5.3.3)(webpack@5.90.3) + version: 2.2.17(@babel/core@7.24.4)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(stylelint@15.11.0)(typescript@5.4.5)(webpack@5.91.0) dumi-theme-antd-style: specifier: latest - version: 0.30.0(@types/react@18.2.31)(dumi@2.2.17)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0) + version: 0.31.0(@types/react@18.2.31)(dumi@2.2.17)(react-dom@18.2.0)(react@18.2.0) eslint: specifier: ^8.57.0 version: 8.57.0 father: specifier: 4.3.1 - version: 4.3.1(@types/node@20.5.1)(webpack@5.90.3) + version: 4.3.1(@types/node@20.5.1)(webpack@5.91.0) glob: specifier: ^10.3.10 - version: 10.3.10 + version: 10.3.12 husky: specifier: ^8.0.3 version: 8.0.3 @@ -153,40 +143,34 @@ devDependencies: version: 3.0.5 openai: specifier: ^4.28.0 - version: 4.28.0 + version: 4.33.0 prettier: specifier: ^3.2.5 version: 3.2.5 prettier-plugin-organize-imports: specifier: ^3.2.4 - version: 3.2.4(prettier@3.2.5)(typescript@5.3.3) + version: 3.2.4(prettier@3.2.5)(typescript@5.4.5) prettier-plugin-packagejson: specifier: ^2.4.12 - version: 2.4.12(prettier@3.2.5) - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) + version: 2.4.14(prettier@3.2.5) react-i18next: specifier: ^14.0.5 - version: 14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) + version: 14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0) semantic-release: specifier: ^21.1.2 - version: 21.1.2(typescript@5.3.3) + version: 21.1.2(typescript@5.4.5) semantic-release-config-gitmoji: specifier: ^1.5.3 version: 1.5.3(@octokit/core@3.6.0)(semantic-release@21.1.2) stylelint: specifier: ^15.11.0 - version: 15.11.0(typescript@5.3.3) + version: 15.11.0(typescript@5.4.5) typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.4.5 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.5.1)(jsdom@22.1.0) + version: 1.4.0(@types/node@20.5.1)(jsdom@22.1.0) packages: @@ -196,7 +180,7 @@ packages: dev: true /@achingbrain/semantic-release-github@0.0.2(@octokit/core@3.6.0)(semantic-release@21.1.2): - resolution: {integrity: sha512-RTw6rXoFTTnVgyFCBkqEoM1I+WOi4dszMdVABN4gvbwdVqmKkW5/SignHYb/O8ONAHH0NlUCgxTYciCzg9RiLQ==, tarball: https://registry.npmmirror.com/@achingbrain/semantic-release-github/-/semantic-release-github-0.0.2.tgz} + resolution: {integrity: sha512-RTw6rXoFTTnVgyFCBkqEoM1I+WOi4dszMdVABN4gvbwdVqmKkW5/SignHYb/O8ONAHH0NlUCgxTYciCzg9RiLQ==} engines: {node: '>=14.17'} peerDependencies: semantic-release: '>=18.0.0-beta.1' @@ -216,7 +200,7 @@ packages: lodash: 4.17.21 mime: 3.0.0 p-filter: 2.1.0 - semantic-release: 21.1.2(typescript@5.3.3) + semantic-release: 21.1.2(typescript@5.4.5) url-join: 4.0.1 transitivePeerDependencies: - '@octokit/core' @@ -226,32 +210,33 @@ packages: /@adobe/css-tools@4.3.3: resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} - dev: false + dev: true - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true /@ant-design/colors@7.0.2: resolution: {integrity: sha512-7KJkhTiPiLHSu+LmMJnehfJ6242OCxSlR3xHVBecYxnMW8MS/878NXct1GqYARyL59fyeFdKRxXTfvR9SnDgJg==} dependencies: '@ctrl/tinycolor': 3.6.1 - /@ant-design/cssinjs@1.18.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-IrUAOj5TYuMG556C9gdbFuOrigyhzhU5ZYpWb3gYTxAwymVqRbvLzFCZg6OsjLBR6GhzcxYF3AhxKmjB+rA2xA==} + /@ant-design/cssinjs@1.19.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-hgQ3wiys3X0sqDKWkqCJ6EYdF79i9JCvtavmIGwuuPUKmoJXV8Ff0sY+yQQSxk2dRmMyam/bYKo/Bwor45hnZw==} peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@emotion/hash': 0.8.0 '@emotion/unitless': 0.7.5 classnames: 2.5.1 csstype: 3.1.3 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stylis: 4.3.1 @@ -259,8 +244,8 @@ packages: /@ant-design/icons-svg@4.4.2: resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} - /@ant-design/icons@5.3.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-69FgBsIkeCjw72ZU3fJpqjhmLCPrzKGEllbrAZK7MUdt1BrKsyG6A8YDCBPKea27UQ0tRXi33PcjR4tp/tEXMg==} + /@ant-design/icons@5.3.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-JeWsgNjvkTTC73YDPgWOgdScRku/iHN9JU0qk39OSEmJSCiRghQMLlxGTCY5ovbRRoXjxHXnUKgQEgBDnQfKmA==} engines: {node: '>=8'} peerDependencies: react: '>=16.0.0' @@ -268,86 +253,19 @@ packages: dependencies: '@ant-design/colors': 7.0.2 '@ant-design/icons-svg': 4.4.2 - '@babel/runtime': 7.23.9 - classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - - /@ant-design/pro-editor@0.41.0(@emotion/react@11.11.4)(@types/react@18.2.31)(antd-style@3.6.1)(antd@5.14.2)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-mksxr1RafkGM7jVGJuuAeV1nn4TTMBpTiWWEKRJUbljgJ5YANPqmSv48SAsFwMz0DPuAmytvlHfMaevuc92cWw==} - peerDependencies: - antd: '>=5' - antd-style: '>=3' - react: '>=18' - react-dom: '>=18' - dependencies: - '@ant-design/icons': 5.3.0(react-dom@18.2.0)(react@18.2.0) - '@babel/runtime': 7.23.9 - '@dnd-kit/core': 6.1.0(react-dom@18.2.0)(react@18.2.0) - '@dnd-kit/modifiers': 6.0.1(@dnd-kit/core@6.1.0)(react@18.2.0) - '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.1.0)(react@18.2.0) - '@dnd-kit/utilities': 3.2.2(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.31)(react@18.2.0) - '@floating-ui/react': 0.24.8(react-dom@18.2.0)(react@18.2.0) - ahooks: 3.7.8(react@18.2.0) - antd: 5.14.2(react-dom@18.2.0)(react@18.2.0) - antd-style: 3.6.1(@types/react@18.2.31)(antd@5.14.2)(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 classnames: 2.5.1 - color: 4.2.3 - copy-to-clipboard: 3.3.3 - diff: 5.2.0 - fast-deep-equal: 3.1.3 - highlight.js: 10.5.0 - immer: 9.0.21 - lodash.flatten: 4.4.0 - lodash.get: 4.4.2 - lodash.isempty: 4.4.0 - lodash.isequal: 4.5.0 - lodash.isnil: 4.0.0 - lodash.isobject: 3.0.2 - lodash.merge: 4.6.2 - lodash.omitby: 4.6.0 - lodash.template: 4.5.0 - lodash.union: 4.6.0 - lodash.unionby: 4.8.0 - lodash.uniq: 4.5.0 - nanoid: 5.0.6 - polished: 4.3.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) - re-resizable: 6.9.11(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 - react-copy-to-clipboard: 5.1.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0) - react-hotkeys-hook: 4.5.0(react-dom@18.2.0)(react@18.2.0) - react-layout-kit: 1.7.4(react@18.2.0) - react-markdown: 8.0.7(@types/react@18.2.31)(react@18.2.0) - react-rnd: 10.4.1(react-dom@18.2.0)(react@18.2.0) - react-window: 1.8.10(react-dom@18.2.0)(react@18.2.0) - reactflow: 11.10.4(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - rehype-katex: 6.0.3 - remark-gfm: 3.0.1 - remark-math: 5.1.1 - rxjs: 7.8.1 - shikiji: 0.6.13 - type-fest: 3.13.1 - use-merge-value: 1.2.0(react@18.2.0) - yjs: 13.6.12 - zustand: 4.5.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0) - zustand-middleware-yjs: 1.3.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0) - zustand-utils: 1.3.2(react@18.2.0)(zustand@4.5.1) - transitivePeerDependencies: - - '@emotion/react' - - '@types/react' - - supports-color - dev: false - /@ant-design/react-slick@1.0.2(react@18.2.0): - resolution: {integrity: sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==} + /@ant-design/react-slick@1.1.2(react@18.2.0): + resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} + requiresBuild: true peerDependencies: react: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 json2mq: 0.2.0 react: 18.2.0 @@ -374,31 +292,33 @@ packages: - encoding dev: true - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 + dev: true - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + /@babel/compat-data@7.24.4: + resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/core@7.23.6: resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -408,20 +328,20 @@ packages: - supports-color dev: true - /@babel/core@7.23.9: - resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} + /@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -429,6 +349,7 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true /@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.57.0): resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} @@ -444,47 +365,53 @@ packages: semver: 6.3.1 dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + dev: true /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.4 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 + dev: true /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-function-name@7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 + dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 + dev: true - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 + dev: true /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -494,223 +421,248 @@ packages: dependencies: '@babel/core': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + dev: true - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 + dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 + dev: true - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} + dev: true /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} + dev: true - /@babel/helpers@7.23.9: - resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} + /@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color + dev: true - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 + dev: true - /@babel/parser@7.23.9: - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 + dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + /@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + /@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true /@babel/runtime@7.23.6: @@ -720,54 +672,58 @@ packages: regenerator-runtime: 0.14.1 dev: true - /@babel/runtime@7.23.9: - resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - /@babel/template@7.23.9: - resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + dev: true - /@babel/traverse@7.23.9: - resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true - /@babel/types@7.23.9: - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 + '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + dev: true /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true /@bloomberg/record-tuple-polyfill@0.0.4: resolution: {integrity: sha512-h0OYmPR3A5Dfbetra/GzxBAzQk8sH7LhRkRUTdagX6nrtlUgJGYCTv4bBK33jsTQw9HDd8PE2x1Ma+iRKEDUsw==} dev: true /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, tarball: https://registry.npmmirror.com/@colors/colors/-/colors-1.5.0.tgz} + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} requiresBuild: true dev: true @@ -854,14 +810,14 @@ packages: '@commitlint/types': 17.8.1 '@types/node': 20.5.1 chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.3.3) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.3.3) + cosmiconfig: 8.3.6(typescript@5.4.5) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.4.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) - typescript: 5.3.3 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -939,226 +895,174 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 + dev: true - /@csstools/css-parser-algorithms@2.6.0(@csstools/css-tokenizer@2.2.3): - resolution: {integrity: sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==} + /@csstools/css-parser-algorithms@2.6.1(@csstools/css-tokenizer@2.2.4): + resolution: {integrity: sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-tokenizer': ^2.2.3 + '@csstools/css-tokenizer': ^2.2.4 dependencies: - '@csstools/css-tokenizer': 2.2.3 + '@csstools/css-tokenizer': 2.2.4 dev: true - /@csstools/css-tokenizer@2.2.3: - resolution: {integrity: sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==} + /@csstools/css-tokenizer@2.2.4: + resolution: {integrity: sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==} engines: {node: ^14 || ^16 || >=18} dev: true - /@csstools/media-query-list-parser@2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3): - resolution: {integrity: sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==} + /@csstools/media-query-list-parser@2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4): + resolution: {integrity: sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - '@csstools/css-parser-algorithms': ^2.6.0 - '@csstools/css-tokenizer': ^2.2.3 + '@csstools/css-parser-algorithms': ^2.6.1 + '@csstools/css-tokenizer': ^2.2.4 dependencies: - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 dev: true - /@csstools/postcss-color-function@1.1.1(postcss@8.4.35): + /@csstools/postcss-color-function@1.1.1(postcss@8.4.38): resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.35): + /@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.38): resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.35): + /@csstools/postcss-hwb-function@1.0.2(postcss@8.4.38): resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.35): + /@csstools/postcss-ic-unit@1.0.1(postcss@8.4.38): resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.35): + /@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.38): resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.15) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.35): + /@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.38): resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.35): + /@csstools/postcss-oklab-function@1.1.1(postcss@8.4.38): resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.35): + /@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.38): resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.3 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.35): + /@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.38): resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /@csstools/postcss-unset-value@1.0.2(postcss@8.4.35): + /@csstools/postcss-unset-value@1.0.2(postcss@8.4.38): resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.15): + /@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.16): resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss-selector-parser: ^6.0.10 dependencies: - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.16 dev: true - /@csstools/selector-specificity@3.0.2(postcss-selector-parser@6.0.15): - resolution: {integrity: sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==} + /@csstools/selector-specificity@3.0.3(postcss-selector-parser@6.0.16): + resolution: {integrity: sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==} engines: {node: ^14 || ^16 || >=18} peerDependencies: postcss-selector-parser: ^6.0.13 dependencies: - postcss-selector-parser: 6.0.15 + postcss-selector-parser: 6.0.16 dev: true /@ctrl/tinycolor@3.6.1: resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} engines: {node: '>=10'} - - /@dnd-kit/accessibility@3.1.0(react@18.2.0): - resolution: {integrity: sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.2.0 - tslib: 2.6.2 - dev: false - - /@dnd-kit/core@6.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@dnd-kit/accessibility': 3.1.0(react@18.2.0) - '@dnd-kit/utilities': 3.2.2(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.2 - dev: false - - /@dnd-kit/modifiers@6.0.1(@dnd-kit/core@6.1.0)(react@18.2.0): - resolution: {integrity: sha512-rbxcsg3HhzlcMHVHWDuh9LCjpOVAgqbV78wLGI8tziXY3+qcMQ61qVXIvNKQFuhj75dSfD+o+PYZQ/NUk2A23A==} - peerDependencies: - '@dnd-kit/core': ^6.0.6 - react: '>=16.8.0' - dependencies: - '@dnd-kit/core': 6.1.0(react-dom@18.2.0)(react@18.2.0) - '@dnd-kit/utilities': 3.2.2(react@18.2.0) - react: 18.2.0 - tslib: 2.6.2 - dev: false - - /@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.1.0)(react@18.2.0): - resolution: {integrity: sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==} - peerDependencies: - '@dnd-kit/core': ^6.0.7 - react: '>=16.8.0' - dependencies: - '@dnd-kit/core': 6.1.0(react-dom@18.2.0)(react@18.2.0) - '@dnd-kit/utilities': 3.2.2(react@18.2.0) - react: 18.2.0 - tslib: 2.6.2 - dev: false - - /@dnd-kit/utilities@3.2.2(react@18.2.0): - resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.2.0 - tslib: 2.6.2 - dev: false + requiresBuild: true /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.23.9 + '@babel/helper-module-imports': 7.24.3 + '@babel/runtime': 7.24.4 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 + dev: true /@emotion/cache@11.11.0: resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} @@ -1168,30 +1072,28 @@ packages: '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 stylis: 4.2.0 + dev: true /@emotion/css@11.11.2: resolution: {integrity: sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew==} dependencies: '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 '@emotion/sheet': 1.2.2 '@emotion/utils': 1.2.1 + dev: true /@emotion/hash@0.8.0: resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} /@emotion/hash@0.9.1: resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - - /@emotion/is-prop-valid@1.2.2: - resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} - dependencies: - '@emotion/memoize': 0.8.1 - dev: false + dev: true /@emotion/memoize@0.8.1: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + dev: true /@emotion/react@11.11.4(@types/react@18.2.31)(react@18.2.0): resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==} @@ -1202,25 +1104,27 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 '@types/react': 18.2.31 hoist-non-react-statics: 3.3.2 react: 18.2.0 + dev: true - /@emotion/serialize@1.1.3: - resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} + /@emotion/serialize@1.1.4: + resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==} dependencies: '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/unitless': 0.8.1 '@emotion/utils': 1.2.1 csstype: 3.1.3 + dev: true /@emotion/server@11.11.0(@emotion/css@11.11.2): resolution: {integrity: sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA==} @@ -1235,36 +1139,18 @@ packages: html-tokenize: 2.0.1 multipipe: 1.0.2 through: 2.3.8 + dev: true /@emotion/sheet@1.2.2: resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - - /@emotion/styled@11.11.0(@emotion/react@11.11.4)(@types/react@18.2.31)(react@18.2.0): - resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} - peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@emotion/babel-plugin': 11.11.0 - '@emotion/is-prop-valid': 1.2.2 - '@emotion/react': 11.11.4(@types/react@18.2.31)(react@18.2.0) - '@emotion/serialize': 1.1.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@emotion/utils': 1.2.1 - '@types/react': 18.2.31 - react: 18.2.0 - dev: false + dev: true /@emotion/unitless@0.7.5: resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} /@emotion/unitless@0.8.1: resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + dev: true /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} @@ -1272,18 +1158,21 @@ packages: react: '>=16.8.0' dependencies: react: 18.2.0 + dev: true /@emotion/utils@1.2.1: resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + dev: true /@emotion/weak-memoize@0.3.1: resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + dev: true /@esbuild-kit/cjs-loader@2.4.4: resolution: {integrity: sha512-NfsJX4PdzhwSkfJukczyUiZGc7zNNWZcEAyqeISpDnn0PTfzMJR1aR8xAIPskBejIxBJbIgCCMzbaYa9SXepIg==} dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.7.2 + get-tsconfig: 4.7.3 dev: true /@esbuild-kit/core-utils@3.3.2: @@ -1297,19 +1186,20 @@ packages: resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.7.2 + get-tsconfig: 4.7.3 dev: true - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==, tarball: https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz} + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] requiresBuild: true + dev: true optional: true /@esbuild/android-arm64@0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz} + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1318,7 +1208,7 @@ packages: optional: true /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz} + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1326,16 +1216,17 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==, tarball: https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz} + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz} + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1344,7 +1235,7 @@ packages: optional: true /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz} + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1352,16 +1243,17 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz} + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/android-x64@0.17.19: - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz} + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1370,7 +1262,7 @@ packages: optional: true /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz} + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1378,16 +1270,17 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==, tarball: https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz} + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true + dev: true optional: true /@esbuild/darwin-arm64@0.17.19: - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz} + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1396,7 +1289,7 @@ packages: optional: true /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz} + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1404,16 +1297,17 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==, tarball: https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz} + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true + dev: true optional: true /@esbuild/darwin-x64@0.17.19: - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz} + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1422,7 +1316,7 @@ packages: optional: true /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz} + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1430,16 +1324,17 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==, tarball: https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz} + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true + dev: true optional: true /@esbuild/freebsd-arm64@0.17.19: - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz} + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1448,7 +1343,7 @@ packages: optional: true /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz} + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1456,16 +1351,17 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz} + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true + dev: true optional: true /@esbuild/freebsd-x64@0.17.19: - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz} + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1474,7 +1370,7 @@ packages: optional: true /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz} + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1482,16 +1378,17 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==, tarball: https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz} + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true + dev: true optional: true /@esbuild/linux-arm64@0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz} + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1500,7 +1397,7 @@ packages: optional: true /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz} + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1508,16 +1405,17 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz} + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-arm@0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz} + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1526,7 +1424,7 @@ packages: optional: true /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz} + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1534,16 +1432,17 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==, tarball: https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz} + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-ia32@0.17.19: - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz} + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1552,7 +1451,7 @@ packages: optional: true /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz} + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1560,16 +1459,17 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==, tarball: https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz} + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz} + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1578,7 +1478,7 @@ packages: optional: true /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz} + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1586,16 +1486,17 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz} + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-mips64el@0.17.19: - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz} + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1604,7 +1505,7 @@ packages: optional: true /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz} + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1612,16 +1513,17 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==, tarball: https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz} + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-ppc64@0.17.19: - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz} + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1630,7 +1532,7 @@ packages: optional: true /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz} + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1638,16 +1540,17 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==, tarball: https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz} + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-riscv64@0.17.19: - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz} + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1656,7 +1559,7 @@ packages: optional: true /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz} + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1664,16 +1567,17 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==, tarball: https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz} + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-s390x@0.17.19: - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz} + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1682,7 +1586,7 @@ packages: optional: true /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz} + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1690,16 +1594,17 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==, tarball: https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz} + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/linux-x64@0.17.19: - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz} + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1708,7 +1613,7 @@ packages: optional: true /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz} + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1716,16 +1621,17 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==, tarball: https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz} + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@esbuild/netbsd-x64@0.17.19: - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz} + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1734,7 +1640,7 @@ packages: optional: true /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz} + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1742,16 +1648,17 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==, tarball: https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz} + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true + dev: true optional: true /@esbuild/openbsd-x64@0.17.19: - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz} + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1760,7 +1667,7 @@ packages: optional: true /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz} + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1768,16 +1675,17 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==, tarball: https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz} + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true + dev: true optional: true /@esbuild/sunos-x64@0.17.19: - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz} + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1786,7 +1694,7 @@ packages: optional: true /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz} + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1794,16 +1702,17 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==, tarball: https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz} + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true + dev: true optional: true /@esbuild/win32-arm64@0.17.19: - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz} + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1812,7 +1721,7 @@ packages: optional: true /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz} + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1820,16 +1729,17 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==, tarball: https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz} + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true + dev: true optional: true /@esbuild/win32-ia32@0.17.19: - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz} + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1838,7 +1748,7 @@ packages: optional: true /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz} + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1846,16 +1756,17 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==, tarball: https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz} + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true + dev: true optional: true /@esbuild/win32-x64@0.17.19: - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz} + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1864,7 +1775,7 @@ packages: optional: true /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz} + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1872,12 +1783,13 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==, tarball: https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz} + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true + dev: true optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): @@ -1925,6 +1837,7 @@ packages: resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} dependencies: '@floating-ui/utils': 0.2.1 + dev: true /@floating-ui/dom@0.4.5: resolution: {integrity: sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==} @@ -1937,12 +1850,14 @@ packages: dependencies: '@floating-ui/core': 1.6.0 '@floating-ui/utils': 0.2.1 + dev: true /@floating-ui/react-dom-interactions@0.3.1(@types/react@18.2.31)(react-dom@18.1.0)(react@18.1.0): resolution: {integrity: sha512-tP2KEh7EHJr5hokSBHcPGojb+AorDNUf0NYfZGg/M+FsMvCOOsSEeEF0O1NDfETIzDnpbHnCs0DuvCFhSMSStg==} + deprecated: Package renamed to @floating-ui/react dependencies: '@floating-ui/react-dom': 0.6.3(@types/react@18.2.31)(react-dom@18.1.0)(react@18.1.0) - aria-hidden: 1.2.3 + aria-hidden: 1.2.4 point-in-polygon: 1.1.0 use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.31)(react@18.1.0) transitivePeerDependencies: @@ -1974,6 +1889,7 @@ packages: '@floating-ui/dom': 1.6.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: true /@floating-ui/react@0.24.8(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-AuYeDoaR8jtUlUXtZ1IJ/6jtBkGnSpJXbGNzokBL87VDJ8opMq1Bgrc0szhK482ReQY6KZsMoZCVSb4xwalkBA==} @@ -1982,13 +1898,15 @@ packages: react-dom: '>=16.8.0' dependencies: '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) - aria-hidden: 1.2.3 + aria-hidden: 1.2.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tabbable: 6.2.0 + dev: true /@floating-ui/utils@0.2.1: resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + dev: true /@formatjs/ecma402-abstract@1.18.2: resolution: {integrity: sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==} @@ -2040,8 +1958,8 @@ packages: tslib: 2.6.2 dev: true - /@formatjs/intl@2.10.0(typescript@5.3.3): - resolution: {integrity: sha512-X3xT9guVkKDS86EKV80lS0KxoazUglkJTGZO66sKY7otgl0VeStPA8B3u8UkKT47PexVV98fUzjpkchYmbe9nw==} + /@formatjs/intl@2.10.1(typescript@5.4.5): + resolution: {integrity: sha512-dsLG15U7xDi8yzKf4hcAWSsCaez3XrjTO2oaRHPyHtXLm1aEzYbDw6bClo/HMHu+iwS5GbDqT3DV+hYP2ylScg==} peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: @@ -2055,7 +1973,7 @@ packages: '@formatjs/intl-listformat': 7.5.5 intl-messageformat: 10.5.11 tslib: 2.6.2 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /@gitmoji/commit-types@1.1.5: @@ -2079,7 +1997,7 @@ packages: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -2091,8 +2009,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} dev: true /@iconify/types@2.0.0: @@ -2133,21 +2051,24 @@ packages: get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 + dev: true /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + dev: true /@jest/console@29.7.0: resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 + dev: true /@jest/core@29.7.0(ts-node@10.9.2): resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} @@ -2163,14 +2084,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.11.21)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -2190,6 +2111,7 @@ packages: - babel-plugin-macros - supports-color - ts-node + dev: true /@jest/environment@29.7.0: resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} @@ -2197,14 +2119,16 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 jest-mock: 29.7.0 + dev: true /@jest/expect-utils@29.7.0: resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.6.3 + dev: true /@jest/expect@29.7.0: resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} @@ -2214,6 +2138,7 @@ packages: jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color + dev: true /@jest/fake-timers@29.7.0: resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} @@ -2221,10 +2146,11 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.21 + '@types/node': 20.12.7 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 + dev: true /@jest/globals@29.7.0: resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} @@ -2236,6 +2162,7 @@ packages: jest-mock: 29.7.0 transitivePeerDependencies: - supports-color + dev: true /@jest/reporters@29.7.0: resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} @@ -2251,8 +2178,8 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.23 - '@types/node': 20.11.21 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.12.7 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -2272,20 +2199,23 @@ packages: v8-to-istanbul: 9.2.0 transitivePeerDependencies: - supports-color + dev: true /@jest/schemas@29.6.3: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.27.8 + dev: true /@jest/source-map@29.6.3: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 + dev: true /@jest/test-result@29.7.0: resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} @@ -2295,6 +2225,7 @@ packages: '@jest/types': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 + dev: true /@jest/test-sequencer@29.7.0: resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} @@ -2304,14 +2235,15 @@ packages: graceful-fs: 4.2.11 jest-haste-map: 29.7.0 slash: 3.0.0 + dev: true /@jest/transform@29.7.0: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -2326,6 +2258,7 @@ packages: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color + dev: true /@jest/types@27.5.1: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} @@ -2333,7 +2266,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.21 + '@types/node': 20.12.7 '@types/yargs': 16.0.9 chalk: 4.1.2 dev: true @@ -2345,47 +2278,54 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.21 + '@types/node': 20.12.7 '@types/yargs': 17.0.32 chalk: 4.1.2 + dev: true - /@jridgewell/gen-mapping@0.3.4: - resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 + dev: true /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + dev: true - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true - /@jridgewell/trace-mapping@0.3.23: - resolution: {integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /@loadable/component@5.15.2(react@18.1.0): resolution: {integrity: sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==} @@ -2393,7 +2333,7 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 hoist-non-react-statics: 3.3.2 react: 18.1.0 react-is: 16.13.1 @@ -2405,7 +2345,7 @@ packages: peerDependencies: react: '>=16.3.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 hoist-non-react-statics: 3.3.2 react: 18.2.0 react-is: 16.13.1 @@ -2491,13 +2431,13 @@ packages: dev: true /@octokit/auth-token@2.5.0: - resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==, tarball: https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-2.5.0.tgz} + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} dependencies: '@octokit/types': 6.41.0 dev: true /@octokit/auth-token@3.0.4: - resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==, tarball: https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-3.0.4.tgz} + resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} engines: {node: '>= 14'} dev: true @@ -2507,7 +2447,7 @@ packages: dev: true /@octokit/core@3.6.0: - resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==, tarball: https://registry.npmmirror.com/@octokit/core/-/core-3.6.0.tgz} + resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} dependencies: '@octokit/auth-token': 2.5.0 '@octokit/graphql': 4.8.0 @@ -2521,7 +2461,7 @@ packages: dev: true /@octokit/core@4.2.4: - resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==, tarball: https://registry.npmmirror.com/@octokit/core/-/core-4.2.4.tgz} + resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} engines: {node: '>= 14'} dependencies: '@octokit/auth-token': 3.0.4 @@ -2535,21 +2475,21 @@ packages: - encoding dev: true - /@octokit/core@5.1.0: - resolution: {integrity: sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==} + /@octokit/core@5.2.0: + resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} engines: {node: '>= 18'} dependencies: '@octokit/auth-token': 4.0.0 - '@octokit/graphql': 7.0.2 - '@octokit/request': 8.2.0 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.6.0 + '@octokit/graphql': 7.1.0 + '@octokit/request': 8.4.0 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.4.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 dev: true /@octokit/endpoint@6.0.12: - resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==, tarball: https://registry.npmmirror.com/@octokit/endpoint/-/endpoint-6.0.12.tgz} + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} dependencies: '@octokit/types': 6.41.0 is-plain-object: 5.0.0 @@ -2557,7 +2497,7 @@ packages: dev: true /@octokit/endpoint@7.0.6: - resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==, tarball: https://registry.npmmirror.com/@octokit/endpoint/-/endpoint-7.0.6.tgz} + resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} engines: {node: '>= 14'} dependencies: '@octokit/types': 9.3.2 @@ -2565,16 +2505,16 @@ packages: universal-user-agent: 6.0.1 dev: true - /@octokit/endpoint@9.0.4: - resolution: {integrity: sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==} + /@octokit/endpoint@9.0.5: + resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} engines: {node: '>= 18'} dependencies: - '@octokit/types': 12.6.0 + '@octokit/types': 13.4.0 universal-user-agent: 6.0.1 dev: true /@octokit/graphql@4.8.0: - resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==, tarball: https://registry.npmmirror.com/@octokit/graphql/-/graphql-4.8.0.tgz} + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} dependencies: '@octokit/request': 5.6.3 '@octokit/types': 6.41.0 @@ -2584,7 +2524,7 @@ packages: dev: true /@octokit/graphql@5.0.6: - resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==, tarball: https://registry.npmmirror.com/@octokit/graphql/-/graphql-5.0.6.tgz} + resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} engines: {node: '>= 14'} dependencies: '@octokit/request': 6.2.8 @@ -2594,29 +2534,33 @@ packages: - encoding dev: true - /@octokit/graphql@7.0.2: - resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} + /@octokit/graphql@7.1.0: + resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} engines: {node: '>= 18'} dependencies: - '@octokit/request': 8.2.0 - '@octokit/types': 12.6.0 + '@octokit/request': 8.4.0 + '@octokit/types': 13.4.0 universal-user-agent: 6.0.1 dev: true /@octokit/openapi-types@12.11.0: - resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==, tarball: https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz} + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} dev: true /@octokit/openapi-types@18.1.1: - resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==, tarball: https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-18.1.1.tgz} + resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} dev: true /@octokit/openapi-types@20.0.0: - resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==, tarball: https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-20.0.0.tgz} + resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} + dev: true + + /@octokit/openapi-types@22.0.1: + resolution: {integrity: sha512-1yN5m1IMNXthoBDUXFF97N1gHop04B3H8ws7wtOr8GgRyDO1gKALjwMHARNBoMBiB/2vEe/vxstrApcJZzQbnQ==} dev: true /@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4): - resolution: {integrity: sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==, tarball: https://registry.npmmirror.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz} + resolution: {integrity: sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==} engines: {node: '>= 14'} peerDependencies: '@octokit/core': '>=4' @@ -2626,18 +2570,18 @@ packages: '@octokit/types': 9.3.2 dev: true - /@octokit/plugin-paginate-rest@9.2.0(@octokit/core@5.1.0): - resolution: {integrity: sha512-NKi0bJEZqOSbBLMv9kdAcuocpe05Q2xAXNLTGi0HN2GSMFJHNZuSoPNa0tcQFTOFCKe+ZaYBZ3lpXh1yxgUDCA==} + /@octokit/plugin-paginate-rest@9.2.1(@octokit/core@5.2.0): + resolution: {integrity: sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '>=5' + '@octokit/core': '5' dependencies: - '@octokit/core': 5.1.0 + '@octokit/core': 5.2.0 '@octokit/types': 12.6.0 dev: true /@octokit/plugin-request-log@1.0.4(@octokit/core@4.2.4): - resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==, tarball: https://registry.npmmirror.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz} + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} peerDependencies: '@octokit/core': '>=3' dependencies: @@ -2645,7 +2589,7 @@ packages: dev: true /@octokit/plugin-rest-endpoint-methods@7.2.3(@octokit/core@4.2.4): - resolution: {integrity: sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==, tarball: https://registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz} + resolution: {integrity: sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==} engines: {node: '>= 14'} peerDependencies: '@octokit/core': '>=3' @@ -2655,26 +2599,26 @@ packages: dev: true /@octokit/plugin-retry@3.0.9: - resolution: {integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==, tarball: https://registry.npmmirror.com/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz} + resolution: {integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==} dependencies: '@octokit/types': 6.41.0 bottleneck: 2.19.5 dev: true - /@octokit/plugin-retry@6.0.1(@octokit/core@5.1.0): + /@octokit/plugin-retry@6.0.1(@octokit/core@5.2.0): resolution: {integrity: sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=5' dependencies: - '@octokit/core': 5.1.0 - '@octokit/request-error': 5.0.1 + '@octokit/core': 5.2.0 + '@octokit/request-error': 5.1.0 '@octokit/types': 12.6.0 bottleneck: 2.19.5 dev: true /@octokit/plugin-throttling@3.7.0(@octokit/core@3.6.0): - resolution: {integrity: sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==, tarball: https://registry.npmmirror.com/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz} + resolution: {integrity: sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==} peerDependencies: '@octokit/core': ^3.5.0 dependencies: @@ -2683,19 +2627,19 @@ packages: bottleneck: 2.19.5 dev: true - /@octokit/plugin-throttling@8.2.0(@octokit/core@5.1.0): + /@octokit/plugin-throttling@8.2.0(@octokit/core@5.2.0): resolution: {integrity: sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': ^5.0.0 dependencies: - '@octokit/core': 5.1.0 + '@octokit/core': 5.2.0 '@octokit/types': 12.6.0 bottleneck: 2.19.5 dev: true /@octokit/request-error@2.1.0: - resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==, tarball: https://registry.npmmirror.com/@octokit/request-error/-/request-error-2.1.0.tgz} + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} dependencies: '@octokit/types': 6.41.0 deprecation: 2.3.1 @@ -2703,7 +2647,7 @@ packages: dev: true /@octokit/request-error@3.0.3: - resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==, tarball: https://registry.npmmirror.com/@octokit/request-error/-/request-error-3.0.3.tgz} + resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} engines: {node: '>= 14'} dependencies: '@octokit/types': 9.3.2 @@ -2711,17 +2655,17 @@ packages: once: 1.4.0 dev: true - /@octokit/request-error@5.0.1: - resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} + /@octokit/request-error@5.1.0: + resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} engines: {node: '>= 18'} dependencies: - '@octokit/types': 12.6.0 + '@octokit/types': 13.4.0 deprecation: 2.3.1 once: 1.4.0 dev: true /@octokit/request@5.6.3: - resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==, tarball: https://registry.npmmirror.com/@octokit/request/-/request-5.6.3.tgz} + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} dependencies: '@octokit/endpoint': 6.0.12 '@octokit/request-error': 2.1.0 @@ -2734,7 +2678,7 @@ packages: dev: true /@octokit/request@6.2.8: - resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==, tarball: https://registry.npmmirror.com/@octokit/request/-/request-6.2.8.tgz} + resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} engines: {node: '>= 14'} dependencies: '@octokit/endpoint': 7.0.6 @@ -2747,18 +2691,18 @@ packages: - encoding dev: true - /@octokit/request@8.2.0: - resolution: {integrity: sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==} + /@octokit/request@8.4.0: + resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} engines: {node: '>= 18'} dependencies: - '@octokit/endpoint': 9.0.4 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.6.0 + '@octokit/endpoint': 9.0.5 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.4.0 universal-user-agent: 6.0.1 dev: true /@octokit/rest@19.0.13: - resolution: {integrity: sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==, tarball: https://registry.npmmirror.com/@octokit/rest/-/rest-19.0.13.tgz} + resolution: {integrity: sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==} engines: {node: '>= 14'} dependencies: '@octokit/core': 4.2.4 @@ -2770,11 +2714,11 @@ packages: dev: true /@octokit/tsconfig@1.0.2: - resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==, tarball: https://registry.npmmirror.com/@octokit/tsconfig/-/tsconfig-1.0.2.tgz} + resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==} dev: true /@octokit/types@10.0.0: - resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==, tarball: https://registry.npmmirror.com/@octokit/types/-/types-10.0.0.tgz} + resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} dependencies: '@octokit/openapi-types': 18.1.1 dev: true @@ -2785,20 +2729,26 @@ packages: '@octokit/openapi-types': 20.0.0 dev: true + /@octokit/types@13.4.0: + resolution: {integrity: sha512-WlMegy3lPXYWASe3k9Jslc5a0anrYAYMWtsFrxBTdQjS70hvLH6C+PGvHbOsgy3RA3LouGJoU/vAt4KarecQLQ==} + dependencies: + '@octokit/openapi-types': 22.0.1 + dev: true + /@octokit/types@6.41.0: - resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==, tarball: https://registry.npmmirror.com/@octokit/types/-/types-6.41.0.tgz} + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} dependencies: '@octokit/openapi-types': 12.11.0 dev: true /@octokit/types@9.3.2: - resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==, tarball: https://registry.npmmirror.com/@octokit/types/-/types-9.3.2.tgz} + resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} dependencies: '@octokit/openapi-types': 18.1.1 dev: true /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, tarball: https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz} + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} requiresBuild: true dev: true @@ -2842,46 +2792,50 @@ packages: config-chain: 1.1.13 dev: true - /@rc-component/color-picker@1.5.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-YJXujYzYFAEtlXJXy0yJUhwzUWPTcniBZto+wZ/vnACmFnUTNR7dH+NOeqSwMMsssh74e9H5Jfpr5LAH2PYqUw==} + /@rc-component/color-picker@1.5.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-+tGGH3nLmYXTalVe0L8hSZNs73VTP5ueSHwUlDC77KKRaN7G4DS4wcpG5DTDzdcV/Yas+rzA6UGgIyzd8fS4cw==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@ctrl/tinycolor': 3.6.1 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /@rc-component/context@1.4.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /@rc-component/mini-decimal@1.1.0: resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} engines: {node: '>=8.x'} + requiresBuild: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 /@rc-component/mutate-observer@1.1.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2892,24 +2846,25 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@rc-component/tour@1.12.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-U4mf1FiUxGCwrX4ed8op77Y8VKur+8Y/61ylxtqGbcSoh1EBC7bWd/DkLu0ClTUrKZInqEi1FL7YgFtnT90vHA==} + /@rc-component/tour@1.14.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-A75DZ8LVvahBIvxooj3Gvf2sxe+CGOkmzPNX7ek0i0AJHyKZ1HXe5ieIGo3m0FMdZfVOlbCJ952Duq8VKAHk6g==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) - '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) + '@rc-component/trigger': 2.1.1(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -2920,217 +2875,151 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: true - /@reactflow/background@11.3.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-byj/G9pEC8tN0wT/ptcl/LkEP/BBfa33/SvBkqE4XwyofckqF87lKp573qGlisfnsijwAbpDlf81PuFL41So4Q==} + /@rc-component/trigger@2.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UjHkedkgtEcgQu87w1VuWug1idoDJV7VUt0swxHXRcmei2uu1AuUzGBPEUlmOmXGJ+YtTgZfVLi7kuAUKoZTMA==} + engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: - react: '>=17' - react-dom: '>=17' + react: '>=16.9.0' + react-dom: '>=16.9.0' dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - classcat: 5.0.4 + '@babel/runtime': 7.24.4 + '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) + classnames: 2.5.1 + rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) + rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - immer - dev: false - /@reactflow/controls@11.2.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-e8nWplbYfOn83KN1BrxTXS17+enLyFnjZPbyDgHSRLtI5ZGPKF/8iRXV+VXb2LFVzlu4Wh3la/pkxtfP/0aguA==} - peerDependencies: - react: '>=17' - react-dom: '>=17' - dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - classcat: 5.0.4 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - immer - dev: false + /@rollup/rollup-android-arm-eabi@4.14.1: + resolution: {integrity: sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true - /@reactflow/core@11.10.4(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-j3i9b2fsTX/sBbOm+RmNzYEFWbNx4jGWGuGooh2r1jQaE2eV+TLJgiG/VNOp0q5mBl9f6g1IXs3Gm86S9JfcGw==} - peerDependencies: - react: '>=17' - react-dom: '>=17' - dependencies: - '@types/d3': 7.4.3 - '@types/d3-drag': 3.0.7 - '@types/d3-selection': 3.0.10 - '@types/d3-zoom': 3.0.8 - classcat: 5.0.4 - d3-drag: 3.0.0 - d3-selection: 3.0.0 - d3-zoom: 3.0.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - immer - dev: false - - /@reactflow/minimap@11.7.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-le95jyTtt3TEtJ1qa7tZ5hyM4S7gaEQkW43cixcMOZLu33VAdc2aCpJg/fXcRrrf7moN2Mbl9WIMNXUKsp5ILA==} - peerDependencies: - react: '>=17' - react-dom: '>=17' - dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@types/d3-selection': 3.0.10 - '@types/d3-zoom': 3.0.8 - classcat: 5.0.4 - d3-selection: 3.0.0 - d3-zoom: 3.0.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - immer - dev: false - - /@reactflow/node-resizer@2.2.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HfickMm0hPDIHt9qH997nLdgLt0kayQyslKE0RS/GZvZ4UMQJlx/NRRyj5y47Qyg0NnC66KYOQWDM9LLzRTnUg==} - peerDependencies: - react: '>=17' - react-dom: '>=17' - dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - classcat: 5.0.4 - d3-drag: 3.0.0 - d3-selection: 3.0.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - immer - dev: false - - /@reactflow/node-toolbar@1.3.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-VmgxKmToax4sX1biZ9LXA7cj/TBJ+E5cklLGwquCCVVxh+lxpZGTBF3a5FJGVHiUNBBtFsC8ldcSZIK4cAlQww==} - peerDependencies: - react: '>=17' - react-dom: '>=17' - dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - classcat: 5.0.4 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - immer - dev: false - - /@rollup/rollup-android-arm-eabi@4.12.0: - resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz} - cpu: [arm] - os: [android] - requiresBuild: true - optional: true - - /@rollup/rollup-android-arm64@4.12.0: - resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz} + /@rollup/rollup-android-arm64@4.14.1: + resolution: {integrity: sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==} cpu: [arm64] os: [android] requiresBuild: true + dev: true optional: true - /@rollup/rollup-darwin-arm64@4.12.0: - resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz} + /@rollup/rollup-darwin-arm64@4.14.1: + resolution: {integrity: sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==} cpu: [arm64] os: [darwin] requiresBuild: true + dev: true optional: true - /@rollup/rollup-darwin-x64@4.12.0: - resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==, tarball: https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz} + /@rollup/rollup-darwin-x64@4.14.1: + resolution: {integrity: sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==} cpu: [x64] os: [darwin] requiresBuild: true + dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.12.0: - resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz} + /@rollup/rollup-linux-arm-gnueabihf@4.14.1: + resolution: {integrity: sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==} cpu: [arm] os: [linux] requiresBuild: true + dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.12.0: - resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz} + /@rollup/rollup-linux-arm64-gnu@4.14.1: + resolution: {integrity: sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true + dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.12.0: - resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz} + /@rollup/rollup-linux-arm64-musl@4.14.1: + resolution: {integrity: sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-powerpc64le-gnu@4.14.1: + resolution: {integrity: sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==} + cpu: [ppc64le] + os: [linux] + requiresBuild: true + dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.12.0: - resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz} + /@rollup/rollup-linux-riscv64-gnu@4.14.1: + resolution: {integrity: sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==} cpu: [riscv64] os: [linux] - libc: [glibc] requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.14.1: + resolution: {integrity: sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.12.0: - resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz} + /@rollup/rollup-linux-x64-gnu@4.14.1: + resolution: {integrity: sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true + dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.12.0: - resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==, tarball: https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz} + /@rollup/rollup-linux-x64-musl@4.14.1: + resolution: {integrity: sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true + dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.12.0: - resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz} + /@rollup/rollup-win32-arm64-msvc@4.14.1: + resolution: {integrity: sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==} cpu: [arm64] os: [win32] requiresBuild: true + dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.12.0: - resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz} + /@rollup/rollup-win32-ia32-msvc@4.14.1: + resolution: {integrity: sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==} cpu: [ia32] os: [win32] requiresBuild: true + dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.12.0: - resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==, tarball: https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz} + /@rollup/rollup-win32-x64-msvc@4.14.1: + resolution: {integrity: sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==} cpu: [x64] os: [win32] requiresBuild: true + dev: true optional: true /@rushstack/node-core-library@3.59.6(@types/node@20.5.1): @@ -3184,7 +3073,7 @@ packages: aggregate-error: 3.1.0 fs-extra: 11.2.0 lodash: 4.17.21 - semantic-release: 21.1.2(typescript@5.3.3) + semantic-release: 21.1.2(typescript@5.4.5) dev: true /@semantic-release/commit-analyzer@10.0.4(semantic-release@21.1.2): @@ -3200,13 +3089,13 @@ packages: import-from: 4.0.0 lodash-es: 4.17.21 micromatch: 4.0.5 - semantic-release: 21.1.2(typescript@5.3.3) + semantic-release: 21.1.2(typescript@5.4.5) transitivePeerDependencies: - supports-color dev: true /@semantic-release/error@3.0.0: - resolution: {integrity: sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==, tarball: https://registry.npmmirror.com/@semantic-release/error/-/error-3.0.0.tgz} + resolution: {integrity: sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==} engines: {node: '>=14.17'} dev: true @@ -3229,7 +3118,7 @@ packages: lodash: 4.17.21 micromatch: 4.0.5 p-reduce: 2.1.0 - semantic-release: 21.1.2(typescript@5.3.3) + semantic-release: 21.1.2(typescript@5.4.5) transitivePeerDependencies: - supports-color dev: true @@ -3240,10 +3129,10 @@ packages: peerDependencies: semantic-release: '>=20.1.0' dependencies: - '@octokit/core': 5.1.0 - '@octokit/plugin-paginate-rest': 9.2.0(@octokit/core@5.1.0) - '@octokit/plugin-retry': 6.0.1(@octokit/core@5.1.0) - '@octokit/plugin-throttling': 8.2.0(@octokit/core@5.1.0) + '@octokit/core': 5.2.0 + '@octokit/plugin-paginate-rest': 9.2.1(@octokit/core@5.2.0) + '@octokit/plugin-retry': 6.0.1(@octokit/core@5.2.0) + '@octokit/plugin-throttling': 8.2.0(@octokit/core@5.2.0) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.3.4 @@ -3255,7 +3144,7 @@ packages: lodash-es: 4.17.21 mime: 4.0.1 p-filter: 4.1.0 - semantic-release: 21.1.2(typescript@5.3.3) + semantic-release: 21.1.2(typescript@5.4.5) url-join: 5.0.0 transitivePeerDependencies: - supports-color @@ -3273,12 +3162,12 @@ packages: fs-extra: 11.2.0 lodash-es: 4.17.21 nerf-dart: 1.0.0 - normalize-url: 8.0.0 - npm: 9.9.2 + normalize-url: 8.0.1 + npm: 9.9.3 rc: 1.2.8 read-pkg: 8.1.0 registry-auth-token: 5.0.2 - semantic-release: 21.1.2(typescript@5.3.3) + semantic-release: 21.1.2(typescript@5.4.5) semver: 7.6.0 tempy: 3.1.0 dev: true @@ -3299,7 +3188,7 @@ packages: into-stream: 7.0.0 lodash-es: 4.17.21 read-pkg-up: 10.1.0 - semantic-release: 21.1.2(typescript@5.3.3) + semantic-release: 21.1.2(typescript@5.4.5) transitivePeerDependencies: - supports-color dev: true @@ -3310,6 +3199,7 @@ packages: /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true /@sindresorhus/merge-streams@2.3.0: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} @@ -3320,11 +3210,13 @@ packages: resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 + dev: true /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: '@sinonjs/commons': 3.0.1 + dev: true /@sketch-hq/sketch-file-format-ts@6.5.0: resolution: {integrity: sha512-shaGl4ttFDpHjYBoMaZpciOtsi/lKvJ3VfcBYk6+PjjbFs6H5GxPAyhbiSqy3Vmx30aos284pd88QzD3rE6iag==} @@ -3334,7 +3226,7 @@ packages: resolution: {integrity: sha512-3m6C7f8pnR5KXys/Hqx2x6ylnpqOak6HtnZI6T5keEO0yT+E4Spkw37VEbdwuC+2oxmjdgq6YZEgiKX7hM1GmQ==} dev: true - /@stylelint/postcss-css-in-js@0.38.0(postcss-syntax@0.36.2)(postcss@8.4.35): + /@stylelint/postcss-css-in-js@0.38.0(postcss-syntax@0.36.2)(postcss@8.4.38): resolution: {integrity: sha512-XOz5CAe49kS95p5yRd+DAIWDojTjfmyAQ4bbDlXMdbZTQ5t0ThjSLvWI6JI2uiS7MFurVBkZ6zUqcimzcLTBoQ==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: @@ -3342,107 +3234,107 @@ packages: postcss-syntax: '>=0.36.2' dependencies: '@babel/core': 7.23.6 - postcss: 8.4.35 - postcss-syntax: 0.36.2(postcss@8.4.35) + postcss: 8.4.38 + postcss-syntax: 0.36.2(postcss@8.4.38) transitivePeerDependencies: - supports-color dev: true - /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.24.4): resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 dev: true - /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.23.9): + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.4): resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 dev: true - /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.23.9): + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.4): resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 dev: true - /@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.24.4): resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 dev: true - /@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.24.4): resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 dev: true - /@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.24.4): resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 dev: true - /@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.24.4): resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 dev: true - /@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.24.4): resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 dev: true - /@svgr/babel-preset@6.5.1(@babel/core@7.23.9): + /@svgr/babel-preset@6.5.1(@babel/core@7.24.4): resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.23.9) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.23.9) - '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.24.4) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.4) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.4) + '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.24.4) + '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.24.4) + '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.24.4) + '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.24.4) + '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.24.4) dev: true /@svgr/core@6.5.1: resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.9 - '@svgr/babel-preset': 6.5.1(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@svgr/babel-preset': 6.5.1(@babel/core@7.24.4) '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) camelcase: 6.3.0 cosmiconfig: 7.1.0 @@ -3454,7 +3346,7 @@ packages: resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} engines: {node: '>=10'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 entities: 4.5.0 dev: true @@ -3464,8 +3356,8 @@ packages: peerDependencies: '@svgr/core': ^6.0.0 dependencies: - '@babel/core': 7.23.9 - '@svgr/babel-preset': 6.5.1(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@svgr/babel-preset': 6.5.1(@babel/core@7.24.4) '@svgr/core': 6.5.1 '@svgr/hast-util-to-babel-ast': 6.5.1 svg-parser: 2.0.4 @@ -3486,7 +3378,7 @@ packages: dev: true /@swc/core-darwin-arm64@1.3.72: - resolution: {integrity: sha512-oNSI5hVfZ+1xpj+dH1g4kQqA0VsGtqd8S9S+cDqkHZiOOVOevw9KN6dzVtmLOcPtlULVypVc0TVvsB55KdVZhQ==, tarball: https://registry.npmmirror.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.72.tgz} + resolution: {integrity: sha512-oNSI5hVfZ+1xpj+dH1g4kQqA0VsGtqd8S9S+cDqkHZiOOVOevw9KN6dzVtmLOcPtlULVypVc0TVvsB55KdVZhQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -3495,7 +3387,7 @@ packages: optional: true /@swc/core-darwin-x64@1.3.72: - resolution: {integrity: sha512-y5O/WQ1g0/VfTgeNahWIOutbdD5U2Gi703jaefdcoJo3FUx8WU108QQdbVGwGMgaqapo3iQB6Qs9paixYQAYsA==, tarball: https://registry.npmmirror.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.72.tgz} + resolution: {integrity: sha512-y5O/WQ1g0/VfTgeNahWIOutbdD5U2Gi703jaefdcoJo3FUx8WU108QQdbVGwGMgaqapo3iQB6Qs9paixYQAYsA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -3504,7 +3396,7 @@ packages: optional: true /@swc/core-linux-arm-gnueabihf@1.3.72: - resolution: {integrity: sha512-05JdWcso0OomHF+7bk5MBDgI8MZ9skcQ/4nhSv5gboSgSiuBmKM15Bg3lZ5iAUwGByNj7pGkSmmd3YwTrXEB+g==, tarball: https://registry.npmmirror.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.72.tgz} + resolution: {integrity: sha512-05JdWcso0OomHF+7bk5MBDgI8MZ9skcQ/4nhSv5gboSgSiuBmKM15Bg3lZ5iAUwGByNj7pGkSmmd3YwTrXEB+g==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -3513,47 +3405,43 @@ packages: optional: true /@swc/core-linux-arm64-gnu@1.3.72: - resolution: {integrity: sha512-8qRELJaeYshhJgqvyOeXCKqBOpai+JYdWuouMbvvDUL85j3OcZhzR+bipexEbbJKcOCdRnoYB7Qg6mjqZ0t7VA==, tarball: https://registry.npmmirror.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.72.tgz} + resolution: {integrity: sha512-8qRELJaeYshhJgqvyOeXCKqBOpai+JYdWuouMbvvDUL85j3OcZhzR+bipexEbbJKcOCdRnoYB7Qg6mjqZ0t7VA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true /@swc/core-linux-arm64-musl@1.3.72: - resolution: {integrity: sha512-tOqAGZw+Pe7YrBHFrwFVyRiKqjgjzwYbJmY+UDxLrzWrZSVtC3eO2TPrp7kWmhirg40Og81BbdfRAl8ds48w0Q==, tarball: https://registry.npmmirror.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.72.tgz} + resolution: {integrity: sha512-tOqAGZw+Pe7YrBHFrwFVyRiKqjgjzwYbJmY+UDxLrzWrZSVtC3eO2TPrp7kWmhirg40Og81BbdfRAl8ds48w0Q==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true /@swc/core-linux-x64-gnu@1.3.72: - resolution: {integrity: sha512-U2W2xWR3s9nplGVWz376GiBlcLTgxyYKlpZPBNZk0w3OvTcjKC62gW1Pe7PUkk4NgJUnaQDBa/mb4V4Zl+GZPA==, tarball: https://registry.npmmirror.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.72.tgz} + resolution: {integrity: sha512-U2W2xWR3s9nplGVWz376GiBlcLTgxyYKlpZPBNZk0w3OvTcjKC62gW1Pe7PUkk4NgJUnaQDBa/mb4V4Zl+GZPA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true /@swc/core-linux-x64-musl@1.3.72: - resolution: {integrity: sha512-3+2dUiZBsifKgvnFEHWdysXjInK8K+BfPBw2tTZJmq1+fZLt0rvuErYDVMLfIJnVWLCcJMnDtTXrvkFV1y/6iA==, tarball: https://registry.npmmirror.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.72.tgz} + resolution: {integrity: sha512-3+2dUiZBsifKgvnFEHWdysXjInK8K+BfPBw2tTZJmq1+fZLt0rvuErYDVMLfIJnVWLCcJMnDtTXrvkFV1y/6iA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true /@swc/core-win32-arm64-msvc@1.3.72: - resolution: {integrity: sha512-ndI8xZ2AId806D25xgqw2SFJ9gc/jhg21+5hA8XPq9ZL+oDiaYDztaP3ijVmZ1G5xXKD9DpgB7xmylv/f6o6GA==, tarball: https://registry.npmmirror.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.72.tgz} + resolution: {integrity: sha512-ndI8xZ2AId806D25xgqw2SFJ9gc/jhg21+5hA8XPq9ZL+oDiaYDztaP3ijVmZ1G5xXKD9DpgB7xmylv/f6o6GA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -3562,7 +3450,7 @@ packages: optional: true /@swc/core-win32-ia32-msvc@1.3.72: - resolution: {integrity: sha512-F3TK8JHP3SRFjLRlzcRVZPnvvGm2CQ5/cwbIkaEq0Dla3kyctU8SiRqvtYwWCW4JuY10cUygIg93Ec/C9Lkk4g==, tarball: https://registry.npmmirror.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.72.tgz} + resolution: {integrity: sha512-F3TK8JHP3SRFjLRlzcRVZPnvvGm2CQ5/cwbIkaEq0Dla3kyctU8SiRqvtYwWCW4JuY10cUygIg93Ec/C9Lkk4g==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -3571,7 +3459,7 @@ packages: optional: true /@swc/core-win32-x64-msvc@1.3.72: - resolution: {integrity: sha512-FXMnIUtLl0yEmGkw+xbUg/uUPExvUxUlLSHbX7CnbSuOIHqMHzvEd9skIueLAst4bvmJ8kT1hDyAIWQcTIAJYQ==, tarball: https://registry.npmmirror.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.72.tgz} + resolution: {integrity: sha512-FXMnIUtLl0yEmGkw+xbUg/uUPExvUxUlLSHbX7CnbSuOIHqMHzvEd9skIueLAst4bvmJ8kT1hDyAIWQcTIAJYQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -3605,8 +3493,8 @@ packages: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.23.9 + '@babel/code-frame': 7.24.2 + '@babel/runtime': 7.24.4 '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 @@ -3615,7 +3503,7 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/jest-dom@6.4.2(jest@29.7.0)(vitest@1.3.1): + /@testing-library/jest-dom@6.4.2(jest@29.7.0)(vitest@1.4.0): resolution: {integrity: sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} peerDependencies: @@ -3637,7 +3525,7 @@ packages: optional: true dependencies: '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 aria-query: 5.3.0 chalk: 3.0.0 css.escape: 1.5.1 @@ -3645,19 +3533,19 @@ packages: jest: 29.7.0(@types/node@20.5.1)(ts-node@10.9.2) lodash: 4.17.21 redent: 3.0.0 - vitest: 1.3.1(@types/node@20.5.1)(jsdom@22.1.0) - dev: false + vitest: 1.4.0(@types/node@20.5.1)(jsdom@22.1.0) + dev: true - /@testing-library/react@14.2.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A==} + /@testing-library/react@14.3.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-AYJGvNFMbCa5vt1UtDCa/dcaABrXq8gph6VN+cffIx0UeA0qiGqS+sT60+sb+Gjc8tGXdECWYQgaF0khf8b+Lg==} engines: {node: '>=14'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@testing-library/dom': 9.3.4 - '@types/react-dom': 18.2.19 + '@types/react-dom': 18.2.24 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -3665,23 +3553,28 @@ packages: /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + dev: true /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} dev: true - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true /@types/argparse@1.0.38: resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} @@ -3694,209 +3587,41 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 + dev: true /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 + dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + dev: true /@types/babel__traverse@7.20.5: resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 + dev: true /@types/chroma-js@2.4.4: resolution: {integrity: sha512-/DTccpHTaKomqussrn+ciEvfW4k6NAHzNzs/sts1TCqg333qNxOhy8TNIoQCmbGG3Tl8KdEhkGAssb1n3mTXiQ==} dev: true - /@types/d3-array@3.2.1: - resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} - dev: false - - /@types/d3-axis@3.0.6: - resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} - dependencies: - '@types/d3-selection': 3.0.10 - dev: false - - /@types/d3-brush@3.0.6: - resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} - dependencies: - '@types/d3-selection': 3.0.10 - dev: false - - /@types/d3-chord@3.0.6: - resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} - dev: false - - /@types/d3-color@3.1.3: - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - dev: false - - /@types/d3-contour@3.0.6: - resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} - dependencies: - '@types/d3-array': 3.2.1 - '@types/geojson': 7946.0.14 - dev: false - - /@types/d3-delaunay@6.0.4: - resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} - dev: false - - /@types/d3-dispatch@3.0.6: - resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==} - dev: false - - /@types/d3-drag@3.0.7: - resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} - dependencies: - '@types/d3-selection': 3.0.10 - dev: false - - /@types/d3-dsv@3.0.7: - resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} - dev: false - - /@types/d3-ease@3.0.2: - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - dev: false - - /@types/d3-fetch@3.0.7: - resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} - dependencies: - '@types/d3-dsv': 3.0.7 - dev: false - - /@types/d3-force@3.0.9: - resolution: {integrity: sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==} - dev: false - - /@types/d3-format@3.0.4: - resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} - dev: false - - /@types/d3-geo@3.1.0: - resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} - dependencies: - '@types/geojson': 7946.0.14 - dev: false - - /@types/d3-hierarchy@3.1.6: - resolution: {integrity: sha512-qlmD/8aMk5xGorUvTUWHCiumvgaUXYldYjNVOWtYoTYY/L+WwIEAmJxUmTgr9LoGNG0PPAOmqMDJVDPc7DOpPw==} - dev: false - - /@types/d3-interpolate@3.0.4: - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - dependencies: - '@types/d3-color': 3.1.3 - dev: false - - /@types/d3-path@3.1.0: - resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==} - dev: false - - /@types/d3-polygon@3.0.2: - resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} - dev: false - - /@types/d3-quadtree@3.0.6: - resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} - dev: false - - /@types/d3-random@3.0.3: - resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} - dev: false - - /@types/d3-scale-chromatic@3.0.3: - resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==} - dev: false - - /@types/d3-scale@4.0.8: - resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} + /@types/classnames@2.3.1: + resolution: {integrity: sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==} + deprecated: This is a stub types definition. classnames provides its own type definitions, so you do not need this installed. dependencies: - '@types/d3-time': 3.0.3 - dev: false - - /@types/d3-selection@3.0.10: - resolution: {integrity: sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==} - dev: false - - /@types/d3-shape@3.1.6: - resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==} - dependencies: - '@types/d3-path': 3.1.0 - dev: false - - /@types/d3-time-format@4.0.3: - resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} - dev: false - - /@types/d3-time@3.0.3: - resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} - dev: false - - /@types/d3-timer@3.0.2: - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - dev: false - - /@types/d3-transition@3.0.8: - resolution: {integrity: sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==} - dependencies: - '@types/d3-selection': 3.0.10 - dev: false - - /@types/d3-zoom@3.0.8: - resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} - dependencies: - '@types/d3-interpolate': 3.0.4 - '@types/d3-selection': 3.0.10 - dev: false - - /@types/d3@7.4.3: - resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} - dependencies: - '@types/d3-array': 3.2.1 - '@types/d3-axis': 3.0.6 - '@types/d3-brush': 3.0.6 - '@types/d3-chord': 3.0.6 - '@types/d3-color': 3.1.3 - '@types/d3-contour': 3.0.6 - '@types/d3-delaunay': 6.0.4 - '@types/d3-dispatch': 3.0.6 - '@types/d3-drag': 3.0.7 - '@types/d3-dsv': 3.0.7 - '@types/d3-ease': 3.0.2 - '@types/d3-fetch': 3.0.7 - '@types/d3-force': 3.0.9 - '@types/d3-format': 3.0.4 - '@types/d3-geo': 3.1.0 - '@types/d3-hierarchy': 3.1.6 - '@types/d3-interpolate': 3.0.4 - '@types/d3-path': 3.1.0 - '@types/d3-polygon': 3.0.2 - '@types/d3-quadtree': 3.0.6 - '@types/d3-random': 3.0.3 - '@types/d3-scale': 4.0.8 - '@types/d3-scale-chromatic': 3.0.3 - '@types/d3-selection': 3.0.10 - '@types/d3-shape': 3.1.6 - '@types/d3-time': 3.0.3 - '@types/d3-time-format': 4.0.3 - '@types/d3-timer': 3.0.2 - '@types/d3-transition': 3.0.8 - '@types/d3-zoom': 3.0.8 + classnames: 2.5.1 dev: false /@types/debug@4.1.12: @@ -3905,14 +3630,14 @@ packages: '@types/ms': 0.7.34 /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, tarball: https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz} + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.56.4 + '@types/eslint': 8.56.8 '@types/estree': 1.0.5 dev: true - /@types/eslint@8.56.4: - resolution: {integrity: sha512-lG1GLUnL5vuRBGb3MgWUWLdGMH2Hps+pERuyQXCfWozuGKdnhf9Pbg4pkcrVUHjKrU7Rl+GCZ/299ObBXZFAxg==, tarball: https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.4.tgz} + /@types/eslint@8.56.8: + resolution: {integrity: sha512-LdDdQVDzDXf3ijhhMnE27C5vc0QEknD8GiMR/Hi+fVbdZNfAfCy2j69m0LjUd2MAy0+kIgnOtd5ndTmDk/VWCA==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -3922,7 +3647,6 @@ packages: resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} dependencies: '@types/estree': 1.0.5 - dev: true /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -3931,24 +3655,21 @@ packages: resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.11.21 + '@types/node': 20.12.7 dev: true - /@types/geojson@7946.0.14: - resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} - dev: false - /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.11.21 + '@types/node': 20.12.7 dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.11.21 + '@types/node': 20.12.7 + dev: true /@types/hapi__joi@17.1.9: resolution: {integrity: sha512-oOMFT8vmCTFncsF1engrs04jatz8/Anwx3De9uxnOK4chgSEgWBvFtpSoJo8u3784JNO+ql5tzRR6phHoRnscQ==} @@ -3958,6 +3679,7 @@ packages: resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} dependencies: '@types/unist': 2.0.10 + dev: true /@types/hast@3.0.4: resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -3978,20 +3700,19 @@ packages: /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true /@types/istanbul-lib-report@3.0.3: resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: '@types/istanbul-lib-coverage': 2.0.6 + dev: true /@types/istanbul-reports@3.0.4: resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: '@types/istanbul-lib-report': 3.0.3 - - /@types/js-cookie@2.2.7: - resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} - dev: false + dev: true /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -4000,37 +3721,30 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 20.11.21 + '@types/node': 20.12.7 dev: true - /@types/katex@0.14.0: - resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==} - dev: false - - /@types/katex@0.16.7: - resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - dev: false - /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.11.21 + '@types/node': 20.12.7 dev: true /@types/lodash-es@4.17.12: resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} dependencies: - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.0 dev: true - /@types/lodash@4.14.202: - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + /@types/lodash@4.17.0: + resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} dev: true /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: '@types/unist': 2.0.10 + dev: true /@types/mdast@4.0.3: resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} @@ -4052,7 +3766,7 @@ packages: /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} dependencies: - '@types/node': 18.19.19 + '@types/node': 18.19.31 form-data: 4.0.0 dev: true @@ -4060,19 +3774,21 @@ packages: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: true - /@types/node@18.19.19: - resolution: {integrity: sha512-qqV6hSy9zACEhQUy5CEGeuXAZN0fNjqLWRIvOXOwdFYhFoKBiY08VKR5kgchr90+TitLVhpUEb54hk4bYaArUw==} + /@types/node@18.19.31: + resolution: {integrity: sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@20.11.21: - resolution: {integrity: sha512-/ySDLGscFPNasfqStUuWWPfL78jompfIoVzLJPVVAHBh6rpG68+pI2Gk+fNLeI8/f1yPYL4s46EleVIc20F1Ow==} + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} dependencies: undici-types: 5.26.5 + dev: true /@types/node@20.5.1: resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} + dev: true /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4080,13 +3796,14 @@ packages: /@types/parse-json@4.0.2: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: true /@types/parse5@6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} dev: true - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} /@types/q@1.5.8: resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} @@ -4095,11 +3812,11 @@ packages: /@types/ramda@0.29.3: resolution: {integrity: sha512-Yh/RHkjN0ru6LVhSQtTkCRo6HXkfL9trot/2elzM/yXLJmbLm2v6kJc8yftTnwv1zvUob6TEtqI2cYjdqG3U0Q==} dependencies: - types-ramda: 0.29.8 + types-ramda: 0.29.10 dev: true - /@types/react-dom@18.2.19: - resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} + /@types/react-dom@18.2.24: + resolution: {integrity: sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==} dependencies: '@types/react': 18.2.31 dev: true @@ -4107,14 +3824,14 @@ packages: /@types/react@18.2.31: resolution: {integrity: sha512-c2UnPv548q+5DFh03y8lEDeMfDwBn9G3dRwfkrxQMo/dOtRHUUO57k6pHvBIfH/VF4Nh+98mZ5aaSe+2echD5g==} dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 + '@types/prop-types': 15.7.12 + '@types/scheduler': 0.23.0 csstype: 3.1.3 /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.11.21 + '@types/node': 20.12.7 dev: true /@types/sax@1.2.7: @@ -4123,13 +3840,13 @@ packages: '@types/node': 17.0.45 dev: true - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + /@types/scheduler@0.23.0: + resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} /@types/semantic-release@17.2.11: resolution: {integrity: sha512-K2jytWmDwbgDaaI9IPqdygS777ONV+5O+ydXi18qQuGUNHRK2Lx+TAoCpcJJYNya4jdwBBqJnuFjrA/OBCTF0w==} dependencies: - '@types/node': 20.11.21 + '@types/node': 20.12.7 dev: true /@types/semver@7.5.8: @@ -4138,6 +3855,7 @@ packages: /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: true /@types/unist@2.0.10: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -4148,6 +3866,7 @@ packages: /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true /@types/yargs@16.0.9: resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} @@ -4159,8 +3878,9 @@ packages: resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} dependencies: '@types/yargs-parser': 21.0.3 + dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4172,23 +3892,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4200,10 +3920,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -4216,7 +3936,7 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4226,12 +3946,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -4241,7 +3961,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4256,13 +3976,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4273,7 +3993,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -4290,44 +4010,44 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@umijs/ast@4.1.2: - resolution: {integrity: sha512-ejgp07sn4IEMf8Urxt+su9KrUWIWp0rhtnljB3XVR2A4mcVdz1jtSQbqYwQFtgn6Mp6tCMG+H1fkweRWj7+vfQ==} + /@umijs/ast@4.1.8: + resolution: {integrity: sha512-V9/KiqNpMuSlVaLvtHZvGJs8IRdHQ6UKyWb3mDCS2yGFkJBqYHDSZpFNWqpyBFc9KsI6GPdBKgAZJGfdlgHvhQ==} dependencies: - '@umijs/bundler-utils': 4.1.2 + '@umijs/bundler-utils': 4.1.8 transitivePeerDependencies: - supports-color dev: true - /@umijs/babel-preset-umi@4.1.2: - resolution: {integrity: sha512-SdizYktVzp5ODwOQEeHzAwt+/WGUaIO/py9z1lGQdzxGfiTkEMU5hB70bh0fFKn3jOKCKTdBLw8BfIi2E/GwDQ==} + /@umijs/babel-preset-umi@4.1.8: + resolution: {integrity: sha512-qSy+70wJHRK2cBCMuR9ExpUYwSHZDctRhD2DRXAa3ZQAIACuLgjFm6b6kg7AK0kFAwJNqgI5+ln8CAqpExxBEQ==} dependencies: '@babel/runtime': 7.23.6 '@bloomberg/record-tuple-polyfill': 0.0.4 - '@umijs/bundler-utils': 4.1.2 - '@umijs/utils': 4.1.2 + '@umijs/bundler-utils': 4.1.8 + '@umijs/utils': 4.1.8 core-js: 3.34.0 transitivePeerDependencies: - supports-color dev: true - /@umijs/bundler-esbuild@4.1.2: - resolution: {integrity: sha512-LcAlqoQKDUeEYmkLw2mB2T9FBOjZQsFSzCw6ZYItTV2zIdFNlH4U5slfhRqlwQbzxDgBrbPLEGl0M85CqEFE4w==} + /@umijs/bundler-esbuild@4.1.8: + resolution: {integrity: sha512-r/0jK74VuFCy2UnsC5ia8DZqdqrQ5kGF4ZQHq9v4uH4Mf+FAOo39UgiCX1EJaY0JVNsAXkoDE81slRhkvZQuAg==} hasBin: true dependencies: - '@umijs/bundler-utils': 4.1.2 - '@umijs/utils': 4.1.2 + '@umijs/bundler-utils': 4.1.8 + '@umijs/utils': 4.1.8 enhanced-resolve: 5.9.3 - postcss: 8.4.35 - postcss-flexbugs-fixes: 5.0.2(postcss@8.4.35) - postcss-preset-env: 7.5.0(postcss@8.4.35) + postcss: 8.4.38 + postcss-flexbugs-fixes: 5.0.2(postcss@8.4.38) + postcss-preset-env: 7.5.0(postcss@8.4.38) transitivePeerDependencies: - supports-color dev: true - /@umijs/bundler-utils@4.1.2: - resolution: {integrity: sha512-bcN3VSgCPZjyLmQrRWPfPkuhVP0GCFyBLTxzr4vPHQTYx7FjHJcvpEbOsXoVNiBHowRA8J6PGCB/jxqRSO1yxw==} + /@umijs/bundler-utils@4.1.8: + resolution: {integrity: sha512-SsbMgN8HzRvS2MqgqbpSnQpAdSYjl12wDznxlO8hiQJJ3sZm7pD4xLIHVIe1H452KsT3ilIDgyBaQ0U+sI8r0g==} dependencies: - '@umijs/utils': 4.1.2 + '@umijs/utils': 4.1.8 esbuild: 0.17.19 regenerate: 1.4.2 regenerate-unicode-properties: 10.1.1 @@ -4336,22 +4056,23 @@ packages: - supports-color dev: true - /@umijs/bundler-vite@4.1.2(@types/node@20.5.1)(postcss@8.4.35)(sass@1.71.1): - resolution: {integrity: sha512-znqi0rb8zsh90jT8duCkGj/gcli8xEkjQDi1y6BA/dshIO9Ra4KT9riijJsaumiD+OJrABpV2DWjX7JrszzByg==} + /@umijs/bundler-vite@4.1.8(@types/node@20.5.1)(postcss@8.4.38)(sass@1.74.1): + resolution: {integrity: sha512-uZEIlyh5aTtkbdbr2Gbv3C9NC4VMYOG3bsLNKjBzNbnUC4IMkpfcqpP/OZPzDySpvKCpHXkcOAo3x1U3G5zTng==} hasBin: true dependencies: '@svgr/core': 6.5.1 - '@umijs/bundler-utils': 4.1.2 - '@umijs/utils': 4.1.2 - '@vitejs/plugin-react': 4.0.0(vite@4.3.1) + '@umijs/bundler-utils': 4.1.8 + '@umijs/utils': 4.1.8 + '@vitejs/plugin-react': 4.0.0(vite@4.5.2) core-js: 3.34.0 less: 4.1.3 - postcss-preset-env: 7.5.0(postcss@8.4.35) + postcss-preset-env: 7.5.0(postcss@8.4.38) rollup-plugin-visualizer: 5.9.0 systemjs: 6.14.3 - vite: 4.3.1(@types/node@20.5.1)(less@4.1.3)(sass@1.71.1) + vite: 4.5.2(@types/node@20.5.1)(less@4.1.3)(sass@1.74.1) transitivePeerDependencies: - '@types/node' + - lightningcss - postcss - rollup - sass @@ -4361,29 +4082,29 @@ packages: - terser dev: true - /@umijs/bundler-webpack@4.1.2(typescript@5.0.4)(webpack@5.90.3): - resolution: {integrity: sha512-rCf+H/k1Ru/twlCvAlqjjRIZRZJNZmaXpROaQ6VviPDj1F5YLDWMCunvdGf8KOeBVTLy4syhdxn95ZIyKcPpPA==} + /@umijs/bundler-webpack@4.1.8(typescript@5.0.4)(webpack@5.91.0): + resolution: {integrity: sha512-6yNmwTkgTd/A0vr5D3mMcTTXgDMxiwXQiTTBea6xrJgXfYYX0B7JftJQunITd75nvdToiDUwaIKFqUK1zxBDMw==} hasBin: true dependencies: '@svgr/core': 6.5.1 '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1) '@types/hapi__joi': 17.1.9 - '@umijs/babel-preset-umi': 4.1.2 - '@umijs/bundler-utils': 4.1.2 + '@umijs/babel-preset-umi': 4.1.8 + '@umijs/bundler-utils': 4.1.8 '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1 - '@umijs/mfsu': 4.1.2 - '@umijs/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack@5.90.3) - '@umijs/utils': 4.1.2 + '@umijs/mfsu': 4.1.8 + '@umijs/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack@5.91.0) + '@umijs/utils': 4.1.8 cors: 2.8.5 - css-loader: 6.7.1(webpack@5.90.3) - es5-imcompatible-versions: 0.1.88 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.0.4)(webpack@5.90.3) + css-loader: 6.7.1(webpack@5.91.0) + es5-imcompatible-versions: 0.1.89 + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.0.4)(webpack@5.91.0) jest-worker: 29.4.3 lightningcss: 1.22.1 node-libs-browser: 2.2.1 - postcss: 8.4.35 - postcss-preset-env: 7.5.0(postcss@8.4.35) + postcss: 8.4.38 + postcss-preset-env: 7.5.0(postcss@8.4.38) react-error-overlay: 6.0.9 react-refresh: 0.14.0 transitivePeerDependencies: @@ -4398,29 +4119,29 @@ packages: - webpack-plugin-serve dev: true - /@umijs/bundler-webpack@4.1.2(typescript@5.3.3)(webpack@5.90.3): - resolution: {integrity: sha512-rCf+H/k1Ru/twlCvAlqjjRIZRZJNZmaXpROaQ6VviPDj1F5YLDWMCunvdGf8KOeBVTLy4syhdxn95ZIyKcPpPA==} + /@umijs/bundler-webpack@4.1.8(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-6yNmwTkgTd/A0vr5D3mMcTTXgDMxiwXQiTTBea6xrJgXfYYX0B7JftJQunITd75nvdToiDUwaIKFqUK1zxBDMw==} hasBin: true dependencies: '@svgr/core': 6.5.1 '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1) '@types/hapi__joi': 17.1.9 - '@umijs/babel-preset-umi': 4.1.2 - '@umijs/bundler-utils': 4.1.2 + '@umijs/babel-preset-umi': 4.1.8 + '@umijs/bundler-utils': 4.1.8 '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1 - '@umijs/mfsu': 4.1.2 - '@umijs/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack@5.90.3) - '@umijs/utils': 4.1.2 + '@umijs/mfsu': 4.1.8 + '@umijs/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack@5.91.0) + '@umijs/utils': 4.1.8 cors: 2.8.5 - css-loader: 6.7.1(webpack@5.90.3) - es5-imcompatible-versions: 0.1.88 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.3.3)(webpack@5.90.3) + css-loader: 6.7.1(webpack@5.91.0) + es5-imcompatible-versions: 0.1.89 + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.5)(webpack@5.91.0) jest-worker: 29.4.3 lightningcss: 1.22.1 node-libs-browser: 2.2.1 - postcss: 8.4.35 - postcss-preset-env: 7.5.0(postcss@8.4.35) + postcss: 8.4.38 + postcss-preset-env: 7.5.0(postcss@8.4.38) react-error-overlay: 6.0.9 react-refresh: 0.14.0 transitivePeerDependencies: @@ -4439,11 +4160,11 @@ packages: resolution: {integrity: sha512-kDKJ8yTarxwxGJDInG33hOpaQRZ//XpNuuznQ/1Mscypw6kappzFmrBr2dOYave++K7JHouoANF354UpbEQw0Q==} dev: true - /@umijs/core@4.1.2: - resolution: {integrity: sha512-OZlZKG+26coItwPJBtPmqB2zGSnVJqi/BVFm4MYB3fDtY5+/KmPCSXur/FJvpmRInoVAJkahbsycmMh+dUT0wQ==} + /@umijs/core@4.1.8: + resolution: {integrity: sha512-c9jiLju4juc+3t60E38eZVh55eA/X240/JH0xxW/vOT4euFBfrq8U7J/66NRaKumdZ03wq2nX12mg4LtB9W8kQ==} dependencies: - '@umijs/bundler-utils': 4.1.2 - '@umijs/utils': 4.1.2 + '@umijs/bundler-utils': 4.1.8 + '@umijs/utils': 4.1.8 transitivePeerDependencies: - supports-color dev: true @@ -4453,7 +4174,7 @@ packages: dev: true /@umijs/es-module-parser-darwin-arm64@0.0.7: - resolution: {integrity: sha512-1QeNupekuVYVvL4UHyCRq4ISP2PNk4rDd9UOPONW+KpqTyP9p7RfgGpwB0VLPaFSu2ADtm0XZyIaYEGPY6zuDw==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-darwin-arm64/-/es-module-parser-darwin-arm64-0.0.7.tgz} + resolution: {integrity: sha512-1QeNupekuVYVvL4UHyCRq4ISP2PNk4rDd9UOPONW+KpqTyP9p7RfgGpwB0VLPaFSu2ADtm0XZyIaYEGPY6zuDw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -4462,7 +4183,7 @@ packages: optional: true /@umijs/es-module-parser-darwin-x64@0.0.7: - resolution: {integrity: sha512-FBFmfigmToPc9qBCW7wHiTYpqnLdPbAvoMGOydzAu2NspdPEF7TfILcr8vCPNbNe3vCobS+T/YM1dP+SagERlA==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-darwin-x64/-/es-module-parser-darwin-x64-0.0.7.tgz} + resolution: {integrity: sha512-FBFmfigmToPc9qBCW7wHiTYpqnLdPbAvoMGOydzAu2NspdPEF7TfILcr8vCPNbNe3vCobS+T/YM1dP+SagERlA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -4471,7 +4192,7 @@ packages: optional: true /@umijs/es-module-parser-linux-arm-gnueabihf@0.0.7: - resolution: {integrity: sha512-AXfmg3htkadLGsXUyiyrTig4omGCWIN4l+HS7Qapqv0wlfFYSpC0KPemjyBQgzXO70tDcT+1FNhGjIy+yr2pIQ==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-arm-gnueabihf/-/es-module-parser-linux-arm-gnueabihf-0.0.7.tgz} + resolution: {integrity: sha512-AXfmg3htkadLGsXUyiyrTig4omGCWIN4l+HS7Qapqv0wlfFYSpC0KPemjyBQgzXO70tDcT+1FNhGjIy+yr2pIQ==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -4480,47 +4201,43 @@ packages: optional: true /@umijs/es-module-parser-linux-arm64-gnu@0.0.7: - resolution: {integrity: sha512-2wSdChFc39fPJwvS8tRq+jx8qNlIwrjRk1hb3N5o0rJR+rqt+ceAyNPbYwpNBmUHW7xtmDQvJUeinvr7hIBP+w==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-arm64-gnu/-/es-module-parser-linux-arm64-gnu-0.0.7.tgz} + resolution: {integrity: sha512-2wSdChFc39fPJwvS8tRq+jx8qNlIwrjRk1hb3N5o0rJR+rqt+ceAyNPbYwpNBmUHW7xtmDQvJUeinvr7hIBP+w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true /@umijs/es-module-parser-linux-arm64-musl@0.0.7: - resolution: {integrity: sha512-cqQffARWkmQ3n1RYNKZR3aD6X8YaP6u1maASjDgPQOpZMAlv/OSDrM/7iGujWTs0PD0haockNG9/DcP6lgPHMw==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-arm64-musl/-/es-module-parser-linux-arm64-musl-0.0.7.tgz} + resolution: {integrity: sha512-cqQffARWkmQ3n1RYNKZR3aD6X8YaP6u1maASjDgPQOpZMAlv/OSDrM/7iGujWTs0PD0haockNG9/DcP6lgPHMw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true /@umijs/es-module-parser-linux-x64-gnu@0.0.7: - resolution: {integrity: sha512-PHrKHtT665Za0Ydjch4ACrNpRU+WIIden12YyF1CtMdhuLDSoU6UfdhF3NoDbgEUcXVDX/ftOqmj0SbH3R1uew==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-x64-gnu/-/es-module-parser-linux-x64-gnu-0.0.7.tgz} + resolution: {integrity: sha512-PHrKHtT665Za0Ydjch4ACrNpRU+WIIden12YyF1CtMdhuLDSoU6UfdhF3NoDbgEUcXVDX/ftOqmj0SbH3R1uew==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true /@umijs/es-module-parser-linux-x64-musl@0.0.7: - resolution: {integrity: sha512-cyZvUK5lcECLWzLp/eU1lFlCETcz+LEb+wrdARQSST1dgoIGZsT4cqM1WzYmdZNk3o883tiZizLt58SieEiHBQ==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-linux-x64-musl/-/es-module-parser-linux-x64-musl-0.0.7.tgz} + resolution: {integrity: sha512-cyZvUK5lcECLWzLp/eU1lFlCETcz+LEb+wrdARQSST1dgoIGZsT4cqM1WzYmdZNk3o883tiZizLt58SieEiHBQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true /@umijs/es-module-parser-win32-arm64-msvc@0.0.7: - resolution: {integrity: sha512-V7WxnUI88RboSl0RWLNQeKBT7EDW35fW6Tn92zqtoHHxrhAIL9DtDyvC8REP4qTxeZ6Oej/Ax5I6IjsLx3yTOg==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-win32-arm64-msvc/-/es-module-parser-win32-arm64-msvc-0.0.7.tgz} + resolution: {integrity: sha512-V7WxnUI88RboSl0RWLNQeKBT7EDW35fW6Tn92zqtoHHxrhAIL9DtDyvC8REP4qTxeZ6Oej/Ax5I6IjsLx3yTOg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -4529,7 +4246,7 @@ packages: optional: true /@umijs/es-module-parser-win32-x64-msvc@0.0.7: - resolution: {integrity: sha512-X3Pqy0l38hg6wMPquPeMHuoHU+Cx+wzyz32SVYCta+RPJQ7n9PjrEBiIuVAw5+GJZjSABN7LVr8u/n0RZT9EQA==, tarball: https://registry.npmmirror.com/@umijs/es-module-parser-win32-x64-msvc/-/es-module-parser-win32-x64-msvc-0.0.7.tgz} + resolution: {integrity: sha512-X3Pqy0l38hg6wMPquPeMHuoHU+Cx+wzyz32SVYCta+RPJQ7n9PjrEBiIuVAw5+GJZjSABN7LVr8u/n0RZT9EQA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -4555,24 +4272,24 @@ packages: /@umijs/history@5.3.1: resolution: {integrity: sha512-/e0cEGrR2bIWQD7pRl3dl9dcyRGeC9hoW0OCvUTT/hjY0EfUrkd6G8ZanVghPMpDuY5usxq9GVcvrT8KNXLWvA==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 query-string: 6.14.1 dev: true - /@umijs/lint@4.1.2(eslint@8.57.0)(jest@29.7.0)(stylelint@15.11.0)(typescript@5.3.3): - resolution: {integrity: sha512-sdau5ICWOtyEsQrRHuS5wx4iPZhu56DGrxZkASAXGtQxntoJeWzx/e+qAhdsiFiWZrNXbbOOdlafpGyLy6BoKA==} + /@umijs/lint@4.1.8(eslint@8.57.0)(jest@29.7.0)(stylelint@15.11.0)(typescript@5.4.5): + resolution: {integrity: sha512-IyTznUmlVTs4ReERK0leXSnK/PPiNrYNiTe6wIyQ5ltsdcQprRd2So97hzUYo/gHaD3VkOUX8kVlDou/N7Raiw==} dependencies: '@babel/core': 7.23.6 '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.57.0) - '@stylelint/postcss-css-in-js': 0.38.0(postcss-syntax@0.36.2)(postcss@8.4.35) - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - '@umijs/babel-preset-umi': 4.1.2 - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.3.3) + '@stylelint/postcss-css-in-js': 0.38.0(postcss-syntax@0.36.2)(postcss@8.4.38) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@umijs/babel-preset-umi': 4.1.8 + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - postcss: 8.4.35 - postcss-syntax: 0.36.2(postcss@8.4.35) + postcss: 8.4.38 + postcss-syntax: 0.36.2(postcss@8.4.38) stylelint-config-standard: 25.0.0(stylelint@15.11.0) transitivePeerDependencies: - eslint @@ -4587,57 +4304,57 @@ packages: - typescript dev: true - /@umijs/mfsu@4.1.2: - resolution: {integrity: sha512-PxkSdQWR0323B1PKLjn2F3ZLfxByg3MmwgRipUbwX3dC8ae9kqIR5wEB2bfL1uXSg9x63o2JMsv5/ObfhrsmYw==} + /@umijs/mfsu@4.1.8: + resolution: {integrity: sha512-3SLvxOrHh8gIb0hhcq8xBElmoxv6NStp4Pb1cEI6Y/YKcxH8fPrKLmR+6E3aZBNZ+MRpcNd36gua0aiGvs+fgg==} dependencies: - '@umijs/bundler-esbuild': 4.1.2 - '@umijs/bundler-utils': 4.1.2 - '@umijs/utils': 4.1.2 + '@umijs/bundler-esbuild': 4.1.8 + '@umijs/bundler-utils': 4.1.8 + '@umijs/utils': 4.1.8 enhanced-resolve: 5.9.3 is-equal: 1.7.0 transitivePeerDependencies: - supports-color dev: true - /@umijs/plugin-run@4.1.2: - resolution: {integrity: sha512-SkCOd1ZMe5zJp0avxC0UWr4/MK4QU3iqMzNOk6kBYPMIZgsNSn+6+iol+Sb3aqn3RzU3TQWHeKtO2ckZyrD+vw==} + /@umijs/plugin-run@4.1.8: + resolution: {integrity: sha512-sbHvAgXJJ3DUpPw/T7za9K9ROLXXMV24vZwCJSl9RkPoU8AF4nqiaJYYoItN6upCEf0c//Bqm/ZMd7EN8XZX2Q==} dependencies: tsx: 3.12.2 dev: true - /@umijs/preset-umi@4.1.2(@types/node@20.5.1)(@types/react@18.2.31)(sass@1.71.1)(typescript@5.3.3)(webpack@5.90.3): - resolution: {integrity: sha512-tZe7mWS2vCoULXcY5Zx10nVWxMHPXl1+Pj3X0hiPE2oPYJYw5eYtE0+IivNAOUH2M2d5c8j257MgG+XND8Gpbw==} + /@umijs/preset-umi@4.1.8(@types/node@20.5.1)(@types/react@18.2.31)(sass@1.74.1)(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-YZxHggqsZgl0cYiAifYAv2fVWMOzAyKQx1u00IXDJF5JfS0mcq2lnX2ZTBXXdoG7jYSlqRsqAo+AnR+BWHKu3A==} dependencies: '@iconify/utils': 2.1.1 '@svgr/core': 6.5.1 - '@umijs/ast': 4.1.2 - '@umijs/babel-preset-umi': 4.1.2 - '@umijs/bundler-esbuild': 4.1.2 - '@umijs/bundler-utils': 4.1.2 - '@umijs/bundler-vite': 4.1.2(@types/node@20.5.1)(postcss@8.4.35)(sass@1.71.1) - '@umijs/bundler-webpack': 4.1.2(typescript@5.3.3)(webpack@5.90.3) - '@umijs/core': 4.1.2 + '@umijs/ast': 4.1.8 + '@umijs/babel-preset-umi': 4.1.8 + '@umijs/bundler-esbuild': 4.1.8 + '@umijs/bundler-utils': 4.1.8 + '@umijs/bundler-vite': 4.1.8(@types/node@20.5.1)(postcss@8.4.38)(sass@1.74.1) + '@umijs/bundler-webpack': 4.1.8(typescript@5.4.5)(webpack@5.91.0) + '@umijs/core': 4.1.8 '@umijs/did-you-know': 1.0.3 '@umijs/es-module-parser': 0.0.7 '@umijs/history': 5.3.1 - '@umijs/mfsu': 4.1.2 - '@umijs/plugin-run': 4.1.2 - '@umijs/renderer-react': 4.1.2(react-dom@18.1.0)(react@18.1.0) - '@umijs/server': 4.1.2 + '@umijs/mfsu': 4.1.8 + '@umijs/plugin-run': 4.1.8 + '@umijs/renderer-react': 4.1.8(react-dom@18.1.0)(react@18.1.0) + '@umijs/server': 4.1.8 '@umijs/ui': 3.0.1 - '@umijs/utils': 4.1.2 - '@umijs/zod2ts': 4.1.2 + '@umijs/utils': 4.1.8 + '@umijs/zod2ts': 4.1.8 babel-plugin-dynamic-import-node: 2.3.3 click-to-react-component: 1.1.0(@types/react@18.2.31)(react-dom@18.1.0)(react@18.1.0) core-js: 3.34.0 current-script-polyfill: 1.0.0 enhanced-resolve: 5.9.3 fast-glob: 3.2.12 - html-webpack-plugin: 5.5.0(webpack@5.90.3) + html-webpack-plugin: 5.5.0(webpack@5.91.0) less-plugin-resolve: 1.0.2 path-to-regexp: 1.7.0 - postcss: 8.4.35 - postcss-prefix-selector: 1.16.0(postcss@8.4.35) + postcss: 8.4.38 + postcss-prefix-selector: 1.16.0(postcss@8.4.38) react: 18.1.0 react-dom: 18.1.0(react@18.1.0) react-router: 6.3.0(react@18.1.0) @@ -4647,6 +4364,7 @@ packages: - '@types/node' - '@types/react' - '@types/webpack' + - lightningcss - rollup - sass - sockjs-client @@ -4662,7 +4380,7 @@ packages: - webpack-plugin-serve dev: true - /@umijs/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(webpack@5.90.3): + /@umijs/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(webpack@5.91.0): resolution: {integrity: sha512-RtFvB+/GmjRhpHcqNgnw8iWZpTlxOnmNxi8eDcecxMmxmSgeDj25LV0jr4Q6rOhv3GTIfVGBhkwz+khGT5tfmg==} engines: {node: '>= 10.13'} peerDependencies: @@ -4690,19 +4408,19 @@ packages: dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.36.0 + core-js-pure: 3.36.1 error-stack-parser: 2.1.4 find-up: 5.0.0 - html-entities: 2.4.0 + html-entities: 2.5.2 loader-utils: 2.0.4 react-refresh: 0.14.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.90.3 + webpack: 5.91.0 dev: true - /@umijs/renderer-react@4.1.2(react-dom@18.1.0)(react@18.1.0): - resolution: {integrity: sha512-zAZ1yU/PTkit/Nl0JsArS8ZwWyhmFpMEMRKpFZqw1rYieXTlNGvZTm2twJj+rNzsxwoNmW7E24glJGjpm1CunA==} + /@umijs/renderer-react@4.1.8(react-dom@18.1.0)(react@18.1.0): + resolution: {integrity: sha512-47Ac4opq6b/nUleYvVJBpLwPwfA6rvzAzjyTtF3XqhUCmxfJDbBoT/2B8fbjVFtP0EakD5OQlLlN2FieZ4hW+w==} peerDependencies: react: '>=16.8' react-dom: '>=16.8' @@ -4716,8 +4434,8 @@ packages: react-router-dom: 6.3.0(react-dom@18.1.0)(react@18.1.0) dev: true - /@umijs/renderer-react@4.1.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zAZ1yU/PTkit/Nl0JsArS8ZwWyhmFpMEMRKpFZqw1rYieXTlNGvZTm2twJj+rNzsxwoNmW7E24glJGjpm1CunA==} + /@umijs/renderer-react@4.1.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-47Ac4opq6b/nUleYvVJBpLwPwfA6rvzAzjyTtF3XqhUCmxfJDbBoT/2B8fbjVFtP0EakD5OQlLlN2FieZ4hW+w==} peerDependencies: react: '>=16.8' react-dom: '>=16.8' @@ -4731,10 +4449,10 @@ packages: react-router-dom: 6.3.0(react-dom@18.2.0)(react@18.2.0) dev: true - /@umijs/server@4.1.2: - resolution: {integrity: sha512-1oUWhF4qW2T4BqYKRTtZm+REJpDzPdQ3oeXubAIpFqek5Z0ABKcp7/mkH68AVRztsag0t9cXuBN/AL5GkvjXww==} + /@umijs/server@4.1.8: + resolution: {integrity: sha512-JQkmtZMZLLTMk/clvX8jGpNQm1bSfXCHcGaVHw/X1/O6bffXZcud79ksxjnqGKudHdLtfQWmIgYLC2cnKtXmfw==} dependencies: - '@umijs/bundler-utils': 4.1.2 + '@umijs/bundler-utils': 4.1.8 history: 5.3.0 react: 18.1.0 react-dom: 18.1.0(react@18.1.0) @@ -4743,14 +4461,14 @@ packages: - supports-color dev: true - /@umijs/test@4.1.2(@babel/core@7.23.9): - resolution: {integrity: sha512-mmP0bmvYx/gHIgq8mxbMJSgLxBKh5Tp2ZiuK68aoqlBWSBXU2xB9LM4KGno3Or9vihSFAUzK1wWEcVj7CQCY4w==} + /@umijs/test@4.1.8(@babel/core@7.24.4): + resolution: {integrity: sha512-Sp/8tFeNtIR/T8U4LIyxHkY31g7s0jxTHdTbDZNGuM16lV8UqTUJQTVv0BYo1EpT2BPRzTFQNEsHIGdaXOoBjQ==} dependencies: - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.4) '@jest/types': 27.5.1 - '@umijs/bundler-utils': 4.1.2 - '@umijs/utils': 4.1.2 - babel-jest: 29.7.0(@babel/core@7.23.9) + '@umijs/bundler-utils': 4.1.8 + '@umijs/utils': 4.1.8 + babel-jest: 29.7.0(@babel/core@7.24.4) esbuild: 0.17.19 identity-obj-proxy: 3.0.0 isomorphic-unfetch: 4.0.2 @@ -4763,15 +4481,15 @@ packages: resolution: {integrity: sha512-zcz37AJH0xt/6XVVbyO/hmsK9Hq4vH23HZ4KYVi5A8rbM9KeJkJigTS7ELOdArawZhVNGe+h3a5Oixs4a2QsWw==} dev: true - /@umijs/utils@4.1.2: - resolution: {integrity: sha512-YBzN7Zn3595W93t8XPh8IbKMInr6NecXPtHVD+L7fJFv5oCrzHxCkvSZBTmTXuFMyW+9rHT0TlsXM4gqQ1n18Q==} + /@umijs/utils@4.1.8: + resolution: {integrity: sha512-438dwza66i13H8EYhJuvJcvWGR9Ij5eUSqTaF0XEq+vL8YUCx3cOeYdE/oIrunxDIbNFLmLaG0FtTcEEvK4oeA==} dependencies: chokidar: 3.5.3 pino: 7.11.0 dev: true - /@umijs/zod2ts@4.1.2: - resolution: {integrity: sha512-h5P45gXxTVWdDeIuB/EQ9lDqJgPrm747Ox77WvK1ooG+jN4xBB6uoH5slCLenl3ig+M1nRLIadVsD/8kjrWWHw==} + /@umijs/zod2ts@4.1.8: + resolution: {integrity: sha512-aJEkpNFMk9U1JrHmbZ+ZYDpikAiaq/hXo1nEOyoodb+dKdLdGCgn/ZcPA1Pv5tjatKpE2bBffQrEYla4TDHvfg==} dev: true /@ungap/structured-clone@1.2.0: @@ -4782,172 +4500,178 @@ packages: hasBin: true dev: true - /@vitejs/plugin-react@4.0.0(vite@4.3.1): + /@vitejs/plugin-react@4.0.0(vite@4.5.2): resolution: {integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4) react-refresh: 0.14.0 - vite: 4.3.1(@types/node@20.5.1)(less@4.1.3)(sass@1.71.1) + vite: 4.5.2(@types/node@20.5.1)(less@4.1.3)(sass@1.74.1) transitivePeerDependencies: - supports-color dev: true - /@vitest/coverage-v8@1.3.1(vitest@1.3.1): - resolution: {integrity: sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg==} + /@vitest/coverage-v8@1.4.0(vitest@1.4.0): + resolution: {integrity: sha512-4hDGyH1SvKpgZnIByr9LhGgCEuF9DKM34IBLCC/fVfy24Z3+PZ+Ii9hsVBsHvY1umM1aGPEjceRkzxCfcQ10wg==} peerDependencies: - vitest: 1.3.1 + vitest: 1.4.0 dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 debug: 4.3.4 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 + istanbul-lib-source-maps: 5.0.4 istanbul-reports: 3.1.7 - magic-string: 0.30.7 + magic-string: 0.30.9 magicast: 0.3.3 picocolors: 1.0.0 std-env: 3.7.0 + strip-literal: 2.1.0 test-exclude: 6.0.0 v8-to-istanbul: 9.2.0 - vitest: 1.3.1(@types/node@20.5.1)(jsdom@22.1.0) + vitest: 1.4.0(@types/node@20.5.1)(jsdom@22.1.0) transitivePeerDependencies: - supports-color dev: true - /@vitest/expect@1.3.1: - resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} + /@vitest/expect@1.4.0: + resolution: {integrity: sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==} dependencies: - '@vitest/spy': 1.3.1 - '@vitest/utils': 1.3.1 + '@vitest/spy': 1.4.0 + '@vitest/utils': 1.4.0 chai: 4.4.1 + dev: true - /@vitest/runner@1.3.1: - resolution: {integrity: sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==} + /@vitest/runner@1.4.0: + resolution: {integrity: sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==} dependencies: - '@vitest/utils': 1.3.1 + '@vitest/utils': 1.4.0 p-limit: 5.0.0 pathe: 1.1.2 + dev: true - /@vitest/snapshot@1.3.1: - resolution: {integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==} + /@vitest/snapshot@1.4.0: + resolution: {integrity: sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==} dependencies: - magic-string: 0.30.7 + magic-string: 0.30.9 pathe: 1.1.2 pretty-format: 29.7.0 + dev: true - /@vitest/spy@1.3.1: - resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} + /@vitest/spy@1.4.0: + resolution: {integrity: sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==} dependencies: tinyspy: 2.2.1 + dev: true - /@vitest/utils@1.3.1: - resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} + /@vitest/utils@1.4.0: + resolution: {integrity: sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==} dependencies: diff-sequences: 29.6.3 estree-walker: 3.0.3 loupe: 2.3.7 pretty-format: 29.7.0 + dev: true - /@vue/compiler-core@3.4.20: - resolution: {integrity: sha512-l7M+xUuL8hrGtRLkrf+62d9zucAdgqNBTbJ/NufCOIuJQhauhfyAKH9ra/qUctCXcULwmclGAVpvmxjbBO30qg==, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.20.tgz} + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} dependencies: - '@babel/parser': 7.23.9 - '@vue/shared': 3.4.20 + '@babel/parser': 7.24.4 + '@vue/shared': 3.4.21 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true - /@vue/compiler-dom@3.4.20: - resolution: {integrity: sha512-/cSBGL79HFBYgDnqCNKErOav3bPde3n0sJwJM2Z09rXlkiowV/2SG1tgDAiWS1CatS4Cvo0o74e1vNeCK1R3RA==, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.20.tgz} + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} dependencies: - '@vue/compiler-core': 3.4.20 - '@vue/shared': 3.4.20 + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 dev: true - /@vue/compiler-sfc@3.4.20: - resolution: {integrity: sha512-nPuTZz0yxTPzjyYe+9nQQsFYImcz/57UX8N3jyhl5oIUUs2jqqAMaULsAlJwve3qNYfjQzq0bwy3pqJrN9ecZw==, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.20.tgz} + /@vue/compiler-sfc@3.4.21: + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} dependencies: - '@babel/parser': 7.23.9 - '@vue/compiler-core': 3.4.20 - '@vue/compiler-dom': 3.4.20 - '@vue/compiler-ssr': 3.4.20 - '@vue/shared': 3.4.20 + '@babel/parser': 7.24.4 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 estree-walker: 2.0.2 - magic-string: 0.30.7 - postcss: 8.4.35 - source-map-js: 1.0.2 + magic-string: 0.30.9 + postcss: 8.4.38 + source-map-js: 1.2.0 dev: true - /@vue/compiler-ssr@3.4.20: - resolution: {integrity: sha512-b3gFQPiHLvI12C56otzBPpQhZ5kgkJ5RMv/zpLjLC2BIFwX5GktDqYQ7xg0Q2grP6uFI8al3beVKvAVxFtXmIg==, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.20.tgz} + /@vue/compiler-ssr@3.4.21: + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} dependencies: - '@vue/compiler-dom': 3.4.20 - '@vue/shared': 3.4.20 + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 dev: true - /@vue/reactivity@3.4.20: - resolution: {integrity: sha512-P5LJcxUkG6inlHr6MHVA4AVFAmRYJQ7ONGWJILNjMjoYuEXFhYviSCb9BEMyszSG/1kWCZbtWQlKSLasFRpThw==, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.20.tgz} + /@vue/reactivity@3.4.21: + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} dependencies: - '@vue/shared': 3.4.20 + '@vue/shared': 3.4.21 dev: true - /@vue/runtime-core@3.4.20: - resolution: {integrity: sha512-MPvsQpGAxoBqLHjqopt4YPtUYBpq0K6oAWDTwIR1CTNZ3y9O/J2ZVh+i2JpxKNYwANJBiZ20O99NE20uisB7xw==, tarball: https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.20.tgz} + /@vue/runtime-core@3.4.21: + resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} dependencies: - '@vue/reactivity': 3.4.20 - '@vue/shared': 3.4.20 + '@vue/reactivity': 3.4.21 + '@vue/shared': 3.4.21 dev: true - /@vue/runtime-dom@3.4.20: - resolution: {integrity: sha512-OkbPVP69H+8m74543zMAAx/LIkajxufYyow41gc0s5iF0uplT5uTQ4llDYu1GeJZEI8wjL5ueiPQruk4qwOMmA==, tarball: https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.20.tgz} + /@vue/runtime-dom@3.4.21: + resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} dependencies: - '@vue/runtime-core': 3.4.20 - '@vue/shared': 3.4.20 + '@vue/runtime-core': 3.4.21 + '@vue/shared': 3.4.21 csstype: 3.1.3 dev: true - /@vue/server-renderer@3.4.20(vue@3.4.20): - resolution: {integrity: sha512-w3VH2GuwxQHA6pJo/HCV22OfVC8Mw4oeHQM+vKeqtRK0OPE1Wilnh+P/SDVGGxPjJsGmyfphi0dbw8UKZQJH9w==, tarball: https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.20.tgz} + /@vue/server-renderer@3.4.21(vue@3.4.21): + resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} peerDependencies: - vue: 3.4.20 + vue: 3.4.21 dependencies: - '@vue/compiler-ssr': 3.4.20 - '@vue/shared': 3.4.20 - vue: 3.4.20(typescript@5.3.3) + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + vue: 3.4.21(typescript@5.4.5) dev: true - /@vue/shared@3.4.20: - resolution: {integrity: sha512-KTEngal0aiUvNJ6I1Chk5Ew5XqChsFsxP4GKAYXWb99zKJWjNU72p2FWEOmZWHxHcqtniOJsgnpd3zizdpfEag==, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.4.20.tgz} + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} dev: true - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==, tarball: https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz} + /@webassemblyjs/ast@1.12.1: + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 dev: true /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==, tarball: https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz} + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} dev: true /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz} + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} dev: true - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz} + /@webassemblyjs/helper-buffer@1.12.1: + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} dev: true /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz} + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 @@ -4955,70 +4679,70 @@ packages: dev: true /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz} + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} dev: true - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==, tarball: https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz} + /@webassemblyjs/helper-wasm-section@1.12.1: + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 dev: true /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==, tarball: https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz} + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==, tarball: https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz} + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} dependencies: '@xtuc/long': 4.2.2 dev: true /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==, tarball: https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz} + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} dev: true - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz} + /@webassemblyjs/wasm-edit@1.12.1: + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 dev: true - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz} + /@webassemblyjs/wasm-gen@1.12.1: + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz} + /@webassemblyjs/wasm-opt@1.12.1: + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 dev: true - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==, tarball: https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz} + /@webassemblyjs/wasm-parser@1.12.1: + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-api-error': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 @@ -5026,19 +4750,19 @@ packages: '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==, tarball: https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz} + /@webassemblyjs/wast-printer@1.12.1: + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 dev: true /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, tarball: https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz} + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} dev: true /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, tarball: https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz} + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true /JSONStream@1.3.5: @@ -5052,6 +4776,7 @@ packages: /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead + dev: true /abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -5061,7 +4786,7 @@ packages: dev: true /acorn-import-assertions@1.9.0(acorn@8.11.3): - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==, tarball: https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz} + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: @@ -5079,11 +4804,13 @@ packages: /acorn-walk@8.3.2: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} + dev: true /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true + dev: true /agent-base@4.3.0: resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==} @@ -5099,9 +4826,10 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: debug: 4.3.4 @@ -5124,7 +4852,7 @@ packages: dev: true /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, tarball: https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz} + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: clean-stack: 2.2.0 @@ -5139,47 +4867,25 @@ packages: indent-string: 5.0.0 dev: true - /ahooks-v3-count@1.0.0: - resolution: {integrity: sha512-V7uUvAwnimu6eh/PED4mCDjE7tokeZQLKlxg9lCTMPhN+NjsSbtdacByVlR1oluXQzD3MOw55wylDmQo4+S9ZQ==} - dev: false - - /ahooks@3.7.10(react@18.2.0): - resolution: {integrity: sha512-/HLYif7sFA/5qSuWKrwvjDbf3bq+sdaMrUWS7XGCDRWdC2FrG/i+u5LZdakMYc6UIgJTMQ7tGiJCV7sdU4kSIw==} + /ahooks@3.7.11(react@18.2.0): + resolution: {integrity: sha512-BfSq7HJ9wk/7a2vX7WbLdwzHyQHmbNe21ipX1PfIzssXIzQfAl79WVJ9GjZaqNl4PFPsJusj/Xjg2OF+gIgGaQ==} engines: {node: '>=8.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 dayjs: 1.11.10 intersection-observer: 0.12.2 js-cookie: 2.2.1 lodash: 4.17.21 react: 18.2.0 + react-fast-compare: 3.2.2 resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 tslib: 2.6.2 dev: true - /ahooks@3.7.8(react@18.2.0): - resolution: {integrity: sha512-e/NMlQWoCjaUtncNFIZk3FG1ImSkV/JhScQSkTqnftakRwdfZWSw6zzoWSG9OMYqPNs2MguDYBUFFC6THelWXA==} - engines: {node: '>=8.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@babel/runtime': 7.23.9 - '@types/js-cookie': 2.2.7 - ahooks-v3-count: 1.0.0 - dayjs: 1.11.10 - intersection-observer: 0.12.2 - js-cookie: 2.2.1 - lodash: 4.17.21 - react: 18.2.0 - resize-observer-polyfill: 1.5.1 - screenfull: 5.2.0 - tslib: 2.6.2 - dev: false - - /ai@2.2.37(react@18.2.0)(solid-js@1.8.15)(svelte@4.2.12)(vue@3.4.20): + /ai@2.2.37(react@18.2.0)(solid-js@1.8.16)(svelte@4.2.13)(vue@3.4.21): resolution: {integrity: sha512-JIYm5N1muGVqBqWnvkt29FmXhESoO5TcDxw74OE41SsM+uIou6NPDDs0XWb/ABcd1gmp6k5zym64KWMPM2xm0A==} engines: {node: '>=14.6'} peerDependencies: @@ -5200,14 +4906,14 @@ packages: eventsource-parser: 1.0.0 nanoid: 3.3.6 react: 18.2.0 - solid-js: 1.8.15 - solid-swr-store: 0.10.7(solid-js@1.8.15)(swr-store@0.10.6) - sswr: 2.0.0(svelte@4.2.12) - svelte: 4.2.12 + solid-js: 1.8.16 + solid-swr-store: 0.10.7(solid-js@1.8.16)(swr-store@0.10.6) + sswr: 2.0.0(svelte@4.2.13) + svelte: 4.2.13 swr: 2.2.0(react@18.2.0) swr-store: 0.10.6 - swrv: 1.0.4(vue@3.4.20) - vue: 3.4.20(typescript@5.3.3) + swrv: 1.0.4(vue@3.4.21) + vue: 3.4.21(typescript@5.4.5) dev: true /ajv-keywords@3.5.2(ajv@6.12.6): @@ -5256,12 +4962,11 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.21.3 + dev: true - /ansi-escapes@6.2.0: - resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} + /ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} engines: {node: '>=14.16'} - dependencies: - type-fest: 3.13.1 dev: true /ansi-html-community@0.0.8: @@ -5283,6 +4988,7 @@ packages: /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + dev: true /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} @@ -5294,16 +5000,19 @@ packages: engines: {node: '>=4'} dependencies: color-convert: 1.9.3 + dev: true /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + dev: true /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} @@ -5314,78 +5023,80 @@ packages: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} dev: true - /antd-style@3.6.1(@types/react@18.2.31)(antd@5.14.2)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-KpKXiAIV3CAe6TfSh/m6ET2vGuhAof7qfqeaouh5WZ0JDl5jDXXSFPeEfqvZuHAckTl+A0NzArvIHKgKt/NZ9g==} + /antd-style@3.6.2(@types/react@18.2.31)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-p6tRV63+U9yp3T3DB4ope1Xs3VdkhNsPD+yiZMJnR57dclPQPtrNnrGBmdGwjWYP1HlzB1XS4JHqFAyMjvObHA==} peerDependencies: antd: '>=5.8.1' react: '>=18' dependencies: - '@ant-design/cssinjs': 1.18.4(react-dom@18.2.0)(react@18.2.0) - '@babel/runtime': 7.23.9 + '@ant-design/cssinjs': 1.19.1(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 '@emotion/cache': 11.11.0 '@emotion/css': 11.11.2 '@emotion/react': 11.11.4(@types/react@18.2.31)(react@18.2.0) - '@emotion/serialize': 1.1.3 + '@emotion/serialize': 1.1.4 '@emotion/server': 11.11.0(@emotion/css@11.11.2) '@emotion/utils': 1.2.1 - antd: 5.14.2(react-dom@18.2.0)(react@18.2.0) + antd: 5.16.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 use-merge-value: 1.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' - react-dom + dev: true - /antd@5.14.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ur0oBI9U7hAeON4ZRs1cAF1suIpTR+uj3YliTZacWkiVxNTZYPaaTdnLuAZDRMT9P2IZ007dCQTqxn5t1Z+Dxw==} + /antd@5.16.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-XAlLRrgYV+nj9FHnkXEPS6HNcKcluEa8v44e7Cixjlp8aOXRhUI6IfZaKpc2MPGjQ+06rp62/dsxOUNJW9kfLA==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: '@ant-design/colors': 7.0.2 - '@ant-design/cssinjs': 1.18.4(react-dom@18.2.0)(react@18.2.0) - '@ant-design/icons': 5.3.0(react-dom@18.2.0)(react@18.2.0) - '@ant-design/react-slick': 1.0.2(react@18.2.0) + '@ant-design/cssinjs': 1.19.1(react-dom@18.2.0)(react@18.2.0) + '@ant-design/icons': 5.3.6(react-dom@18.2.0)(react@18.2.0) + '@ant-design/react-slick': 1.1.2(react@18.2.0) + '@babel/runtime': 7.24.4 '@ctrl/tinycolor': 3.6.1 - '@rc-component/color-picker': 1.5.2(react-dom@18.2.0)(react@18.2.0) + '@rc-component/color-picker': 1.5.3(react-dom@18.2.0)(react@18.2.0) '@rc-component/mutate-observer': 1.1.0(react-dom@18.2.0)(react@18.2.0) - '@rc-component/tour': 1.12.3(react-dom@18.2.0)(react@18.2.0) - '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) + '@rc-component/tour': 1.14.2(react-dom@18.2.0)(react@18.2.0) + '@rc-component/trigger': 2.1.1(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 copy-to-clipboard: 3.3.3 dayjs: 1.11.10 qrcode.react: 3.1.0(react@18.2.0) - rc-cascader: 3.21.2(react-dom@18.2.0)(react@18.2.0) - rc-checkbox: 3.1.0(react-dom@18.2.0)(react@18.2.0) - rc-collapse: 3.7.2(react-dom@18.2.0)(react@18.2.0) - rc-dialog: 9.3.4(react-dom@18.2.0)(react@18.2.0) - rc-drawer: 7.0.0(react-dom@18.2.0)(react@18.2.0) - rc-dropdown: 4.1.0(react-dom@18.2.0)(react@18.2.0) - rc-field-form: 1.41.0(react-dom@18.2.0)(react@18.2.0) - rc-image: 7.5.1(react-dom@18.2.0)(react@18.2.0) - rc-input: 1.4.3(react-dom@18.2.0)(react@18.2.0) + rc-cascader: 3.24.1(react-dom@18.2.0)(react@18.2.0) + rc-checkbox: 3.2.0(react-dom@18.2.0)(react@18.2.0) + rc-collapse: 3.7.3(react-dom@18.2.0)(react@18.2.0) + rc-dialog: 9.4.0(react-dom@18.2.0)(react@18.2.0) + rc-drawer: 7.1.0(react-dom@18.2.0)(react@18.2.0) + rc-dropdown: 4.2.0(react-dom@18.2.0)(react@18.2.0) + rc-field-form: 1.44.0(react-dom@18.2.0)(react@18.2.0) + rc-image: 7.6.0(react-dom@18.2.0)(react@18.2.0) + rc-input: 1.4.5(react-dom@18.2.0)(react@18.2.0) rc-input-number: 9.0.0(react-dom@18.2.0)(react@18.2.0) - rc-mentions: 2.10.1(react-dom@18.2.0)(react@18.2.0) - rc-menu: 9.12.4(react-dom@18.2.0)(react@18.2.0) + rc-mentions: 2.11.1(react-dom@18.2.0)(react@18.2.0) + rc-menu: 9.13.0(react-dom@18.2.0)(react@18.2.0) rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-notification: 5.3.0(react-dom@18.2.0)(react@18.2.0) + rc-notification: 5.4.0(react-dom@18.2.0)(react@18.2.0) rc-pagination: 4.0.4(react-dom@18.2.0)(react@18.2.0) - rc-picker: 4.1.5(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0) - rc-progress: 3.5.1(react-dom@18.2.0)(react@18.2.0) + rc-picker: 4.3.1(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0) + rc-progress: 4.0.0(react-dom@18.2.0)(react@18.2.0) rc-rate: 2.12.0(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) rc-segmented: 2.3.0(react-dom@18.2.0)(react@18.2.0) - rc-select: 14.11.0(react-dom@18.2.0)(react@18.2.0) + rc-select: 14.13.1(react-dom@18.2.0)(react@18.2.0) rc-slider: 10.5.0(react-dom@18.2.0)(react@18.2.0) rc-steps: 6.0.1(react-dom@18.2.0)(react@18.2.0) rc-switch: 4.1.0(react-dom@18.2.0)(react@18.2.0) - rc-table: 7.39.0(react-dom@18.2.0)(react@18.2.0) - rc-tabs: 14.0.0(react-dom@18.2.0)(react@18.2.0) + rc-table: 7.45.4(react-dom@18.2.0)(react@18.2.0) + rc-tabs: 14.1.1(react-dom@18.2.0)(react@18.2.0) rc-textarea: 1.6.3(react-dom@18.2.0)(react@18.2.0) - rc-tooltip: 6.1.3(react-dom@18.2.0)(react@18.2.0) + rc-tooltip: 6.2.0(react-dom@18.2.0)(react@18.2.0) rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0) - rc-tree-select: 5.17.0(react-dom@18.2.0)(react@18.2.0) + rc-tree-select: 5.19.0(react-dom@18.2.0)(react@18.2.0) rc-upload: 4.5.2(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.1.0 @@ -5401,6 +5112,7 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 + dev: true /aproba@1.2.0: resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} @@ -5408,6 +5120,7 @@ packages: /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -5417,6 +5130,7 @@ packages: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 + dev: true /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -5426,11 +5140,12 @@ packages: resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} dev: true - /aria-hidden@1.2.3: - resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + /aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} dependencies: tslib: 2.6.2 + dev: true /aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} @@ -5442,6 +5157,7 @@ packages: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: dequal: 2.0.3 + dev: true /array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} @@ -5455,19 +5171,21 @@ packages: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true /array-tree-filter@2.1.0: resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} + requiresBuild: true /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} @@ -5480,7 +5198,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true @@ -5490,18 +5208,20 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true - /array.prototype.reduce@1.0.6: - resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} + /array.prototype.reduce@1.0.7: + resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-array-method-boxes-properly: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 is-string: 1.0.7 dev: true @@ -5510,7 +5230,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 dev: true @@ -5522,7 +5242,7 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 @@ -5534,13 +5254,12 @@ packages: engines: {node: '>=0.10.0'} dev: true - /asn1.js@5.4.1: - resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + /asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} dependencies: bn.js: 4.12.0 inherits: 2.0.4 minimalistic-assert: 1.0.1 - safer-buffer: 2.1.2 dev: true /assert@1.5.1: @@ -5552,6 +5271,7 @@ packages: /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} @@ -5565,15 +5285,11 @@ packages: /async-validator@4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} - - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true + requiresBuild: true /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, tarball: https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz} + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} @@ -5586,19 +5302,19 @@ packages: engines: {node: '>=8.0.0'} dev: true - /autoprefixer@10.4.17(postcss@8.4.35): - resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + /autoprefixer@10.4.19(postcss@8.4.38): + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001608 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true @@ -5620,37 +5336,38 @@ packages: dev: true /axobject-query@4.0.0: - resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==, tarball: https://registry.npmmirror.com/axobject-query/-/axobject-query-4.0.0.tgz} + resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} dependencies: dequal: 2.0.3 dev: true - /babel-jest@29.7.0(@babel/core@7.23.9): + /babel-jest@29.7.0(@babel/core@7.24.4): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.9) + babel-preset-jest: 29.6.3(@babel/core@7.24.4) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color + dev: true /babel-plugin-antd-style@1.0.4: resolution: {integrity: sha512-Lqs8T923HzSyH28hp3x1SzcmGO9nC376rBeKX2uBBPpA1ruR6nrvLpz2Lw4nJ3zDKj8cxPVoIp/usubWaRurXQ==} dependencies: - '@babel/generator': 7.23.6 - '@babel/parser': 7.23.9 - '@babel/runtime': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 - '@types/node': 18.19.19 + '@babel/generator': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/runtime': 7.24.4 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + '@types/node': 18.19.31 transitivePeerDependencies: - supports-color dev: true @@ -5665,30 +5382,33 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color + dev: true /babel-plugin-jest-hoist@29.6.3: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 + dev: true /babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 cosmiconfig: 7.1.0 resolve: 1.22.8 + dev: true /babel-plugin-module-resolver@4.1.0: resolution: {integrity: sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==} @@ -5709,49 +5429,48 @@ packages: traverse: 0.6.6 dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.9): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - - /babel-preset-jest@29.6.3(@babel/core@7.23.9): + '@babel/core': 7.24.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.24.4): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + dev: true /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true /balanced-match@2.0.0: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} dev: true - /base-64@0.1.0: - resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} - dev: true - /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true @@ -5769,8 +5488,8 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true @@ -5803,7 +5522,7 @@ packages: dev: true /bottleneck@2.19.5: - resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==, tarball: https://registry.npmmirror.com/bottleneck/-/bottleneck-2.19.5.tgz} + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} dev: true /boxen@1.3.0: @@ -5831,6 +5550,7 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: true /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -5843,6 +5563,7 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 + dev: true /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -5883,18 +5604,19 @@ packages: randombytes: 2.1.0 dev: true - /browserify-sign@4.2.2: - resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} - engines: {node: '>= 4'} + /browserify-sign@4.2.3: + resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} + engines: {node: '>= 0.12'} dependencies: bn.js: 5.2.1 browserify-rsa: 4.1.0 create-hash: 1.2.0 create-hmac: 1.1.7 - elliptic: 6.5.4 + elliptic: 6.5.5 + hash-base: 3.0.4 inherits: 2.0.4 - parse-asn1: 5.1.6 - readable-stream: 3.6.2 + parse-asn1: 5.1.7 + readable-stream: 2.3.8 safe-buffer: 5.2.1 dev: true @@ -5909,15 +5631,17 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001591 - electron-to-chromium: 1.4.685 + caniuse-lite: 1.0.30001608 + electron-to-chromium: 1.4.733 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 + dev: true /buffer-alloc-unsafe@1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} @@ -5936,9 +5660,11 @@ packages: /buffer-from@0.1.2: resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==} + dev: true /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} @@ -5970,6 +5696,7 @@ packages: /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + dev: true /cacache@10.0.4: resolution: {integrity: sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==} @@ -6015,12 +5742,13 @@ packages: es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 - set-function-length: 1.2.1 + set-function-length: 1.2.2 dev: true /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + dev: true /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} @@ -6056,13 +5784,16 @@ packages: /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} + dev: true /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} + dev: true - /caniuse-lite@1.0.30001591: - resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} + /caniuse-lite@1.0.30001608: + resolution: {integrity: sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==} + dev: true /capture-stack-trace@1.0.2: resolution: {integrity: sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==} @@ -6091,6 +5822,7 @@ packages: loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 + dev: true /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -6099,6 +5831,7 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + dev: true /chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} @@ -6106,7 +5839,7 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: false + dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -6114,6 +5847,7 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true /chalk@5.3.0: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} @@ -6123,6 +5857,7 @@ packages: /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} + dev: true /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -6147,20 +5882,16 @@ packages: /character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - dev: true /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /charenc@0.0.2: - resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - dev: true - /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: get-func-name: 2.0.2 + dev: true /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} @@ -6201,7 +5932,7 @@ packages: dev: true /chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, tarball: https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz} + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true @@ -6212,6 +5943,7 @@ packages: /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + dev: true /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} @@ -6222,10 +5954,7 @@ packages: /cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - - /classcat@5.0.4: - resolution: {integrity: sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g==} - dev: false + dev: true /classnames@2.3.2: resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} @@ -6242,7 +5971,7 @@ packages: dev: true /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, tarball: https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz} + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true @@ -6277,8 +6006,8 @@ packages: engines: {node: '>=4'} dev: true - /cli-table3@0.6.3: - resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + /cli-table3@0.6.4: + resolution: {integrity: sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==} engines: {node: 10.* || >= 12.*} dependencies: string-width: 4.2.3 @@ -6319,15 +6048,12 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - - /clsx@1.2.1: - resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} - engines: {node: '>=6'} - dev: false + dev: true /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true /coa@2.0.2: resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} @@ -6339,7 +6065,7 @@ packages: dev: true /code-red@1.0.4: - resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==, tarball: https://registry.npmmirror.com/code-red/-/code-red-1.0.4.tgz} + resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 '@types/estree': 1.0.5 @@ -6391,29 +6117,35 @@ packages: /collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 + dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true /color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 + dev: true /color@3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} @@ -6422,14 +6154,6 @@ packages: color-string: 1.9.1 dev: true - /color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - dev: false - /colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} dev: true @@ -6444,10 +6168,11 @@ packages: dev: true /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, tarball: https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz} + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 + dev: true /comma-separated-tokens@1.0.8: resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} @@ -6473,9 +6198,10 @@ packages: /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + dev: true /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==, tarball: https://registry.npmmirror.com/commander/-/commander-9.5.0.tgz} + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} requiresBuild: true dev: true @@ -6523,9 +6249,11 @@ packages: /compute-scroll-into-view@3.1.0: resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} + requiresBuild: true /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} @@ -6635,9 +6363,11 @@ packages: /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true /copy-anything@2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} @@ -6661,8 +6391,8 @@ packages: dependencies: toggle-selection: 1.0.6 - /core-js-pure@3.36.0: - resolution: {integrity: sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==} + /core-js-pure@3.36.1: + resolution: {integrity: sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==} requiresBuild: true dev: true @@ -6673,6 +6403,7 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true /cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} @@ -6682,7 +6413,7 @@ packages: vary: 1.1.2 dev: true - /cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.3.3): + /cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.4.5): resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} engines: {node: '>=v14.21.3'} peerDependencies: @@ -6692,9 +6423,9 @@ packages: typescript: '>=4' dependencies: '@types/node': 20.5.1 - cosmiconfig: 8.3.6(typescript@5.3.3) - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) - typescript: 5.3.3 + cosmiconfig: 8.3.6(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.4.5) + typescript: 5.4.5 dev: true /cosmiconfig@7.1.0: @@ -6706,8 +6437,9 @@ packages: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 + dev: true - /cosmiconfig@8.3.6(typescript@5.3.3): + /cosmiconfig@8.3.6(typescript@5.4.5): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -6720,14 +6452,14 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: bn.js: 4.12.0 - elliptic: 6.5.4 + elliptic: 6.5.5 dev: true /create-error-class@3.0.2: @@ -6775,9 +6507,11 @@ packages: - babel-plugin-macros - supports-color - ts-node + dev: true /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} @@ -6802,16 +6536,13 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - - /crypt@0.0.2: - resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} dev: true /crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: browserify-cipher: 1.0.1 - browserify-sign: 4.2.2 + browserify-sign: 4.2.3 create-ecdh: 4.0.4 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -6835,15 +6566,15 @@ packages: type-fest: 1.4.0 dev: true - /css-blank-pseudo@3.0.3(postcss@8.4.35): + /css-blank-pseudo@3.0.3(postcss@8.4.38): resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true /css-functions-list@3.2.1: @@ -6851,42 +6582,42 @@ packages: engines: {node: '>=12 || >=16'} dev: true - /css-has-pseudo@3.0.4(postcss@8.4.35): + /css-has-pseudo@3.0.4(postcss@8.4.38): resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /css-loader@6.7.1(webpack@5.90.3): + /css-loader@6.7.1(webpack@5.91.0): resolution: {integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.35) - postcss-modules-scope: 3.1.1(postcss@8.4.35) - postcss-modules-values: 4.0.0(postcss@8.4.35) + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) + postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 semver: 7.6.0 - webpack: 5.90.3 + webpack: 5.91.0 dev: true - /css-prefers-color-scheme@6.0.3(postcss@8.4.35): + /css-prefers-color-scheme@6.0.3(postcss@8.4.38): resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} engines: {node: ^12 || ^14 || >=16} hasBin: true peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /css-select-base-adapter@0.1.1: @@ -6933,7 +6664,7 @@ packages: engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} dependencies: mdn-data: 2.0.30 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /css-what@3.4.2: @@ -6948,7 +6679,7 @@ packages: /css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: false + dev: true /css@3.0.0: resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==} @@ -6980,6 +6711,7 @@ packages: engines: {node: '>=14'} dependencies: rrweb-cssom: 0.6.0 + dev: true /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -6999,71 +6731,6 @@ packages: resolution: {integrity: sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==} dev: true - /d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - dev: false - - /d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - dev: false - - /d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - dev: false - - /d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - dev: false - - /d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - dependencies: - d3-color: 3.1.0 - dev: false - - /d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - dev: false - - /d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - dev: false - - /d3-transition@3.0.1(d3-selection@3.0.0): - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - dev: false - - /d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - dev: false - /dargs@7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} @@ -7081,6 +6748,34 @@ packages: abab: 2.0.6 whatwg-mimetype: 3.0.0 whatwg-url: 12.0.1 + dev: true + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true /datauri@3.0.0: resolution: {integrity: sha512-NeDFuUPV1YCpCn8MUIcDk1QnuyenUHs7f4Q5P0n9FFA0neKFrfEH9esR+YMW95BplbYfdmjbs0Pl/ZGAaM2QHQ==} @@ -7098,7 +6793,7 @@ packages: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} /debug@3.1.0: - resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==, tarball: https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz} + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -7109,7 +6804,7 @@ packages: dev: true /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz} + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -7150,6 +6845,7 @@ packages: /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: true /decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -7161,19 +6857,21 @@ packages: engines: {node: '>=0.10'} dev: true - /dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + /dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: babel-plugin-macros: optional: true + dev: true /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} dependencies: type-detect: 4.0.8 + dev: true /deep-equal@2.2.3: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} @@ -7193,10 +6891,10 @@ packages: object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 - side-channel: 1.0.5 + side-channel: 1.0.6 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.14 + which-collection: 1.0.2 + which-typed-array: 1.1.15 dev: true /deep-extend@0.6.0: @@ -7219,6 +6917,7 @@ packages: /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + dev: true /default-browser-id@3.0.0: resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} @@ -7267,11 +6966,12 @@ packages: dev: true /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, tarball: https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz} + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dev: true /deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==, tarball: https://registry.npmmirror.com/deprecation/-/deprecation-2.3.1.tgz} + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} dev: true /dequal@2.0.3: @@ -7299,6 +6999,7 @@ packages: /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} + dev: true /detect-newline@4.0.1: resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} @@ -7318,14 +7019,17 @@ packages: /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + dev: true /diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} + dev: true /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} @@ -7335,15 +7039,8 @@ packages: randombytes: 2.1.0 dev: true - /digest-fetch@1.3.0: - resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} - dependencies: - base-64: 0.1.0 - md5: 2.3.0 - dev: true - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, tarball: https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz} + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 @@ -7369,7 +7066,7 @@ packages: /dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - dev: false + dev: true /dom-converter@0.2.0: resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} @@ -7419,6 +7116,7 @@ packages: deprecated: Use your platform's native DOMException instead dependencies: webidl-conversions: 7.0.0 + dev: true /domhandler@4.3.1: resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} @@ -7486,35 +7184,35 @@ packages: resolution: {integrity: sha512-a/Y5lf0G6gwsEQ9hop/n03CcjmHsGBk384Cz/AEX6mRYrfSpUx/lQvP9HLoXkCzScl9PL1sSmLPnMkgaXDCZLA==} dev: true - /dumi-theme-antd-style@0.30.0(@types/react@18.2.31)(dumi@2.2.17)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nF0Irwf+ISqFk44EBf59CiUsOUVR9yyHoTHNdh/AkUUBwjQY6gDclhPVaA1SJL0U+CIERI5llfnn2NCcW7SQAQ==} + /dumi-theme-antd-style@0.31.0(@types/react@18.2.31)(dumi@2.2.17)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-qWJIJ/7nhVthfhx9MXvuJAR5DbRNQSkUTaihlFc/5WlREOwTtODnyFT4bkBeBv6Gfedx7sVaL6xmI1cmDI1vXA==} peerDependencies: dumi: ^2.0.0 react: '>=16.8' react-dom: '>=16.8' dependencies: - '@ant-design/icons': 5.3.0(react-dom@18.2.0)(react@18.2.0) - '@babel/runtime': 7.23.9 + '@ant-design/icons': 5.3.6(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 '@floating-ui/react': 0.24.8(react-dom@18.2.0)(react@18.2.0) - ahooks: 3.7.10(react@18.2.0) - antd: 5.14.2(react-dom@18.2.0)(react@18.2.0) - antd-style: 3.6.1(@types/react@18.2.31)(antd@5.14.2)(react-dom@18.2.0)(react@18.2.0) + ahooks: 3.7.11(react@18.2.0) + antd: 5.16.1(react-dom@18.2.0)(react@18.2.0) + antd-style: 3.6.2(@types/react@18.2.31)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0) chalk: 4.1.2 chroma-js: 2.4.2 copy-to-clipboard: 3.3.3 - dumi: 2.2.17(@babel/core@7.23.9)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(stylelint@15.11.0)(typescript@5.3.3)(webpack@5.90.3) + dumi: 2.2.17(@babel/core@7.24.4)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(stylelint@15.11.0)(typescript@5.4.5)(webpack@5.91.0) fast-deep-equal: 3.1.3 lodash: 4.17.21 polished: 4.3.1 rc-footer: 0.6.8(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-layout-kit: 1.7.4(react@18.2.0) + react-layout-kit: 1.9.0(react@18.2.0) react-syntax-highlighter: 15.5.0(react@18.2.0) shiki-es: 0.2.0 use-merge-value: 1.2.0(react@18.2.0) - zustand: 4.5.1(@types/react@18.2.31)(immer@10.0.3)(react@18.2.0) - zustand-utils: 1.3.2(react@18.2.0)(zustand@4.5.1) + zustand: 4.5.2(@types/react@18.2.31)(react@18.2.0) + zustand-utils: 1.3.2(react@18.2.0)(zustand@4.5.2) transitivePeerDependencies: - '@types/react' - date-fns @@ -7523,7 +7221,7 @@ packages: - moment dev: true - /dumi@2.2.17(@babel/core@7.23.9)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(stylelint@15.11.0)(typescript@5.3.3)(webpack@5.90.3): + /dumi@2.2.17(@babel/core@7.24.4)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(stylelint@15.11.0)(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-oI2OVlkkVORy0ud64YlhrBF+rsAda9rGFxMLrOLepTjC96mLOrgUz/geKkckWA5LemEuFVsaTYE/5HDpAPTkvQ==} hasBin: true peerDependencies: @@ -7536,9 +7234,9 @@ packages: '@swc/core': 1.3.72 '@types/hast': 2.3.10 '@types/mdast': 3.0.15 - '@umijs/bundler-utils': 4.1.2 - '@umijs/core': 4.1.2 - '@umijs/utils': 4.1.2 + '@umijs/bundler-utils': 4.1.8 + '@umijs/core': 4.1.8 + '@umijs/utils': 4.1.8 animated-scroll-to: 2.3.0 classnames: 2.3.2 codesandbox: 2.2.3 @@ -7546,7 +7244,7 @@ packages: deepmerge: 4.3.1 dumi-afx-deps: 1.0.0-alpha.20 dumi-assets-types: 2.0.0-alpha.0 - enhanced-resolve: 5.15.1 + enhanced-resolve: 5.16.0 estree-util-to-js: 1.2.0 estree-util-visit: 1.2.1 file-system-cache: 2.4.4 @@ -7568,15 +7266,15 @@ packages: prism-react-renderer: 1.3.5(react@18.2.0) prism-themes: 1.9.0 prismjs: 1.29.0 - raw-loader: 4.0.2(webpack@5.90.3) + raw-loader: 4.0.2(webpack@5.91.0) rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-tabs: 12.15.0(react-dom@18.2.0)(react@18.2.0) rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-copy-to-clipboard: 5.1.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0) - react-error-boundary: 4.0.12(react@18.2.0) - react-intl: 6.6.2(react@18.2.0)(typescript@5.3.3) + react-error-boundary: 4.0.13(react@18.2.0) + react-intl: 6.6.5(react@18.2.0)(typescript@5.4.5) rehype-autolink-headings: 6.1.1 rehype-remove-comments: 5.0.0 rehype-stringify: 9.0.4 @@ -7585,9 +7283,9 @@ packages: remark-gfm: 3.0.1 remark-parse: 10.0.2 remark-rehype: 10.1.0 - sass: 1.71.1 + sass: 1.74.1 sitemap: 7.1.1 - umi: 4.1.2(@babel/core@7.23.9)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1)(stylelint@15.11.0)(typescript@5.3.3)(webpack@5.90.3) + umi: 4.1.8(@babel/core@7.24.4)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(sass@1.74.1)(stylelint@15.11.0)(typescript@5.4.5)(webpack@5.91.0) unified: 10.1.2 unist-util-visit: 4.1.2 unist-util-visit-parents: 5.1.3 @@ -7604,6 +7302,7 @@ packages: - '@volar/vue-typescript' - eslint - jest + - lightningcss - postcss-html - postcss-jsx - postcss-less @@ -7629,6 +7328,7 @@ packages: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: readable-stream: 2.3.8 + dev: true /duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} @@ -7643,8 +7343,8 @@ packages: stream-shift: 1.0.3 dev: true - /duplexify@4.1.2: - resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} + /duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 @@ -7664,11 +7364,12 @@ packages: semver: 6.3.1 dev: true - /electron-to-chromium@1.4.685: - resolution: {integrity: sha512-yDYeobbTEe4TNooEzOQO6xFqg9XnAkVy2Lod1C1B2it8u47JNLYvl9nLDWBamqUakWB8Jc1hhS1uHUNYTNQdfw==} + /electron-to-chromium@1.4.733: + resolution: {integrity: sha512-gUI9nhI2iBGF0OaYYLKOaOtliFMl+Bt1rY7VmEjwxOxqoYLub/D9xmduPEhbw2imE6gYkJKhIE5it+KE2ulVxQ==} + dev: true - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + /elliptic@6.5.5: + resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} dependencies: bn.js: 4.12.0 brorand: 1.1.0 @@ -7682,12 +7383,15 @@ packages: /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} + dev: true /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + dev: true /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} @@ -7710,8 +7414,8 @@ packages: once: 1.4.0 dev: true - /enhanced-resolve@5.15.1: - resolution: {integrity: sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==} + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -7733,6 +7437,7 @@ packages: /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + dev: true /env-ci@9.1.1: resolution: {integrity: sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==} @@ -7752,7 +7457,7 @@ packages: dev: true /errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, tarball: https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz} + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true requiresBuild: true dependencies: @@ -7764,6 +7469,7 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: true /error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -7771,16 +7477,20 @@ packages: stackframe: 1.3.4 dev: true - /es-abstract@1.22.4: - resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.7 call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 es-define-property: 1.0.0 es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 @@ -7791,10 +7501,11 @@ packages: has-property-descriptors: 1.0.2 has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.1 + hasown: 2.0.2 internal-slot: 1.0.7 is-array-buffer: 3.0.4 is-callable: 1.2.7 + is-data-view: 1.0.1 is-negative-zero: 2.0.3 is-regex: 1.1.4 is-shared-array-buffer: 1.0.3 @@ -7805,17 +7516,17 @@ packages: object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.0 + safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.2 typed-array-byte-length: 1.0.1 typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.5 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.14 + which-typed-array: 1.1.15 dev: true /es-array-method-boxes-properly@1.0.0: @@ -7841,21 +7552,20 @@ packages: get-intrinsic: 1.2.4 has-symbols: 1.0.3 is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 + is-map: 2.0.3 + is-set: 2.0.3 is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 dev: true - /es-iterator-helpers@1.0.17: - resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==} + /es-iterator-helpers@1.0.18: + resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} engines: {node: '>= 0.4'} dependencies: - asynciterator.prototype: 1.0.0 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 @@ -7866,11 +7576,18 @@ packages: has-symbols: 1.0.3 internal-slot: 1.0.7 iterator.prototype: 1.1.2 - safe-array-concat: 1.1.0 + safe-array-concat: 1.1.2 dev: true - /es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==, tarball: https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz} + /es-module-lexer@1.5.0: + resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 dev: true /es-set-tostringtag@2.0.3: @@ -7879,13 +7596,13 @@ packages: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 - hasown: 2.0.1 + hasown: 2.0.2 dev: true /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.1 + hasown: 2.0.2 dev: true /es-to-primitive@1.2.1: @@ -7897,8 +7614,8 @@ packages: is-symbol: 1.0.4 dev: true - /es5-imcompatible-versions@0.1.88: - resolution: {integrity: sha512-GDJTmDGd65qyDk9fGClO+MOUgHuBuGMCL6EawvLH8Ob+HN8ui1OJwa4fEK0qh3fg2ieT2/pdZj41yrxnmOrK8w==} + /es5-imcompatible-versions@0.1.89: + resolution: {integrity: sha512-metQ5Hi5dgBiaoc2VjGx2IABciw0djiE1+KbRWHbgQng9KnJQ1niBIA6vvLKWgA9R02kQZQRvFJ504ev0AQbzQ==} dev: true /es6-promise@4.2.8: @@ -7971,57 +7688,62 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + dev: true /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} + dev: true /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + dev: true /escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.3.3): + /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5): resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -8034,8 +7756,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 jest: 29.7.0(@types/node@20.5.1)(ts-node@10.9.2) transitivePeerDependencies: @@ -8058,23 +7780,23 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.17 + es-iterator-helpers: 1.0.18 eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 dev: true /eslint-scope@5.1.1: @@ -8163,6 +7885,7 @@ packages: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true + dev: true /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -8198,6 +7921,10 @@ packages: resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} dev: true + /estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + dev: false + /estree-util-to-js@1.2.0: resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} dependencies: @@ -8214,13 +7941,14 @@ packages: dev: true /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz} + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 + dev: true /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -8283,6 +8011,7 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 + dev: true /execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} @@ -8312,10 +8041,12 @@ packages: onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 + dev: true /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} + dev: true /expand-tilde@1.2.2: resolution: {integrity: sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==} @@ -8333,6 +8064,7 @@ packages: jest-matcher-utils: 29.7.0 jest-message-util: 29.7.0 jest-util: 29.7.0 + dev: true /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} @@ -8342,7 +8074,7 @@ packages: dev: true /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, tarball: https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz} + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} @@ -8355,6 +8087,7 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} @@ -8380,17 +8113,14 @@ packages: /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-memoize@2.5.2: - resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} - dev: false - - /fast-redact@3.3.0: - resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + /fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} dev: true @@ -8405,17 +8135,17 @@ packages: reusify: 1.0.4 dev: true - /father@4.3.1(@types/node@20.5.1)(webpack@5.90.3): + /father@4.3.1(@types/node@20.5.1)(webpack@5.91.0): resolution: {integrity: sha512-1s9WwUtjOgBogV4X0YTiOBZiwnmKRbUffq8Nih5HXvcL2HM4Clh9jDyaYhPrl+9LpJwXsSgT6kAn90A3PHHsVw==} hasBin: true dependencies: '@microsoft/api-extractor': 7.36.3(@types/node@20.5.1) - '@umijs/babel-preset-umi': 4.1.2 - '@umijs/bundler-utils': 4.1.2 - '@umijs/bundler-webpack': 4.1.2(typescript@5.0.4)(webpack@5.90.3) + '@umijs/babel-preset-umi': 4.1.8 + '@umijs/bundler-utils': 4.1.8 + '@umijs/bundler-webpack': 4.1.8(typescript@5.0.4)(webpack@5.91.0) '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1 - '@umijs/core': 4.1.2 - '@umijs/utils': 4.1.2 + '@umijs/core': 4.1.8 + '@umijs/utils': 4.1.8 '@vercel/ncc': 0.33.3 babel-plugin-dynamic-import-node: 2.3.3 babel-plugin-module-resolver: 4.1.0 @@ -8457,6 +8187,7 @@ packages: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 + dev: true /fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} @@ -8526,6 +8257,7 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true /filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} @@ -8557,6 +8289,7 @@ packages: /find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: true /find-up@2.1.0: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} @@ -8578,6 +8311,7 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + dev: true /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -8645,14 +8379,14 @@ packages: signal-exit: 4.1.0 dev: true - /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.0.4)(webpack@5.90.3): + /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.0.4)(webpack@5.91.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} peerDependencies: typescript: '>3.6.0' webpack: ^5.11.0 dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 chalk: 4.1.2 chokidar: 3.6.0 cosmiconfig: 7.1.0 @@ -8665,17 +8399,17 @@ packages: semver: 7.6.0 tapable: 2.2.1 typescript: 5.0.4 - webpack: 5.90.3 + webpack: 5.91.0 dev: true - /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.3.3)(webpack@5.90.3): + /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} peerDependencies: typescript: '>3.6.0' webpack: ^5.11.0 dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 chalk: 4.1.2 chokidar: 3.6.0 cosmiconfig: 7.1.0 @@ -8687,8 +8421,8 @@ packages: schema-utils: 3.3.0 semver: 7.6.0 tapable: 2.2.1 - typescript: 5.3.3 - webpack: 5.90.3 + typescript: 5.4.5 + webpack: 5.91.0 dev: true /form-data-encoder@1.7.2: @@ -8702,6 +8436,7 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + dev: true /format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} @@ -8727,6 +8462,25 @@ packages: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true + /framer-motion@11.0.28(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-j/vNYTCH5MX5sY/3dwMs00z1+qAqKX3iIHF762bwqlU814ooD5dDbuj3pA0LmIT5YqyryCkXEb/q+zRblin0lw==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + dev: false + /from2@2.3.0: resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} dependencies: @@ -8802,16 +8556,19 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz} + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: true optional: true /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} @@ -8819,7 +8576,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -8834,10 +8591,12 @@ packages: /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + dev: true /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + dev: true /get-east-asian-width@1.2.0: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} @@ -8846,6 +8605,7 @@ packages: /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} @@ -8855,12 +8615,13 @@ packages: function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.1 + hasown: 2.0.2 dev: true /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} + dev: true /get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} @@ -8875,6 +8636,7 @@ packages: /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + dev: true /get-stream@7.0.1: resolution: {integrity: sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==} @@ -8884,6 +8646,7 @@ packages: /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + dev: true /get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} @@ -8894,8 +8657,8 @@ packages: get-intrinsic: 1.2.4 dev: true - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} dependencies: resolve-pkg-maps: 1.0.0 dev: true @@ -8931,7 +8694,7 @@ packages: split2: 1.0.0 stream-combiner2: 1.1.1 through2: 2.0.5 - traverse: 0.6.8 + traverse: 0.6.9 dev: true /git-raw-commits@2.0.11: @@ -8986,19 +8749,19 @@ packages: dev: true /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, tarball: https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz} + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + /glob@10.3.12: + resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.3 + minimatch: 9.0.4 minipass: 7.0.4 - path-scurry: 1.10.1 + path-scurry: 1.10.2 dev: true /glob@7.2.3: @@ -9010,6 +8773,7 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true /global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} @@ -9055,6 +8819,7 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + dev: true /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -9140,6 +8905,7 @@ packages: /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -9178,10 +8944,12 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + dev: true /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -9220,6 +8988,14 @@ packages: engines: {node: '>=0.10.0'} dev: true + /hash-base@3.0.4: + resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} @@ -9236,37 +9012,12 @@ packages: minimalistic-assert: 1.0.1 dev: true - /hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - - /hast-util-from-dom@4.2.0: - resolution: {integrity: sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==} - dependencies: - hastscript: 7.2.0 - web-namespaces: 2.0.1 - dev: false - - /hast-util-from-html-isomorphic@1.0.0: - resolution: {integrity: sha512-Yu480AKeOEN/+l5LA674a+7BmIvtDj24GvOt7MtQWuhzUwlaaRWdEPXAh3Qm5vhuthpAipFb2vTetKXWOjmTvw==} - dependencies: - '@types/hast': 2.3.10 - hast-util-from-dom: 4.2.0 - hast-util-from-html: 1.0.2 - unist-util-remove-position: 4.0.2 - dev: false - - /hast-util-from-html@1.0.2: - resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==} - dependencies: - '@types/hast': 2.3.10 - hast-util-from-parse5: 7.1.2 - parse5: 7.1.2 - vfile: 5.3.7 - vfile-message: 3.1.4 - dev: false + dev: true /hast-util-from-parse5@7.1.2: resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} @@ -9274,23 +9025,11 @@ packages: '@types/hast': 2.3.10 '@types/unist': 2.0.10 hastscript: 7.2.0 - property-information: 6.4.1 + property-information: 6.5.0 vfile: 5.3.7 vfile-location: 4.1.0 web-namespaces: 2.0.1 - - /hast-util-from-parse5@8.0.1: - resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - devlop: 1.1.0 - hastscript: 8.0.0 - property-information: 6.4.1 - vfile: 6.0.1 - vfile-location: 5.0.2 - web-namespaces: 2.0.1 - dev: false + dev: true /hast-util-has-property@2.0.1: resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==} @@ -9313,6 +9052,7 @@ packages: dependencies: '@types/hast': 2.3.10 '@types/unist': 2.0.10 + dev: true /hast-util-parse-selector@2.2.5: resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} @@ -9322,12 +9062,7 @@ packages: resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} dependencies: '@types/hast': 2.3.10 - - /hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - dependencies: - '@types/hast': 3.0.4 - dev: false + dev: true /hast-util-raw@7.2.3: resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} @@ -9362,24 +9097,6 @@ packages: zwitch: 2.0.4 dev: true - /hast-util-raw@9.0.2: - resolution: {integrity: sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==} - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - '@ungap/structured-clone': 1.2.0 - hast-util-from-parse5: 8.0.1 - hast-util-to-parse5: 8.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.1.0 - parse5: 7.1.2 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.1 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - dev: false - /hast-util-to-estree@2.3.3: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} dependencies: @@ -9393,7 +9110,7 @@ packages: hast-util-whitespace: 2.0.1 mdast-util-mdx-expression: 1.3.2 mdast-util-mdxjs-esm: 1.3.1 - property-information: 6.4.1 + property-information: 6.5.0 space-separated-tokens: 2.0.2 style-to-object: 0.4.4 unist-util-position: 4.0.4 @@ -9412,27 +9129,32 @@ packages: hast-util-raw: 7.2.3 hast-util-whitespace: 2.0.1 html-void-elements: 2.0.1 - property-information: 6.4.1 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - stringify-entities: 4.0.3 + stringify-entities: 4.0.4 zwitch: 2.0.4 dev: true - /hast-util-to-html@9.0.0: - resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==} + /hast-util-to-jsx-runtime@2.3.0: + resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} dependencies: + '@types/estree': 1.0.5 '@types/hast': 3.0.4 '@types/unist': 3.0.2 - ccount: 2.0.1 comma-separated-tokens: 2.0.3 - hast-util-raw: 9.0.2 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.1.0 - property-information: 6.4.1 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - stringify-entities: 4.0.3 - zwitch: 2.0.4 + style-to-object: 1.0.6 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color dev: false /hast-util-to-parse5@7.1.0: @@ -9440,41 +9162,21 @@ packages: dependencies: '@types/hast': 2.3.10 comma-separated-tokens: 2.0.3 - property-information: 6.4.1 + property-information: 6.5.0 space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 dev: true - /hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - property-information: 6.4.1 - space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - dev: false - /hast-util-to-string@2.0.0: resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} dependencies: '@types/hast': 2.3.10 dev: true - /hast-util-to-text@3.1.2: - resolution: {integrity: sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==} - dependencies: - '@types/hast': 2.3.10 - '@types/unist': 2.0.10 - hast-util-is-element: 2.1.3 - unist-util-find-after: 4.0.1 - dev: false - /hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + dev: true /hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -9498,18 +9200,9 @@ packages: '@types/hast': 2.3.10 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 3.1.1 - property-information: 6.4.1 - space-separated-tokens: 2.0.2 - - /hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 6.4.1 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - dev: false + dev: true /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} @@ -9526,10 +9219,6 @@ packages: heti-findandreplacedomtext: 0.5.0 dev: true - /highlight.js@10.5.0: - resolution: {integrity: sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw==} - dev: false - /highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: true @@ -9537,7 +9226,7 @@ packages: /history@5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 dev: true /hmac-drbg@1.0.1: @@ -9552,6 +9241,7 @@ packages: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 + dev: true /homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} @@ -9608,13 +9298,15 @@ packages: engines: {node: '>=12'} dependencies: whatwg-encoding: 2.0.0 + dev: true - /html-entities@2.4.0: - resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} + /html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} dev: true /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true /html-minifier-terser@6.1.0: resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} @@ -9627,11 +9319,11 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.28.1 + terser: 5.30.3 dev: true /html-parse-stringify@3.0.1: - resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==, tarball: https://registry.npmmirror.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz} + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} dependencies: void-elements: 3.1.0 dev: true @@ -9661,16 +9353,17 @@ packages: minimist: 1.2.8 readable-stream: 1.0.34 through2: 0.4.2 + dev: true + + /html-url-attributes@3.0.0: + resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} + dev: false /html-void-elements@2.0.1: resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} dev: true - /html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - dev: false - - /html-webpack-plugin@5.5.0(webpack@5.90.3): + /html-webpack-plugin@5.5.0(webpack@5.91.0): resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} engines: {node: '>=10.13.0'} peerDependencies: @@ -9681,7 +9374,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.90.3 + webpack: 5.91.0 dev: true /html2sketch@1.0.2: @@ -9725,7 +9418,7 @@ packages: dev: true /http-proxy-agent@2.1.0: - resolution: {integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==, tarball: https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz} + resolution: {integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==} engines: {node: '>= 4.5.0'} dependencies: agent-base: 4.3.0 @@ -9743,12 +9436,13 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true /http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -9759,7 +9453,7 @@ packages: dev: true /https-proxy-agent@2.2.4: - resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==, tarball: https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz} + resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==} engines: {node: '>= 4.5.0'} dependencies: agent-base: 4.3.0 @@ -9776,12 +9470,13 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true /https-proxy-agent@7.0.4: resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -9790,6 +9485,7 @@ packages: /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + dev: true /human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} @@ -9799,6 +9495,7 @@ packages: /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + dev: true /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -9816,10 +9513,10 @@ packages: hasBin: true dev: true - /i18next@23.10.0: - resolution: {integrity: sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==, tarball: https://registry.npmmirror.com/i18next/-/i18next-23.10.0.tgz} + /i18next@23.11.1: + resolution: {integrity: sha512-mXw4A24BiPZKRsbb9ewgSvjYd6fxFCNwJyfK6nYfSTIAX2GkCWcb598m3DFkDZmqADatvuASrKo6qwORz3VwTQ==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 dev: true /iconv-lite@0.4.24: @@ -9834,14 +9531,15 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: true - /icss-utils@5.1.0(postcss@8.4.35): + /icss-utils@5.1.0(postcss@8.4.38): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /identity-obj-proxy@3.0.0: @@ -9865,7 +9563,7 @@ packages: dev: true /image-size@0.5.5: - resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, tarball: https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz} + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} hasBin: true requiresBuild: true @@ -9880,13 +9578,6 @@ packages: queue: 6.0.1 dev: true - /immer@10.0.3: - resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==} - - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - dev: false - /immutable@4.3.5: resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==} dev: true @@ -9897,6 +9588,7 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + dev: true /import-from@4.0.0: resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} @@ -9920,14 +9612,17 @@ packages: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + dev: true /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, tarball: https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz} + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + dev: true /indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} @@ -9939,6 +9634,7 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 + dev: true /inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -9946,6 +9642,7 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -9953,6 +9650,11 @@ packages: /inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: true + + /inline-style-parser@0.2.3: + resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} + dev: false /inquirer@6.5.2: resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} @@ -9978,12 +9680,13 @@ packages: engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 - hasown: 2.0.1 - side-channel: 1.0.5 + hasown: 2.0.2 + side-channel: 1.0.6 dev: true /intersection-observer@0.12.2: resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} + dev: true /intl-messageformat@10.5.11: resolution: {integrity: sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==} @@ -10018,7 +9721,6 @@ packages: /is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - dev: true /is-alphanumerical@1.0.4: resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} @@ -10032,7 +9734,6 @@ packages: dependencies: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - dev: true /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} @@ -10052,9 +9753,11 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: true /is-arrow-function@2.0.3: resolution: {integrity: sha512-iDStzcT1FJMzx+TjCOK//uDugSe/Mif/8a+T0htydQ3qkJGvSweTZpVYz4hpJH0baloSPiAFQdA8WslAgJphvQ==} @@ -10080,7 +9783,7 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-boolean-object@1.1.2: @@ -10098,6 +9801,7 @@ packages: /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} + dev: true /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} @@ -10114,7 +9818,15 @@ packages: /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.1 + hasown: 2.0.2 + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -10129,7 +9841,6 @@ packages: /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - dev: true /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} @@ -10152,7 +9863,7 @@ packages: functions-have-names: 1.2.3 has-bigints: 1.0.2 has-symbols: 1.0.3 - hasown: 2.0.1 + hasown: 2.0.2 is-arrow-function: 2.0.3 is-bigint: 1.0.4 is-boolean-object: 1.1.2 @@ -10165,10 +9876,10 @@ packages: is-symbol: 1.0.4 isarray: 2.0.5 object-inspect: 1.13.1 - object.entries: 1.1.7 - object.getprototypeof: 1.0.5 + object.entries: 1.1.8 + object.getprototypeof: 1.0.6 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 + which-collection: 1.0.2 dev: true /is-extendable@0.1.1: @@ -10195,6 +9906,7 @@ packages: /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + dev: true /is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} @@ -10211,6 +9923,7 @@ packages: /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} + dev: true /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} @@ -10232,7 +9945,6 @@ packages: /is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - dev: true /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} @@ -10250,8 +9962,9 @@ packages: is-path-inside: 1.0.1 dev: true - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} dev: true /is-negative-zero@2.0.3: @@ -10274,6 +9987,7 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + dev: true /is-obj@1.0.1: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} @@ -10320,6 +10034,7 @@ packages: /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true /is-redirect@1.0.0: resolution: {integrity: sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==} @@ -10327,7 +10042,7 @@ packages: dev: true /is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==, tarball: https://registry.npmmirror.com/is-reference/-/is-reference-3.0.2.tgz} + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: '@types/estree': 1.0.5 dev: true @@ -10345,8 +10060,9 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} dev: true /is-shared-array-buffer@1.0.3: @@ -10364,10 +10080,12 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -10401,7 +10119,7 @@ packages: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.14 + which-typed-array: 1.1.15 dev: true /is-unicode-supported@1.3.0: @@ -10409,8 +10127,9 @@ packages: engines: {node: '>=12'} dev: true - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} dev: true /is-weakref@1.0.2: @@ -10419,8 +10138,9 @@ packages: call-bind: 1.0.7 dev: true - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 @@ -10449,9 +10169,11 @@ packages: /isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: true /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -10459,6 +10181,7 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true /isobject@2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} @@ -10479,12 +10202,8 @@ packages: unfetch: 5.0.0 dev: true - /isomorphic.js@0.2.5: - resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} - dev: false - /issue-parser@6.0.0: - resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==, tarball: https://registry.npmmirror.com/issue-parser/-/issue-parser-6.0.0.tgz} + resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} engines: {node: '>=10.13'} dependencies: lodash.capitalize: 4.2.1 @@ -10497,30 +10216,33 @@ packages: /istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} + dev: true /istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true /istanbul-lib-instrument@6.0.2: resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.0 transitivePeerDependencies: - supports-color + dev: true /istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} @@ -10529,6 +10251,7 @@ packages: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 + dev: true /istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} @@ -10539,6 +10262,18 @@ packages: source-map: 0.6.1 transitivePeerDependencies: - supports-color + dev: true + + /istanbul-lib-source-maps@5.0.4: + resolution: {integrity: sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==} + engines: {node: '>=10'} + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + dev: true /istanbul-reports@3.1.7: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} @@ -10546,6 +10281,7 @@ packages: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + dev: true /istextorbinary@2.6.0: resolution: {integrity: sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==} @@ -10562,7 +10298,7 @@ packages: define-properties: 1.2.1 get-intrinsic: 1.2.4 has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.5 + reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 dev: true @@ -10587,6 +10323,7 @@ packages: execa: 5.1.1 jest-util: 29.7.0 p-limit: 3.1.0 + dev: true /jest-circus@29.7.0: resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} @@ -10596,10 +10333,10 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.1 + dedent: 1.5.3 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -10609,12 +10346,13 @@ packages: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.0.4 + pure-rand: 6.1.0 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: - babel-plugin-macros - supports-color + dev: true /jest-cli@29.7.0(@types/node@20.5.1)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} @@ -10642,8 +10380,9 @@ packages: - babel-plugin-macros - supports-color - ts-node + dev: true - /jest-config@29.7.0(@types/node@20.11.21)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.12.7)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -10655,11 +10394,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.21 - babel-jest: 29.7.0(@babel/core@7.23.9) + '@types/node': 20.12.7 + babel-jest: 29.7.0(@babel/core@7.24.4) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -10678,10 +10417,11 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color + dev: true /jest-config@29.7.0(@types/node@20.5.1)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} @@ -10695,11 +10435,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 '@types/node': 20.5.1 - babel-jest: 29.7.0(@babel/core@7.23.9) + babel-jest: 29.7.0(@babel/core@7.24.4) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -10718,10 +10458,11 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color + dev: true /jest-diff@29.7.0: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} @@ -10731,12 +10472,14 @@ packages: diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true /jest-docblock@29.7.0: resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 + dev: true /jest-each@29.7.0: resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} @@ -10747,6 +10490,7 @@ packages: jest-get-type: 29.6.3 jest-util: 29.7.0 pretty-format: 29.7.0 + dev: true /jest-environment-node@29.7.0: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} @@ -10755,13 +10499,15 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 jest-mock: 29.7.0 jest-util: 29.7.0 + dev: true /jest-get-type@29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true /jest-haste-map@29.7.0: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} @@ -10769,7 +10515,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.21 + '@types/node': 20.12.7 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -10780,6 +10526,7 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 + dev: true /jest-leak-detector@29.7.0: resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} @@ -10787,6 +10534,7 @@ packages: dependencies: jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true /jest-matcher-utils@29.7.0: resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} @@ -10796,12 +10544,13 @@ packages: jest-diff: 29.7.0 jest-get-type: 29.6.3 pretty-format: 29.7.0 + dev: true /jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -10810,14 +10559,16 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 + dev: true /jest-mock@29.7.0: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 jest-util: 29.7.0 + dev: true /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} @@ -10829,10 +10580,12 @@ packages: optional: true dependencies: jest-resolve: 29.7.0 + dev: true /jest-regex-util@29.6.3: resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true /jest-resolve-dependencies@29.7.0: resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} @@ -10842,6 +10595,7 @@ packages: jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color + dev: true /jest-resolve@29.7.0: resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} @@ -10856,6 +10610,7 @@ packages: resolve: 1.22.8 resolve.exports: 2.0.2 slash: 3.0.0 + dev: true /jest-runner@29.7.0: resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} @@ -10866,7 +10621,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -10884,6 +10639,7 @@ packages: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color + dev: true /jest-runtime@29.7.0: resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} @@ -10896,7 +10652,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -10913,20 +10669,21 @@ packages: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color + dev: true /jest-snapshot@29.7.0: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.9 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) - '@babel/types': 7.23.9 + '@babel/core': 7.24.4 + '@babel/generator': 7.24.4 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/types': 7.24.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -10940,17 +10697,19 @@ packages: semver: 7.6.0 transitivePeerDependencies: - supports-color + dev: true /jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 + dev: true /jest-validate@29.7.0: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} @@ -10962,6 +10721,7 @@ packages: jest-get-type: 29.6.3 leven: 3.1.0 pretty-format: 29.7.0 + dev: true /jest-watcher@29.7.0: resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} @@ -10969,18 +10729,19 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.21 + '@types/node': 20.12.7 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 jest-util: 29.7.0 string-length: 4.0.2 + dev: true /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, tarball: https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz} + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.11.21 + '@types/node': 20.12.7 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -10989,7 +10750,7 @@ packages: resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.21 + '@types/node': 20.12.7 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -10999,10 +10760,11 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.21 + '@types/node': 20.12.7 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 + dev: true /jest@29.7.0(@types/node@20.5.1)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} @@ -11023,6 +10785,7 @@ packages: - babel-plugin-macros - supports-color - ts-node + dev: true /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -11030,12 +10793,14 @@ packages: /js-cookie@2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + dev: true /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - /js-tokens@8.0.3: - resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} + /js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + dev: true /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -11043,6 +10808,7 @@ packages: dependencies: argparse: 1.0.10 esprima: 4.0.1 + dev: true /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} @@ -11087,11 +10853,13 @@ packages: - bufferutil - supports-color - utf-8-validate + dev: true /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true + dev: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -11103,6 +10871,7 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true /json-parse-even-better-errors@3.0.1: resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==} @@ -11122,11 +10891,12 @@ packages: dev: true /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==, tarball: https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz} + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true /json2mq@0.2.0: resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} + requiresBuild: true dependencies: string-convert: 0.2.1 @@ -11139,9 +10909,11 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + dev: true /jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + dev: true /jsonfile@3.0.1: resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==} @@ -11172,19 +10944,12 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 object.assign: 4.1.5 - object.values: 1.1.7 + object.values: 1.2.0 dev: true - /katex@0.16.9: - resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==} - hasBin: true - dependencies: - commander: 8.3.0 - dev: false - /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -11206,10 +10971,12 @@ packages: /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + dev: true /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + dev: true /known-css-properties@0.29.0: resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} @@ -11238,7 +11005,7 @@ packages: /less-plugin-resolve@1.0.2: resolution: {integrity: sha512-e1AHq0XNTU8S3d9JCc8CFYajoUBr0EK3pcuLT5PogyBBeE0knzZJL105kKKSZWfq2lQLq3/uEDrMK3JPq+fHaA==} dependencies: - enhanced-resolve: 5.15.1 + enhanced-resolve: 5.16.0 dev: true /less@4.1.3: @@ -11262,6 +11029,7 @@ packages: /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} + dev: true /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -11271,16 +11039,8 @@ packages: type-check: 0.4.0 dev: true - /lib0@0.2.89: - resolution: {integrity: sha512-5j19vcCjsQhvLG6mcDD+nprtJUCbmqLz5Hzt5xgi9SV6RIW/Dty7ZkVZHGBuPOADMKjQuKDvuQTH495wsmw8DQ==} - engines: {node: '>=16'} - hasBin: true - dependencies: - isomorphic.js: 0.2.5 - dev: false - /lightningcss-darwin-arm64@1.22.1: - resolution: {integrity: sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==, tarball: https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.22.1.tgz} + resolution: {integrity: sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] @@ -11289,7 +11049,7 @@ packages: optional: true /lightningcss-darwin-x64@1.22.1: - resolution: {integrity: sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==, tarball: https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.22.1.tgz} + resolution: {integrity: sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] @@ -11298,7 +11058,7 @@ packages: optional: true /lightningcss-freebsd-x64@1.22.1: - resolution: {integrity: sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==, tarball: https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.22.1.tgz} + resolution: {integrity: sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] @@ -11307,7 +11067,7 @@ packages: optional: true /lightningcss-linux-arm-gnueabihf@1.22.1: - resolution: {integrity: sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==, tarball: https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.22.1.tgz} + resolution: {integrity: sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] @@ -11316,47 +11076,43 @@ packages: optional: true /lightningcss-linux-arm64-gnu@1.22.1: - resolution: {integrity: sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==, tarball: https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.22.1.tgz} + resolution: {integrity: sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true /lightningcss-linux-arm64-musl@1.22.1: - resolution: {integrity: sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==, tarball: https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.22.1.tgz} + resolution: {integrity: sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true /lightningcss-linux-x64-gnu@1.22.1: - resolution: {integrity: sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==, tarball: https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.22.1.tgz} + resolution: {integrity: sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true dev: true optional: true /lightningcss-linux-x64-musl@1.22.1: - resolution: {integrity: sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==, tarball: https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.22.1.tgz} + resolution: {integrity: sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true dev: true optional: true /lightningcss-win32-x64-msvc@1.22.1: - resolution: {integrity: sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==, tarball: https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.22.1.tgz} + resolution: {integrity: sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] @@ -11388,6 +11144,7 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true /lines-and-columns@2.0.4: resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} @@ -11441,7 +11198,7 @@ packages: dev: true /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==, tarball: https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz} + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} dev: true @@ -11465,9 +11222,10 @@ packages: dependencies: mlly: 1.6.1 pkg-types: 1.0.3 + dev: true /locate-character@3.0.0: - resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, tarball: https://registry.npmmirror.com/locate-character/-/locate-character-3.0.0.tgz} + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} dev: true /locate-path@2.0.0: @@ -11491,6 +11249,7 @@ packages: engines: {node: '>=8'} dependencies: p-locate: 4.1.0 + dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -11509,35 +11268,25 @@ packages: /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - /lodash._reinterpolate@3.0.0: - resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} - dev: false - /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true /lodash.capitalize@4.2.1: - resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==, tarball: https://registry.npmmirror.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz} + resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} dev: true /lodash.escaperegexp@4.1.2: - resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==, tarball: https://registry.npmmirror.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz} + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} dev: true - /lodash.flatten@4.4.0: - resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - dev: false - /lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - - /lodash.isempty@4.4.0: - resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==} - dev: false + dev: true /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true /lodash.isfunction@3.0.9: resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} @@ -11547,20 +11296,12 @@ packages: resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} dev: true - /lodash.isnil@4.0.0: - resolution: {integrity: sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==} - dev: false - - /lodash.isobject@3.0.2: - resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==} - dev: false - /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==, tarball: https://registry.npmmirror.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz} + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: true /lodash.kebabcase@4.1.1: @@ -11569,15 +11310,12 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true /lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: true - /lodash.omitby@4.6.0: - resolution: {integrity: sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==} - dev: false - /lodash.snakecase@4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} dev: true @@ -11586,19 +11324,6 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true - /lodash.template@4.5.0: - resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} - dependencies: - lodash._reinterpolate: 3.0.0 - lodash.templatesettings: 4.2.0 - dev: false - - /lodash.templatesettings@4.2.0: - resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} - dependencies: - lodash._reinterpolate: 3.0.0 - dev: false - /lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} dev: true @@ -11607,19 +11332,12 @@ packages: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true - /lodash.union@4.6.0: - resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} - dev: false - - /lodash.unionby@4.8.0: - resolution: {integrity: sha512-e60kn4GJIunNkw6v9MxRnUuLYI/Tyuanch7ozoCtk/1irJTYBj+qNTxr5B3qVflmJhwStJBv387Cb+9VOfABMg==} - dev: false - /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true /lodash.uniqby@4.7.0: - resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==, tarball: https://registry.npmmirror.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz} + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} dev: true /lodash.upperfirst@4.3.1: @@ -11628,6 +11346,7 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true /log-symbols@2.2.0: resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} @@ -11640,7 +11359,7 @@ packages: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} dependencies: - ansi-escapes: 6.2.0 + ansi-escapes: 6.2.1 cli-cursor: 4.0.0 slice-ansi: 7.1.0 strip-ansi: 7.1.0 @@ -11660,6 +11379,7 @@ packages: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: get-func-name: 2.0.2 + dev: true /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -11695,43 +11415,38 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 + dev: true /lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} dev: true - /lucide-react@0.288.0(react@18.2.0): - resolution: {integrity: sha512-ikhb/9LOkq9orPoLV9lLC4UYyoXQycBhIgH7H59ahOkk0mkcAqkD52m84RXedE/qVqZHW8rEJquInT4xGmsNqw==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - dev: false - /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true dev: true - /magic-string@0.30.7: - resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} + /magic-string@0.30.9: + resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /magicast@0.3.3: resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==} dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - source-map-js: 1.0.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + source-map-js: 1.2.0 dev: true /make-dir@1.3.0: @@ -11742,7 +11457,7 @@ packages: dev: true /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, tarball: https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz} + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} requiresBuild: true dependencies: @@ -11756,9 +11471,11 @@ packages: engines: {node: '>=10'} dependencies: semver: 7.6.0 + dev: true /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true /make-fetch-happen@2.6.0: resolution: {integrity: sha512-FFq0lNI0ax+n9IWzWpH8A4JdgYiAp2DDYIZ3rsaav8JDe8I+72CzK6PQW/oom15YDZpV5bYW/9INd6nIJ2ZfZw==} @@ -11782,6 +11499,7 @@ packages: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 + dev: true /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} @@ -11802,10 +11520,10 @@ packages: peerDependencies: marked: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 dependencies: - ansi-escapes: 6.2.0 + ansi-escapes: 6.2.1 cardinal: 2.1.1 chalk: 5.3.0 - cli-table3: 0.6.3 + cli-table3: 0.6.4 marked: 5.1.2 node-emoji: 1.11.0 supports-hyperlinks: 2.3.0 @@ -11829,20 +11547,13 @@ packages: safe-buffer: 5.2.1 dev: true - /md5@2.3.0: - resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} - dependencies: - charenc: 0.0.2 - crypt: 0.0.2 - is-buffer: 1.1.6 - dev: true - /mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.10 unist-util-visit: 4.1.2 + dev: true /mdast-util-directive@2.2.4: resolution: {integrity: sha512-sK3ojFP+jpj1n7Zo5ZKvoxP1MvLyzVG63+gm40Z/qI00avzdPCYxt7RBMgofwAva9gBjbDBWVRB/i+UD+fUCzQ==} @@ -11852,7 +11563,7 @@ packages: mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 parse-entities: 4.0.1 - stringify-entities: 4.0.3 + stringify-entities: 4.0.4 unist-util-visit-parents: 5.1.3 transitivePeerDependencies: - supports-color @@ -11865,6 +11576,16 @@ packages: escape-string-regexp: 5.0.0 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 + dev: true + + /mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + dependencies: + '@types/mdast': 4.0.3 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: false /mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} @@ -11883,6 +11604,26 @@ packages: uvu: 0.5.6 transitivePeerDependencies: - supports-color + dev: true + + /mdast-util-from-markdown@2.0.0: + resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + dependencies: + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false /mdast-util-frontmatter@1.0.1: resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} @@ -11899,6 +11640,17 @@ packages: ccount: 2.0.1 mdast-util-find-and-replace: 2.2.2 micromark-util-character: 1.2.0 + dev: true + + /mdast-util-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} + dependencies: + '@types/mdast': 4.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.1 + micromark-util-character: 2.1.0 + dev: false /mdast-util-gfm-footnote@1.0.2: resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} @@ -11906,12 +11658,36 @@ packages: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 micromark-util-normalize-identifier: 1.1.0 + dev: true + + /mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false /mdast-util-gfm-strikethrough@1.0.3: resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 + dev: true + + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false /mdast-util-gfm-table@1.0.7: resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} @@ -11922,12 +11698,37 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color + dev: true + + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + markdown-table: 3.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false /mdast-util-gfm-task-list-item@1.0.2: resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 + dev: true + + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false /mdast-util-gfm@2.0.2: resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} @@ -11941,13 +11742,20 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color + dev: true - /mdast-util-math@2.0.2: - resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==} + /mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} dependencies: - '@types/mdast': 3.0.15 - longest-streak: 3.1.0 - mdast-util-to-markdown: 1.5.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-gfm-autolink-literal: 2.0.0 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color dev: false /mdast-util-mdx-expression@1.3.2: @@ -11962,6 +11770,39 @@ packages: - supports-color dev: true + /mdast-util-mdx-expression@2.0.0: + resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-jsx@3.1.2: + resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==} + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + parse-entities: 4.0.1 + stringify-entities: 4.0.4 + unist-util-remove-position: 5.0.0 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: false + /mdast-util-mdxjs-esm@1.3.1: resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} dependencies: @@ -11974,11 +11815,32 @@ packages: - supports-color dev: true + /mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + /mdast-util-phrasing@3.0.1: resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} dependencies: '@types/mdast': 3.0.15 unist-util-is: 5.2.1 + dev: true + + /mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + dependencies: + '@types/mdast': 4.0.3 + unist-util-is: 6.0.0 + dev: false /mdast-util-to-hast@12.3.0: resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} @@ -11991,6 +11853,7 @@ packages: unist-util-generated: 2.0.1 unist-util-position: 4.0.4 unist-util-visit: 4.1.2 + dev: true /mdast-util-to-hast@13.1.0: resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} @@ -12017,11 +11880,32 @@ packages: micromark-util-decode-string: 1.1.0 unist-util-visit: 4.1.2 zwitch: 2.0.4 + dev: true + + /mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + dependencies: + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + dev: false /mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} dependencies: '@types/mdast': 3.0.15 + dev: true + + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + dependencies: + '@types/mdast': 4.0.3 + dev: false /mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} @@ -12042,10 +11926,6 @@ packages: fs-monkey: 1.0.5 dev: true - /memoize-one@5.2.1: - resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} - dev: false - /meow@10.1.5: resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -12088,6 +11968,7 @@ packages: /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -12113,6 +11994,28 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true + + /micromark-core-commonmark@2.0.0: + resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-extension-directive@2.2.1: resolution: {integrity: sha512-ZFKZkNaEqAP86IghX1X7sE8NNnx6kFNq9mSBRvEHjArutTCJZ3LYg6VH151lXVb1JHpmIcW/7rX25oMoIHuSug==} @@ -12142,6 +12045,16 @@ packages: micromark-util-sanitize-uri: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + dev: true + + /micromark-extension-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-extension-gfm-footnote@1.1.2: resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} @@ -12154,6 +12067,20 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true + + /micromark-extension-gfm-footnote@2.0.0: + resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-extension-gfm-strikethrough@1.0.7: resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} @@ -12164,6 +12091,18 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true + + /micromark-extension-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-extension-gfm-table@1.0.7: resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} @@ -12173,11 +12112,29 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true + + /micromark-extension-gfm-table@2.0.0: + resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-extension-gfm-tagfilter@1.0.2: resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} dependencies: micromark-util-types: 1.1.0 + dev: true + + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + dependencies: + micromark-util-types: 2.0.0 + dev: false /micromark-extension-gfm-task-list-item@1.0.5: resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} @@ -12187,6 +12144,17 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true + + /micromark-extension-gfm-task-list-item@2.0.1: + resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-extension-gfm@2.0.3: resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} @@ -12199,17 +12167,19 @@ packages: micromark-extension-gfm-task-list-item: 1.0.5 micromark-util-combine-extensions: 1.1.0 micromark-util-types: 1.1.0 + dev: true - /micromark-extension-math@2.1.2: - resolution: {integrity: sha512-es0CcOV89VNS9wFmyn+wyFTKweXGW4CEvdaAca6SWRWPyYCbBisnjaHLjWO4Nszuiud84jCpkHsqAJoa768Pvg==} + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} dependencies: - '@types/katex': 0.16.7 - katex: 0.16.9 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 + micromark-extension-gfm-autolink-literal: 2.0.0 + micromark-extension-gfm-footnote: 2.0.0 + micromark-extension-gfm-strikethrough: 2.0.0 + micromark-extension-gfm-table: 2.0.0 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.0.1 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 dev: false /micromark-factory-destination@1.1.0: @@ -12218,6 +12188,15 @@ packages: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-factory-label@1.1.0: resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} @@ -12226,12 +12205,30 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true + + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-factory-space@1.1.0: resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} dependencies: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-types: 2.0.0 + dev: false /micromark-factory-title@1.1.0: resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} @@ -12240,6 +12237,16 @@ packages: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-factory-whitespace@1.1.0: resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} @@ -12248,12 +12255,23 @@ packages: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-util-character@1.2.0: resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + dev: true /micromark-util-character@2.1.0: resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} @@ -12266,6 +12284,13 @@ packages: resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false /micromark-util-classify-character@1.1.0: resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} @@ -12273,17 +12298,41 @@ packages: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + dev: true + + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-util-combine-extensions@1.1.0: resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} dependencies: micromark-util-chunked: 1.1.0 micromark-util-types: 1.1.0 + dev: true + + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + dependencies: + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-util-decode-numeric-character-reference@1.1.0: resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} dependencies: micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false /micromark-util-decode-string@1.1.0: resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} @@ -12292,9 +12341,20 @@ packages: micromark-util-character: 1.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 + dev: false /micromark-util-encode@1.1.0: resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + dev: true /micromark-util-encode@2.0.0: resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} @@ -12302,16 +12362,35 @@ packages: /micromark-util-html-tag-name@1.2.0: resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + dev: true + + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + dev: false /micromark-util-normalize-identifier@1.1.0: resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} dependencies: micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false /micromark-util-resolve-all@1.1.0: resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} dependencies: micromark-util-types: 1.1.0 + dev: true + + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + dependencies: + micromark-util-types: 2.0.0 + dev: false /micromark-util-sanitize-uri@1.2.0: resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} @@ -12319,6 +12398,7 @@ packages: micromark-util-character: 1.2.0 micromark-util-encode: 1.1.0 micromark-util-symbol: 1.1.0 + dev: true /micromark-util-sanitize-uri@2.0.0: resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} @@ -12335,9 +12415,20 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 + dev: true + + /micromark-util-subtokenize@2.0.0: + resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false /micromark-util-symbol@1.1.0: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: true /micromark-util-symbol@2.0.0: resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} @@ -12345,6 +12436,7 @@ packages: /micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: true /micromark-util-types@2.0.0: resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} @@ -12372,6 +12464,31 @@ packages: uvu: 0.5.6 transitivePeerDependencies: - supports-color + dev: true + + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} @@ -12379,6 +12496,7 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 + dev: true /miller-rabin@4.0.1: resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} @@ -12389,17 +12507,19 @@ packages: dev: true /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz} + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + dev: true /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz} + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 + dev: true /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, tarball: https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz} + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true requiresBuild: true @@ -12407,7 +12527,7 @@ packages: optional: true /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==, tarball: https://registry.npmmirror.com/mime/-/mime-3.0.0.tgz} + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} hasBin: true dev: true @@ -12432,14 +12552,17 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + dev: true /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + dev: true /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + dev: true /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -12453,9 +12576,10 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -12472,6 +12596,7 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} @@ -12522,7 +12647,8 @@ packages: acorn: 8.11.3 pathe: 1.1.2 pkg-types: 1.0.3 - ufo: 1.4.0 + ufo: 1.5.3 + dev: true /mockdate@3.0.5: resolution: {integrity: sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==} @@ -12547,6 +12673,7 @@ packages: /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + dev: true /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -12564,6 +12691,7 @@ packages: dependencies: duplexer2: 0.1.4 object-assign: 4.1.1 + dev: true /mute-stream@0.0.7: resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} @@ -12583,12 +12711,7 @@ packages: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - - /nanoid@5.0.6: - resolution: {integrity: sha512-rRq0eMHoGZxlvaFOUdK1Ev83Bd1IgzzR+WJ3IbDJ7QOSdAxYjlurSPqFs9s4lJg29RT6nPwizFtJhQS6V5xgiA==} - engines: {node: ^18 || >=20} - hasBin: true - dev: false + dev: true /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} @@ -12596,9 +12719,10 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true /needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==, tarball: https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz} + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} engines: {node: '>= 4.4.x'} hasBin: true requiresBuild: true @@ -12671,6 +12795,7 @@ packages: /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true /node-libs-browser@2.2.1: resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} @@ -12702,6 +12827,7 @@ packages: /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -12735,14 +12861,15 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + dev: true /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} dev: true - /normalize-url@8.0.0: - resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + /normalize-url@8.0.1: + resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} engines: {node: '>=14.16'} dev: true @@ -12774,15 +12901,17 @@ packages: engines: {node: '>=8'} dependencies: path-key: 3.1.1 + dev: true /npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 + dev: true - /npm@9.9.2: - resolution: {integrity: sha512-D3tV+W0PzJOlwo8YmO6fNzaB1CrMVYd1V+2TURF6lbCbmZKqMsYgeQfPVvqiM3zbNSJPhFEnmlEXIogH2Vq7PQ==} + /npm@9.9.3: + resolution: {integrity: sha512-Z1l+rcQ5kYb17F3hHtO601arEpvdRYnCLtg8xo3AGtyj3IthwaraEOexI9903uANkifFbqHC8hT53KIrozWg8A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true dev: true @@ -12876,10 +13005,12 @@ packages: /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + dev: true /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + dev: true /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -12895,6 +13026,7 @@ packages: /object-keys@0.4.0: resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} + dev: true /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -12911,59 +13043,64 @@ packages: object-keys: 1.1.1 dev: true - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-object-atoms: 1.0.0 dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /object.getownpropertydescriptors@2.1.7: - resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + /object.getownpropertydescriptors@2.1.8: + resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==} engines: {node: '>= 0.8'} dependencies: - array.prototype.reduce: 1.0.6 + array.prototype.reduce: 1.0.7 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 - safe-array-concat: 1.1.0 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + gopd: 1.0.1 + safe-array-concat: 1.1.2 dev: true - /object.getprototypeof@1.0.5: - resolution: {integrity: sha512-4G0QiXpoIppBUz5efmxTm/HTbVN2ioGjk/PbsaNvwISFX+saj8muGp6vNuzIdsosFxM4V/kpUVNvy/+9+DVBZQ==} + /object.getprototypeof@1.0.6: + resolution: {integrity: sha512-gUiHHFVGLDayJsXfudx6KQEA6iMhPnsmAqL0vdBXhtKzTupcgNTGDJfW1a8xw81jjyWN07IRsVsCKyTn9wiJvQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 - reflect.getprototypeof: 1.0.5 + es-object-atoms: 1.0.0 + reflect.getprototypeof: 1.0.6 dev: true - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + /object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-object-atoms: 1.0.0 dev: true /obuf@1.1.2: @@ -12986,6 +13123,7 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 + dev: true /onetime@2.0.1: resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} @@ -12999,12 +13137,14 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 + dev: true /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 + dev: true /open@6.4.0: resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} @@ -13032,15 +13172,14 @@ packages: is-wsl: 2.2.0 dev: true - /openai@4.28.0: - resolution: {integrity: sha512-JM8fhcpmpGN0vrUwGquYIzdcEQHtFuom6sRCbbCM6CfzZXNuRk33G7KfeRAIfnaCxSpzrP5iHtwJzIm6biUZ2Q==} + /openai@4.33.0: + resolution: {integrity: sha512-Sh4KvplkvkAREuhb8yZpohqsOo08cBBu6LNWLD8YyMxe8yCxbE+ouJYUs1X2oDPrzQGANj0rFNQYiwW9gWLBOg==} hasBin: true dependencies: - '@types/node': 18.19.19 + '@types/node': 18.19.31 '@types/node-fetch': 2.6.11 abort-controller: 3.0.0 agentkeepalive: 4.5.0 - digest-fetch: 1.3.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 node-fetch: 2.7.0 @@ -13098,7 +13237,7 @@ packages: dev: true /p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==, tarball: https://registry.npmmirror.com/p-filter/-/p-filter-2.1.0.tgz} + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} dependencies: p-map: 2.1.0 @@ -13108,7 +13247,7 @@ packages: resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} engines: {node: '>=18'} dependencies: - p-map: 7.0.1 + p-map: 7.0.2 dev: true /p-finally@1.0.0: @@ -13133,12 +13272,14 @@ packages: engines: {node: '>=6'} dependencies: p-try: 2.2.0 + dev: true /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true /p-limit@4.0.0: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} @@ -13152,6 +13293,7 @@ packages: engines: {node: '>=18'} dependencies: yocto-queue: 1.0.0 + dev: true /p-locate@2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} @@ -13172,6 +13314,7 @@ packages: engines: {node: '>=8'} dependencies: p-limit: 2.3.0 + dev: true /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} @@ -13188,12 +13331,12 @@ packages: dev: true /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, tarball: https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz} + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} dev: true - /p-map@7.0.1: - resolution: {integrity: sha512-2wnaR0XL/FDOj+TgpDuRb2KTjLnu3Fma6b1ZUwGY7LcqenMcvP/YFpjpbPKY6WVGsbuJZRuoUz8iPrt8ORnAFw==} + /p-map@7.0.2: + resolution: {integrity: sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==} engines: {node: '>=18'} dev: true @@ -13215,6 +13358,7 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + dev: true /package-json@4.0.1: resolution: {integrity: sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==} @@ -13283,13 +13427,16 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 + dev: true - /parse-asn1@5.1.6: - resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + /parse-asn1@5.1.7: + resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} + engines: {node: '>= 0.10'} dependencies: - asn1.js: 5.4.1 + asn1.js: 4.10.1 browserify-aes: 1.2.0 evp_bytestokey: 1.0.3 + hash-base: 3.0.4 pbkdf2: 3.1.2 safe-buffer: 5.2.1 dev: true @@ -13316,7 +13463,6 @@ packages: is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - dev: true /parse-git-config@0.2.0: resolution: {integrity: sha512-amapZFADOJtHvX2URcRfbzG2OFcW+UAwmdK2kht2N2vsH5Py65VxI5yZTlD2DjmxVhTz6htFoVCxROYUJaYOXQ==} @@ -13347,16 +13493,17 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: true /parse-json@7.1.1: resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} engines: {node: '>=16'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 3.0.1 lines-and-columns: 2.0.4 @@ -13381,6 +13528,7 @@ packages: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: entities: 4.5.0 + dev: true /parseley@0.12.1: resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} @@ -13408,6 +13556,7 @@ packages: /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + dev: true /path-exists@5.0.0: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} @@ -13417,6 +13566,7 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + dev: true /path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} @@ -13430,16 +13580,19 @@ packages: /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + dev: true /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} + dev: true /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + /path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: lru-cache: 10.2.0 @@ -13455,6 +13608,7 @@ packages: /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + dev: true /path-type@5.0.0: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} @@ -13463,9 +13617,11 @@ packages: /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} @@ -13483,7 +13639,7 @@ packages: dev: true /periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==, tarball: https://registry.npmmirror.com/periscopic/-/periscopic-3.1.0.tgz} + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: '@types/estree': 1.0.5 estree-walker: 3.0.3 @@ -13492,10 +13648,12 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + dev: true /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} @@ -13518,7 +13676,7 @@ packages: /pino-abstract-transport@0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: - duplexify: 4.1.2 + duplexify: 4.1.3 split2: 4.2.0 dev: true @@ -13531,7 +13689,7 @@ packages: hasBin: true dependencies: atomic-sleep: 1.0.0 - fast-redact: 3.3.0 + fast-redact: 3.5.0 on-exit-leak-free: 0.2.0 pino-abstract-transport: 0.5.0 pino-std-serializers: 4.0.0 @@ -13546,6 +13704,7 @@ packages: /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + dev: true /pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} @@ -13560,6 +13719,7 @@ packages: engines: {node: '>=8'} dependencies: find-up: 4.1.0 + dev: true /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} @@ -13567,6 +13727,7 @@ packages: jsonc-parser: 3.2.1 mlly: 1.6.1 pathe: 1.1.2 + dev: true /pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} @@ -13588,416 +13749,416 @@ packages: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 /possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} dev: true - /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.35): + /postcss-attribute-case-insensitive@5.0.2(postcss@8.4.38): resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-clamp@4.1.0(postcss@8.4.35): + /postcss-clamp@4.1.0(postcss@8.4.38): resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} engines: {node: '>=7.6.0'} peerDependencies: postcss: ^8.4.6 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-color-functional-notation@4.2.4(postcss@8.4.35): + /postcss-color-functional-notation@4.2.4(postcss@8.4.38): resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-color-hex-alpha@8.0.4(postcss@8.4.35): + /postcss-color-hex-alpha@8.0.4(postcss@8.4.38): resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-color-rebeccapurple@7.1.1(postcss@8.4.35): + /postcss-color-rebeccapurple@7.1.1(postcss@8.4.38): resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-media@8.0.2(postcss@8.4.35): + /postcss-custom-media@8.0.2(postcss@8.4.38): resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.3 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-properties@12.1.11(postcss@8.4.35): + /postcss-custom-properties@12.1.11(postcss@8.4.38): resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-custom-selectors@6.0.3(postcss@8.4.35): + /postcss-custom-selectors@6.0.3(postcss@8.4.38): resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.3 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-dir-pseudo-class@6.0.5(postcss@8.4.35): + /postcss-dir-pseudo-class@6.0.5(postcss@8.4.38): resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-double-position-gradients@3.1.2(postcss@8.4.35): + /postcss-double-position-gradients@3.1.2(postcss@8.4.38): resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-env-function@4.0.6(postcss@8.4.35): + /postcss-env-function@4.0.6(postcss@8.4.38): resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-flexbugs-fixes@5.0.2(postcss@8.4.35): + /postcss-flexbugs-fixes@5.0.2(postcss@8.4.38): resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} peerDependencies: postcss: ^8.1.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-focus-visible@6.0.4(postcss@8.4.35): + /postcss-focus-visible@6.0.4(postcss@8.4.38): resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-focus-within@5.0.4(postcss@8.4.35): + /postcss-focus-within@5.0.4(postcss@8.4.38): resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-font-variant@5.0.0(postcss@8.4.35): + /postcss-font-variant@5.0.0(postcss@8.4.38): resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-gap-properties@3.0.5(postcss@8.4.35): + /postcss-gap-properties@3.0.5(postcss@8.4.38): resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-image-set-function@4.0.7(postcss@8.4.35): + /postcss-image-set-function@4.0.7(postcss@8.4.38): resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-initial@4.0.1(postcss@8.4.35): + /postcss-initial@4.0.1(postcss@8.4.38): resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-lab-function@4.2.1(postcss@8.4.35): + /postcss-lab-function@4.2.1(postcss@8.4.38): resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-logical@5.0.4(postcss@8.4.35): + /postcss-logical@5.0.4(postcss@8.4.38): resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.4 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-media-minmax@5.0.0(postcss@8.4.35): + /postcss-media-minmax@5.0.0(postcss@8.4.38): resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.35): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-modules-local-by-default@4.0.4(postcss@8.4.35): - resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==} + /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 dev: true - /postcss-modules-scope@3.1.1(postcss@8.4.35): - resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==} + /postcss-modules-scope@3.2.0(postcss@8.4.38): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-modules-values@4.0.0(postcss@8.4.35): + /postcss-modules-values@4.0.0(postcss@8.4.38): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /postcss-nesting@10.2.0(postcss@8.4.35): + /postcss-nesting@10.2.0(postcss@8.4.38): resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.15) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.16) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-opacity-percentage@1.1.3(postcss@8.4.35): + /postcss-opacity-percentage@1.1.3(postcss@8.4.38): resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-overflow-shorthand@3.0.4(postcss@8.4.35): + /postcss-overflow-shorthand@3.0.4(postcss@8.4.38): resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-page-break@3.0.4(postcss@8.4.35): + /postcss-page-break@3.0.4(postcss@8.4.38): resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} peerDependencies: postcss: ^8 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-place@7.0.5(postcss@8.4.35): + /postcss-place@7.0.5(postcss@8.4.38): resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 postcss-value-parser: 4.2.0 dev: true - /postcss-prefix-selector@1.16.0(postcss@8.4.35): + /postcss-prefix-selector@1.16.0(postcss@8.4.38): resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==} peerDependencies: postcss: '>4 <9' dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-preset-env@7.5.0(postcss@8.4.35): + /postcss-preset-env@7.5.0(postcss@8.4.38): resolution: {integrity: sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.4 dependencies: - '@csstools/postcss-color-function': 1.1.1(postcss@8.4.35) - '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.35) - '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.35) - '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.35) - '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.35) - '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.35) - '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.35) - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.35) - '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.35) - autoprefixer: 10.4.17(postcss@8.4.35) + '@csstools/postcss-color-function': 1.1.1(postcss@8.4.38) + '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.38) + '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.38) + '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.38) + '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.38) + '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.38) + '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.38) + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.38) + '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.38) + '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.38) + autoprefixer: 10.4.19(postcss@8.4.38) browserslist: 4.23.0 - css-blank-pseudo: 3.0.3(postcss@8.4.35) - css-has-pseudo: 3.0.4(postcss@8.4.35) - css-prefers-color-scheme: 6.0.3(postcss@8.4.35) + css-blank-pseudo: 3.0.3(postcss@8.4.38) + css-has-pseudo: 3.0.4(postcss@8.4.38) + css-prefers-color-scheme: 6.0.3(postcss@8.4.38) cssdb: 6.6.3 - postcss: 8.4.35 - postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.35) - postcss-clamp: 4.1.0(postcss@8.4.35) - postcss-color-functional-notation: 4.2.4(postcss@8.4.35) - postcss-color-hex-alpha: 8.0.4(postcss@8.4.35) - postcss-color-rebeccapurple: 7.1.1(postcss@8.4.35) - postcss-custom-media: 8.0.2(postcss@8.4.35) - postcss-custom-properties: 12.1.11(postcss@8.4.35) - postcss-custom-selectors: 6.0.3(postcss@8.4.35) - postcss-dir-pseudo-class: 6.0.5(postcss@8.4.35) - postcss-double-position-gradients: 3.1.2(postcss@8.4.35) - postcss-env-function: 4.0.6(postcss@8.4.35) - postcss-focus-visible: 6.0.4(postcss@8.4.35) - postcss-focus-within: 5.0.4(postcss@8.4.35) - postcss-font-variant: 5.0.0(postcss@8.4.35) - postcss-gap-properties: 3.0.5(postcss@8.4.35) - postcss-image-set-function: 4.0.7(postcss@8.4.35) - postcss-initial: 4.0.1(postcss@8.4.35) - postcss-lab-function: 4.2.1(postcss@8.4.35) - postcss-logical: 5.0.4(postcss@8.4.35) - postcss-media-minmax: 5.0.0(postcss@8.4.35) - postcss-nesting: 10.2.0(postcss@8.4.35) - postcss-opacity-percentage: 1.1.3(postcss@8.4.35) - postcss-overflow-shorthand: 3.0.4(postcss@8.4.35) - postcss-page-break: 3.0.4(postcss@8.4.35) - postcss-place: 7.0.5(postcss@8.4.35) - postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.35) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.35) - postcss-selector-not: 5.0.0(postcss@8.4.35) + postcss: 8.4.38 + postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.38) + postcss-clamp: 4.1.0(postcss@8.4.38) + postcss-color-functional-notation: 4.2.4(postcss@8.4.38) + postcss-color-hex-alpha: 8.0.4(postcss@8.4.38) + postcss-color-rebeccapurple: 7.1.1(postcss@8.4.38) + postcss-custom-media: 8.0.2(postcss@8.4.38) + postcss-custom-properties: 12.1.11(postcss@8.4.38) + postcss-custom-selectors: 6.0.3(postcss@8.4.38) + postcss-dir-pseudo-class: 6.0.5(postcss@8.4.38) + postcss-double-position-gradients: 3.1.2(postcss@8.4.38) + postcss-env-function: 4.0.6(postcss@8.4.38) + postcss-focus-visible: 6.0.4(postcss@8.4.38) + postcss-focus-within: 5.0.4(postcss@8.4.38) + postcss-font-variant: 5.0.0(postcss@8.4.38) + postcss-gap-properties: 3.0.5(postcss@8.4.38) + postcss-image-set-function: 4.0.7(postcss@8.4.38) + postcss-initial: 4.0.1(postcss@8.4.38) + postcss-lab-function: 4.2.1(postcss@8.4.38) + postcss-logical: 5.0.4(postcss@8.4.38) + postcss-media-minmax: 5.0.0(postcss@8.4.38) + postcss-nesting: 10.2.0(postcss@8.4.38) + postcss-opacity-percentage: 1.1.3(postcss@8.4.38) + postcss-overflow-shorthand: 3.0.4(postcss@8.4.38) + postcss-page-break: 3.0.4(postcss@8.4.38) + postcss-place: 7.0.5(postcss@8.4.38) + postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.38) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.38) + postcss-selector-not: 5.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 dev: true - /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.35): + /postcss-pseudo-class-any-link@7.1.6(postcss@8.4.38): resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} engines: {node: ^12 || ^14 || >=16} peerDependencies: postcss: ^8.2 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.35): + /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.38): resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} peerDependencies: postcss: ^8.0.3 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /postcss-resolve-nested-selector@0.1.1: resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} dev: true - /postcss-safe-parser@6.0.0(postcss@8.4.35): + /postcss-safe-parser@6.0.0(postcss@8.4.38): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.3.3 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-selector-not@5.0.0(postcss@8.4.35): + /postcss-selector-not@5.0.0(postcss@8.4.38): resolution: {integrity: sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==} peerDependencies: postcss: ^8.1.0 dependencies: balanced-match: 1.0.2 - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 dev: true - /postcss-syntax@0.36.2(postcss@8.4.35): + /postcss-syntax@0.36.2(postcss@8.4.38): resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==} peerDependencies: postcss: '>=5.0.0' @@ -14018,20 +14179,21 @@ packages: postcss-scss: optional: true dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 + dev: true /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -14043,7 +14205,7 @@ packages: engines: {node: '>=0.10.0'} dev: true - /prettier-plugin-organize-imports@3.2.4(prettier@3.2.5)(typescript@5.3.3): + /prettier-plugin-organize-imports@3.2.4(prettier@3.2.5)(typescript@5.4.5): resolution: {integrity: sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==} peerDependencies: '@volar/vue-language-plugin-pug': ^1.0.4 @@ -14057,11 +14219,11 @@ packages: optional: true dependencies: prettier: 3.2.5 - typescript: 5.3.3 + typescript: 5.4.5 dev: true - /prettier-plugin-packagejson@2.4.12(prettier@3.2.5): - resolution: {integrity: sha512-hifuuOgw5rHHTdouw9VrhT8+Nd7UwxtL1qco8dUfd4XUFQL6ia3xyjSxhPQTsGnSYFraTWy5Omb+MZm/OWDTpQ==} + /prettier-plugin-packagejson@2.4.14(prettier@3.2.5): + resolution: {integrity: sha512-sli+gV5tW7uxvzDZQscaBtSfbyAW2ToL6n/HGt51PipwX9vI7M54vefG0mKSfklVkT29TNGO6Mo6g8c6Z79gmw==} peerDependencies: prettier: '>= 1.16.0' peerDependenciesMeta: @@ -14069,7 +14231,7 @@ packages: optional: true dependencies: prettier: 3.2.5 - sort-package-json: 2.8.0 + sort-package-json: 2.10.0 synckit: 0.9.0 dev: true @@ -14115,6 +14277,7 @@ packages: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 + dev: true /prism-react-renderer@1.3.5(react@18.2.0): resolution: {integrity: sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==} @@ -14140,6 +14303,7 @@ packages: /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true /process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} @@ -14175,6 +14339,7 @@ packages: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 + dev: true /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -14182,6 +14347,7 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + dev: true /property-information@5.6.0: resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} @@ -14189,8 +14355,8 @@ packages: xtend: 4.0.2 dev: true - /property-information@6.4.1: - resolution: {integrity: sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==} + /property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} /proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -14213,7 +14379,8 @@ packages: dev: true /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==, tarball: https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz} + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true /public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} @@ -14221,7 +14388,7 @@ packages: bn.js: 4.12.0 browserify-rsa: 4.1.0 create-hash: 1.2.0 - parse-asn1: 5.1.6 + parse-asn1: 5.1.7 randombytes: 2.1.0 safe-buffer: 5.2.1 dev: true @@ -14249,15 +14416,17 @@ packages: dev: true /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==, tarball: https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz} + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz} + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + dev: true - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + dev: true /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} @@ -14266,16 +14435,17 @@ packages: /qrcode.react@3.1.0(react@18.2.0): resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==} + requiresBuild: true peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: react: 18.2.0 - /qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==, tarball: https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz} + /qs@6.12.0: + resolution: {integrity: sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 dev: true /query-string@6.14.1: @@ -14295,6 +14465,7 @@ packages: /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -14341,7 +14512,7 @@ packages: safe-buffer: 5.2.1 dev: true - /raw-loader@4.0.2(webpack@5.90.3): + /raw-loader@4.0.2(webpack@5.91.0): resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -14349,74 +14520,79 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3 + webpack: 5.91.0 dev: true - /rc-cascader@3.21.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-J7GozpgsLaOtzfIHFJFuh4oFY0ePb1w10twqK6is3pAkqHkca/PsokbDr822KIRZ8/CK8CqevxohuPDVZ1RO/A==} + /rc-cascader@3.24.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-RgKuYgEGPx+6wCgguYFHjMsDZdCyydZd58YJRCfYQ8FObqLnZW0x/vUcEyPjhWIj1EhjV958IcR+NFPDbbj9kg==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 array-tree-filter: 2.1.0 classnames: 2.5.1 - rc-select: 14.11.0(react-dom@18.2.0)(react@18.2.0) + rc-select: 14.13.1(react-dom@18.2.0)(react@18.2.0) rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-checkbox@3.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PAwpJFnBa3Ei+5pyqMMXdcKYKNBMS+TvSDiLdDnARnMJHC8ESxwPfm4Ao1gJiKtWLdmGfigascnCpwrHFgoOBQ==} + /rc-checkbox@3.2.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-8inzw4y9dAhZmv/Ydl59Qdy5tdp9CKg4oPVcRigi+ga/yKPZS5m5SyyQPtYSgbcqHRYOdUhiPSeKfktc76du1A==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-collapse@3.7.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ZRw6ipDyOnfLFySxAiCMdbHtb5ePAsB9mT17PA6y1mRD/W6KHRaZeb5qK/X9xDV1CqgyxMpzw0VdS74PCcUk4A==} + /rc-collapse@3.7.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-60FJcdTRn0X5sELF18TANwtVi7FtModq649H11mYF1jh83DniMoM4MqY627sEKRCTm4+WXfGDcB7hY5oW6xhyw==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-dialog@9.3.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-975X3018GhR+EjZFbxA2Z57SX5rnu0G0/OxFgMMvZK4/hQWEm3MHaNvP4wXpxYDoJsp+xUvVW+GB9CMMCm81jA==} + /rc-dialog@9.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-AScCexaLACvf8KZRqCPz12BJ8olszXOS4lKlkMyzDQHS1m0zj1KZMYgmMCh39ee0Dcv8kyrj8mTqxuLyhH+QuQ==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-drawer@7.0.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ePcS4KtQnn57bCbVXazHN2iC8nTPCXlWEIA/Pft87Pd9U7ZeDkdRzG47jWG2/TAFXFlFltRAMcslqmUM8NPCGA==} + /rc-drawer@7.1.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-nBE1rF5iZvpavoyqhSSz2mk/yANltA7g3aF0U45xkx381n3we/RKs9cJfNKp9mSWCedOKWt9FLEwZDaAaOGn2w==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14426,23 +14602,39 @@ packages: react: '>=16.11.0' react-dom: '>=16.11.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /rc-dropdown@4.2.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==} + requiresBuild: true + peerDependencies: + react: '>=16.11.0' + react-dom: '>=16.11.0' + dependencies: + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0)(react@18.2.0) + classnames: 2.5.1 + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-field-form@1.41.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-k9AS0wmxfJfusWDP/YXWTpteDNaQ4isJx9UKxx4/e8Dub4spFeZ54/EuN2sYrMRID/+hUznPgVZeg+Gf7XSYCw==} + /rc-field-form@1.44.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-el7w87fyDUsca63Y/s8qJcq9kNkf/J5h+iTdqG5WsSHLH0e6Usl7QuYSmSVzJMgtp40mOVZIY/W/QP9zwrp1FA==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 async-validator: 4.2.5 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14452,66 +14644,70 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /rc-image@7.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Z9loECh92SQp0nSipc0MBuf5+yVC05H/pzC+Nf8xw1BKDFUJzUeehYBjaWlxly8VGBZJcTHYri61Fz9ng1G3Ag==} + /rc-image@7.6.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-tL3Rvd1sS+frZQ01i+tkeUPaOeFz2iG9/scAt/Cfs0hyCRVA/w0Pu1J/JxIX8blalvmHE0bZQRYdOmRAzWu4Hg==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 - rc-dialog: 9.3.4(react-dom@18.2.0)(react@18.2.0) + rc-dialog: 9.4.0(react-dom@18.2.0)(react@18.2.0) rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /rc-input-number@9.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-RfcDBDdWFFetouWFXBA+WPEC8LzBXyngr9b+yTLVIygfFu7HiLRGn/s/v9wwno94X7KFvnb28FNynMGj9XJlDQ==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@rc-component/mini-decimal': 1.1.0 classnames: 2.5.1 - rc-input: 1.4.3(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-input: 1.4.5(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-input@1.4.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-aHyQUAIRmTlOnvk5EcNqEpJ+XMtfMpYRAJayIlJfsvvH9cAKUWboh4egm23vgMA7E+c/qm4BZcnrDcA960GC1w==} + /rc-input@1.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-AjzykhwnwYTRSwwgCu70CGKBIAv6bP2nqnFptnNTprph/TF1BAs0Qxl91mie/BR6n827WIJB6ZjaRf9iiMwAfw==} + requiresBuild: true peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-mentions@2.10.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-72qsEcr/7su+a07ndJ1j8rI9n0Ka/ngWOLYnWMMv0p2mi/5zPwPrEDTt6Uqpe8FWjWhueDJx/vzunL6IdKDYMg==} + /rc-mentions@2.11.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-upb4AK1SRFql7qGnbLEvJqLMugVVIyjmwBJW9L0eLoN9po4JmJZaBzmKA4089fNtsU8k6l/tdZiVafyooeKnLw==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 - '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 - rc-input: 1.4.3(react-dom@18.2.0)(react@18.2.0) - rc-menu: 9.12.4(react-dom@18.2.0)(react@18.2.0) + rc-input: 1.4.5(react-dom@18.2.0)(react@18.2.0) + rc-menu: 9.13.0(react-dom@18.2.0)(react@18.2.0) rc-textarea: 1.6.3(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14521,12 +14717,29 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /rc-menu@9.13.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1l8ooCB3HcYJKCltC/s7OxRKRjgymdl9htrCeGZcXNaMct0RxZRK6OPV3lPhVksIvAGMgzPd54ClpZ5J4b8cZA==} + requiresBuild: true + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + dependencies: + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0)(react@18.2.0) + classnames: 2.5.1 + rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) + rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14536,23 +14749,24 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-notification@5.3.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-WCf0uCOkZ3HGfF0p1H4Sgt7aWfipxORWTPp7o6prA3vxwtWhtug3GfpYls1pnBp4WA+j8vGIi5c2/hQRpGzPcQ==} + /rc-notification@5.4.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-li19y9RoYJciF3WRFvD+DvWS70jdL8Fr+Gfb/OshK+iY6iTkwzoigmSIp76/kWh5tF5i/i9im12X3nsF85GYdA==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14562,28 +14776,30 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /rc-pagination@4.0.4(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GGrLT4NgG6wgJpT/hHIpL9nELv27A1XbSZzECIuQBQTVSf4xGKxWr6I/jhpRPauYEWEbWVw22ObG6tJQqwJqWQ==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-picker@4.1.5(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-dh2E9j7HomZW10RWIBsdyXs3geHkSslVqKTx3VZfmi9UEabiQrBBNKVIhqn2m0goia0dqyWJ4qRghAsBVLGzbw==} + /rc-picker@4.3.1(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1/TGosPALu/CWBEEpBTmZVNTSQXC5qpsI9jSiZdlLSrz6xhgBj39WNGJsmveiWPRgbHlq/vf5nI8cLMCMinZ5w==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: date-fns: '>= 2.x' dayjs: '>= 1.x' @@ -14601,38 +14817,40 @@ packages: moment: optional: true dependencies: - '@babel/runtime': 7.23.9 - '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 dayjs: 1.11.10 rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-progress@3.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-V6Amx6SbLRwPin/oD+k1vbPrO8+9Qf8zW1T8A7o83HdNafEVvAxPV5YsgtKFP+Ud5HghLj33zKOcEHrcrUGkfw==} + /rc-progress@4.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /rc-rate@2.12.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14642,39 +14860,41 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) resize-observer-polyfill: 1.5.1 /rc-segmented@2.3.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==} + requiresBuild: true peerDependencies: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-select@14.11.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-8J8G/7duaGjFiTXCBLWfh5P+KDWyA3KTlZDfV3xj/asMPqB2cmxfM+lH50wRiPIRsCQ6EbkCFBccPuaje3DHIg==} + /rc-select@14.13.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-A1VHqjIOemxLnUGRxLGVqXBs8jGcJemI5NXxOJwU5PQc1wigAu1T4PRLgMkTPDOz8gPhlY9dwsPzMgakMc2QjQ==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.23.9 - '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14682,53 +14902,57 @@ packages: /rc-slider@10.5.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xiYght50cvoODZYI43v3Ylsqiw14+D7ELsgzR40boDZaya1HFa1Etnv9MDkQE8X/UrXAffwv2AcNAhslgYuDTw==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /rc-steps@6.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /rc-switch@4.1.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-table@7.39.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-7fHLMNsm/2DlGwyIMkdH2xIeRzb5I69bLsFaEVtX+gqmGhByy0wtOAgHkiOew3PtXozSJyh+iXifjLgQzWdczw==} + /rc-table@7.45.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-6aSbGrnkN2GLSt3s1x+wa4f3j/VEgg1uKPpaLY5qHH1/nFyreS2V7DFJ0TfUb18allf2FQl7oVYEjTixlBXEyQ==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@rc-component/context': 1.4.0(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14740,71 +14964,75 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 - classnames: 2.3.2 + '@babel/runtime': 7.24.4 + classnames: 2.5.1 rc-dropdown: 4.1.0(react-dom@18.2.0)(react@18.2.0) rc-menu: 9.12.4(react-dom@18.2.0)(react@18.2.0) rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /rc-tabs@14.0.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lp1YWkaPnjlyhOZCPrAWxK6/P6nMGX/BAZcAC3nuVwKz0Byfp+vNnQKK8BRCP2g/fzu+SeB5dm9aUigRu3tRkQ==} + /rc-tabs@14.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5nOr9PVpJy2SWHTLgv1+kESDOb0tFzl0cYU9r9d8LfL0Wg9i/n1B558rmkxdQHgBwMqxmwoyPSAbQROxMQe8nw==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-dropdown: 4.1.0(react-dom@18.2.0)(react@18.2.0) - rc-menu: 9.12.4(react-dom@18.2.0)(react@18.2.0) + rc-dropdown: 4.2.0(react-dom@18.2.0)(react@18.2.0) + rc-menu: 9.13.0(react-dom@18.2.0)(react@18.2.0) rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /rc-textarea@1.6.3(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-8k7+8Y2GJ/cQLiClFMg8kUXOOdvcFQrnGeSchOvI2ZMIVvX5a3zQpLxoODL0HTrvU63fPkRmMuqaEcOF9dQemA==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-input: 1.4.3(react-dom@18.2.0)(react@18.2.0) + rc-input: 1.4.5(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-tooltip@6.1.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HMSbSs5oieZ7XddtINUddBLSVgsnlaSb3bZrzzGWjXa7/B7nNedmsuz72s7EWFEro9mNa7RyF3gOXKYqvJiTcQ==} + /rc-tooltip@6.2.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-iS/3iOAvtDh9GIx1ulY7EFUXUtktFccNLsARo3NPgLf0QW9oT0w3dA9cYWlhqAKmD+uriEwdWz1kH0Qs4zk2Aw==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 - '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.4 + '@rc-component/trigger': 2.1.1(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-tree-select@5.17.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-7sRGafswBhf7n6IuHyCEFCildwQIgyKiV8zfYyUoWfZEFdhuk7lCH+DN0aHt+oJrdiY9+6Io/LDXloGe01O8XQ==} + /rc-tree-select@5.19.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-f4l5EsmSGF3ggj76YTzKNPY9SnXfFaer7ZccTSGb3urUf54L+cCqyT+UsPr+S5TAr8mZSxJ7g3CgkCe+cVQ6sw==} + requiresBuild: true peerDependencies: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-select: 14.11.0(react-dom@18.2.0)(react@18.2.0) + rc-select: 14.13.1(react-dom@18.2.0)(react@18.2.0) rc-tree: 5.8.5(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14815,33 +15043,34 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) /rc-upload@4.5.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA==} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /rc-util@5.38.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-yRGRPKyi84H7NkRSP6FzEIYBdUt4ufdsmXUZ7qM2H5qoByPax70NnGPkfo36N+UKUnUBj2f2Q2eUbwYMuAsIOQ==} + /rc-util@5.39.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OW/ERynNDgNr4y0oiFmtes3rbEamXw7GHGbkbNd9iRr7kgT03T6fT0b9WpJ3mbxKhyOcAHnGcIoh5u/cjrC2OQ==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 18.2.0 @@ -14849,14 +15078,15 @@ packages: /rc-virtual-list@3.11.4(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NbBi0fvyIu26gP69nQBiWgUMTPX3mr4FcuBQiVqagU0BnuX8WQkiivnMs105JROeuUIFczLrlgUhLQwTWV1XDA==} engines: {node: '>=8.x'} + requiresBuild: true peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14870,27 +15100,6 @@ packages: strip-json-comments: 2.0.1 dev: true - /re-resizable@6.9.11(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-a3hiLWck/NkmyLvGWUuvkAmN1VhwAz4yOhS6FdMTaxCUVN9joIWkT11wsO68coG/iEYuwn+p/7qAmfQzRhiPLQ==} - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /re-resizable@6.9.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-0xYKS5+Z0zk+vICQlcZW+g54CcJTTmHluA7JUUgvERDxnKAnytylcyPsA+BSFi759s5hPlHmBRegFrwXs2FuBQ==} - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - dependencies: - fast-memoize: 2.5.2 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /react-copy-to-clipboard@5.1.0(react@18.2.0): resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==} peerDependencies: @@ -14899,6 +15108,7 @@ packages: copy-to-clipboard: 3.3.3 prop-types: 15.8.1 react: 18.2.0 + dev: true /react-dom@18.1.0(react@18.1.0): resolution: {integrity: sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==} @@ -14912,6 +15122,7 @@ packages: /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + requiresBuild: true peerDependencies: react: ^18.2.0 dependencies: @@ -14919,24 +15130,12 @@ packages: react: 18.2.0 scheduler: 0.23.0 - /react-draggable@4.4.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==} - peerDependencies: - react: '>= 16.3.0' - react-dom: '>= 16.3.0' - dependencies: - clsx: 1.2.1 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /react-error-boundary@4.0.12(react@18.2.0): - resolution: {integrity: sha512-kJdxdEYlb7CPC1A0SeUY38cHpjuu6UkvzKiAmqmOFL21VRfMhOcWxTCBgLVCO0VEMh9JhFNcVaXlV4/BTpiwOA==} + /react-error-boundary@4.0.13(react@18.2.0): + resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} peerDependencies: react: '>=16.13.1' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 react: 18.2.0 dev: true @@ -14954,7 +15153,7 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 invariant: 2.2.4 prop-types: 15.8.1 react: 18.1.0 @@ -14969,7 +15168,7 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 invariant: 2.2.4 prop-types: 15.8.1 react: 18.2.0 @@ -14978,18 +15177,8 @@ packages: shallowequal: 1.1.0 dev: true - /react-hotkeys-hook@4.5.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Samb85GSgAWFQNvVt3PS90LPPGSf9mkH/r4au81ZP1yOIFayLC3QAvqTgGtJ8YEDMXtPmaVBs6NgipHO6h4Mug==} - peerDependencies: - react: '>=16.8.1' - react-dom: '>=16.8.1' - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /react-i18next@14.0.5(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5+bQSeEtgJrMBABBL5lO7jPdSNAbeAZ+MlFWDw//7FnVacuVu3l9EeWFzBQvZsKy+cihkbThWOAThEdH8YjGEw==, tarball: https://registry.npmmirror.com/react-i18next/-/react-i18next-14.0.5.tgz} + /react-i18next@14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3KwX6LHpbvGQ+sBEntjV4sYW3Zovjjl3fpoHbUwSgFHf0uRBcbeCBLR5al6ikncI5+W0EFb71QXZmfop+J6NrQ==} peerDependencies: i18next: '>= 23.2.3' react: '>= 16.8.0' @@ -15001,28 +15190,15 @@ packages: react-native: optional: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 html-parse-stringify: 3.0.1 - i18next: 23.10.0 + i18next: 23.11.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /react-intersection-observer@9.8.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-QzOFdROX8D8MH3wE3OVKH0f3mLjKTtEN1VX/rkNuECCff+aKky0pIjulDhr3Ewqj5el/L+MhBkM3ef0Tbt+qUQ==} - peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react-dom: - optional: true - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /react-intl@6.6.2(react@18.2.0)(typescript@5.3.3): - resolution: {integrity: sha512-IpW2IkLtGENSFlX3vfH11rjuCIsW0VyjT0Q1pPKMZPtT2z1FxLt4weFT5Ezti2TScT1xiyb3aQBFth9EB7jzAg==} + /react-intl@6.6.5(react@18.2.0)(typescript@5.4.5): + resolution: {integrity: sha512-OErDPbGqus0QKVj77MGCC9Plbnys3CDQrq6Lw41c60pmeTdn41AhoS1SIzXG6SUlyF7qNN2AVqfrrIvHUgSyLQ==} peerDependencies: react: ^16.6.0 || 17 || 18 typescript: ^4.7 || 5 @@ -15032,7 +15208,7 @@ packages: dependencies: '@formatjs/ecma402-abstract': 1.18.2 '@formatjs/icu-messageformat-parser': 2.7.6 - '@formatjs/intl': 2.10.0(typescript@5.3.3) + '@formatjs/intl': 2.10.1(typescript@5.4.5) '@formatjs/intl-displaynames': 6.6.6 '@formatjs/intl-listformat': 7.5.5 '@types/hoist-non-react-statics': 3.3.5 @@ -15041,11 +15217,12 @@ packages: intl-messageformat: 10.5.11 react: 18.2.0 tslib: 2.6.2 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -15054,38 +15231,34 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-layout-kit@1.7.4(react@18.2.0): - resolution: {integrity: sha512-Ovvyb56kOAZCbytaXTHsWEVPHaBP368Q0jLqq37SythSibk9iB+op9iGjFPrGByWIaeslg5LcnSXjRxd4tT2ng==} + /react-layout-kit@1.9.0(react@18.2.0): + resolution: {integrity: sha512-YjFXGaWTemwagfdmqz1VxTATXCpQmDfW/giHOSQDrGsddyBC6MEFdj+kNHYY9WpRamQDjyzAIkOQaJ1KxmcC2g==} peerDependencies: react: '>=18' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 '@emotion/css': 11.11.2 react: 18.2.0 + dev: true - /react-markdown@8.0.7(@types/react@18.2.31)(react@18.2.0): - resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} + /react-markdown@9.0.1(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} peerDependencies: - '@types/react': '>=16' - react: '>=16' + '@types/react': '>=18' + react: '>=18' dependencies: - '@types/hast': 2.3.10 - '@types/prop-types': 15.7.11 + '@types/hast': 3.0.4 '@types/react': 18.2.31 - '@types/unist': 2.0.10 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 2.0.1 - prop-types: 15.8.1 - property-information: 6.4.1 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.0 + html-url-attributes: 3.0.0 + mdast-util-to-hast: 13.1.0 react: 18.2.0 - react-is: 18.2.0 - remark-parse: 10.0.2 - remark-rehype: 10.1.0 - space-separated-tokens: 2.0.2 - style-to-object: 0.4.4 - unified: 10.1.2 - unist-util-visit: 4.1.2 - vfile: 5.3.7 + remark-parse: 11.0.0 + remark-rehype: 11.1.0 + unified: 11.0.4 + unist-util-visit: 5.0.0 + vfile: 6.0.1 transitivePeerDependencies: - supports-color dev: false @@ -15099,19 +15272,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-rnd@10.4.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-0m887AjQZr6p2ADLNnipquqsDq4XJu/uqVqI3zuoGD19tRm6uB83HmZWydtkilNp5EWsOHbLGF4IjWMdd5du8Q==} - peerDependencies: - react: '>=16.3.0' - react-dom: '>=16.3.0' - dependencies: - re-resizable: 6.9.6(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-draggable: 4.4.5(react-dom@18.2.0)(react@18.2.0) - tslib: 2.3.1 - dev: false - /react-router-dom@6.3.0(react-dom@18.1.0)(react@18.1.0): resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==} peerDependencies: @@ -15159,7 +15319,7 @@ packages: peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.29.0 @@ -15167,19 +15327,6 @@ packages: refractor: 3.6.0 dev: true - /react-window@1.8.10(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg==} - engines: {node: '>8.0.0'} - peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@babel/runtime': 7.23.9 - memoize-one: 5.2.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /react@18.1.0: resolution: {integrity: sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==} engines: {node: '>=0.10.0'} @@ -15190,27 +15337,9 @@ packages: /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: - loose-envify: 1.4.0 - - /reactflow@11.10.4(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-0CApYhtYicXEDg/x2kvUHiUk26Qur8lAtTtiSlptNKuyEuGti6P1y5cS32YGaUoDMoCqkm/m+jcKkfMOvSCVRA==} - peerDependencies: - react: '>=17' - react-dom: '>=17' - dependencies: - '@reactflow/background': 11.3.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/controls': 11.2.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/core': 11.10.4(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/minimap': 11.7.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/node-resizer': 2.2.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/node-toolbar': 1.3.9(@types/react@18.2.31)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - immer - dev: false + loose-envify: 1.4.0 /read-pkg-up@10.1.0: resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} @@ -15218,7 +15347,7 @@ packages: dependencies: find-up: 6.3.0 read-pkg: 8.1.0 - type-fest: 4.10.3 + type-fest: 4.15.0 dev: true /read-pkg-up@7.0.1: @@ -15266,7 +15395,7 @@ packages: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 parse-json: 7.1.1 - type-fest: 4.10.3 + type-fest: 4.15.0 dev: true /readable-stream@1.0.34: @@ -15276,6 +15405,7 @@ packages: inherits: 2.0.4 isarray: 0.0.1 string_decoder: 0.10.31 + dev: true /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -15287,6 +15417,7 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 + dev: true /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} @@ -15315,6 +15446,7 @@ packages: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 + dev: true /redent@4.0.0: resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} @@ -15330,13 +15462,13 @@ packages: esprima: 4.0.1 dev: true - /reflect.getprototypeof@1.0.5: - resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==} + /reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.3 @@ -15412,17 +15544,6 @@ packages: unist-util-visit: 4.1.2 dev: true - /rehype-katex@6.0.3: - resolution: {integrity: sha512-ByZlRwRUcWegNbF70CVRm2h/7xy7jQ3R9LaY4VVSvjnoVWwWVhNL60DiZsBpC5tSzYQOCvDbzncIpIjPZWodZA==} - dependencies: - '@types/hast': 2.3.10 - '@types/katex': 0.14.0 - hast-util-from-html-isomorphic: 1.0.0 - hast-util-to-text: 3.1.2 - katex: 0.16.9 - unist-util-visit: 4.1.2 - dev: false - /rehype-remove-comments@5.0.0: resolution: {integrity: sha512-sfiVT+u1in19sxo9vv/SDQVbHE2mADScNrpeVsUxBFl14zOMZnfPb6l4hR+lXqe10G13UFVqv5pt8zDbCR4JYQ==} dependencies: @@ -15474,14 +15595,19 @@ packages: unified: 10.1.2 transitivePeerDependencies: - supports-color + dev: true - /remark-math@5.1.1: - resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==} + /remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} dependencies: - '@types/mdast': 3.0.15 - mdast-util-math: 2.0.2 - micromark-extension-math: 2.1.2 - unified: 10.1.2 + '@types/mdast': 4.0.3 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color dev: false /remark-parse@10.0.2: @@ -15492,6 +15618,18 @@ packages: unified: 10.1.2 transitivePeerDependencies: - supports-color + dev: true + + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + micromark-util-types: 2.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + dev: false /remark-rehype@10.1.0: resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} @@ -15500,6 +15638,25 @@ packages: '@types/mdast': 3.0.15 mdast-util-to-hast: 12.3.0 unified: 10.1.2 + dev: true + + /remark-rehype@11.1.0: + resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + mdast-util-to-hast: 13.1.0 + unified: 11.0.4 + vfile: 6.0.1 + dev: false + + /remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-to-markdown: 2.1.0 + unified: 11.0.4 + dev: false /remote-origin-url@0.4.0: resolution: {integrity: sha512-HYhdsT2pNd0LP4Osb0vtQ1iassxIc3Yk1oze7j8dMJFciMkW8e0rdg9E/mOunqtSVHSzvMfwLDIYzPnEDmpk6Q==} @@ -15533,6 +15690,7 @@ packages: /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + dev: true /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} @@ -15541,6 +15699,7 @@ packages: /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true /reselect@4.1.8: resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} @@ -15554,6 +15713,7 @@ packages: engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 + dev: true /resolve-dir@0.1.1: resolution: {integrity: sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==} @@ -15566,10 +15726,12 @@ packages: /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + dev: true /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + dev: true /resolve-global@1.0.0: resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} @@ -15585,6 +15747,7 @@ packages: /resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} + dev: true /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} @@ -15600,6 +15763,7 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -15684,30 +15848,34 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.12.0: - resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} + /rollup@4.14.1: + resolution: {integrity: sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.12.0 - '@rollup/rollup-android-arm64': 4.12.0 - '@rollup/rollup-darwin-arm64': 4.12.0 - '@rollup/rollup-darwin-x64': 4.12.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.12.0 - '@rollup/rollup-linux-arm64-gnu': 4.12.0 - '@rollup/rollup-linux-arm64-musl': 4.12.0 - '@rollup/rollup-linux-riscv64-gnu': 4.12.0 - '@rollup/rollup-linux-x64-gnu': 4.12.0 - '@rollup/rollup-linux-x64-musl': 4.12.0 - '@rollup/rollup-win32-arm64-msvc': 4.12.0 - '@rollup/rollup-win32-ia32-msvc': 4.12.0 - '@rollup/rollup-win32-x64-msvc': 4.12.0 + '@rollup/rollup-android-arm-eabi': 4.14.1 + '@rollup/rollup-android-arm64': 4.14.1 + '@rollup/rollup-darwin-arm64': 4.14.1 + '@rollup/rollup-darwin-x64': 4.14.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.14.1 + '@rollup/rollup-linux-arm64-gnu': 4.14.1 + '@rollup/rollup-linux-arm64-musl': 4.14.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.14.1 + '@rollup/rollup-linux-riscv64-gnu': 4.14.1 + '@rollup/rollup-linux-s390x-gnu': 4.14.1 + '@rollup/rollup-linux-x64-gnu': 4.14.1 + '@rollup/rollup-linux-x64-musl': 4.14.1 + '@rollup/rollup-win32-arm64-msvc': 4.14.1 + '@rollup/rollup-win32-ia32-msvc': 4.14.1 + '@rollup/rollup-win32-x64-msvc': 4.14.1 fsevents: 2.3.3 + dev: true /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + dev: true /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} @@ -15740,20 +15908,15 @@ packages: tslib: 1.14.1 dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - dependencies: - tslib: 2.6.2 - dev: false - /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} dependencies: mri: 1.2.0 + dev: true - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.7 @@ -15763,10 +15926,11 @@ packages: dev: true /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz} + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz} + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true /safe-regex-test@1.0.3: @@ -15784,16 +15948,17 @@ packages: dev: true /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, tarball: https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz} + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true - /sass@1.71.1: - resolution: {integrity: sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==} + /sass@1.74.1: + resolution: {integrity: sha512-w0Z9p/rWZWelb88ISOLyvqTWGmtmu2QJICqDBGyNnfG4OUnPX9BBjjYIXUpXCMOOg5MQWNpqzt876la1fsTvUA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: chokidar: 3.6.0 immutable: 4.3.5 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /sax@1.2.4: @@ -15809,6 +15974,7 @@ packages: engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 + dev: true /scheduler@0.22.0: resolution: {integrity: sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==} @@ -15818,6 +15984,7 @@ packages: /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + requiresBuild: true dependencies: loose-envify: 1.4.0 @@ -15833,9 +16000,11 @@ packages: /screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} engines: {node: '>=0.10.0'} + dev: true /scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + requiresBuild: true dependencies: compute-scroll-into-view: 3.1.0 @@ -15866,7 +16035,7 @@ packages: - supports-color dev: true - /semantic-release@21.1.2(typescript@5.3.3): + /semantic-release@21.1.2(typescript@5.4.5): resolution: {integrity: sha512-kz76azHrT8+VEkQjoCBHE06JNQgTgsC4bT8XfCzb7DHcsk9vG3fqeMVik8h5rcWCYi2Fd+M3bwA7BG8Z8cRwtA==} engines: {node: '>=18'} hasBin: true @@ -15877,7 +16046,7 @@ packages: '@semantic-release/npm': 10.0.6(semantic-release@21.1.2) '@semantic-release/release-notes-generator': 11.0.7(semantic-release@21.1.2) aggregate-error: 5.0.0 - cosmiconfig: 8.3.6(typescript@5.3.3) + cosmiconfig: 8.3.6(typescript@5.4.5) debug: 4.3.4 env-ci: 9.1.1 execa: 8.0.1 @@ -15931,6 +16100,7 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + dev: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} @@ -15946,29 +16116,30 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==, tarball: https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz} + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} dependencies: randombytes: 2.1.0 dev: true - /seroval-plugins@1.0.4(seroval@1.0.4): - resolution: {integrity: sha512-DQ2IK6oQVvy8k+c2V5x5YCtUa/GGGsUwUBNN9UqohrZ0rWdUapBFpNMYP1bCyRHoxOJjdKGl+dieacFIpU/i1A==, tarball: https://registry.npmmirror.com/seroval-plugins/-/seroval-plugins-1.0.4.tgz} + /seroval-plugins@1.0.5(seroval@1.0.5): + resolution: {integrity: sha512-8+pDC1vOedPXjKG7oz8o+iiHrtF2WswaMQJ7CKFpccvSYfrzmvKY9zOJWCg+881722wIHfwkdnRmiiDm9ym+zQ==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 dependencies: - seroval: 1.0.4 + seroval: 1.0.5 dev: true - /seroval@1.0.4: - resolution: {integrity: sha512-qQs/N+KfJu83rmszFQaTxcoJoPn6KNUruX4KmnmyD0oZkUoiNvJ1rpdYKDf4YHM05k+HOgCxa3yvf15QbVijGg==, tarball: https://registry.npmmirror.com/seroval/-/seroval-1.0.4.tgz} + /seroval@1.0.5: + resolution: {integrity: sha512-TM+Z11tHHvQVQKeNlOUonOWnsNM+2IBwZ4vwoi4j3zKzIpc5IDw8WPwCfcc8F17wy6cBcJGbZbFOR0UCuTZHQA==} engines: {node: '>=10'} dev: true - /set-function-length@1.2.1: - resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 @@ -16017,6 +16188,7 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 + dev: true /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} @@ -16026,18 +16198,13 @@ packages: /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + dev: true /shiki-es@0.2.0: resolution: {integrity: sha512-RbRMD+IuJJseSZljDdne9ThrUYrwBwJR04FvN4VXpfsU3MNID5VJGHLAD5je/HGThCyEKNgH+nEkSFEWKD7C3Q==} deprecated: Please migrate to https://github.com/antfu/shikiji dev: true - /shikiji@0.6.13: - resolution: {integrity: sha512-4T7X39csvhT0p7GDnq9vysWddf2b6BeioiN3Ymhnt3xcy9tXmDcnsEFVxX18Z4YcQgEE/w48dLJ4pPPUcG9KkA==} - dependencies: - hast-util-to-html: 9.0.0 - dev: false - /shortid@2.2.16: resolution: {integrity: sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -16045,8 +16212,8 @@ packages: nanoid: 2.1.11 dev: true - /side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -16057,13 +16224,16 @@ packages: /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + dev: true /signale@1.4.0: resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} @@ -16078,9 +16248,11 @@ packages: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: is-arrayish: 0.3.2 + dev: true /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true /sitemap@7.1.1: resolution: {integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==} @@ -16096,6 +16268,7 @@ packages: /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + dev: true /slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} @@ -16153,22 +16326,22 @@ packages: smart-buffer: 1.1.15 dev: true - /solid-js@1.8.15: - resolution: {integrity: sha512-d0QP/efr3UVcwGgWVPveQQ0IHOH6iU7yUhc2piy8arNG8wxKmvUy1kFxyF8owpmfCWGB87usDKMaVnsNYZm+Vw==, tarball: https://registry.npmmirror.com/solid-js/-/solid-js-1.8.15.tgz} + /solid-js@1.8.16: + resolution: {integrity: sha512-rja94MNU9flF3qQRLNsu60QHKBDKBkVE1DldJZPIfn2ypIn3NV2WpSbGTQIvsyGPBo+9E2IMjwqnqpbgfWuzeg==} dependencies: csstype: 3.1.3 - seroval: 1.0.4 - seroval-plugins: 1.0.4(seroval@1.0.4) + seroval: 1.0.5 + seroval-plugins: 1.0.5(seroval@1.0.5) dev: true - /solid-swr-store@0.10.7(solid-js@1.8.15)(swr-store@0.10.6): + /solid-swr-store@0.10.7(solid-js@1.8.16)(swr-store@0.10.6): resolution: {integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==} engines: {node: '>=10'} peerDependencies: solid-js: ^1.2 swr-store: ^0.10 dependencies: - solid-js: 1.8.15 + solid-js: 1.8.16 swr-store: 0.10.6 dev: true @@ -16182,34 +16355,36 @@ packages: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} dev: true - /sort-package-json@2.4.1: - resolution: {integrity: sha512-Nd3rgLBJcZ4iw7tpuOhwBupG6SvUDU0Fy1cZGAMorA2JmDUb+29Dg5phJK9gapa2Ak9d15w/RuMl/viwX+nKwQ==} + /sort-package-json@2.10.0: + resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} hasBin: true dependencies: detect-indent: 7.0.1 detect-newline: 4.0.1 + get-stdin: 9.0.0 git-hooks-list: 3.1.0 globby: 13.2.2 is-plain-obj: 4.1.0 + semver: 7.6.0 sort-object-keys: 1.1.3 dev: true - /sort-package-json@2.8.0: - resolution: {integrity: sha512-PxeNg93bTJWmDGnu0HADDucoxfFiKkIr73Kv85EBThlI1YQPdc0XovBgg2llD0iABZbu2SlKo8ntGmOP9wOj/g==} + /sort-package-json@2.4.1: + resolution: {integrity: sha512-Nd3rgLBJcZ4iw7tpuOhwBupG6SvUDU0Fy1cZGAMorA2JmDUb+29Dg5phJK9gapa2Ak9d15w/RuMl/viwX+nKwQ==} hasBin: true dependencies: detect-indent: 7.0.1 detect-newline: 4.0.1 - get-stdin: 9.0.0 git-hooks-list: 3.1.0 globby: 13.2.2 is-plain-obj: 4.1.0 sort-object-keys: 1.1.3 dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + dev: true /source-map-resolve@0.6.0: resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} @@ -16224,6 +16399,7 @@ packages: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + dev: true /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -16235,10 +16411,12 @@ packages: /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} + dev: true /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + dev: true /source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} @@ -16334,6 +16512,7 @@ packages: /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true /ssri@4.1.6: resolution: {integrity: sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==} @@ -16347,12 +16526,12 @@ packages: safe-buffer: 5.2.1 dev: true - /sswr@2.0.0(svelte@4.2.12): + /sswr@2.0.0(svelte@4.2.13): resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==} peerDependencies: svelte: ^4.0.0 dependencies: - svelte: 4.2.12 + svelte: 4.2.13 swrev: 4.0.0 dev: true @@ -16366,9 +16545,11 @@ packages: engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 + dev: true /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true /stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -16376,6 +16557,7 @@ packages: /std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: true /stop-iteration-iterator@1.0.0: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} @@ -16431,6 +16613,7 @@ packages: /string-convert@0.2.1: resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} + requiresBuild: true /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} @@ -16438,6 +16621,7 @@ packages: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 + dev: true /string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} @@ -16454,6 +16638,7 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: true /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} @@ -16473,52 +16658,60 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 + gopd: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.7 regexp.prototype.flags: 1.5.2 set-function-name: 2.0.2 - side-channel: 1.0.5 + side-channel: 1.0.6 dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-object-atoms: 1.0.0 dev: true /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: true /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 + dev: true /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -16526,14 +16719,14 @@ packages: safe-buffer: 5.2.1 dev: true - /stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + /stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 /strip-ansi@4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz} + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} dependencies: ansi-regex: 3.0.1 @@ -16551,6 +16744,7 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + dev: true /strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} @@ -16567,6 +16761,7 @@ packages: /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} + dev: true /strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} @@ -16576,16 +16771,19 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + dev: true /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} dependencies: min-indent: 1.0.1 + dev: true /strip-indent@4.0.0: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} @@ -16602,11 +16800,13 @@ packages: /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + dev: true - /strip-literal@2.0.0: - resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} + /strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} dependencies: - js-tokens: 8.0.3 + js-tokens: 9.0.0 + dev: true /style-search@0.1.0: resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} @@ -16616,13 +16816,20 @@ packages: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: inline-style-parser: 0.1.1 + dev: true + + /style-to-object@1.0.6: + resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} + dependencies: + inline-style-parser: 0.2.3 + dev: false /stylelint-config-recommended@7.0.0(stylelint@15.11.0): resolution: {integrity: sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==} peerDependencies: stylelint: ^14.4.0 dependencies: - stylelint: 15.11.0(typescript@5.3.3) + stylelint: 15.11.0(typescript@5.4.5) dev: true /stylelint-config-standard@25.0.0(stylelint@15.11.0): @@ -16630,22 +16837,22 @@ packages: peerDependencies: stylelint: ^14.4.0 dependencies: - stylelint: 15.11.0(typescript@5.3.3) + stylelint: 15.11.0(typescript@5.4.5) stylelint-config-recommended: 7.0.0(stylelint@15.11.0) dev: true - /stylelint@15.11.0(typescript@5.3.3): + /stylelint@15.11.0(typescript@5.4.5): resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true dependencies: - '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3) - '@csstools/css-tokenizer': 2.2.3 - '@csstools/media-query-list-parser': 2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3) - '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15) + '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4) + '@csstools/css-tokenizer': 2.2.4 + '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4) + '@csstools/selector-specificity': 3.0.3(postcss-selector-parser@6.0.16) balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 8.3.6(typescript@5.3.3) + cosmiconfig: 8.3.6(typescript@5.4.5) css-functions-list: 3.2.1 css-tree: 2.3.1 debug: 4.3.4 @@ -16666,10 +16873,10 @@ packages: micromatch: 4.0.5 normalize-path: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.35 + postcss: 8.4.38 postcss-resolve-nested-selector: 0.1.1 - postcss-safe-parser: 6.0.0(postcss@8.4.35) - postcss-selector-parser: 6.0.15 + postcss-safe-parser: 6.0.0(postcss@8.4.38) + postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 string-width: 4.2.3 @@ -16677,7 +16884,7 @@ packages: style-search: 0.1.0 supports-hyperlinks: 3.0.0 svg-tags: 1.0.0 - table: 6.8.1 + table: 6.8.2 write-file-atomic: 5.0.1 transitivePeerDependencies: - supports-color @@ -16686,6 +16893,7 @@ packages: /stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: true /stylis@4.3.1: resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} @@ -16695,18 +16903,21 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + dev: true /supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} @@ -16727,14 +16938,15 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + dev: true - /svelte@4.2.12: - resolution: {integrity: sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==, tarball: https://registry.npmmirror.com/svelte/-/svelte-4.2.12.tgz} + /svelte@4.2.13: + resolution: {integrity: sha512-jtVt2KXLbQnsWN93Zd7EVboNh8Tqexes4rZfXNP7nYRjd9+JjubTD8BXloUmU1OUYpc6pdd1aKBhCV+b2ZKoMg==} engines: {node: '>=16'} dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 '@types/estree': 1.0.5 acorn: 8.11.3 aria-query: 5.3.0 @@ -16744,7 +16956,7 @@ packages: estree-walker: 3.0.3 is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.7 + magic-string: 0.30.9 periscopic: 3.1.0 dev: true @@ -16822,16 +17034,17 @@ packages: resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} dev: true - /swrv@1.0.4(vue@3.4.20): + /swrv@1.0.4(vue@3.4.21): resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} peerDependencies: vue: '>=3.2.26 < 4' dependencies: - vue: 3.4.20(typescript@5.3.3) + vue: 3.4.21(typescript@5.4.5) dev: true /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true /synckit@0.8.5: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} @@ -16855,9 +17068,10 @@ packages: /tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: true - /table@6.8.1: - resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + /table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} dependencies: ajv: 8.12.0 @@ -16916,8 +17130,8 @@ packages: execa: 0.7.0 dev: true - /terser-webpack-plugin@5.3.10(webpack@5.90.3): - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==, tarball: https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz} + /terser-webpack-plugin@5.3.10(webpack@5.91.0): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -16932,20 +17146,20 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.28.1 - webpack: 5.90.3 + terser: 5.30.3 + webpack: 5.91.0 dev: true - /terser@5.28.1: - resolution: {integrity: sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==} + /terser@5.30.3: + resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.5 + '@jridgewell/source-map': 0.3.6 acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 @@ -16958,6 +17172,7 @@ packages: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 + dev: true /text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} @@ -16987,12 +17202,14 @@ packages: /throttle-debounce@5.0.0: resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==} engines: {node: '>=12.22'} + requiresBuild: true /through2@0.4.2: resolution: {integrity: sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==} dependencies: readable-stream: 1.0.34 xtend: 2.1.2 + dev: true /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -17009,6 +17226,7 @@ packages: /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true /timed-out@4.0.1: resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} @@ -17024,14 +17242,17 @@ packages: /tinybench@2.6.0: resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} + dev: true - /tinypool@0.8.2: - resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} + /tinypool@0.8.3: + resolution: {integrity: sha512-Ud7uepAklqRH1bvwy22ynrliC7Dljz7Tm8M/0RBUW+YRa4YHhZ6e4PpgE+fu1zr/WqB1kbeuVrdfeuyIBpy4tw==} engines: {node: '>=14.0.0'} + dev: true /tinyspy@2.2.1: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} + dev: true /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} @@ -17047,6 +17268,7 @@ packages: /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true /to-arraybuffer@1.0.1: resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} @@ -17059,12 +17281,14 @@ packages: /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true /toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} @@ -17077,6 +17301,7 @@ packages: punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 + dev: true /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -17087,6 +17312,7 @@ packages: engines: {node: '>=14'} dependencies: punycode: 2.3.1 + dev: true /transformation-matrix@2.16.1: resolution: {integrity: sha512-tdtC3wxVEuzU7X/ydL131Q3JU5cPMEn37oqVLITjRDSDsnSHVFzW2JiCLfZLIQEgWzZHdSy3J6bZzvKEN24jGA==} @@ -17096,9 +17322,13 @@ packages: resolution: {integrity: sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==} dev: true - /traverse@0.6.8: - resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} + /traverse@0.6.9: + resolution: {integrity: sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==} engines: {node: '>= 0.4'} + dependencies: + gopd: 1.0.1 + typedarray.prototype.slice: 1.0.3 + which-typed-array: 1.1.15 dev: true /trim-lines@3.0.1: @@ -17117,7 +17347,7 @@ packages: /trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - /ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.5.1)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -17132,7 +17362,7 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 @@ -17143,9 +17373,10 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: true /ts-toolbelt@9.6.0: resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} @@ -17163,21 +17394,17 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.3.1: - resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} - dev: false - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.3.3): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /tsx@3.12.2: @@ -17205,6 +17432,7 @@ packages: /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + dev: true /type-fest@0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} @@ -17219,6 +17447,7 @@ packages: /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + dev: true /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} @@ -17243,9 +17472,10 @@ packages: /type-fest@3.13.1: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} + dev: true - /type-fest@4.10.3: - resolution: {integrity: sha512-JLXyjizi072smKGGcZiAJDCNweT8J+AuRxmPZ1aG7TERg4ijx9REl8CNhbr36RV4qXqL1gO1FF9HL8OkVmmrsA==} + /type-fest@4.15.0: + resolution: {integrity: sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==} engines: {node: '>=16'} dev: true @@ -17281,8 +17511,8 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.5: - resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -17293,12 +17523,24 @@ packages: possible-typed-array-names: 1.0.0 dev: true + /typedarray.prototype.slice@1.0.3: + resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + typed-array-buffer: 1.0.2 + typed-array-byte-offset: 1.0.2 + dev: true + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /types-ramda@0.29.8: - resolution: {integrity: sha512-+RTOlcwl1hEdNV1xfug3ofG6rny0hqQsFuBmS88vD4Lrh8Iys14IPlUH9QaGjCY46iCZgEDuCTLMLH/pOOsGKg==} + /types-ramda@0.29.10: + resolution: {integrity: sha512-5PJiW/eiTPyXXBYGZOYGezMl6qj7keBiZheRwfjJZY26QPHsNrjfJnz0mru6oeqqoTHOni893Jfd6zyUXfQRWg==} dependencies: ts-toolbelt: 9.6.0 dev: true @@ -17318,38 +17560,40 @@ packages: hasBin: true dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true + dev: true - /ufo@1.4.0: - resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} + /ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + dev: true /uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz} + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true dev: true optional: true - /umi@4.1.2(@babel/core@7.23.9)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1)(stylelint@15.11.0)(typescript@5.3.3)(webpack@5.90.3): - resolution: {integrity: sha512-lP/qxOo4CmjcJKFrOy8PCIsW/nRLGXsH5CY0/WEUAkHd63M+osbv/t1fhAhsgKpb7/ofaiSpkNsev5XJz+M3aQ==} + /umi@4.1.8(@babel/core@7.24.4)(@types/node@20.5.1)(@types/react@18.2.31)(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(sass@1.74.1)(stylelint@15.11.0)(typescript@5.4.5)(webpack@5.91.0): + resolution: {integrity: sha512-XQ7SpvU2upXE8DSsfxms963izeagHX431jOi4wpZvBYaOQGVg39MnyUAhyCBqVHJbyfOahDRWDLWMWTQzY8Q7Q==} engines: {node: '>=14'} hasBin: true dependencies: '@babel/runtime': 7.23.6 - '@umijs/bundler-utils': 4.1.2 - '@umijs/bundler-webpack': 4.1.2(typescript@5.3.3)(webpack@5.90.3) - '@umijs/core': 4.1.2 - '@umijs/lint': 4.1.2(eslint@8.57.0)(jest@29.7.0)(stylelint@15.11.0)(typescript@5.3.3) - '@umijs/preset-umi': 4.1.2(@types/node@20.5.1)(@types/react@18.2.31)(sass@1.71.1)(typescript@5.3.3)(webpack@5.90.3) - '@umijs/renderer-react': 4.1.2(react-dom@18.2.0)(react@18.2.0) - '@umijs/server': 4.1.2 - '@umijs/test': 4.1.2(@babel/core@7.23.9) - '@umijs/utils': 4.1.2 - prettier-plugin-organize-imports: 3.2.4(prettier@3.2.5)(typescript@5.3.3) + '@umijs/bundler-utils': 4.1.8 + '@umijs/bundler-webpack': 4.1.8(typescript@5.4.5)(webpack@5.91.0) + '@umijs/core': 4.1.8 + '@umijs/lint': 4.1.8(eslint@8.57.0)(jest@29.7.0)(stylelint@15.11.0)(typescript@5.4.5) + '@umijs/preset-umi': 4.1.8(@types/node@20.5.1)(@types/react@18.2.31)(sass@1.74.1)(typescript@5.4.5)(webpack@5.91.0) + '@umijs/renderer-react': 4.1.8(react-dom@18.2.0)(react@18.2.0) + '@umijs/server': 4.1.8 + '@umijs/test': 4.1.8(@babel/core@7.24.4) + '@umijs/utils': 4.1.8 + prettier-plugin-organize-imports: 3.2.4(prettier@3.2.5)(typescript@5.4.5) prettier-plugin-packagejson: 2.4.3(prettier@3.2.5) transitivePeerDependencies: - '@babel/core' @@ -17360,6 +17604,7 @@ packages: - '@volar/vue-typescript' - eslint - jest + - lightningcss - postcss-html - postcss-jsx - postcss-less @@ -17395,6 +17640,7 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true /unfetch@5.0.0: resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==} @@ -17415,6 +17661,19 @@ packages: is-plain-obj: 4.1.0 trough: 2.2.0 vfile: 5.3.7 + dev: true + + /unified@11.0.4: + resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + dependencies: + '@types/unist': 3.0.2 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.1 + dev: false /unique-filename@1.1.1: resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} @@ -17450,20 +17709,15 @@ packages: unist-util-visit-parents: 5.1.3 dev: true - /unist-util-find-after@4.0.1: - resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 5.2.1 - dev: false - /unist-util-generated@2.0.1: resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + dev: true /unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} dependencies: '@types/unist': 2.0.10 + dev: true /unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -17475,6 +17729,7 @@ packages: resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} dependencies: '@types/unist': 2.0.10 + dev: true /unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} @@ -17482,17 +17737,18 @@ packages: '@types/unist': 3.0.2 dev: false - /unist-util-remove-position@4.0.2: - resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + /unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} dependencies: - '@types/unist': 2.0.10 - unist-util-visit: 4.1.2 + '@types/unist': 3.0.2 + unist-util-visit: 5.0.0 dev: false /unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: '@types/unist': 2.0.10 + dev: true /unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -17505,6 +17761,7 @@ packages: dependencies: '@types/unist': 2.0.10 unist-util-is: 5.2.1 + dev: true /unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} @@ -17519,6 +17776,7 @@ packages: '@types/unist': 2.0.10 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 + dev: true /unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} @@ -17540,6 +17798,7 @@ packages: /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} + dev: true /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -17577,6 +17836,7 @@ packages: browserslist: 4.23.0 escalade: 3.1.2 picocolors: 1.0.0 + dev: true /update-notifier@2.5.0: resolution: {integrity: sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==} @@ -17601,7 +17861,7 @@ packages: dev: true /url-join@4.0.1: - resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==, tarball: https://registry.npmmirror.com/url-join/-/url-join-4.0.1.tgz} + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} dev: true /url-join@5.0.0: @@ -17621,12 +17881,13 @@ packages: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + dev: true /url@0.11.3: resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: punycode: 1.4.1 - qs: 6.11.2 + qs: 6.12.0 dev: true /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.31)(react@18.1.0): @@ -17648,6 +17909,7 @@ packages: react: '>= 16.x' dependencies: react: 18.2.0 + dev: true /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} @@ -17655,17 +17917,19 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: react: 18.2.0 + dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true /util.promisify@1.0.1: resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} dependencies: define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.7 + object.getownpropertydescriptors: 2.1.8 dev: true /util@0.10.4: @@ -17685,7 +17949,7 @@ packages: dev: true /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, tarball: https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz} + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true @@ -17698,9 +17962,11 @@ packages: diff: 5.2.0 kleur: 4.1.5 sade: 1.8.1 + dev: true /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true /v8-compile-cache@2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} @@ -17710,9 +17976,10 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + dev: true /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -17742,19 +18009,14 @@ packages: dependencies: '@types/unist': 2.0.10 vfile: 5.3.7 - - /vfile-location@5.0.2: - resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} - dependencies: - '@types/unist': 3.0.2 - vfile: 6.0.1 - dev: false + dev: true /vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: '@types/unist': 2.0.10 unist-util-stringify-position: 3.0.3 + dev: true /vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} @@ -17770,6 +18032,7 @@ packages: is-buffer: 2.0.5 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 + dev: true /vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} @@ -17779,8 +18042,8 @@ packages: vfile-message: 4.0.2 dev: false - /vite-node@1.3.1(@types/node@20.5.1): - resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==} + /vite-node@1.4.0(@types/node@20.5.1): + resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: @@ -17788,7 +18051,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.1.4(@types/node@20.5.1) + vite: 5.2.8(@types/node@20.5.1) transitivePeerDependencies: - '@types/node' - less @@ -17798,14 +18061,16 @@ packages: - sugarss - supports-color - terser + dev: true - /vite@4.3.1(@types/node@20.5.1)(less@4.1.3)(sass@1.71.1): - resolution: {integrity: sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==} + /vite@4.5.2(@types/node@20.5.1)(less@4.1.3)(sass@1.74.1): + resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: '@types/node': '>= 14' less: '*' + lightningcss: ^1.21.0 sass: '*' stylus: '*' sugarss: '*' @@ -17815,6 +18080,8 @@ packages: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true stylus: @@ -17825,17 +18092,17 @@ packages: optional: true dependencies: '@types/node': 20.5.1 - esbuild: 0.17.19 + esbuild: 0.18.20 less: 4.1.3 - postcss: 8.4.35 + postcss: 8.4.38 rollup: 3.29.4 - sass: 1.71.1 + sass: 1.74.1 optionalDependencies: fsevents: 2.3.3 dev: true - /vite@5.1.4(@types/node@20.5.1): - resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} + /vite@5.2.8(@types/node@20.5.1): + resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -17863,21 +18130,22 @@ packages: optional: true dependencies: '@types/node': 20.5.1 - esbuild: 0.19.12 - postcss: 8.4.35 - rollup: 4.12.0 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.14.1 optionalDependencies: fsevents: 2.3.3 + dev: true - /vitest@1.3.1(@types/node@20.5.1)(jsdom@22.1.0): - resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==} + /vitest@1.4.0(@types/node@20.5.1)(jsdom@22.1.0): + resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.3.1 - '@vitest/ui': 1.3.1 + '@vitest/browser': 1.4.0 + '@vitest/ui': 1.4.0 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -17895,26 +18163,26 @@ packages: optional: true dependencies: '@types/node': 20.5.1 - '@vitest/expect': 1.3.1 - '@vitest/runner': 1.3.1 - '@vitest/snapshot': 1.3.1 - '@vitest/spy': 1.3.1 - '@vitest/utils': 1.3.1 + '@vitest/expect': 1.4.0 + '@vitest/runner': 1.4.0 + '@vitest/snapshot': 1.4.0 + '@vitest/spy': 1.4.0 + '@vitest/utils': 1.4.0 acorn-walk: 8.3.2 chai: 4.4.1 debug: 4.3.4 execa: 8.0.1 jsdom: 22.1.0 local-pkg: 0.5.0 - magic-string: 0.30.7 + magic-string: 0.30.9 pathe: 1.1.2 picocolors: 1.0.0 std-env: 3.7.0 - strip-literal: 2.0.0 + strip-literal: 2.1.0 tinybench: 2.6.0 - tinypool: 0.8.2 - vite: 5.1.4(@types/node@20.5.1) - vite-node: 1.3.1(@types/node@20.5.1) + tinypool: 0.8.3 + vite: 5.2.8(@types/node@20.5.1) + vite-node: 1.4.0(@types/node@20.5.1) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -17924,30 +18192,31 @@ packages: - sugarss - supports-color - terser + dev: true /vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: true /void-elements@3.1.0: - resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==, tarball: https://registry.npmmirror.com/void-elements/-/void-elements-3.1.0.tgz} + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} dev: true - /vue@3.4.20(typescript@5.3.3): - resolution: {integrity: sha512-xF4zDKXp67NjgORFX/HOuaiaKYjgxkaToK0KWglFQEYlCw9AqgBlj1yu5xa6YaRek47w2IGiuvpvrGg/XuQFCw==, tarball: https://registry.npmmirror.com/vue/-/vue-3.4.20.tgz} + /vue@3.4.21(typescript@5.4.5): + resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.20 - '@vue/compiler-sfc': 3.4.20 - '@vue/runtime-dom': 3.4.20 - '@vue/server-renderer': 3.4.20(vue@3.4.20) - '@vue/shared': 3.4.20 - typescript: 5.3.3 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-sfc': 3.4.21 + '@vue/runtime-dom': 3.4.21 + '@vue/server-renderer': 3.4.21(vue@3.4.21) + '@vue/shared': 3.4.21 + typescript: 5.4.5 dev: true /w3c-xmlserializer@4.0.0: @@ -17955,14 +18224,16 @@ packages: engines: {node: '>=14'} dependencies: xml-name-validator: 4.0.0 + dev: true /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 + dev: true - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, tarball: https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz} + /watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 @@ -17977,6 +18248,7 @@ packages: /web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + dev: true /web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} @@ -17995,14 +18267,15 @@ packages: /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + dev: true /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, tarball: https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz} + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} dev: true - /webpack@5.90.3: - resolution: {integrity: sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==, tarball: https://registry.npmmirror.com/webpack/-/webpack-5.90.3.tgz} + /webpack@5.91.0: + resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -18013,15 +18286,15 @@ packages: dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.11.3 acorn-import-assertions: 1.9.0(acorn@8.11.3) browserslist: 4.23.0 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.1 - es-module-lexer: 1.4.1 + enhanced-resolve: 5.16.0 + es-module-lexer: 1.5.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -18032,8 +18305,8 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.90.3) - watchpack: 2.4.0 + terser-webpack-plugin: 5.3.10(webpack@5.91.0) + watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -18046,10 +18319,12 @@ packages: engines: {node: '>=12'} dependencies: iconv-lite: 0.6.3 + dev: true /whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} + dev: true /whatwg-url@12.0.1: resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==} @@ -18057,6 +18332,7 @@ packages: dependencies: tr46: 4.1.1 webidl-conversions: 7.0.0 + dev: true /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -18089,21 +18365,22 @@ packages: is-weakref: 1.0.2 isarray: 2.0.5 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.14 + which-collection: 1.0.2 + which-typed-array: 1.1.15 dev: true - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 dev: true - /which-typed-array@1.1.14: - resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.7 @@ -18126,6 +18403,7 @@ packages: hasBin: true dependencies: isexe: 2.0.0 + dev: true /why-is-node-running@2.2.2: resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} @@ -18134,6 +18412,7 @@ packages: dependencies: siginfo: 2.0.0 stackback: 0.0.2 + dev: true /widest-line@2.0.1: resolution: {integrity: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==} @@ -18147,12 +18426,13 @@ packages: dev: true /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz} + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true /wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} @@ -18174,6 +18454,7 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true /write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} @@ -18189,6 +18470,7 @@ packages: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 + dev: true /write-file-atomic@5.0.1: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} @@ -18209,6 +18491,7 @@ packages: optional: true utf-8-validate: optional: true + dev: true /xdg-basedir@3.0.0: resolution: {integrity: sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==} @@ -18224,6 +18507,7 @@ packages: /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} + dev: true /xml-reader@2.4.3: resolution: {integrity: sha512-xWldrIxjeAMAu6+HSf9t50ot1uL5M+BtOidRCWHXIeewvSeIpscWCsp4Zxjk8kHHhdqFBrfK8U0EJeCcnyQ/gA==} @@ -18234,12 +18518,14 @@ packages: /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true /xtend@2.1.2: resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} engines: {node: '>=0.4'} dependencies: object-keys: 0.4.0 + dev: true /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} @@ -18257,6 +18543,7 @@ packages: /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + dev: true /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} @@ -18264,13 +18551,16 @@ packages: /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + dev: true /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} @@ -18285,6 +18575,7 @@ packages: /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + dev: true /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} @@ -18297,25 +18588,22 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - - /yjs@13.6.12: - resolution: {integrity: sha512-KOT8ILoyVH2f/PxPadeu5kVVS055D1r3x1iFfJVJzFdnN98pVGM8H07NcKsO+fG3F7/0tf30Vnokf5YIqhU/iw==} - engines: {node: '>=16.0.0', npm: '>=8.0.0'} - dependencies: - lib0: 0.2.89 - dev: false + dev: true /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} + dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + dev: true /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + dev: true /z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} @@ -18329,50 +18617,20 @@ packages: commander: 9.5.0 dev: true - /zustand-middleware-yjs@1.3.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0): - resolution: {integrity: sha512-mhMh4znmvTJQXUuSlwZe5LcUNBgd8E1oOhRmDHjNSQ0M5HpODiUZKelWqiCbgxB2Qv9CPxk5QXFQEQxInce9RQ==} - dependencies: - yjs: 13.6.12 - zustand: 4.5.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - immer - - react - dev: false - - /zustand-utils@1.3.2(react@18.2.0)(zustand@4.5.1): + /zustand-utils@1.3.2(react@18.2.0)(zustand@4.5.2): resolution: {integrity: sha512-c+X8whiqWKgl6r3jzzlNR6vp5ZHsqfIxbZN2uyv+GlqATKh//6GIneywm7tcq+8XZXINT8N9tnDH8npPdXDLEA==} peerDependencies: react: '>=16.8' zustand: '>=4.4.1' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 fast-deep-equal: 3.1.3 react: 18.2.0 - zustand: 4.5.1(@types/react@18.2.31)(immer@10.0.3)(react@18.2.0) - - /zustand@4.5.1(@types/react@18.2.31)(immer@10.0.3)(react@18.2.0): - resolution: {integrity: sha512-XlauQmH64xXSC1qGYNv00ODaQ3B+tNPoy22jv2diYiP4eoDKr9LA+Bh5Bc3gplTrFdb6JVI+N4kc1DZ/tbtfPg==} - engines: {node: '>=12.7.0'} - peerDependencies: - '@types/react': '>=16.8' - immer: '>=9.0.6' - react: '>=16.8' - peerDependenciesMeta: - '@types/react': - optional: true - immer: - optional: true - react: - optional: true - dependencies: - '@types/react': 18.2.31 - immer: 10.0.3 - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) + zustand: 4.5.2(@types/react@18.2.31)(react@18.2.0) + dev: true - /zustand@4.5.1(@types/react@18.2.31)(immer@9.0.21)(react@18.2.0): - resolution: {integrity: sha512-XlauQmH64xXSC1qGYNv00ODaQ3B+tNPoy22jv2diYiP4eoDKr9LA+Bh5Bc3gplTrFdb6JVI+N4kc1DZ/tbtfPg==} + /zustand@4.5.2(@types/react@18.2.31)(react@18.2.0): + resolution: {integrity: sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==} engines: {node: '>=12.7.0'} peerDependencies: '@types/react': '>=16.8' @@ -18387,10 +18645,9 @@ packages: optional: true dependencies: '@types/react': 18.2.31 - immer: 9.0.21 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) - dev: false + dev: true /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} diff --git a/src/ActionIcon/index.tsx b/src/ActionIcon/index.tsx deleted file mode 100644 index 173239de..00000000 --- a/src/ActionIcon/index.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import { Loader2 } from 'lucide-react'; -import { forwardRef, useMemo } from 'react'; - -import Icon, { type IconProps } from '@/Icon'; -import Spotlight from '@/components/Spotlight'; -import { DivProps } from '@/types'; -import { type TooltipProps } from 'antd'; - -import { ActionIcon as ProEditorActionIcon } from '@ant-design/pro-editor'; -import { useStyles } from './style'; - -export type ActionIconSize = - | 'large' - | 'normal' - | 'small' - | 'site' - | { - blockSize?: number; - borderRadius?: number; - fontSize?: number; - strokeWidth?: number; - }; - -const calcSize = (size?: ActionIconSize) => { - let blockSize: number; - let borderRadius: number; - - switch (size) { - case 'large': { - blockSize = 44; - borderRadius = 8; - break; - } - case 'normal': { - blockSize = 36; - borderRadius = 5; - break; - } - case 'small': { - blockSize = 24; - borderRadius = 5; - break; - } - case 'site': { - blockSize = 34; - borderRadius = 5; - break; - } - default: { - blockSize = size?.blockSize || 36; - borderRadius = size?.borderRadius || 5; - break; - } - } - - return { - blockSize, - borderRadius, - }; -}; - -export interface ActionIconProps extends DivProps { - /** - * @description Whether the icon is active or not - * @default false - */ - active?: boolean; - /** - * @description Change arrow's visible state and change whether the arrow is pointed at the center of target. - * @default false - */ - arrow?: boolean; - color?: IconProps['color']; - fill?: IconProps['fill']; - /** - * @description Glass blur style - * @default 'false' - */ - glass?: boolean; - /** - * @description The icon element to be rendered - * @type LucideIcon - */ - icon?: IconProps['icon']; - /** - * @description Set the loading status of ActionIcon - */ - loading?: boolean; - - /** - * @description The position of the tooltip relative to the target - * @enum ["top","left","right","bottom","topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"] - * @default "top" - */ - placement?: TooltipProps['placement']; - - /** - * @description Size of the icon - * @default 'normal' - */ - size?: ActionIconSize; - /** - * @description Whether add spotlight background - * @default false - */ - spotlight?: boolean; - /** - * @description The text shown in the tooltip - */ - title?: string; - /** - * @description Mouse enter delay of tooltip - * @default 0.5 - */ - tooltipDelay?: number; -} - -const ActionIcon = forwardRef((props, ref) => { - const { - color, - fill, - className, - active, - icon, - size = 'normal', - style, - glass, - spotlight, - onClick, - children, - loading, - title, - placement, - arrow = false, - tooltipDelay = 0.5, - ...rest - } = props; - - const { styles, cx } = useStyles({ active: Boolean(active), glass: Boolean(glass) }); - - const { blockSize, borderRadius } = useMemo(() => calcSize(size), [size]); - - const content = ( - <> - {icon && ( - - )} - {children} - - ); - - const spin = ; - - const actionIconBlock = ( -
- {spotlight && } - {loading ? spin : content} -
- ); - - return ( - <> - - - ); -}); - -export default ActionIcon; diff --git a/src/ActionIcon/style.ts b/src/ActionIcon/style.ts deleted file mode 100644 index 7dd47e29..00000000 --- a/src/ActionIcon/style.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles( - ({ css, stylish, cx }, { glass }: { active: boolean; glass: boolean }) => { - return { - block: cx( - glass && stylish.blur, - css` - cursor: pointer; - - position: relative; - - display: flex; - flex: none; - align-items: center; - justify-content: center; - `, - ), - }; - }, -); diff --git a/src/ActionIconGroup/index.tsx b/src/ActionIconGroup/index.tsx deleted file mode 100644 index 84c9d145..00000000 --- a/src/ActionIconGroup/index.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import ActionIcon, { ActionIconProps } from '@/ActionIcon'; -import Icon from '@/Icon'; -import Spotlight from '@/components/Spotlight'; -import { ActionGroup as ProEditorActionGroup } from '@ant-design/pro-editor'; - -import { DropdownProps } from 'antd'; -import { type LucideIcon } from 'lucide-react'; -import { memo } from 'react'; - -import { DivProps } from '@/types'; - -export interface ActionIconGroupItems { - icon: LucideIcon; - key: string; - label: string; -} - -export interface ActionEvent { - item: ActionIconGroupItems; - key: string; - keyPath: string[]; -} - -export interface ActionIconGroupProps extends Omit { - /** - * @description The direction of the icons - * @default "row" - */ - direction?: 'row' | 'column'; - /** - * @description The menu items for the dropdown - */ - dropdownMenu?: (ActionIconGroupItems | { type: 'divider' })[]; - /** - * @description The items to be rendered - * @default [] - */ - items?: ActionIconGroupItems[]; - onActionClick?: (action: ActionEvent) => void; - /** - * @description The position of the tooltip relative to the target - * @enum ["top","left","right","bottom","topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"] - */ - placement?: ActionIconProps['placement']; - /** - * @description Whether to add a spotlight background - * @default true - */ - spotlight?: boolean; - /** - * @description The type of the group - * @default "block" - */ - type?: 'ghost' | 'block' | 'pure'; -} - -const ActionIconGroup = memo( - ({ - type = 'block', - items = [], - placement, - spotlight = false, - direction = 'row', - dropdownMenu = [], - onActionClick, - className, - style, - }) => { - const tooltipsPlacement = placement || (direction === 'column' ? 'right' : 'top'); - - const mergeDropDownList = dropdownMenu?.map((item: any) => { - return { - ...item, - icon: , - onClick: onActionClick - ? (info: ActionEvent) => - onActionClick({ - item, - key: info.key, - keyPath: info.keyPath, - }) - : undefined, - }; - }); - - return ( - { - return ( - <> - {spotlight && } - {items?.length > 0 && - items.map((item) => ( - onActionClick?.({ item, key: item.key, keyPath: [item.key] }) - : undefined - } - placement={tooltipsPlacement} - size="small" - title={item.label} - /> - ))} - - ); - }} - /> - ); - }, -); - -export default ActionIconGroup; diff --git a/src/BackBottom/demos/index.tsx b/src/BackBottom/demos/index.tsx deleted file mode 100644 index 9b6c8520..00000000 --- a/src/BackBottom/demos/index.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { BackBottom } from '@ant-design/pro-chat'; -import { useRef } from 'react'; - -export default () => { - const ref = useRef(null); - return ( -
-
- {Array.from({ length: 40 }) - .fill('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') - .map((item: any, index) => ( -

{item}

- ))} -
- -
- ); -}; diff --git a/src/BackBottom/index.en-US.md b/src/BackBottom/index.en-US.md deleted file mode 100644 index c65be378..00000000 --- a/src/BackBottom/index.en-US.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: Components -group: Chat -title: BackBottom -order: 10 ---- - -## Default - - - -## APIs - - diff --git a/src/BackBottom/index.md b/src/BackBottom/index.md deleted file mode 100644 index ca7939b6..00000000 --- a/src/BackBottom/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: 组件 -group: Chat -title: BackBottom -order: 10 ---- - -## Default - - - -## APIs - - diff --git a/src/BackBottom/index.tsx b/src/BackBottom/index.tsx deleted file mode 100644 index 75465d56..00000000 --- a/src/BackBottom/index.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { Button, type BackTopProps } from 'antd'; -import { ListEnd } from 'lucide-react'; -import { MouseEventHandler, useEffect, useMemo, useRef, useState, type CSSProperties } from 'react'; - -import Icon from '@/Icon'; -import { useStyles } from './style'; - -export interface BackBottomProps { - className?: string; - /** - * @description - * 点击的回调 - */ - onClick?: BackTopProps['onClick']; - style?: CSSProperties; - target: React.RefObject; - text?: string; - visibilityHeight?: BackTopProps['visibilityHeight']; - /** - * @description 自定义渲染 dom - * @param defaultDom - * @param scrollToBottom - * @param BackBottomConfig - * @returns React.ReactNode - */ - render?: ( - defaultDom: React.ReactNode, - scrollToBottom: MouseEventHandler, - BackBottomConfig: BackBottomProps, - ) => React.ReactNode; - /** - * @description - * 是否一直显示 - */ - alwaysShow?: boolean; -} - -const BackBottom = (props: BackBottomProps) => { - const { - visibilityHeight = 240, - target, - onClick, - style, - className, - text, - render, - alwaysShow = false, - } = props || {}; - const [visible, setVisible] = useState(alwaysShow); - const { styles, cx } = useStyles(visible); - const ref = useRef(null); - - const [isWindowAvailable, setIsWindowAvailable] = useState(false); - - useEffect(() => { - // 检查window对象是否已经可用 - if (typeof window !== 'undefined') { - setIsWindowAvailable(true); - } - }, []); - - const current = useMemo(() => { - if (target.current && target.current.scrollHeight > target.current.clientHeight) { - return target.current; - } - return document.body; - }, [isWindowAvailable]); - - const scrollHeight = current?.scrollHeight || 0; - const clientHeight = current?.clientHeight || 0; - const [scroll, setScroll] = useState({ top: 0, left: 0 }); - - const timeRef = useRef(null); - - useEffect(() => { - if (typeof window === 'undefined') return; - if (typeof current === 'undefined') return; - const scroll = () => { - timeRef.current = window.setTimeout(() => { - if (!alwaysShow) { - setVisible(current?.scrollTop + clientHeight + visibilityHeight < scrollHeight); - } - setScroll({ - top: current?.scrollTop, - left: current?.scrollLeft, - }); - }, 60); - }; - current?.addEventListener?.('scroll', scroll, { - passive: true, - }); - return () => { - if (timeRef.current) { - clearTimeout(timeRef.current); - } - current?.removeEventListener?.('scroll', scroll); - }; - }, [current]); - - useEffect(() => { - if (scroll?.top && !alwaysShow) { - setVisible(scroll?.top + clientHeight + visibilityHeight < scrollHeight); - } - }, [scrollHeight, scroll, visibilityHeight, current]); - - const scrollToBottom: MouseEventHandler = (e) => { - (target as any)?.current?.scrollTo({ behavior: 'smooth', left: 0, top: scrollHeight }); - onClick?.(e); - }; - - /** - * @description - * 为了解决在使用了 ProChatProvider 的情况下,BackBottom 无法正常工作的问题 - */ - useEffect(() => { - setTimeout(() => { - (target as any)?.current?.scrollTo({ behavior: 'smooth', left: 0, top: scrollHeight }); - }, 16); - }, []); - - const defauleDom = ( - - ); - - if (render) return render(defauleDom, scrollToBottom, props); - - return defauleDom; -}; - -export default BackBottom; diff --git a/src/BackBottom/style.ts b/src/BackBottom/style.ts deleted file mode 100644 index f5e24669..00000000 --- a/src/BackBottom/style.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles(({ token, css, stylish, cx }, visible: boolean) => - cx( - stylish.blur, - css` - pointer-events: ${visible ? 'all' : 'none'}; - - transform: translateY(${visible ? 0 : '16px'}); - - padding-inline: 12px !important; - - opacity: ${visible ? 1 : 0}; - background: ${token.colorFillSecondary}; - border-color: ${token.colorFillTertiary} !important; - border-radius: 16px !important; - backdrop-filter: blur(16px); - `, - ), -); diff --git a/src/ChatItem/components/Actions.tsx b/src/ChatItem/components/Actions.tsx deleted file mode 100644 index 980d4c1c..00000000 --- a/src/ChatItem/components/Actions.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { ChatItemProps } from '@/ChatItem'; - -export interface ActionsProps { - actions: ChatItemProps['actions']; - className?: string; -} - -const Actions = memo(({ actions, className }) => { - return ( - - {actions} - - ); -}); - -export default Actions; diff --git a/src/ChatItem/components/Avatar.tsx b/src/ChatItem/components/Avatar.tsx deleted file mode 100644 index 2ebca665..00000000 --- a/src/ChatItem/components/Avatar.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import AvatarComponent from '@/components/Avatar'; - -import { useStyles } from '../style'; -import type { ChatItemProps } from '../type'; -import Loading from './Loading'; - -export interface AvatarProps { - addon?: ChatItemProps['avatarAddon']; - avatar: ChatItemProps['avatar']; - loading?: ChatItemProps['loading']; - onClick?: ChatItemProps['onAvatarClick']; - placement?: ChatItemProps['placement']; - size?: number; -} - -const Avatar = memo( - ({ loading, avatar = {}, placement, addon, onClick, size = 40 }) => { - const { styles } = useStyles({ avatarSize: size }); - const avatarContent = ( -
- - -
- ); - - if (!addon) return avatarContent; - return ( - - {avatarContent} - {addon} - - ); - }, -); - -export default Avatar; diff --git a/src/ChatItem/components/BorderSpacing.tsx b/src/ChatItem/components/BorderSpacing.tsx deleted file mode 100644 index 877f61a8..00000000 --- a/src/ChatItem/components/BorderSpacing.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { memo } from 'react'; - -export interface BorderSpacingProps { - borderSpacing?: number; -} - -const BorderSpacing = memo(({ borderSpacing }) => { - if (!borderSpacing) return null; - - return
; -}); - -export default BorderSpacing; diff --git a/src/ChatItem/components/ErrorContent.tsx b/src/ChatItem/components/ErrorContent.tsx deleted file mode 100644 index 8f09f7a4..00000000 --- a/src/ChatItem/components/ErrorContent.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Alert } from 'antd'; -import { memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { ChatItemProps } from '@/ChatItem'; - -import { useStyles } from '../style'; - -export interface ErrorContentProps { - error?: ChatItemProps['error']; - message?: ChatItemProps['errorMessage']; - placement?: ChatItemProps['placement']; -} - -const ErrorContent = memo(({ message, error, placement }) => { - const { styles } = useStyles({ placement }); - - return ( - - - {message} - - ); -}); - -export default ErrorContent; diff --git a/src/ChatItem/components/Loading.tsx b/src/ChatItem/components/Loading.tsx deleted file mode 100644 index 7d83517c..00000000 --- a/src/ChatItem/components/Loading.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Loader2 } from 'lucide-react'; -import { memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { ChatItemProps } from '@/ChatItem'; -import Icon from '@/Icon'; - -import { useStyles } from '../style'; - -export interface LoadingProps { - loading?: ChatItemProps['loading']; - placement?: ChatItemProps['placement']; -} - -const Loading = memo(({ loading, placement }) => { - const { styles } = useStyles({ placement }); - - if (!loading) return null; - - return ( - - - - ); -}); - -export default Loading; diff --git a/src/ChatItem/components/MessageContent.tsx b/src/ChatItem/components/MessageContent.tsx deleted file mode 100644 index fad80eb9..00000000 --- a/src/ChatItem/components/MessageContent.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { useResponsive } from 'antd-style'; -import { memo, useContext, type ReactNode } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { ChatItemProps } from '@/ChatItem'; -import EditableMessage from '@/EditableMessage'; -import { ConfigProvider } from 'antd'; - -import { MarkdownProps } from '@ant-design/pro-editor'; -import { useStyles } from '../style'; - -export interface MessageContentProps { - editing?: ChatItemProps['editing']; - message?: ReactNode; - messageExtra?: ChatItemProps['messageExtra']; - onChange?: ChatItemProps['onChange']; - onDoubleClick?: ChatItemProps['onDoubleClick']; - onEditingChange?: ChatItemProps['onEditingChange']; - placement?: ChatItemProps['placement']; - primary?: ChatItemProps['primary']; - renderMessage?: ChatItemProps['renderMessage']; - text?: ChatItemProps['text']; - type?: ChatItemProps['type']; - className?: string; - markdownProps?: MarkdownProps; -} - -const MessageContent = memo( - ({ - editing, - onChange, - onEditingChange, - className, - text, - message, - placement, - messageExtra, - renderMessage, - markdownProps, - type, - primary, - onDoubleClick, - }) => { - const { cx, styles } = useStyles({ editing, placement, primary, type }); - const { mobile } = useResponsive(); - - const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); - const prefixClass = getPrefixCls('pro-chat'); - - const content = ( - - ); - const messageContent = renderMessage ? renderMessage(content) : content; - - return ( - - {messageContent} - {messageExtra && !editing ? ( -
- {messageExtra} -
- ) : null} -
- ); - }, -); - -export default MessageContent; diff --git a/src/ChatItem/components/Title.tsx b/src/ChatItem/components/Title.tsx deleted file mode 100644 index b5b77d0e..00000000 --- a/src/ChatItem/components/Title.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { ChatItemProps } from '@/ChatItem'; -import { formatTime } from '@/ChatItem/utils/formatTime'; - -export interface TitleProps { - avatar: ChatItemProps['avatar']; - placement?: ChatItemProps['placement']; - showTitle?: ChatItemProps['showTitle']; - time?: ChatItemProps['time']; - className?: string; -} - -const Title = memo(({ showTitle, className, placement, time, avatar }) => { - return ( - - {showTitle ? avatar.title || 'untitled' : undefined} - {time && } - - ); -}); - -export default Title; diff --git a/src/ChatItem/demos/Alert.tsx b/src/ChatItem/demos/Alert.tsx deleted file mode 100644 index 5de3124f..00000000 --- a/src/ChatItem/demos/Alert.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { ChatItem } from '@ant-design/pro-chat'; - -import { avatar } from './data'; - -export default () => ; diff --git a/src/ChatItem/demos/data.tsx b/src/ChatItem/demos/data.tsx deleted file mode 100644 index 5a644cd2..00000000 --- a/src/ChatItem/demos/data.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import type { ActionIconGroupProps, MetaData } from '@ant-design/pro-chat'; -import { Copy, Edit, RotateCw, Trash } from 'lucide-react'; - -export const avatar: MetaData = { - avatar: '😎', - backgroundColor: '#E8DA5A', - title: 'Advertiser', -}; - -export const items: ActionIconGroupProps['items'] = [ - { - icon: Edit, - key: 'edit', - label: 'Edit', - }, -]; - -export const dropdownMenu: ActionIconGroupProps['dropdownMenu'] = [ - { - icon: Copy, - key: 'copy', - label: 'Copy', - }, - { - icon: RotateCw, - key: 'regenerate', - label: 'Regenerate', - }, - { - type: 'divider', - }, - { - icon: Trash, - key: 'delete', - label: 'Delete', - }, -]; diff --git a/src/ChatItem/index.tsx b/src/ChatItem/index.tsx deleted file mode 100644 index 759d8371..00000000 --- a/src/ChatItem/index.tsx +++ /dev/null @@ -1,190 +0,0 @@ -import { useResponsive } from 'antd-style'; -import { memo, useContext, useMemo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { ConfigProvider } from 'antd'; -import Actions from './components/Actions'; -import Avatar from './components/Avatar'; -import BorderSpacing from './components/BorderSpacing'; -import ErrorContent from './components/ErrorContent'; -import MessageContent from './components/MessageContent'; -import Title from './components/Title'; -import { useStyles } from './style'; -import type { ChatItemProps } from './type'; - -const MOBILE_AVATAR_SIZE = 32; - -const ChatItem = memo((props) => { - const { - avatarAddon, - onAvatarClick, - actions, - className, - primary, - loading, - message, - placement = 'left', - type = 'block', - avatar, - error, - showTitle, - time, - editing, - onChange, - onEditingChange, - messageExtra, - renderMessage, - text, - errorMessage, - chatItemRenderConfig, - markdownProps, - onDoubleClick, - originData, - ...restProps - } = props; - const { mobile } = useResponsive(); - const { cx, styles } = useStyles({ - editing, - placement, - primary, - showTitle, - title: avatar.title, - type, - }); - - const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); - const prefixClass = getPrefixCls('pro-chat'); - - const avatarDom = useMemo(() => { - if (chatItemRenderConfig?.avatarRender === false) return null; - const dom = ( - - ); - return chatItemRenderConfig?.avatarRender?.(props, dom) || dom; - }, [avatar, placement, mobile, loading]); - - const messageContentDom = useMemo(() => { - if (chatItemRenderConfig?.contentRender === false) return null; - const dom = error ? ( - - ) : ( - - ); - return chatItemRenderConfig?.contentRender?.(props, dom) || dom; - }, [ - error, - message, - messageExtra, - renderMessage, - placement, - primary, - text, - type, - editing, - errorMessage, - originData, - ]); - - const actionsDom = useMemo(() => { - if (chatItemRenderConfig?.actionsRender === false) return null; - const dom = ( - - ); - return chatItemRenderConfig?.actionsRender?.(props, dom) || dom; - }, [actions]); - - const titleDom = useMemo(() => { - if (chatItemRenderConfig?.titleRender === false) return null; - const dom = ( - - ); - return chatItemRenderConfig?.titleRender?.(props, dom) || dom; - }, [time, avatar]); - - if (chatItemRenderConfig?.render === false) return null; - - const itemDom = ( - <Flexbox - className={cx( - styles.container, - `${prefixClass}-list-item`, - `${prefixClass}-list-item-${placement}`, - className, - )} - direction={placement === 'left' ? 'horizontal' : 'horizontal-reverse'} - gap={mobile ? 6 : 12} - {...restProps} - > - {avatarDom} - <Flexbox - align={placement === 'left' ? 'flex-start' : 'flex-end'} - className={cx(styles.messageContainer, `${prefixClass}-list-item-message-container`)} - > - {titleDom} - <Flexbox - align={placement === 'left' ? 'flex-start' : 'flex-end'} - className={cx(styles.messageContent, `${prefixClass}-message-content`)} - direction={ - type === 'block' - ? placement === 'left' - ? 'horizontal' - : 'horizontal-reverse' - : 'vertical' - } - gap={8} - > - {messageContentDom} - {actionsDom} - </Flexbox> - </Flexbox> - {mobile && type === 'block' && <BorderSpacing borderSpacing={MOBILE_AVATAR_SIZE} />} - </Flexbox> - ); - return ( - chatItemRenderConfig?.render?.( - props, - { - avatar: avatarDom, - messageContent: messageContentDom, - actions: actionsDom, - title: titleDom, - itemDom, - }, - itemDom, - ) || itemDom - ); -}); - -export default ChatItem; - -export type { ChatItemProps } from './type'; diff --git a/src/ChatItem/style.ts b/src/ChatItem/style.ts deleted file mode 100644 index 67e8b1a9..00000000 --- a/src/ChatItem/style.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles( - ( - { cx, css, token, isDarkMode, responsive }, - { - placement, - type, - title, - primary, - avatarSize, - showTitle, - editing, - }: { - avatarSize?: number; - editing?: boolean; - placement?: 'left' | 'right'; - primary?: boolean; - showTitle?: boolean; - title?: string; - type?: 'block' | 'pure'; - }, - ) => { - const blockStylish = css` - padding: 8px 12px; - background-color: ${primary - ? isDarkMode - ? token.colorFill - : token.colorBgElevated - : isDarkMode - ? token.colorFillSecondary - : token.colorBgContainer}; - border-radius: ${token.borderRadiusLG}px; - transition: background-color 100ms ${token.motionEaseOut}; - `; - - const pureStylish = css` - padding-top: ${title ? 0 : '6px'}; - `; - - const pureContainerStylish = css` - margin-bottom: -16px; - transition: background-color 100ms ${token.motionEaseOut}; - `; - - const typeStylish = type === 'block' ? blockStylish : pureStylish; - - const editingStylish = - editing && - css` - width: 100%; - `; - - return { - actions: cx( - css` - align-self: ${type === 'block' - ? 'flex-end' - : placement === 'left' - ? 'flex-start' - : 'flex-end'}; - justify-content: ${placement === 'left' ? 'flex-end' : 'flex-start'}; - `, - editing && - css` - pointer-events: none !important; - opacity: 0 !important; - `, - ), - alert: css``, - avatarContainer: css` - position: relative; - flex: none; - width: ${avatarSize}px; - height: ${avatarSize}px; - `, - avatarGroupContainer: css` - width: ${avatarSize}px; - `, - container: cx( - type === 'pure' && pureContainerStylish, - css` - position: relative; - width: 100%; - max-width: 100vw; - padding: 16px; - content-visibility: auto; - contain-intrinsic-size: 100px; - time { - display: inline-block; - white-space: nowrap; - } - - div[role='menubar'] { - display: flex; - } - - time, - div[role='menubar'] { - pointer-events: none; - opacity: 0; - transition: opacity 200ms ${token.motionEaseOut}; - } - - &:hover { - time, - div[role='menubar'] { - pointer-events: unset; - opacity: 1; - } - } - - ${responsive.mobile} { - padding: 4px 16px; - } - `, - ), - editingContainer: cx( - editingStylish, - css` - padding: 8px 12px 12px; - border: 1px solid ${token.colorBorderSecondary}; - - &:active, - &:hover { - border-color: ${token.colorBorder}; - } - `, - type === 'pure' && - css` - background: ${token.colorFillQuaternary}; - border-radius: ${token.borderRadius}px; - `, - ), - editingInput: css` - width: 100%; - `, - loading: css` - position: absolute; - right: ${placement === 'left' ? '-4px' : 'unset'}; - bottom: 0; - left: ${placement === 'right' ? '-4px' : 'unset'}; - - width: 16px; - height: 16px; - - color: ${token.colorBgLayout}; - - background: ${token.colorPrimary}; - border-radius: 50%; - `, - message: cx( - typeStylish, - css` - position: relative; - `, - ), - messageContainer: cx( - editingStylish, - css` - position: relative; - `, - ), - messageContent: cx( - editingStylish, - css` - position: relative; - overflow-x: hidden; - - ${responsive.mobile} { - flex-direction: column !important; - } - `, - ), - messageExtra: css``, - name: css` - position: ${showTitle ? 'relative' : 'absolute'}; - top: ${showTitle ? 'unset' : '-16px'}; - right: ${placement === 'right' ? '0' : 'unset'}; - left: ${placement === 'left' ? '0' : 'unset'}; - - margin-bottom: 6px; - - font-size: 12px; - line-height: 1; - color: ${token.colorTextDescription}; - text-align: ${placement === 'left' ? 'left' : 'right'}; - `, - }; - }, -); diff --git a/src/ChatItem/type.ts b/src/ChatItem/type.ts deleted file mode 100644 index dbbdb7fa..00000000 --- a/src/ChatItem/type.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { AlertProps } from 'antd'; -import { ReactNode } from 'react'; - -import { EditableMessageProps } from '@/EditableMessage'; -import { DivProps, MetaData } from '@/types'; -import { MarkdownProps } from '@ant-design/pro-editor'; - -export type WithFalse<T> = T | false; - -export interface ChatItemProps<T = Record<string, any>> { - /** - * @description Actions to be displayed in the chat item - */ - actions?: ReactNode; - /** - * @description Metadata for the avatar - */ - avatar: MetaData; - avatarAddon?: ReactNode; - /** - * @description Custom CSS class name for the chat item - */ - className?: string; - /** - * @description Whether the chat item is in editing mode - */ - editing?: boolean; - /** - * @description Props for Error render - */ - error?: AlertProps; - errorMessage?: ReactNode; - /** - * @description Whether the chat item is in loading state - */ - loading?: boolean; - /** - * @description The message content of the chat item - */ - message?: ReactNode; - messageExtra?: ReactNode; - onAvatarClick?: () => void; - /** - * @description Callback when the message content changes - * @param value - The new message content - */ - onChange?: (value: string) => void; - onDoubleClick?: DivProps['onDoubleClick']; - /** - * @description Callback when the editing mode changes - * @param editing - The new editing mode - */ - onEditingChange?: (editing: boolean) => void; - /** - * @description The placement of the chat item - * @default 'left' - */ - placement?: 'left' | 'right'; - /** - * @description Whether the chat item is primary - */ - primary?: boolean; - renderMessage?: (content: ReactNode) => ReactNode; - /** - * @description Whether to show the title of the chat item - */ - showTitle?: boolean; - text?: EditableMessageProps['text']; - /** - * @description The timestamp of the chat item - */ - time?: number; - /** - * @description The type of the chat item - * @default 'block' - */ - type?: 'block' | 'pure'; - - /** - * @description The configuration for the markdown component - * @default {} - */ - markdownProps?: MarkdownProps; - - /** - * @description 聊天项渲染函数,为了保证性能他是惰性的,只有在列表项内容修改的时候才会重新执行 - * @default (props, defaultDom) => defaultDom - */ - chatItemRenderConfig?: { - titleRender?: WithFalse<(props: ChatItemProps, defaultDom: ReactNode) => ReactNode>; - contentRender?: WithFalse<(props: ChatItemProps, defaultDom: ReactNode) => ReactNode>; - actionsRender?: WithFalse<(props: ChatItemProps, defaultDom: ReactNode) => ReactNode>; - avatarRender?: WithFalse<(props: ChatItemProps, defaultDom: ReactNode) => ReactNode>; - render?: WithFalse< - ( - props: ChatItemProps, - domsMap: { - avatar: ReactNode; - title: ReactNode; - messageContent: ReactNode; - actions: ReactNode; - itemDom: ReactNode; - }, - defaultDom: ReactNode, - ) => ReactNode - >; - }; - - originData?: T; -} diff --git a/src/ChatList/ActionsBar.tsx b/src/ChatList/ActionsBar.tsx deleted file mode 100644 index 8380d4dd..00000000 --- a/src/ChatList/ActionsBar.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { memo } from 'react'; - -import ActionIconGroup, { type ActionIconGroupProps } from '@/ActionIconGroup'; -import { useChatListActionsBar } from '@/hooks/useChatListActionsBar'; - -/** - * ActionsBar组件的属性类型定义 - */ -export interface ActionsBarProps extends ActionIconGroupProps { - /** - * 文本内容 - */ - text?: { - /** - * 复制文本 - */ - copy?: string; - /** - * 删除文本 - */ - delete?: string; - /** - * 编辑文本 - */ - edit?: string; - /** - * 重新生成文本 - */ - regenerate?: string; - }; - /** - * 内容 - */ - content?: React.ReactNode | undefined; -} - -/** - * ActionsBar 组件 - * 用于渲染操作按钮组。 - */ -const ActionsBar = memo<ActionsBarProps>(({ text, ...rest }) => { - const { regenerate, edit, copy, divider, del } = useChatListActionsBar(text); - return ( - <ActionIconGroup - dropdownMenu={[edit, copy, regenerate, divider, del]} - items={[regenerate, edit]} - type="ghost" - {...rest} - /> - ); -}); - -export default ActionsBar; diff --git a/src/ChatList/ChatListItem.tsx b/src/ChatList/ChatListItem.tsx deleted file mode 100644 index 613e8dd9..00000000 --- a/src/ChatList/ChatListItem.tsx +++ /dev/null @@ -1,312 +0,0 @@ -import { App } from 'antd'; -import copy from 'copy-to-clipboard'; -import { FC, ReactNode, useMemo, useState } from 'react'; - -import { ActionEvent } from '@/ActionIconGroup'; -import ChatItem, { type ChatItemProps } from '@/ChatItem'; -import { LLMRoleType } from '@/types/llm'; -import { ChatMessage } from '@/types/message'; - -import { useRefFunction } from '@/ProChat/hooks/useRefFunction'; -import { MarkdownProps } from '@ant-design/pro-editor'; -import ActionsBar, { type ActionsBarProps } from './ActionsBar'; - -export type OnMessageChange = (id: string, content: string) => void; -export type OnActionClick = (action: ActionEvent, message: ChatMessage) => void; -export type RenderRole = LLMRoleType | 'default' | string; -export type RenderItem = FC<{ key: string } & ChatMessage & ListItemProps>; -export type RenderMessage = FC<ChatMessage & { editableContent: ReactNode }>; -export type RenderMessageExtra = FC<ChatMessage>; -export type RenderErrorMessage = FC<ChatMessage>; -export type RenderAction = FC<ActionsBarProps & ChatMessage>; - -/** - * 聊天列表项的属性。 - * @template T 聊天列表项的额外数据类型。 - */ -export interface ListItemProps<T = Record<string, any>> { - /** - * 聊天项的导航组件。 - */ - groupNav?: ChatItemProps['avatarAddon']; - /** - * 是否正在加载。 - */ - loading?: boolean; - /** - * 点击操作按钮的回调函数。 - */ - onActionsClick?: OnActionClick; - /** - * 消息变化的回调函数。 - */ - onMessageChange?: OnMessageChange; - /** - * 渲染操作按钮的函数。 - */ - renderActions?: { - [actionKey: string]: RenderAction; - }; - /** - * 渲染错误消息的函数。 - */ - renderErrorMessages?: { - [errorType: 'default' | string]: RenderErrorMessage; - }; - /** - * 渲染列表项的函数。 - */ - renderItems?: { - [role: RenderRole]: RenderItem; - }; - /** - * 渲染消息的函数。 - */ - renderMessages?: { - [role: RenderRole]: RenderMessage; - }; - /** - * 渲染消息额外内容的函数。 - */ - renderMessagesExtra?: { - [role: RenderRole]: RenderMessageExtra; - }; - /** - * 是否显示聊天项的名称。 - * @default false - */ - showTitle?: boolean; - /** - * 文本内容。 - */ - text?: ChatItemProps['text'] & - ActionsBarProps['text'] & { - copySuccess?: string; - history?: string; - } & { - [key: string]: string; - }; - /** - * 聊天列表的类型。 - * @default 'chat' - */ - type?: 'docs' | 'chat'; - /** - * 聊天项的类名。 - * @default '' - */ - chatItemClassName?: string; - /** - * 聊天项的渲染函数。 - */ - chatItemRenderConfig?: ChatItemProps['chatItemRenderConfig']; - /** - * markdown组件的配置。 - */ - markdownProps?: MarkdownProps; - /** - * 原始数据。 - */ - originData?: ChatItemProps<T>['originData']; -} - -/** - * 聊天列表项的属性。 - * @template T 聊天列表项的额外数据类型。 - */ -export type ChatListItemProps<T = Record<string, any>> = ChatMessage & ListItemProps<T>; - -/** - * 聊天列表项组件。 - * @param props 组件属性。 - * @returns 聊天列表项组件。 - */ -const ChatListItem = (props: ChatListItemProps) => { - const { - renderMessagesExtra, - showTitle, - onActionsClick, - onMessageChange, - originData, - type, - text, - renderMessages, - renderErrorMessages, - renderActions, - loading, - groupNav, - renderItems, - chatItemRenderConfig, - chatItemClassName, - markdownProps, - ...item - } = props; - - const [editing, setEditing] = useState(false); - - const { message } = App.useApp(); - - /** - * 渲染列表项的函数。 - * @returns 渲染列表项的函数。 - */ - const RenderItem = useMemo(() => { - if (!renderItems || !item?.role) return; - let renderFunction; - if (renderItems?.[item.role]) renderFunction = renderItems[item.role]; - if (!renderFunction && renderItems?.['default']) renderFunction = renderItems['default']; - if (!renderFunction) return; - return renderFunction; - }, [renderItems?.[item.role]]); - - /** - * 渲染消息的函数。 - * @param editableContent 可编辑的内容。 - * @param data 聊天消息的数据。 - * @returns 渲染消息的组件。 - */ - const RenderMessage = useRefFunction( - ({ editableContent, data }: { data: ChatMessage; editableContent: ReactNode }) => { - if (!renderMessages || !item?.role) return; - let RenderFunction; - if (renderMessages?.[item.role]) RenderFunction = renderMessages[item.role]; - if (!RenderFunction && renderMessages?.['default']) - RenderFunction = renderMessages['default']; - if (!RenderFunction) return; - return <RenderFunction {...data} editableContent={editableContent} />; - }, - ); - - /** - * 渲染消息额外内容的函数。 - * @param data 聊天消息的数据。 - * @returns 渲染消息额外内容的组件。 - */ - const MessageExtra = useRefFunction(({ data }: { data: ChatMessage }) => { - if (!renderMessagesExtra || !item?.role) return; - let RenderFunction; - if (renderMessagesExtra?.[item.role]) RenderFunction = renderMessagesExtra[item.role]; - if (renderMessagesExtra?.['default']) RenderFunction = renderMessagesExtra['default']; - if (!RenderFunction && !RenderFunction) return; - - return <RenderFunction {...data} />; - }); - - /** - * 渲染错误消息的函数。 - * @param data 聊天消息的数据。 - * @returns 渲染错误消息的组件。 - */ - const ErrorMessage = useRefFunction(({ data }: { data: ChatMessage }) => { - if (!renderErrorMessages || !item?.error?.type) return; - let RenderFunction; - if (renderErrorMessages?.[item.error.type]) - RenderFunction = renderErrorMessages[item.error.type]; - if (!RenderFunction && renderErrorMessages?.['default']) - RenderFunction = renderErrorMessages['default']; - if (!RenderFunction) return; - return <RenderFunction {...data} />; - }); - - /** - * 渲染操作按钮的函数。 - * @param data 聊天消息的数据。 - * @returns 渲染操作按钮的组件。 - */ - const Actions = useRefFunction(({ data }: { data: ChatMessage }) => { - if (!renderActions || !item?.role) return; - let RenderFunction; - if (renderActions?.[item.role]) RenderFunction = renderActions[item.role]; - if (renderActions?.['default']) RenderFunction = renderActions['default']; - if (!RenderFunction) RenderFunction = ActionsBar; - - const handleActionClick: ListItemProps['onActionsClick'] = (action, data) => { - switch (action.key) { - case 'copy': { - copy(data.content as string); - message.success(text?.copySuccess || 'Copy Success'); - break; - } - case 'edit': { - setEditing(true); - } - } - - onActionsClick?.(action, data); - }; - - return ( - <RenderFunction - {...data} - onActionClick={(actionKey) => handleActionClick?.(actionKey, data)} - text={text} - /> - ); - }); - - /** - * 错误信息。 - * @returns 错误信息对象。 - */ - const error = useMemo(() => { - if (!item.error) return; - return { - message: item.error?.message, - }; - }, [item.error]); - - /** - * @description memoize the chat item - */ - const memoItem = useMemo(() => { - const dom = ( - <ChatItem - className={chatItemClassName} - data-id={item.id} - actions={<Actions data={item} />} - avatar={(item as any).meta} - avatarAddon={groupNav} - editing={editing} - originData={originData} - error={error} - errorMessage={<ErrorMessage data={item} />} - loading={loading} - message={item.content} - messageExtra={<MessageExtra data={item} />} - onChange={(value) => onMessageChange?.(item.id, value)} - onDoubleClick={(e) => { - if (item.id === 'default' || item.error) return; - if (item.role && ['assistant', 'user'].includes(item.role) && e.altKey) { - setEditing(true); - } - }} - onEditingChange={setEditing} - placement={type === 'chat' ? (item.role === 'user' ? 'right' : 'left') : 'left'} - primary={item.role === 'user'} - renderMessage={(editableContent) => ( - <RenderMessage data={item} editableContent={editableContent} /> - )} - showTitle={showTitle} - text={text} - time={item.updateAt || item.createAt} - type={type === 'chat' ? 'block' : 'pure'} - chatItemRenderConfig={chatItemRenderConfig} - markdownProps={markdownProps} - /> - ); - return dom; - }, [ - props.content, - props.loading, - props.id, - (item as any).meta, - item.updateAt || item.createAt, - editing, - ]); - - if (RenderItem) return <RenderItem key={item.id} {...props} />; - - return memoItem; -}; - -export default ChatListItem; diff --git a/src/ChatList/HistoryDivider.tsx b/src/ChatList/HistoryDivider.tsx deleted file mode 100644 index 497067b4..00000000 --- a/src/ChatList/HistoryDivider.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { Divider } from 'antd'; -import { Timer } from 'lucide-react'; -import { memo } from 'react'; - -import Icon from '@/Icon'; -import Tag from '@/components/Tag'; - -/** - * 历史记录分割线组件的属性。 - */ -interface HistoryDividerProps { - /** - * 是否启用分割线。 - */ - enable?: boolean; - /** - * 分割线文本。 - */ - text?: string; -} - -/** - * 历史记录分割线组件。 - */ -const HistoryDivider = memo<HistoryDividerProps>(({ enable, text }) => { - if (!enable) return null; - - return ( - <div style={{ padding: '0 20px' }}> - <Divider> - <Tag icon={<Icon icon={Timer} />}>{text || 'History Message'}</Tag> - </Divider> - </div> - ); -}); - -export default HistoryDivider; diff --git a/src/ChatList/ShouldUpdateItem.tsx b/src/ChatList/ShouldUpdateItem.tsx deleted file mode 100644 index 7cc769d9..00000000 --- a/src/ChatList/ShouldUpdateItem.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import isEqual from 'fast-deep-equal'; -import { Component } from 'react'; -/** - * 组件用于判断是否需要更新的辅助类。 - */ -class ShouldUpdateItem extends Component< - { - shouldUpdate?: (prevProps: any, nextProps: any) => boolean; - children: React.ReactNode; - [key: string]: any; - }, - any -> { - /** - * 判断组件是否需要更新。 - * @param nextProps - 下一个属性对象。 - * @returns 如果需要更新则返回 true,否则返回 false。 - */ - shouldComponentUpdate(nextProps: any) { - if (nextProps.shouldUpdate) { - return nextProps.shouldUpdate(this.props, nextProps); - } - try { - return ( - !isEqual(this.props.content, nextProps?.content) || - !isEqual(this.props.loading, nextProps?.loading) || - !isEqual(this.props.chatItemRenderConfig, nextProps?.chatItemRenderConfig) || - !isEqual(this.props.meta, nextProps?.meta) - ); - } catch (error) { - return true; - } - } - - render() { - return this.props.children; - } -} - -export default ShouldUpdateItem; diff --git a/src/ChatList/index.tsx b/src/ChatList/index.tsx deleted file mode 100644 index 39f61c9c..00000000 --- a/src/ChatList/index.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import { Fragment, memo, useContext } from 'react'; - -import type { ChatMessage, DivProps } from '@/types'; - -import { ConfigProvider } from 'antd'; -import ChatItem, { ChatListItemProps, ListItemProps } from './ChatListItem'; -import HistoryDivider from './HistoryDivider'; -import ShouldUpdateItem from './ShouldUpdateItem'; -import { useStyles } from './style'; - -export interface ChatListProps extends DivProps, ListItemProps { - /** - * @description Data of chat messages to be displayed - */ - data: ChatMessage[]; - enableHistoryCount?: boolean; - historyCount?: number; - loadingId?: string; - itemShouldUpdate?: (prevProps: ChatListItemProps, nextProps: ChatListItemProps) => boolean; -} -export type { - OnActionClick, - OnMessageChange, - RenderAction, - RenderErrorMessage, - RenderItem, - RenderMessage, - RenderMessageExtra, -} from './ChatListItem'; - -/** - * ChatList组件用于显示聊天列表。 - * - * @component - * @param {Object} props - 组件属性 - * @param {Function} props.onActionsClick - 点击操作按钮时的回调函数 - * @param {Function} props.renderMessagesExtra - 渲染额外的消息内容的回调函数 - * @param {string} props.className - 自定义类名 - * @param {Array} props.data - 聊天数据数组 - * @param {string} [props.type='chat'] - 聊天类型,默认为'chat' - * @param {string} props.text - 文本内容 - * @param {boolean} props.showTitle - 是否显示标题 - * @param {Function} props.itemShouldUpdate - 判断聊天项是否需要更新的回调函数 - * @param {Function} props.onMessageChange - 消息内容变化时的回调函数 - * @param {Function} props.renderMessages - 渲染消息内容的回调函数 - * @param {Function} props.renderErrorMessages - 渲染错误消息的回调函数 - * @param {string} props.loadingId - 正在加载的聊天项的ID - * @param {Function} props.renderItems - 渲染聊天项的回调函数 - * @param {boolean} props.enableHistoryCount - 是否启用历史记录计数 - * @param {Function} props.renderActions - 渲染操作按钮的回调函数 - * @param {number} [props.historyCount=0] - 历史记录计数 - * @param {Object} props.chatItemRenderConfig - 聊天项渲染配置 - * @returns {JSX.Element} 聊天列表组件 - */ -const ChatList = memo<ChatListProps>( - ({ - onActionsClick, - renderMessagesExtra, - className, - data, - type = 'chat', - text, - showTitle, - itemShouldUpdate, - onMessageChange, - renderMessages, - renderErrorMessages, - loadingId, - renderItems, - enableHistoryCount, - renderActions, - historyCount = 0, - chatItemRenderConfig, - markdownProps, - ...props - }) => { - const { cx, styles } = useStyles(); - const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); - const prefixClass = getPrefixCls('pro-chat'); - - return ( - <div className={cx(styles.container, `${prefixClass}-list`, className)} {...props}> - {data.map((item, index) => { - const itemProps = { - loading: loadingId === item.id, - onActionsClick, - onMessageChange, - renderActions, - renderErrorMessages, - renderItems, - renderMessages, - renderMessagesExtra, - showTitle, - text, - type, - }; - - const historyLength = data.length; - const enableHistoryDivider = - enableHistoryCount && - historyLength > historyCount && - historyCount === historyLength - index + 1; - - return ( - <ShouldUpdateItem - key={item.id} - {...itemProps} - {...item} - shouldUpdate={itemShouldUpdate} - > - <Fragment> - <HistoryDivider enable={enableHistoryDivider} text={text?.history} /> - <ChatItem - {...itemProps} - {...item} - originData={item} - chatItemRenderConfig={chatItemRenderConfig} - markdownProps={markdownProps} - /> - </Fragment> - </ShouldUpdateItem> - ); - })} - </div> - ); - }, -); - -export default ChatList; diff --git a/src/ChatList/style.ts b/src/ChatList/style.ts deleted file mode 100644 index e684626a..00000000 --- a/src/ChatList/style.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles(({ css }) => { - return { - container: css` - position: relative; - `, - }; -}); diff --git a/src/EditableMessage/demos/index.tsx b/src/EditableMessage/demos/index.tsx deleted file mode 100644 index 61801d6a..00000000 --- a/src/EditableMessage/demos/index.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { EditableMessage } from '@ant-design/pro-chat'; -import { useState } from 'react'; - -export const content = `# This is an H1 -## This is an H2 -### This is an H3 -#### This is an H4 -##### This is an H5 - -The point of reference-style links is not that they’re easier to write. The point is that with reference-style links, your document source is vastly more readable. Compare the above examples: using reference-style links, the paragraph itself is only 81 characters long; with inline-style links, it’s 176 characters; and as raw \`HTML\`, it’s 234 characters. In the raw \`HTML\`, there’s more markup than there is text. - ---- - -> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, -> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. -> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. -> -> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse -> id sem consectetuer libero luctus adipiscing. - ---- - -an example | *an example* | **an example** - ---- - -1. Bird -1. McHale -1. Parish - 1. Bird - 1. McHale - 1. Parish - ---- - -- Red -- Green -- Blue - - Red - - Green - - Blue - ---- - -This is [an example](http://example.com/ "Title") inline link. - -<http://example.com/> - - -| title | title | title | -| --- | --- | --- | -| content | content | content | - - -\`\`\`bash -$ pnpm install -\`\`\` - - -\`\`\`javascript -import { renderHook } from '@testing-library/react-hooks'; -import { act } from 'react-dom/test-utils'; -import { useDropNodeOnCanvas } from './useDropNodeOnCanvas'; -\`\`\` - ---- - -以下是一段Markdown格式的LaTeX数学公式: - -我是一个行内公式:$E=mc^2$ - -我是一个独立公式: -$$ -\\sum_{i=1}^{n} x_i = x_1 + x_2 + \\ldots + x_n -$$ - -我是一个带有分式的公式: -$$ -\\frac{{n!}}{{k!(n-k)!}} = \\binom{n}{k} -$$ - -我是一个带有上下标的公式: -$$ -x^{2} + y^{2} = r^{2} -$$ - -我是一个带有积分符号的公式: -$$ -\\int_{a}^{b} f(x) \\, dx -$$ -`; - -export default () => { - const [openModal, setOpenModal] = useState(false); - const [editing, setEdit] = useState(false); - - return ( - <EditableMessage - editing={editing} - onEditingChange={setEdit} - onOpenChange={setOpenModal} - openModal={openModal} - value={content} - /> - ); -}; diff --git a/src/EditableMessage/index.en-US.md b/src/EditableMessage/index.en-US.md deleted file mode 100644 index 0c59d0ec..00000000 --- a/src/EditableMessage/index.en-US.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: Components -group: Message -title: EditableMessage -description: The EditableMessage component is used to display a message that can be edited by the user. It consists of a Markdown component and an optional modal for editing the message. When the user clicks on the message, it enters editing mode and displays an input field for editing the message. ---- - -## Default - -<code src="./demos/index.tsx" nopadding></code> - -## APIs - -<API></API> diff --git a/src/EditableMessage/index.md b/src/EditableMessage/index.md deleted file mode 100644 index 41d196a0..00000000 --- a/src/EditableMessage/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: 组件 -group: Message -title: EditableMessage -description: The EditableMessage component is used to display a message that can be edited by the user. It consists of a Markdown component and an optional modal for editing the message. When the user clicks on the message, it enters editing mode and displays an input field for editing the message. ---- - -## Default - -<code src="./demos/index.tsx" nopadding></code> - -## APIs - -<API></API> diff --git a/src/EditableMessage/index.tsx b/src/EditableMessage/index.tsx deleted file mode 100644 index 76765afb..00000000 --- a/src/EditableMessage/index.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import { useMergedState } from 'rc-util'; -import { CSSProperties, memo } from 'react'; - -import MessageInput, { type MessageInputProps } from '@/MessageInput'; -import MessageModal, { type MessageModalProps } from '@/MessageModal'; -import { Markdown, MarkdownProps } from '@ant-design/pro-editor'; - -export interface EditableMessageProps { - /** - * @title The class name for the Markdown and MessageInput component - */ - classNames?: { - /** - * @title The class name for the MessageInput component - */ - input?: string; - textarea?: string; - }; - editButtonSize?: MessageInputProps['editButtonSize']; - /** - * @title Whether the component is in edit mode or not - * @default false - */ - editing?: boolean; - fullFeaturedCodeBlock?: boolean; - height?: MessageInputProps['height']; - inputType?: MessageInputProps['type']; - model?: { - extra?: MessageModalProps['extra']; - footer?: MessageModalProps['footer']; - }; - /** - * @title Callback function when the value changes - * @param value - The new value - */ - onChange?: (value: string) => void; - /** - * @title Callback function when the editing state changes - * @param editing - Whether the component is in edit mode or not - */ - onEditingChange?: (editing: boolean) => void; - /** - * @title Callback function when the modal open state changes - * @param open - Whether the modal is open or not - */ - onOpenChange?: (open: boolean) => void; - /** - * @title Whether the modal is open or not - * @default false - */ - openModal?: boolean; - placeholder?: string; - /** - * @title Whether to show the edit button when the text value is empty - * @default false - */ - showEditWhenEmpty?: boolean; - styles?: { - /** - * @title The style for the MessageInput component - */ - input?: CSSProperties; - }; - text?: MessageModalProps['text']; - /** - * @title The current text value - */ - value: string; - /** - * @title The props for the Markdown component - */ - markdownProps?: MarkdownProps; -} - -const EditableMessage = memo<EditableMessageProps>( - ({ - value, - onChange, - classNames = {}, - onEditingChange, - editing, - openModal, - onOpenChange, - placeholder = 'Type something...', - showEditWhenEmpty = false, - styles, - height, - inputType, - editButtonSize, - text, - model, - markdownProps, - }) => { - const [isEdit, setTyping] = useMergedState(false, { - onChange: onEditingChange, - value: editing, - }); - - const [expand, setExpand] = useMergedState<boolean>(false, { - onChange: onOpenChange, - value: openModal, - }); - - const isAutoSize = height === 'auto'; - - const input = ( - <MessageInput - className={classNames?.input} - classNames={{ textarea: classNames?.textarea }} - defaultValue={value} - editButtonSize={editButtonSize} - height={height} - onCancel={() => setTyping(false)} - onConfirm={(text) => { - onChange?.(text); - setTyping(false); - }} - placeholder={placeholder} - style={styles?.input} - text={text} - textareaClassname={classNames?.input} - type={inputType} - /> - ); - - if (!value && showEditWhenEmpty) return input; - - return ( - <> - {!expand && isEdit ? ( - input - ) : ( - <Markdown - {...markdownProps} - style={{ - height: isAutoSize ? 'unset' : height, - overflowX: 'hidden', - overflowY: 'auto', - ...markdownProps?.style, - }} - > - {value || placeholder} - </Markdown> - )} - <MessageModal - editing={isEdit} - extra={model?.extra} - footer={model?.footer} - height={height} - onChange={(text) => onChange?.(text)} - onEditingChange={setTyping} - onOpenChange={(e) => { - setExpand(e); - setTyping(false); - }} - markdownProps={markdownProps} - open={expand} - placeholder={placeholder} - text={text} - value={value} - /> - </> - ); - }, -); - -export default EditableMessage; diff --git a/src/EditableMessageList/demos/data.ts b/src/EditableMessageList/demos/data.ts deleted file mode 100644 index e82b5155..00000000 --- a/src/EditableMessageList/demos/data.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { LLMMessage } from '@ant-design/pro-chat'; - -export const data: LLMMessage[] = [ - { - content: - '| **量化等级** | **最低 GPU 显存**(推理) | **最低 GPU 显存**(高效参数微调) |\n| -------------- | ------------------------- | --------------------------------- |\n| FP16(无量化) | 13 GB | 14 GB |\n| INT8 | 8 GB | 9 GB |\n| INT4 | 6 GB | 7 GB |\n\n请解释 FP16 、INT8、INT4 的意思?', - role: 'user', - }, - { - content: - 'FP16、INT8、INT4 是量化技术中常用的三种精度级别。它们是用来减小模型的计算量和内存占用的一种方式,从而加速推理和高效参数微调的过程。\n\nFP16 表示使用半精度浮点数(16 位)来表示模型参数和激活值,相比于单精度浮点数(32 位)可以减少一半的内存占用和计算量,但是可能会损失一些精度。\n\nINT8 表示使用 8 位整数来表示模型参数和激活值,相比于 FP16 可以进一步减少内存占用和计算量,但是需要进行量化训练和量化后的推理过程。\n\nINT4 表示使用 4 位整数来表示模型参数和激活值,相比于 INT8 可以进一步减少内存占用和计算量,但是需要进行更加复杂的量化训练和量化后的推理过程,且精度降低更明显。', - role: 'assistant', - }, - { - content: - '对比项\t中文LLaMA\t中文Alpaca\n训练方式\t传统CLM (在通用语料上训练)\t指令精调 (在指令数据上训练)\n\nCLM 和指令精调是什么意思?', - role: 'user', - }, - { - content: - 'CLM 是 Continual Language Model 的缩写,指的是基于大规模通用语料库的语言模型。这种模型通常使用 Transformer 结构,通过无监督学习的方式预测下一个词,从而学习语言的统计规律和语义表示。CLM 可以被用于多种自然语言处理任务中,如文本生成、机器翻译、语言理解等。\n\n指令精调(Instruction-based Fine-tuning)是一种在指令数据上进行微调的方法。在这种方法中,模型首先在大规模通用语料上进行训练,然后在特定领域的指令数据上进行微调,以适应该领域的特定需求。指令数据通常是一些特定领域的语料库,比如医学、法律、金融等。指令精调可以提高模型在特定领域的表现,同时保留模型在通用语料上的语言表示能力。', - role: 'assistant', - }, - { - content: 'SOTA是什么意思', - role: 'user', - }, - { - content: - 'SOTA 是 State-Of-The-Art 的缩写,意为“最先进的技术”或“最高水平的技术”。在各个领域,SOTA 指代的是当前最优秀的技术或方法,通常是指在某个任务或问题上取得的最高性能指标。在机器学习、自然语言处理、计算机视觉等领域,SOTA 是一种非常重要的标志,代表着该领域的最高水平和技术进展。SOTA 的不断更新和提升,反映了该领域的技术发展和研究进展。', - role: 'assistant', - }, - { - content: - 'Since the FastChat (Vicuna) repository doesn’t yet support GPTQ-quantized models, I have integrated the GPTQ-for-LLaMa repository into this fork to run a GPTQ-quantized model. Why should we use the GPTQ-quantized version of the Vicuna model? By using the GPTQ-quantized version, we can reduce the VRAM requirement from 28 GB to about 10 GB, which allows us to run the Vicuna-13B model on a single consumer GPU. Another advantage is the ~3x speedup during inference when using the quantized model version. Any disadvantages? Yes, the quantized model is slightly less precise and therefore performs slightly worse than the full precision model. However, it is the quantization of the model that allows many of us to use the model at all. The following figure from the GPTQ paper shows that, especially for larger language models, the qualitative degradation due to the application of quantization is small:\n\n请解释 什么是 GPTQ', - role: 'user', - }, - { - content: - 'GPTQ 是 GPT-Quantized 的缩写,是一种基于量化技术的 GPT 模型。GPTQ 使用定点数(Fixed-Point Number)来表示模型参数和激活值,相比于浮点数可以减小模型的计算量和内存占用,从而提高模型的推理速度和效率。同时,GPTQ 还采用了一些量化技巧和优化策略,如对称量化、非线性量化、动态范围调整等,以保证模型在量化后仍然能够保持较高的精度和性能。\n\n在上述引用中,提到了将 GPTQ 应用于 Vicuna 模型的优点,即可以将 VRAM 要求从 28 GB 减少到约 10 GB,从而可以在单个消费级 GPU 上运行 Vicuna-13B 模型,并且推理速度可以提高约 3 倍。但是,GPTQ 模型的缺点是精度稍低,表现可能略逊于全精度模型。不过,对于大型语言模型而言,应用量化技术带来的质量下降是较小的,因此 GPTQ 可以在一定程度上平衡模型的精度和效率。', - role: 'assistant', - }, -]; diff --git a/src/EditableMessageList/demos/index.tsx b/src/EditableMessageList/demos/index.tsx deleted file mode 100644 index fcd4c126..00000000 --- a/src/EditableMessageList/demos/index.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { EditableMessageList } from '@ant-design/pro-chat'; - -import { data } from './data'; - -export default () => <EditableMessageList dataSources={data} />; diff --git a/src/EditableMessageList/index.en-US.md b/src/EditableMessageList/index.en-US.md deleted file mode 100644 index 88018b7d..00000000 --- a/src/EditableMessageList/index.en-US.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: Components -group: Message -title: EditableMessageList -description: EditableMessageList is a React component that allows users to edit a list of chat messages, including their content and role. It is designed to be used in chatbot building applications. ---- - -## Default - -<code src="./demos/index.tsx" ></code> - -## APIs - -<API></API> diff --git a/src/EditableMessageList/index.md b/src/EditableMessageList/index.md deleted file mode 100644 index e0706d09..00000000 --- a/src/EditableMessageList/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: 组件 -group: Message -title: EditableMessageList -description: EditableMessageList is a React component that allows users to edit a list of chat messages, including their content and role. It is designed to be used in chatbot building applications. ---- - -## Default - -<code src="./demos/index.tsx" ></code> - -## APIs - -<API></API> diff --git a/src/EditableMessageList/index.tsx b/src/EditableMessageList/index.tsx deleted file mode 100644 index 9b826355..00000000 --- a/src/EditableMessageList/index.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { Button, Select } from 'antd'; -import isEqual from 'fast-deep-equal'; -import { Plus, Trash } from 'lucide-react'; -import { memo, useEffect, useReducer } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import ActionIcon from '@/ActionIcon'; -import Icon from '@/Icon'; -import { ControlInput } from '@/components/ControlInput'; -import { LLMMessage } from '@/types/llm'; - -import { messagesReducer } from './messageReducer'; - -export interface EditableMessageListProps { - /** - * @description The data sources to be rendered - */ - dataSources: LLMMessage[]; - /** - * @description Whether the component is disabled or not - * @default false - */ - disabled?: boolean; - /** - * @description Callback function triggered when the data sources are changed - * @param chatMessages - the updated data sources - */ - onChange?: (chatMessages: LLMMessage[]) => void; -} - -export const EditableMessageList = memo<EditableMessageListProps>( - ({ disabled, dataSources, onChange }) => { - const [chatMessages, dispatch] = useReducer(messagesReducer, dataSources); - - useEffect(() => { - if (!isEqual(dataSources, chatMessages)) { - onChange?.(chatMessages); - } - }, [chatMessages]); - - return dataSources ? ( - <Flexbox gap={12}> - {chatMessages.map((item, index) => ( - <Flexbox - align={'center'} - gap={8} - horizontal - key={`${index}-${item.content}`} - width={'100%'} - > - <Select - disabled={disabled} - dropdownStyle={{ zIndex: 100 }} - onChange={(value) => { - dispatch({ index, role: value, type: 'updateMessageRole' }); - }} - options={[ - { label: 'System', value: 'system' }, - { label: 'Input', value: 'user' }, - { label: 'Output', value: 'assistant' }, - ]} - style={{ width: 120 }} - value={item.role} - /> - <ControlInput - disabled={disabled} - onChange={(e) => { - dispatch({ index, message: e, type: 'updateMessage' }); - }} - placeholder={item.role === 'user' ? '请填入输入的样例内容' : '请填入输出的样例'} - value={item.content} - /> - <ActionIcon - icon={Trash} - onClick={() => { - dispatch({ index, type: 'deleteMessage' }); - }} - placement="right" - size={{ fontSize: 16 }} - title="Delete" - /> - </Flexbox> - ))} - - <Button - block - disabled={disabled} - icon={<Icon icon={Plus} />} - onClick={() => { - const lastMeg = chatMessages.at(-1); - - dispatch({ - message: { content: '', role: lastMeg?.role === 'user' ? 'assistant' : 'user' }, - type: 'addMessage', - }); - }} - > - Add Props - </Button> - </Flexbox> - ) : undefined; - }, - isEqual, -); - -export default EditableMessageList; diff --git a/src/EditableMessageList/messageReducer.ts b/src/EditableMessageList/messageReducer.ts deleted file mode 100644 index c1ac2e89..00000000 --- a/src/EditableMessageList/messageReducer.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { produce } from 'immer'; - -import { LLMMessage, LLMRoleType } from '@/types/llm'; -import { ChatMessageError } from '@/types/message'; - -export type MessageDispatch = - | { message: LLMMessage; type: 'addMessage' } - | { index: number; message: LLMMessage; type: 'insertMessage' } - | { index: number; type: 'deleteMessage' } - | { type: 'resetMessages' } - | { index: number; message: string; type: 'updateMessage' } - | { index: number; role: LLMRoleType; type: 'updateMessageRole' } - // - | { message: string; type: 'addUserMessage' } - | { responseStream: string[]; type: 'updateLatestBotMessage' } - | { index: number; message: string; type: 'updateMessageChoice' } - | { - error: ChatMessageError | undefined; - index: number; - type: 'setErrorMessage'; - }; - -export const messagesReducer = (state: LLMMessage[], payload: MessageDispatch): LLMMessage[] => { - switch (payload.type) { - case 'addMessage': { - return [...state, payload.message]; - } - - case 'insertMessage': { - return produce(state, (draftState) => { - draftState.splice(payload.index, 0, payload.message); - }); - } - - case 'deleteMessage': { - return state.filter((_, index) => index !== payload.index); - } - case 'resetMessages': { - return []; - } - - case 'updateMessage': { - return produce(state, (draftState) => { - const { index, message } = payload; - - draftState[index].content = message; - }); - } - case 'updateMessageRole': { - return produce(state, (draftState) => { - const { index, role } = payload; - - draftState[index].role = role; - }); - } - - case 'addUserMessage': { - return produce(state, (draftState) => { - draftState.push({ content: payload.message, role: 'user' }); - }); - } - - case 'updateLatestBotMessage': { - return produce(state, () => { - const { responseStream } = payload; - const newMessage = { content: responseStream.join(''), role: 'assistant' }; - - return [...state.slice(0, -1), newMessage]; - }); - } - - case 'setErrorMessage': { - return produce(state, (draftState) => { - const { index, error } = payload; - - // @ts-ignore - draftState[index].error = error; - }); - } - - default: { - throw new Error('暂未实现的 type,请检查 reducer'); - } - } -}; diff --git a/src/Emoji/index.tsx b/src/Emoji/index.tsx deleted file mode 100644 index 3d84e282..00000000 --- a/src/Emoji/index.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { memo } from 'react'; - -import { DivProps } from '../types'; - -import { useStyles } from './style'; - -export interface EmojiProps extends DivProps { - /** - * @description The emoji character to be rendered - */ - emoji: string; - /** - * @description Size of the emoji - * @default 40 - */ - size?: number; -} - -const Emoji = memo<EmojiProps>(({ emoji, className, style, size = 40 }) => { - const { cx, styles } = useStyles(); - - return ( - <div - className={cx(styles.container, className)} - style={{ fontSize: size * 0.9, height: size, width: size, ...style }} - > - {emoji} - </div> - ); -}); - -export default Emoji; diff --git a/src/Emoji/style.ts b/src/Emoji/style.ts deleted file mode 100644 index f69517c6..00000000 --- a/src/Emoji/style.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles(({ css, token }) => { - return { - container: css` - position: relative; - - display: flex; - align-items: center; - justify-content: center; - - line-height: 1; - text-align: center; - `, - loading: css` - position: absolute; - inset: 0; - - display: flex; - align-items: center; - justify-content: center; - - width: 100%; - height: 100%; - - color: ${token.colorText}; - `, - }; -}); diff --git a/src/Icon/index.tsx b/src/Icon/index.tsx deleted file mode 100644 index 1412157d..00000000 --- a/src/Icon/index.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import { LucideIcon } from 'lucide-react'; -import { memo, useMemo } from 'react'; - -import { DivProps } from '@/types'; - -import { useStyles } from './style'; - -export type IconSize = - | 'large' - | 'normal' - | 'small' - | { - fontSize?: number; - strokeWidth?: number; - }; - -const calcSize = (size?: IconSize) => { - let fontSize: number | string; - let strokeWidth: number; - - switch (size) { - case 'large': { - fontSize = 24; - strokeWidth = 2; - break; - } - case 'normal': { - fontSize = 20; - strokeWidth = 2; - break; - } - case 'small': { - fontSize = 14; - strokeWidth = 1.5; - break; - } - default: { - if (size) { - fontSize = size?.fontSize || 24; - strokeWidth = size?.strokeWidth || 2; - } else { - fontSize = '1em'; - strokeWidth = 2; - } - break; - } - } - return { fontSize, strokeWidth }; -}; - -export interface IconProps extends DivProps { - color?: string; - fill?: string; - /** - * @description The icon element to be rendered - * @type LucideIcon - */ - icon: LucideIcon; - /** - * @description Size of the icon - * @default 'normal' - */ - size?: IconSize; - /** - * @description Rotate icon with animation - * @default false - */ - spin?: boolean; -} - -const Icon = memo<IconProps>(({ icon, size, color, fill, className, spin, ...props }) => { - const { styles, cx } = useStyles(); - const SvgIcon = icon; - - const { fontSize, strokeWidth } = useMemo(() => calcSize(size), [size]); - - return ( - <span className={cx('anticon', spin && styles.spin, className)} role="img" {...props}> - <SvgIcon - color={color} - fill={fill ?? 'transparent'} - focusable={false} - height={fontSize} - size={fontSize} - strokeWidth={strokeWidth} - width={fontSize} - /> - </span> - ); -}); - -export default Icon; diff --git a/src/Icon/style.ts b/src/Icon/style.ts deleted file mode 100644 index 0697cd39..00000000 --- a/src/Icon/style.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { createStyles, keyframes } from 'antd-style'; - -export const useStyles = createStyles(({ css }) => { - const spin = keyframes` - 0% { - rotate: 0deg; - } - 100% { - rotate: 360deg; - } - `; - return { - spin: css` - animation: ${spin} 1s linear infinite; - `, - }; -}); diff --git a/src/List/ListItem/index.tsx b/src/List/ListItem/index.tsx deleted file mode 100644 index 92da1923..00000000 --- a/src/List/ListItem/index.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import { LoadingOutlined, MessageOutlined } from '@ant-design/icons'; -import { CSSProperties, HTMLAttributes, ReactNode, forwardRef } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { useStyles } from './style'; -import { getChatItemTime } from './time'; - -/** - * 卡片列表项的属性 - */ -export interface ListItemProps { - /** - * 渲染操作区域的 React 节点 - */ - actions?: ReactNode; - /** - * 是否处于激活状态 - */ - active: boolean; - addon?: ReactNode; - /** - * 头像的 React 节点 - */ - avatar?: ReactNode; - /** - * 自定义样式类名 - */ - className?: string; - /** - * 自定义样式类名对象 - * @property time - 时间的样式类名 - */ - classNames?: { - time?: string; - }; - /** - * 日期时间戳 - */ - date?: number; - /** - * 描述信息 - */ - description?: ReactNode; - /** - * 是否处于加载状态 - */ - loading?: boolean; - /** - * 点击事件回调函数 - */ - onClick?: () => void; - /** - * 鼠标悬停状态变化事件回调函数 - * @param hover - 是否悬停 - */ - onHoverChange?: (hover: boolean) => void; - - pin?: boolean; - /** - * 是否显示操作区域 - */ - showAction?: boolean; - /** - * 自定义样式对象 - */ - style?: CSSProperties; - /** - * 标题 - */ - title: ReactNode; -} - -const ListItem = forwardRef<HTMLDivElement, ListItemProps & HTMLAttributes<any>>( - ( - { - active, - avatar, - loading, - description, - date, - title, - onHoverChange, - actions, - className, - style, - showAction, - children, - classNames, - addon, - pin, - ...props - }, - ref, - ) => { - const { styles, cx } = useStyles(); - - return ( - <Flexbox - align={'flex-start'} - className={cx(styles.container, active && styles.active, pin && styles.pin, className)} - distribution={'space-between'} - gap={8} - horizontal - onMouseEnter={() => { - onHoverChange?.(true); - }} - onMouseLeave={() => { - onHoverChange?.(false); - }} - paddingBlock={12} - paddingInline={16} - ref={ref} - style={style} - {...props} - > - {avatar ?? <MessageOutlined style={{ marginTop: 4 }} />} - - <Flexbox className={styles.content} gap={8}> - <Flexbox distribution={'space-between'} horizontal> - <div className={styles.title}>{title}</div> - </Flexbox> - {description && <div className={styles.desc}>{description}</div>} - {addon} - </Flexbox> - - {loading ? ( - <LoadingOutlined spin={true} /> - ) : ( - <> - {showAction && ( - <Flexbox - className={styles.actions} - gap={4} - horizontal - onClick={(e: any) => { - e.preventDefault(); - e.stopPropagation(); - }} - style={{ display: showAction ? undefined : 'none' }} - > - {actions} - </Flexbox> - )} - {date && ( - <div - className={cx(styles.time, classNames?.time)} - style={showAction ? { opacity: 0 } : {}} - > - {getChatItemTime(date)} - </div> - )} - </> - )} - {children} - </Flexbox> - ); - }, -); - -export default ListItem; diff --git a/src/List/ListItem/style.ts b/src/List/ListItem/style.ts deleted file mode 100644 index d379f224..00000000 --- a/src/List/ListItem/style.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles(({ css, token }) => { - return { - actions: css` - position: absolute; - top: 50%; - right: 16px; - transform: translateY(-50%); - `, - active: css` - color: ${token.colorText}; - background-color: ${token.colorFillSecondary}; - - &:hover { - background-color: ${token.colorFill}; - } - `, - container: css` - cursor: pointer; - color: ${token.colorTextTertiary}; - background: transparent; - transition: background-color 200ms ${token.motionEaseOut}; - - &:active { - background-color: ${token.colorFillSecondary}; - } - - &:hover { - background-color: ${token.colorFillTertiary}; - } - `, - content: css` - position: relative; - overflow: hidden; - flex: 1; - align-self: center; - `, - desc: css` - overflow: hidden; - - width: 100%; - - font-size: 12px; - line-height: 1; - color: ${token.colorTextDescription}; - text-overflow: ellipsis; - white-space: nowrap; - `, - - pin: css` - background-color: ${token.colorFillTertiary}; - - &:active { - background-color: ${token.colorFill} !important; - } - - &:hover { - background-color: ${token.colorFill}; - } - `, - - time: css` - font-size: 12px; - color: ${token.colorTextPlaceholder}; - `, - title: css` - overflow: hidden; - - width: 100%; - - font-size: 16px; - line-height: 1; - color: ${token.colorText}; - text-overflow: ellipsis; - white-space: nowrap; - `, - }; -}); diff --git a/src/List/ListItem/time.ts b/src/List/ListItem/time.ts deleted file mode 100644 index 5234bbc4..00000000 --- a/src/List/ListItem/time.ts +++ /dev/null @@ -1,15 +0,0 @@ -import dayjs from 'dayjs'; -import 'dayjs/locale/zh-cn'; - -dayjs.locale('zh-cn'); - -export const getChatItemTime = (updateAt: number) => { - const time = dayjs(updateAt); - const diff = dayjs().day() - time.day(); - - if (time.isSame(dayjs(), 'day')) return time.format('HH:mm'); - - if (diff === 1) return '昨天'; - - return time.format('MM-DD'); -}; diff --git a/src/List/index.ts b/src/List/index.ts deleted file mode 100644 index 57c950de..00000000 --- a/src/List/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import ListItem from './ListItem'; - -const List = { - Item: ListItem, -}; - -export default List; diff --git a/src/MessageInput/demos/index.tsx b/src/MessageInput/demos/index.tsx deleted file mode 100644 index b0a2924a..00000000 --- a/src/MessageInput/demos/index.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { content } from '@/EditableMessage/demos'; -import { MessageInput } from '@ant-design/pro-chat'; - -export default () => { - return <MessageInput defaultValue={content} height={200} style={{ width: '100%' }} />; -}; diff --git a/src/MessageInput/index.en-US.md b/src/MessageInput/index.en-US.md deleted file mode 100644 index da29316c..00000000 --- a/src/MessageInput/index.en-US.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: Components -group: Message -title: MessageInput -description: CopyButton is a React component used to copy text content to the clipboard. It provides a button with a copy icon that, when clicked, copies the specified content to the user's clipboard. It also displays a tooltip indicating whether the copy action was successful or not. ---- - -## Default - -<code src="./demos/index.tsx" center></code> - -## APIs - -<API></API> diff --git a/src/MessageInput/index.md b/src/MessageInput/index.md deleted file mode 100644 index b9bf04ca..00000000 --- a/src/MessageInput/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: 组件 -group: Message -title: MessageInput -description: CopyButton is a React component used to copy text content to the clipboard. It provides a button with a copy icon that, when clicked, copies the specified content to the user's clipboard. It also displays a tooltip indicating whether the copy action was successful or not. ---- - -## Default - -<code src="./demos/index.tsx" center></code> - -## APIs - -<API></API> diff --git a/src/MessageInput/index.tsx b/src/MessageInput/index.tsx deleted file mode 100644 index 588b9fc5..00000000 --- a/src/MessageInput/index.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { Button, ButtonProps } from 'antd'; -import { memo, useState, type CSSProperties } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { TextArea, type TextAreaProps } from '@/components/Input'; -import { DivProps } from '@/types'; - -import { useStyles } from './style'; - -export interface MessageInputProps extends DivProps { - /** - * @description Additional className to apply to the component. - */ - className?: string; - classNames?: TextAreaProps['classNames']; - /** - * @description The default value of the input box. - */ - defaultValue?: string; - editButtonSize?: ButtonProps['size']; - height?: number | 'auto' | string; - /** - * @description Callback function triggered when user clicks on the cancel button. - */ - onCancel?: () => void; - - /** - * @description Callback function triggered when user clicks on the confirm button. - * @param text - The text input by the user. - */ - onConfirm?: (text: string) => void; - /** - * @description Custom rendering of the bottom buttons. - * @param text - The text input by the user. - */ - renderButtons?: (text: string) => ButtonProps[]; - text?: { - cancel?: string; - confirm?: string; - }; - textareaClassname?: string; - textareaStyle?: CSSProperties; - /** - * @description The type of the input box. - */ - type?: TextAreaProps['type']; -} - -const MessageInput = memo<MessageInputProps>( - ({ - text, - type = 'pure', - onCancel, - defaultValue, - onConfirm, - renderButtons, - textareaStyle, - textareaClassname, - placeholder = 'Type something...', - - height = 'auto', - - style, - editButtonSize = 'middle', - classNames, - ...props - }) => { - const [temporarySystemRole, setRole] = useState<string>(defaultValue || ''); - const { cx, styles } = useStyles(); - - const isAutoSize = height === 'auto'; - - return ( - <Flexbox gap={16} style={{ flex: 1, width: '100%', ...style }} {...props}> - <TextArea - autoSize={isAutoSize} - className={cx(styles, textareaClassname)} - classNames={classNames} - onBlur={(e) => setRole(e.target.value)} - onChange={(e) => setRole(e.target.value)} - placeholder={placeholder} - resize={false} - style={{ height: isAutoSize ? 'unset' : height, minHeight: '100%', ...textareaStyle }} - type={type} - value={temporarySystemRole} - /> - <Flexbox direction={'horizontal-reverse'} gap={8}> - {renderButtons ? ( - renderButtons(temporarySystemRole).map((buttonProps, index) => ( - <Button key={index} size="small" {...buttonProps} /> - )) - ) : ( - <> - <Button - onClick={() => { - onConfirm?.(temporarySystemRole); - }} - size={editButtonSize} - type="primary" - > - {text?.confirm || 'Confirm'} - </Button> - <Button onClick={onCancel} size={editButtonSize}> - {text?.cancel || 'Cancel'} - </Button> - </> - )} - </Flexbox> - </Flexbox> - ); - }, -); - -export default MessageInput; diff --git a/src/MessageInput/style.ts b/src/MessageInput/style.ts deleted file mode 100644 index 06f557aa..00000000 --- a/src/MessageInput/style.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles( - ({ css, token }) => css` - position: relative; - - height: 100%; - - font-family: ${token.fontFamilyCode}; - font-size: 13px; - line-height: 1.8; - `, -); diff --git a/src/MessageModal/demos/index.tsx b/src/MessageModal/demos/index.tsx deleted file mode 100644 index 6a72407c..00000000 --- a/src/MessageModal/demos/index.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { MessageModal } from '@ant-design/pro-chat'; -import { Button } from 'antd'; -import { useState } from 'react'; - -export default () => { - const [open, setOpen] = useState(false); - - return ( - <> - <Button - onClick={() => { - setOpen(true); - }} - > - open - </Button> - <MessageModal onOpenChange={setOpen} open={open} value={'editable text'} /> - </> - ); -}; diff --git a/src/MessageModal/index.en-US.md b/src/MessageModal/index.en-US.md deleted file mode 100644 index a44cab62..00000000 --- a/src/MessageModal/index.en-US.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: Components -group: Message -title: MessageModal -description: The MessageModal component is a modal window that can display either a message in Markdown format or a message input field for editing the message. ---- - -## Default - -<code src="./demos/index.tsx" center></code> - -## APIs - -<API></API> diff --git a/src/MessageModal/index.md b/src/MessageModal/index.md deleted file mode 100644 index 73eb8e12..00000000 --- a/src/MessageModal/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -nav: 组件 -group: Message -title: MessageModal -description: The MessageModal component is a modal window that can display either a message in Markdown format or a message input field for editing the message. ---- - -## Default - -<code src="./demos/index.tsx" center></code> - -## APIs - -<API></API> diff --git a/src/MessageModal/index.tsx b/src/MessageModal/index.tsx deleted file mode 100644 index d7342a1a..00000000 --- a/src/MessageModal/index.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import { useResponsive } from 'antd-style'; -import { useMergedState } from 'rc-util'; -import { CSSProperties, ReactNode, memo } from 'react'; - -import MessageInput, { type MessageInputProps } from '@/MessageInput'; -import { Markdown, MarkdownProps } from '@ant-design/pro-editor'; -import { Modal, type ModalProps } from 'antd'; - -export interface MessageModalProps extends Pick<ModalProps, 'open' | 'footer'> { - /** - * @description Whether the message is being edited or not - * @default false - */ - editing?: boolean; - extra?: ReactNode; - height?: MessageInputProps['height']; - /** - * @description Callback fired when message content is changed - */ - onChange?: (text: string) => void; - /** - * @description Callback fired when editing state is changed - */ - onEditingChange?: (editing: boolean) => void; - /** - * @description Callback fired when open state is changed - */ - onOpenChange?: (open: boolean) => void; - /** - * @description Whether the modal is open or not - * @default false - */ - placeholder?: string; - text?: { - cancel?: string; - confirm?: string; - edit?: string; - title?: string; - }; - /** - * @description The value of the message content - */ - value: string; - /** - * @description The props for the Markdown component - */ - markdownProps?: MarkdownProps; -} - -const MessageModal = memo<MessageModalProps>( - ({ - editing, - open, - height = 'auto', - onOpenChange, - onEditingChange, - placeholder, - value, - onChange, - text, - footer, - extra, - markdownProps, - }) => { - const { mobile } = useResponsive(); - - const [isEdit, setTyping] = useMergedState(false, { - onChange: onEditingChange, - value: editing, - }); - - const [expand, setExpand] = useMergedState(false, { - onChange: onOpenChange, - value: open, - }); - - const isAutoSize = height === 'auto'; - const markdownStyle: CSSProperties = { - height: isAutoSize ? 'unset' : height, - overflowX: 'hidden', - overflowY: 'auto', - }; - - return ( - <Modal - cancelText={text?.cancel || 'Cancel'} - footer={isEdit ? null : footer} - okText={text?.edit || 'Edit'} - onCancel={() => setExpand(false)} - onOk={() => setTyping(true)} - open={expand} - styles={mobile ? { body: { padding: 16 } } : {}} - title={text?.title || 'Prompt'} - > - {isEdit ? ( - <MessageInput - defaultValue={value} - height={height} - onCancel={() => setTyping(false)} - onConfirm={(text) => { - setTyping(false); - onChange?.(text); - }} - placeholder={placeholder} - text={{ - cancel: text?.cancel, - confirm: text?.confirm, - }} - type={'block'} - /> - ) : ( - <> - {extra} - <Markdown - {...markdownProps} - style={ - value - ? { ...markdownStyle, ...markdownProps?.style } - : { - ...markdownStyle, - ...markdownProps?.style, - opacity: 0.5, - } - } - > - {String(value || placeholder)} - </Markdown> - </> - )} - </Modal> - ); - }, -); - -export default MessageModal; diff --git a/src/ProChat/components/ChatList/Actions/Assistant.tsx b/src/ProChat/components/ChatList/Actions/Assistant.tsx deleted file mode 100644 index f868aefb..00000000 --- a/src/ProChat/components/ChatList/Actions/Assistant.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import ActionIconGroup from '@/ActionIconGroup'; -import { RenderAction } from '@/ChatList'; -import { useChatListActionsBar } from '@/hooks/useChatListActionsBar'; -import { memo } from 'react'; - -import { ErrorActionsBar } from '../Actions/Error'; - -export const AssistantActionsBar: RenderAction = memo(({ text, id, onActionClick, error }) => { - const { regenerate, edit, copy, divider, del } = useChatListActionsBar(text); - - if (id === 'default') return; - - if (error) return <ErrorActionsBar onActionClick={onActionClick} text={text} />; - - return ( - <ActionIconGroup - dropdownMenu={[ - edit, - copy, - regenerate, - // divider, - // TODO: need a translate - divider, - del, - ]} - items={[regenerate, copy]} - onActionClick={onActionClick} - type="ghost" - /> - ); -}); diff --git a/src/ProChat/components/ChatList/Actions/Error.tsx b/src/ProChat/components/ChatList/Actions/Error.tsx deleted file mode 100644 index d51c37bf..00000000 --- a/src/ProChat/components/ChatList/Actions/Error.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import ActionIconGroup from '@/ActionIconGroup'; -import { ActionsBarProps } from '@/ChatList/ActionsBar'; -import { useChatListActionsBar } from '@/hooks/useChatListActionsBar'; -import { memo } from 'react'; - -export const ErrorActionsBar = memo<ActionsBarProps>(({ text, onActionClick }) => { - const { regenerate, del } = useChatListActionsBar(text); - - return <ActionIconGroup items={[regenerate, del]} onActionClick={onActionClick} type="ghost" />; -}); diff --git a/src/ProChat/components/ChatList/Actions/Fallback.tsx b/src/ProChat/components/ChatList/Actions/Fallback.tsx deleted file mode 100644 index 98e66f64..00000000 --- a/src/ProChat/components/ChatList/Actions/Fallback.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import ActionIconGroup from '@/ActionIconGroup'; -import { RenderAction } from '@/ChatList'; -import { useChatListActionsBar } from '@/hooks/useChatListActionsBar'; -import { memo } from 'react'; - -export const DefaultActionsBar: RenderAction = memo(({ text, onActionClick }) => { - const { del } = useChatListActionsBar(text); - return ( - <ActionIconGroup dropdownMenu={[del]} items={[]} onActionClick={onActionClick} type="ghost" /> - ); -}); diff --git a/src/ProChat/components/ChatList/Actions/Function.tsx b/src/ProChat/components/ChatList/Actions/Function.tsx deleted file mode 100644 index 98d3fbbf..00000000 --- a/src/ProChat/components/ChatList/Actions/Function.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import ActionIconGroup from '@/ActionIconGroup'; -import { RenderAction } from '@/ChatList'; -import { useChatListActionsBar } from '@/hooks/useChatListActionsBar'; -import { memo } from 'react'; - -export const FunctionActionsBar: RenderAction = memo(({ text, onActionClick }) => { - const { regenerate, divider, del } = useChatListActionsBar(text); - return ( - <ActionIconGroup - dropdownMenu={[regenerate, divider, del]} - items={[regenerate]} - onActionClick={onActionClick} - type="ghost" - /> - ); -}); diff --git a/src/ProChat/components/ChatList/Actions/User.tsx b/src/ProChat/components/ChatList/Actions/User.tsx deleted file mode 100644 index b0b191c4..00000000 --- a/src/ProChat/components/ChatList/Actions/User.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import ActionIconGroup from '@/ActionIconGroup'; -import { RenderAction } from '@/ChatList'; -import { useChatListActionsBar } from '@/hooks/useChatListActionsBar'; -import { memo } from 'react'; - -export const UserActionsBar: RenderAction = memo(({ text, onActionClick }) => { - const { regenerate, edit, copy, divider, del } = useChatListActionsBar(text); - - return ( - <ActionIconGroup - dropdownMenu={[ - edit, - copy, - regenerate, - // divider, - // TODO: need a translate - divider, - del, - ]} - items={[regenerate, edit]} - onActionClick={onActionClick} - type="ghost" - /> - ); -}); diff --git a/src/ProChat/components/ChatList/Actions/index.ts b/src/ProChat/components/ChatList/Actions/index.ts deleted file mode 100644 index ab97cfed..00000000 --- a/src/ProChat/components/ChatList/Actions/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ChatListProps } from '@/ChatList'; - -import { AssistantActionsBar } from './Assistant'; -import { DefaultActionsBar } from './Fallback'; -import { FunctionActionsBar } from './Function'; -import { UserActionsBar } from './User'; - -export const renderActions: ChatListProps['renderActions'] = { - assistant: AssistantActionsBar, - function: FunctionActionsBar, - system: DefaultActionsBar, - user: UserActionsBar, - hello: () => undefined, -}; diff --git a/src/ProChat/components/ChatList/Extras/Assistant.tsx b/src/ProChat/components/ChatList/Extras/Assistant.tsx deleted file mode 100644 index 4a0ec299..00000000 --- a/src/ProChat/components/ChatList/Extras/Assistant.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import Tag from '@/components/Tag'; -import { RenderMessageExtra } from '@/index'; - -import { memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { useStore } from '@/ProChat/store'; - -export const AssistantMessageExtra: RenderMessageExtra = memo(({ extra, ...rest }) => { - const [model, messageItemExtraRender] = useStore((s) => [ - s.config.model, - s.messageItemExtraRender, - ]); - - const showModelTag = extra?.fromModel && model !== extra?.fromModel; - const hasTranslate = !!extra?.translate; - - const showExtra = showModelTag || hasTranslate; - - const dom = messageItemExtraRender?.({ extra, ...rest }, 'assistant'); - if (!showExtra && !dom) return; - - return ( - <Flexbox gap={8} style={{ marginTop: 8 }}> - {showModelTag && ( - <div> - {/*TODO: need a model icons */} - <Tag>{extra?.fromModel as string}</Tag> - </div> - )} - {dom} - </Flexbox> - ); -}); diff --git a/src/ProChat/components/ChatList/Extras/User.tsx b/src/ProChat/components/ChatList/Extras/User.tsx deleted file mode 100644 index 61471636..00000000 --- a/src/ProChat/components/ChatList/Extras/User.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { RenderMessageExtra } from '@/index'; -import { Divider } from 'antd'; -import { memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { useStore } from '@/ProChat/store'; - -export const UserMessageExtra: RenderMessageExtra = memo(({ extra, ...rest }) => { - const hasTranslate = !!extra?.translate; - - const [messageItemExtraRender] = useStore((s) => [s.messageItemExtraRender]); - - const dom = messageItemExtraRender?.({ extra, ...rest }, 'user'); - - if (!dom) return; - return ( - <Flexbox gap={8} style={{ marginTop: hasTranslate ? 8 : 0 }}> - {extra?.translate && ( - <div> - <Divider style={{ margin: '12px 0' }} /> - </div> - )} - {dom} - </Flexbox> - ); -}); diff --git a/src/ProChat/components/ChatList/Extras/index.ts b/src/ProChat/components/ChatList/Extras/index.ts deleted file mode 100644 index 2bb03970..00000000 --- a/src/ProChat/components/ChatList/Extras/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ChatListProps } from '@/ChatList'; - -import { AssistantMessageExtra } from './Assistant'; -import { UserMessageExtra } from './User'; - -export const renderMessagesExtra: ChatListProps['renderMessagesExtra'] = { - assistant: AssistantMessageExtra, - user: UserMessageExtra, -}; diff --git a/src/ProChat/components/ChatList/Messages/Assistant.tsx b/src/ProChat/components/ChatList/Messages/Assistant.tsx deleted file mode 100644 index 44460804..00000000 --- a/src/ProChat/components/ChatList/Messages/Assistant.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { RenderMessage } from '@/ChatList'; -import { memo } from 'react'; - -import { DefaultMessage } from './Default'; - -export const AssistantMessage: RenderMessage = memo(({ id, content, ...props }) => { - // todo: need a custom render - return <DefaultMessage content={content} id={id} {...props} />; -}); diff --git a/src/ProChat/components/ChatList/Messages/Default.tsx b/src/ProChat/components/ChatList/Messages/Default.tsx deleted file mode 100644 index 7b747363..00000000 --- a/src/ProChat/components/ChatList/Messages/Default.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { RenderMessage } from '@/ChatList'; -import { memo } from 'react'; - -import { LOADING_FLAT } from '@/ProChat/const/message'; - -import BubblesLoading from '../Loading'; - -export const DefaultMessage: RenderMessage = memo(({ id, editableContent, content }) => { - if (content === LOADING_FLAT) return <BubblesLoading />; - - return <div id={id}>{editableContent}</div>; -}); diff --git a/src/ProChat/components/ChatList/Messages/Hello.tsx b/src/ProChat/components/ChatList/Messages/Hello.tsx deleted file mode 100644 index 1328db5d..00000000 --- a/src/ProChat/components/ChatList/Messages/Hello.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { RenderMessage } from '@/ChatList'; -import { memo } from 'react'; -import { DefaultMessage } from './Default'; - -export const HelloMessage: RenderMessage = memo((props) => { - const { content } = props; - if (typeof content === 'string') return <DefaultMessage {...props} />; - return content; -}); diff --git a/src/ProChat/components/ChatList/Messages/index.ts b/src/ProChat/components/ChatList/Messages/index.ts deleted file mode 100644 index a6612e56..00000000 --- a/src/ProChat/components/ChatList/Messages/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ChatListProps } from '@/ChatList'; - -import { AssistantMessage } from './Assistant'; -import { DefaultMessage } from './Default'; -import { HelloMessage } from './Hello'; - -export const renderMessages: ChatListProps['renderMessages'] = { - hello: HelloMessage, - assistant: AssistantMessage, - default: DefaultMessage, -}; diff --git a/src/ProChat/components/ChatList/OTPInput.tsx b/src/ProChat/components/ChatList/OTPInput.tsx deleted file mode 100644 index 2e48ed3d..00000000 --- a/src/ProChat/components/ChatList/OTPInput.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { createStyles } from 'antd-style'; -import { useMergedState } from 'rc-util'; -import React, { memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -const useStyles = createStyles( - ({ css, token }) => css` - width: ${token.controlHeight}px; - height: ${token.controlHeight}px; - - font-size: 16px; - color: ${token.colorText}; - text-align: center; - - background: ${token.colorBgContainer}; - border: 1px solid ${token.colorBorder}; - border-radius: 8px; - - &:focus, - &:focus-visible { - border-color: ${token.colorPrimary}; - outline: none; - } - `, -); - -/** - * Let's borrow some props from HTML "input". More info below: - * - * [Pick Documentation](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys) - * - * [How to extend HTML Elements](https://reacthustle.com/blog/how-to-extend-html-elements-in-react-typescript) - */ -type PartialInputProps = Pick<React.ComponentPropsWithoutRef<'input'>, 'className' | 'style'>; - -interface OtpInputProps extends PartialInputProps { - onChange?: (value: string) => void; - /** - * Number of characters/input for this component - */ - size?: number; - /** - * Validation pattern for each input. - * e.g: /[0-9]{1}/ for digits only or /[0-9a-zA-Z]{1}/ for alphanumeric - */ - validationPattern?: RegExp; - /** - * full value of the otp input, up to {size} characters - */ - value?: string; - defaultValue?: string; -} - -const handleKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => { - const current = e.currentTarget; - if (e.key === 'ArrowLeft' || e.key === 'Backspace') { - const prev = current.previousElementSibling as HTMLInputElement | null; - prev?.focus(); - prev?.setSelectionRange(0, 1); - return; - } - - if (e.key === 'ArrowRight') { - const prev = current.nextSibling as HTMLInputElement | null; - prev?.focus(); - prev?.setSelectionRange(0, 1); - return; - } -}; - -const OtpInput = memo<OtpInputProps>((props) => { - const { - //Set the default size to 6 characters - size = 6, - //Default validation is digits - validationPattern = /\d/, - value: outerValue, - defaultValue, - onChange, - className, - ...restProps - } = props; - const [value, setValue] = useMergedState(defaultValue!, { onChange, value: outerValue }); - - const { styles, cx } = useStyles(); - // Create an array based on the size. - const arr = Array.from({ length: size }).fill('-'); - - const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>, index: number) => { - const elem = e.target; - const val = e.target.value; - - // check if the value is valid - if (!validationPattern.test(val) && val !== '') return; - - // change the value using onChange props - const valueArr = value?.split('') || []; - valueArr[index] = val; - const newVal = valueArr.join('').slice(0, 6); - setValue(newVal); - - //focus the next element if there's a value - if (val) { - const next = elem.nextElementSibling as HTMLInputElement | null; - next?.focus(); - } - }; - - const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => { - e.preventDefault(); - const val = e.clipboardData.getData('text').slice(0, Math.max(0, size)); - - setValue(val); - }; - - return ( - <Flexbox gap={12} horizontal> - {arr.map((_, index) => { - return ( - <input - key={index} - {...restProps} - className={cx(styles, className)} - maxLength={6} - onChange={(e) => handleInputChange(e, index)} - onKeyUp={handleKeyUp} - onPaste={handlePaste} - pattern={validationPattern.source} - type="text" - value={value?.at(index) ?? ''} - /> - ); - })} - </Flexbox> - ); -}); - -export default OtpInput; diff --git a/src/ProChat/components/ChatList/SkeletonList.tsx b/src/ProChat/components/ChatList/SkeletonList.tsx deleted file mode 100644 index 2198da5a..00000000 --- a/src/ProChat/components/ChatList/SkeletonList.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Skeleton } from 'antd'; -import { createStyles } from 'antd-style'; -import { memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -const useStyles = createStyles(({ css, prefixCls }) => ({ - user: css` - display: flex; - flex-direction: row-reverse; - gap: 16px; - - .${prefixCls}-skeleton-paragraph { - display: flex; - flex-direction: column; - align-items: flex-end; - } - `, -})); -const SkeletonList = memo(() => { - const { styles } = useStyles(); - - return ( - <Flexbox gap={24} padding={12} style={{ marginTop: 24 }}> - <Skeleton - active - avatar={{ size: 40 }} - className={styles.user} - paragraph={{ width: ['50%', '30%'] }} - title={false} - /> - <Skeleton active avatar={{ size: 40 }} paragraph={{ width: ['50%', '30%'] }} title={false} /> - </Flexbox> - ); -}); -export default SkeletonList; diff --git a/src/ProChat/components/ChatList/index.tsx b/src/ProChat/components/ChatList/index.tsx deleted file mode 100644 index 64c213ce..00000000 --- a/src/ProChat/components/ChatList/index.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import ChatList, { ChatListProps } from '@/ChatList'; -import isEqual from 'fast-deep-equal'; -import { memo, useMemo } from 'react'; - -import { useStore } from '@/ProChat/store'; -import { chatSelectors } from '@/ProChat/store/selectors'; - -import { ChatListItemProps } from '@/ChatList/ChatListItem'; -import useProChatLocale from '@/ProChat/hooks/useProChatLocale'; -import { useRefFunction } from '@/ProChat/hooks/useRefFunction'; -import { renderActions } from './Actions'; -import { renderMessagesExtra } from './Extras'; -import { renderMessages } from './Messages'; -import SkeletonList from './SkeletonList'; - -interface ListProps extends Partial<ChatListProps> { - showTitle?: boolean; - itemShouldUpdate?: (prevProps: ChatListItemProps, nextProps: ChatListItemProps) => boolean; -} - -const List = memo<ListProps>( - ({ showTitle, itemShouldUpdate, chatItemRenderConfig, markdownProps }) => { - const data = useStore(chatSelectors.currentChatsWithGuideMessage, isEqual); - const { localeObject: localeObj } = useProChatLocale(); - - const [ - init, - displayMode, - enableHistoryCount, - historyCount, - chatLoadingId, - deleteMessage, - resendMessage, - dispatchMessage, - ] = useStore((s) => { - const config = s.config; - - return [ - s.init, - s.displayMode, - config.enableHistoryCount, - config.historyCount, - s.chatLoadingId, - s.deleteMessage, - s.resendMessage, - s.dispatchMessage, - ]; - }); - - const onActionsClick = useRefFunction((action, { id, error }) => { - switch (action.key) { - case 'del': { - deleteMessage(id); - break; - } - case 'regenerate': { - resendMessage(id); - - // if this message is an error message, we need to delete it - if (error) deleteMessage(id); - break; - } - } - - // TODO: need a custom callback - }); - - const onMessageChange = useRefFunction((id, content) => - dispatchMessage({ id, key: 'content', type: 'updateMessage', value: content }), - ); - - const textObj = useMemo(() => { - return { - cancel: localeObj.cancel, - confirm: localeObj.confirm, - copy: localeObj.copy, - copySuccess: localeObj.copySuccess, - delete: localeObj.delete, - edit: localeObj.edit, - history: localeObj.history, - regenerate: localeObj.regenerate, - }; - }, []); - if (!init) return <SkeletonList />; - - return ( - <ChatList - showTitle={showTitle} - data={data} - itemShouldUpdate={itemShouldUpdate} - enableHistoryCount={enableHistoryCount} - historyCount={historyCount} - loadingId={chatLoadingId} - onActionsClick={onActionsClick} - onMessageChange={onMessageChange} - renderActions={renderActions} - // need support custom Render - renderMessages={renderMessages} - renderMessagesExtra={renderMessagesExtra} - style={{ marginTop: 24 }} - chatItemRenderConfig={chatItemRenderConfig} - text={textObj} - type={displayMode || 'chat'} - markdownProps={markdownProps} - /> - ); - }, -); - -export default List; diff --git a/src/ProChat/components/InputArea/ActionBar.tsx b/src/ProChat/components/InputArea/ActionBar.tsx deleted file mode 100644 index 24611630..00000000 --- a/src/ProChat/components/InputArea/ActionBar.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { createStyles, cx } from 'antd-style'; -import { Flexbox } from 'react-layout-kit'; - -import ActionIcon from '@/ActionIcon'; -import { ConfigProvider, Popconfirm } from 'antd'; -import { Trash2 } from 'lucide-react'; - -import useProChatLocale from '@/ProChat/hooks/useProChatLocale'; -import { useStore } from '../../store'; - -const useStyles = createStyles(({ css, token }) => ({ - extra: css` - color: ${token.colorTextTertiary}; - `, -})); - -export const ActionBar = ({ className }: { className?: string }) => { - const [clearMessage, actionsRender, flexConfig] = useStore((s) => [ - s.clearMessage, - s.actions?.render, - s.actions?.flexConfig, - ]); - - const { localeObject } = useProChatLocale(); - - const { styles, theme } = useStyles(); - const defaultDoms = [ - <Popconfirm - title={localeObject.clearModalTitle} - okButtonProps={{ danger: true }} - okText={localeObject.clearDialogue} - key={'clear'} - onConfirm={() => { - clearMessage(); - }} - > - <ActionIcon title={localeObject.clearCurrentDialogue} icon={Trash2} /> - </Popconfirm>, - ]; - - return ( - <ConfigProvider theme={{ token: { colorText: theme.colorTextSecondary } }}> - <Flexbox - align={'center'} - direction={'horizontal-reverse'} - paddingInline={12} - className={cx(styles.extra, className)} - gap={8} - {...flexConfig} - > - {actionsRender?.(defaultDoms) ?? defaultDoms} - </Flexbox> - </ConfigProvider> - ); -}; - -export default ActionBar; diff --git a/src/ProChat/components/InputArea/AutoCompleteTextArea.tsx b/src/ProChat/components/InputArea/AutoCompleteTextArea.tsx deleted file mode 100644 index db623dc6..00000000 --- a/src/ProChat/components/InputArea/AutoCompleteTextArea.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { AutoComplete, AutoCompleteProps, Input } from 'antd'; -import { TextAreaProps } from 'antd/es/input'; -import { useState } from 'react'; -import { useStore } from '../../store'; - -type AutoCompleteTextAreaProps = TextAreaProps & { - autoCompleteProps?: AutoCompleteProps; -}; - -export const AutoCompleteTextArea: React.FC<AutoCompleteTextAreaProps> = (props) => { - const [autocompleteRequest] = useStore((s) => [s.autocompleteRequest]); - - const { disabled, autoCompleteProps = {}, ...rest } = props; - - const [options, setOptions] = useState<{ value: string; label: string }[]>([]); - const [open, setOpen] = useState(false); - return ( - <AutoComplete - className={props.className} - options={options} - style={{ - height: 'max-content', - }} - disabled={disabled} - open={open} - onDropdownVisibleChange={(open) => { - setOpen(open); - }} - value={props.value} - onSelect={(value) => { - props.onChange?.({ target: { value } } as any); - setOptions([]); - }} - onSearch={async (value) => { - const result = await autocompleteRequest?.(value); - setOptions((result as any[]) || []); - }} - {...autoCompleteProps} - > - <Input.TextArea - size="large" - {...rest} - disabled={disabled} - className={`${props.className}-textarea`} - onFocus={(e) => { - setOpen(false); - props.onFocus?.(e); - }} - onPressEnter={(e) => { - if (open && options.length > 0) return; - props.onPressEnter?.(e); - }} - /> - </AutoComplete> - ); -}; diff --git a/src/ProChat/components/InputArea/index.tsx b/src/ProChat/components/InputArea/index.tsx deleted file mode 100644 index 67d84f60..00000000 --- a/src/ProChat/components/InputArea/index.tsx +++ /dev/null @@ -1,229 +0,0 @@ -import { SendOutlined } from '@ant-design/icons'; -import { Button, ButtonProps, ConfigProvider } from 'antd'; -import { createStyles, cx } from 'antd-style'; -import { ReactNode, useContext, useMemo, useRef, useState } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { useStore } from '../../store'; - -import useProChatLocale from '@/ProChat/hooks/useProChatLocale'; -import { TextAreaProps } from 'antd/es/input'; -import ActionBar from './ActionBar'; -import { AutoCompleteTextArea } from './AutoCompleteTextArea'; -import StopLoadingIcon from './StopLoading'; - -const useStyles = createStyles(({ css, responsive, token }) => ({ - container: css` - position: sticky; - z-index: ${token.zIndexPopupBase}; - bottom: 0; - - padding-top: 12px; - padding-bottom: 24px; - - background-image: linear-gradient(to top, ${token.colorBgLayout} 88%, transparent 100%); - - ${responsive.mobile} { - width: 100%; - } - `, - boxShadow: css` - position: relative; - border-radius: 8px; - box-shadow: ${token.boxShadowSecondary}; - `, - input: css` - width: 100%; - border: none; - outline: none; - border-radius: 8px; - `, - btn: css` - position: absolute; - z-index: 10; - right: 8px; - bottom: 6px; - - color: ${token.colorTextTertiary}; - &:hover { - color: ${token.colorTextSecondary}; - } - `, - extra: css` - color: ${token.colorTextTertiary}; - `, -})); - -export type ChatInputAreaProps = { - className?: string; - onSend?: (message: string) => boolean | Promise<boolean>; - inputRender?: ( - defaultDom: ReactNode, - onMessageSend: (message: string) => void | Promise<any>, - defaultProps: TextAreaProps, - ) => ReactNode; - sendButtonRender?: (defaultDom: ReactNode, defaultProps: ButtonProps) => ReactNode; - inputAreaRender?: ( - defaultDom: ReactNode, - onMessageSend: (message: string) => void | Promise<any>, - onClearAllHistory: () => void, - ) => ReactNode; -}; - -export const ChatInputArea = (props: ChatInputAreaProps) => { - const { className, onSend, inputAreaRender, inputRender, sendButtonRender } = props || {}; - const [sendMessage, isLoading, placeholder, inputAreaProps, clearMessage, stopGenerateMessage] = - useStore((s) => [ - s.sendMessage, - !!s.chatLoadingId, - s.placeholder, - s.inputAreaProps, - s.clearMessage, - s.stopGenerateMessage, - ]); - const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); - const [message, setMessage] = useState(''); - const isChineseInput = useRef(false); - const { styles, theme } = useStyles(); - const { localeObject } = useProChatLocale(); - - const send = async () => { - if (onSend) { - const success = await onSend(message); - if (success) { - sendMessage(message); - setMessage(''); - } - } else { - sendMessage(message); - setMessage(''); - } - }; - - const prefixClass = getPrefixCls('pro-chat-input-area'); - - /** - * 默认的自动完成文本区域属性 - * - * @property {string} placeholder - 输入框的占位符 - * @property {Object} inputAreaProps - 输入框的其他属性 - * @property {string} inputAreaProps.className - 输入框的类名 - * @property {string} prefixClass - 输入框的前缀类名 - * @property {string} value - 输入框的值 - * @property {function} onChange - 输入框值改变时的回调函数 - * @property {Object} autoSize - 输入框的自动调整大小配置 - * @property {number} autoSize.maxRows - 输入框的最大行数 - * @property {function} onCompositionStart - 输入法开始输入时的回调函数 - * @property {function} onCompositionEnd - 输入法结束输入时的回调函数 - * @property {function} onPressEnter - 按下回车键时的回调函数 - */ - - const defaultAutoCompleteTextAreaProps = { - placeholder: placeholder || localeObject.placeholder, - ...inputAreaProps, - className: cx(styles.input, inputAreaProps?.className, `${prefixClass}-component`), - value: message, - onChange: (e) => { - setMessage(e.target.value); - }, - autoSize: { maxRows: 8 }, - onCompositionStart: () => { - isChineseInput.current = true; - }, - onCompositionEnd: () => { - isChineseInput.current = false; - }, - onPressEnter: (e) => { - if (!isLoading && !e.shiftKey && !isChineseInput.current) { - e.preventDefault(); - send(); - } - }, - }; - - const defaultInput = <AutoCompleteTextArea {...defaultAutoCompleteTextAreaProps} />; - - /** - * 支持下自定义输入框 - */ - const inputDom = inputRender - ? inputRender?.( - defaultInput, - (message) => { - sendMessage(message); - }, - defaultAutoCompleteTextAreaProps, - ) - : defaultInput; - - /** - * 根据 isLoading 状态返回默认的按钮道具。 - * 如果 isLoading 为 true,则按钮将具有文本类型,即 stopGenerateMessage 点击处理程序, - * 和 StopLoadingIcon 作为图标。 - * 如果 isLoading 为 false,则按钮将具有文本类型、发送点击处理程序、 - * 和 SendOutlined 图标作为图标。 - * @returns The default button props. - */ - const defaultButtonProps = useMemo(() => { - return isLoading - ? ({ - type: 'text', - className: styles.btn, - onClick: () => stopGenerateMessage(), - icon: <StopLoadingIcon />, - } as const) - : ({ - type: 'text', - className: styles.btn, - onClick: () => send(), - icon: <SendOutlined />, - } as const); - }, [isLoading, message]); - - const defaultButtonDom = <Button {...defaultButtonProps} />; - - const buttonDom = sendButtonRender - ? sendButtonRender(defaultButtonDom, defaultButtonProps) - : defaultButtonDom; - - const defaultInputArea = ( - <ConfigProvider - theme={{ - token: { - borderRadius: 4, - colorBgContainer: theme.colorBgElevated, - controlHeightLG: 48, - colorBorder: 'transparent', - colorPrimaryHover: 'transparent', - }, - }} - > - <Flexbox gap={8} padding={16} className={cx(styles.container, `${prefixClass}`, className)}> - <ActionBar className={`${prefixClass}-action-bar`} /> - <Flexbox - horizontal - gap={8} - align={'center'} - className={cx(styles.boxShadow, `${prefixClass}-text-container`)} - > - {inputDom} - {buttonDom} - </Flexbox> - </Flexbox> - </ConfigProvider> - ); - - if (inputAreaRender) { - return inputAreaRender( - defaultInputArea, - (message) => { - sendMessage(message); - }, - clearMessage, - ); - } - - return defaultInputArea; -}; - -export default ChatInputArea; diff --git a/src/ProChat/components/ScrollAnchor/index.tsx b/src/ProChat/components/ScrollAnchor/index.tsx deleted file mode 100644 index f36d8727..00000000 --- a/src/ProChat/components/ScrollAnchor/index.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { memo, useEffect, useMemo, useState } from 'react'; -import { useInView } from 'react-intersection-observer'; - -import { useStore } from '@/ProChat/store'; -import { chatSelectors } from '../../store/selectors'; - -import { useAtBottom } from './useAtBottom'; - -const ChatScrollAnchor = memo(({ target }: { target: React.RefObject<HTMLDivElement> }) => { - const trackVisibility = useStore((s) => !!s.chatLoadingId); - const str = useStore(chatSelectors.currentChats); - - const [isWindowAvailable, setIsWindowAvailable] = useState(false); - - useEffect(() => { - // 检查window对象是否已经可用 - if (typeof window !== 'undefined') { - setIsWindowAvailable(true); - } - }, []); - - // 获取上方列表的实例化 ref,会传入给 useAtBottom 用于判断当前是否在滚动 - const current = useMemo(() => { - if (target.current && target.current.scrollHeight > target.current.clientHeight) { - return target.current; - } - return document.body; - }, [isWindowAvailable]); - - const { ref, entry, inView } = useInView({ - delay: 100, - rootMargin: '0px 0px -150px 0px', - trackVisibility, - }); - - const [scrollOffset, setScrollOffset] = useState(0); - - useEffect(() => { - if (isWindowAvailable) { - // 如果是移动端,可能100太多了,认为超过 1/3 即可,PC默认100 - setScrollOffset(window.innerHeight / 3 > 100 ? 100 : window.innerHeight / 4); - } - }, [isWindowAvailable]); - - const isAtBottom = useAtBottom(scrollOffset, current); - - useEffect(() => { - if (isAtBottom && trackVisibility && !inView) { - entry?.target.scrollIntoView({ - block: 'start', - }); - } - }, [inView, entry, isAtBottom, trackVisibility, str]); - - return <div ref={ref} style={{ height: 1, width: '100%' }} />; -}); - -export default ChatScrollAnchor; diff --git a/src/ProChat/components/ScrollAnchor/useAtBottom.ts b/src/ProChat/components/ScrollAnchor/useAtBottom.ts deleted file mode 100644 index c6051771..00000000 --- a/src/ProChat/components/ScrollAnchor/useAtBottom.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { useEffect, useState } from 'react'; - -export const useAtBottom = (offset = 0, target: HTMLElement) => { - const [isAtBottom, setIsAtBottom] = useState(false); - useEffect(() => { - if (target) { - const handleScroll = () => { - setIsAtBottom(target.scrollTop + target.clientHeight >= target.scrollHeight - offset); - }; - target.addEventListener('scroll', handleScroll, { passive: true }); - handleScroll(); - return () => { - target.removeEventListener('scroll', handleScroll); - }; - } else { - const handleScroll = () => { - setIsAtBottom(window.innerHeight + window.scrollY >= document.body.offsetHeight - offset); - }; - window.addEventListener('scroll', handleScroll, { passive: true }); - handleScroll(); - - return () => { - window.removeEventListener('scroll', handleScroll); - }; - } - }, [offset, target]); - - return isAtBottom; -}; diff --git a/src/ProChat/container/App.tsx b/src/ProChat/container/App.tsx deleted file mode 100644 index 2e60040b..00000000 --- a/src/ProChat/container/App.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import BackBottom from '@/BackBottom'; -import { createStyles } from 'antd-style'; -import RcResizeObserver from 'rc-resize-observer'; -import { CSSProperties, memo, useContext, useEffect, useRef, useState } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { ConfigProvider } from 'antd'; -import ChatList from '../components/ChatList'; -import ChatInputArea, { ChatInputAreaProps } from '../components/InputArea'; -import ChatScrollAnchor from '../components/ScrollAnchor'; -import useProChatLocale from '../hooks/useProChatLocale'; -import { useOverrideStyles } from './OverrideStyle'; -import { ProChatChatReference } from './StoreUpdater'; -import { ProChatProps } from './index'; - -const useStyles = createStyles( - ({ css, responsive, stylish }) => css` - overflow: hidden scroll; - height: 100%; - ${responsive.mobile} { - ${stylish.noScrollbar} - width: 100%; - } - `, -); - -/** - * 对话组件的属性接口 - */ -export interface ConversationProps extends ProChatProps<any> { - /** - * 是否显示标题 - */ - showTitle?: boolean; - /** - * 样式对象 - */ - style?: CSSProperties; - /** - * CSS类名 - */ - className?: string; - /** - * 聊天引用 - */ - chatRef?: ProChatChatReference; - /** - * 输入区域的渲染函数 - * @param defaultDom 默认的 DOM 元素 - * @param onMessageSend 发送消息的回调函数 - * @param onClearAllHistory 清除所有历史记录的回调函数 - * @returns 渲染的 React 元素 - */ - inputAreaRender?: ChatInputAreaProps['inputAreaRender']; - /** - * 输入框的渲染函数 - * @param defaultDom 默认的 DOM 元素 - * @param onMessageSend 发送消息的回调函数 - * @param props 输入框的属性 - */ - inputRender: ChatInputAreaProps['inputRender']; - - /** - * 聊天发送按钮的渲染配置 - * @param defaultDom 默认的 DOM 元素 - * @param defaultProps 默认的属性 - */ - sendButtonRender?: ChatInputAreaProps['sendButtonRender']; -} - -const App = memo<ConversationProps>( - ({ - renderInputArea, - inputAreaRender, - className, - style, - showTitle, - chatRef, - itemShouldUpdate, - inputRender, - chatItemRenderConfig, - backToBottomConfig, - sendButtonRender, - markdownProps, - }) => { - const ref = useRef<HTMLDivElement>(null); - const areaHtml = useRef<HTMLDivElement>(null); - const { styles, cx } = useStyles(); - const { styles: override } = useOverrideStyles(); - const [isRender, setIsRender] = useState(false); - const [height, setHeight] = useState('100%' as string | number); - const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); - const { localeObject } = useProChatLocale(); - - useEffect(() => { - // 保证 ref 永远存在 - setIsRender(true); - if (chatRef?.current) { - chatRef.current.scrollToBottom = () => { - (ref as any)?.current?.scrollTo({ - behavior: 'smooth', - left: 0, - top: ref.current?.scrollHeight || 99999, - }); - }; - } - }, []); - - const prefixClass = getPrefixCls('pro-chat'); - return ( - <RcResizeObserver - onResize={(e) => { - if (e.height !== height) { - setHeight(e.height); - } - }} - > - <Flexbox - className={cx(override.container, className, `${prefixClass}-container`)} - style={{ - maxHeight: '100vh', - height: '100%', - ...style, - }} - > - <> - <div - ref={ref} - className={cx(`${prefixClass}-chat-list-container`, styles)} - style={{ - height: (height as number) - (areaHtml.current?.clientHeight || 0) || '100%', - }} - > - <ChatList - showTitle={showTitle} - itemShouldUpdate={itemShouldUpdate} - chatItemRenderConfig={chatItemRenderConfig} - markdownProps={markdownProps} - /> - <ChatScrollAnchor target={ref} /> - </div> - {isRender ? ( - <BackBottom - style={{ - bottom: 138, - }} - target={ref} - text={localeObject.backToBottom} - {...backToBottomConfig} - /> - ) : null} - </> - {renderInputArea !== null && inputAreaRender !== null && ( - <div ref={areaHtml}> - { - <ChatInputArea - sendButtonRender={sendButtonRender} - inputAreaRender={inputAreaRender || renderInputArea} - inputRender={inputRender} - /> - } - </div> - )} - </Flexbox> - </RcResizeObserver> - ); - }, -); - -export default App; diff --git a/src/ProChat/container/OverrideStyle/antdOverride.ts b/src/ProChat/container/OverrideStyle/antdOverride.ts deleted file mode 100644 index 32eb926b..00000000 --- a/src/ProChat/container/OverrideStyle/antdOverride.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { FullToken, css } from 'antd-style'; - -export default (token: FullToken, prefixCls: string) => css` - .${prefixCls}-btn { - box-shadow: none; - } - - .${prefixCls}-tooltip-inner { - display: flex; - align-items: center; - justify-content: center; - - min-height: unset; - padding: 4px 8px; - - color: ${token.colorBgLayout} !important; - - background-color: ${token.colorText} !important; - border-radius: ${token.borderRadiusSM}px !important; - } - - .${prefixCls}-tooltip-arrow { - &::before, - &::after { - background: ${token.colorText} !important; - } - } - - .${prefixCls}-switch-handle::before { - background: ${token.colorBgContainer} !important; - } - - .${prefixCls}-alert { - span[role='img'] { - align-self: flex-start; - width: 16px; - height: 16px; - margin-top: 3px; - } - - .${prefixCls}-alert-description { - word-break: break-all; - word-wrap: break-word; - } - - &.${prefixCls}-alert-with-description { - padding-block: 12px; - padding-inline: 12px; - - .${prefixCls}-alert-message { - font-size: 14px; - font-weight: 600; - word-break: break-all; - word-wrap: break-word; - } - } - } - - @media (max-width: 575px) { - .${prefixCls}-tooltip { - display: none !important; - } - } -`; diff --git a/src/ProChat/container/OverrideStyle/global.ts b/src/ProChat/container/OverrideStyle/global.ts deleted file mode 100644 index d4aeb30c..00000000 --- a/src/ProChat/container/OverrideStyle/global.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { FullToken, css } from 'antd-style'; - -export default (token: FullToken) => css` - line-height: 1; - text-size-adjust: none; - text-rendering: optimizelegibility; - vertical-align: baseline; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-overflow-scrolling: touch; - -webkit-tap-highlight-color: transparent; - } - code { - font-family: ${token.fontFamilyCode} !important; - - span { - font-family: ${token.fontFamilyCode} !important; - } - } - - p { - word-wrap: break-word; - } - - ::selection { - color: #000; - background: ${token.blue3}; - - -webkit-text-fill-color: unset !important; - } - - * { - box-sizing: border-box; - vertical-align: baseline; - } - - @media only screen and (min-width: 574px) { - * { - ::-webkit-scrollbar { - cursor: pointer; - width: 4px; - height: 4px; - background-color: transparent; - } - - ::-webkit-scrollbar-thumb { - cursor: pointer; - background-color: transparent; - border-radius: 2px; - transition: background-color 500ms ${token.motionEaseOut}; - - &:hover { - background-color: ${token.colorText}; - } - } - - ::-webkit-scrollbar-corner { - display: none; - width: 0; - height: 0; - } - - &:hover { - ::-webkit-scrollbar-thumb { - background-color: ${token.colorFill}; - } - } - } - } -`; diff --git a/src/ProChat/container/OverrideStyle/index.ts b/src/ProChat/container/OverrideStyle/index.ts deleted file mode 100644 index 4818ce48..00000000 --- a/src/ProChat/container/OverrideStyle/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createStyles } from 'antd-style'; -import antdOverride from './antdOverride'; -import global from './global'; - -export const useOverrideStyles = createStyles(({ token, prefixCls, cx }) => ({ - container: cx(`${prefixCls}-pro-chat`, global(token), antdOverride(token, prefixCls)), -})); diff --git a/src/ProChat/container/Provider.tsx b/src/ProChat/container/Provider.tsx deleted file mode 100644 index 6259c668..00000000 --- a/src/ProChat/container/Provider.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import StoreUpdater, { ProChatChatReference } from '@/ProChat/container/StoreUpdater'; -import { memo, ReactNode } from 'react'; -import { DevtoolsOptions } from 'zustand/middleware'; -import { ChatProps, createStore, Provider, useStoreApi } from '../store'; - -interface ProChatProviderProps<T extends Record<string, any> = Record<string, any>> - extends ChatProps<T> { - children: ReactNode; - devtoolOptions?: boolean | DevtoolsOptions; - chatRef?: ProChatChatReference; -} - -export const ProChatProvider = memo<ProChatProviderProps<any>>( - ({ - children, - devtoolOptions, - chats, - onChatsChange, - loading, - helloMessage, - userMeta, - assistantMeta, - request, - locale, - ...props - }) => { - let isWrapped = true; - - const Content = ( - <> - {children} - <StoreUpdater - chatRef={props.chatRef} - init={!loading} - helloMessage={helloMessage} - chats={chats} - userMeta={userMeta} - request={request} - assistantMeta={assistantMeta} - onChatsChange={onChatsChange} - locale={locale} - /> - </> - ); - - try { - useStoreApi(); - } catch (e) { - isWrapped = false; - } - - if (isWrapped) { - return Content; - } - - return <Provider createStore={() => createStore(props, devtoolOptions)}>{Content}</Provider>; - }, -); diff --git a/src/ProChat/container/StoreUpdater.tsx b/src/ProChat/container/StoreUpdater.tsx deleted file mode 100644 index d68cd79e..00000000 --- a/src/ProChat/container/StoreUpdater.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { memo, MutableRefObject, useImperativeHandle } from 'react'; -import { createStoreUpdater } from 'zustand-utils'; - -import { ProChatInstance, useProChat } from '../hooks/useProChat'; -import { ChatProps, ChatState, useStoreApi } from '../store'; - -export type ProChatChatReference = MutableRefObject<ProChatInstance | undefined>; - -export interface StoreUpdaterProps - extends Partial< - Pick< - ChatState, - 'chats' | 'config' | 'init' | 'onChatsChange' | 'helloMessage' | 'request' | 'locale' - > - >, - Pick<ChatProps, 'userMeta' | 'assistantMeta'> { - chatRef?: ProChatChatReference; -} - -const StoreUpdater = memo<StoreUpdaterProps>( - ({ - init, - onChatsChange, - chatRef, - request, - userMeta, - assistantMeta, - helloMessage, - chats, - config, - locale, - }) => { - const storeApi = useStoreApi(); - const useStoreUpdater = createStoreUpdater(storeApi); - - useStoreUpdater('init', init); - - useStoreUpdater('userMeta', userMeta); - useStoreUpdater('assistantMeta', assistantMeta); - - useStoreUpdater('helloMessage', helloMessage); - useStoreUpdater('config', config); - - useStoreUpdater('chats', chats); - useStoreUpdater('onChatsChange', onChatsChange); - - useStoreUpdater('request', request); - - useStoreUpdater('locale', locale); - const instance = useProChat(); - useImperativeHandle(chatRef, () => instance); - - return null; - }, -); - -export default StoreUpdater; diff --git a/src/ProChat/container/index.tsx b/src/ProChat/container/index.tsx deleted file mode 100644 index 2328f5a3..00000000 --- a/src/ProChat/container/index.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import { App as Container } from 'antd'; -import { CSSProperties } from 'react'; - -import App, { ConversationProps } from './App'; - -import { DevtoolsOptions } from 'zustand/middleware'; -import { BackBottomProps } from '../../BackBottom'; -import { ChatProps } from '../store'; -import { ProChatProvider } from './Provider'; -import { ProChatChatReference } from './StoreUpdater'; - -/** - * ProChatProps 是 ProChat 组件的属性类型定义。 - * @template T - 聊天记录的数据类型 - */ -export interface ProChatProps<T extends Record<string, any>> extends ChatProps<T> { - /** - * @deprecated 请使用 inputAreaRender 属性替代此属性 - */ - renderInputArea?: ConversationProps['inputAreaRender']; - - /** - * inputAreaRender 是一个函数,用于自定义输入区域的渲染。 - * @param defaultDom 默认的 DOM 元素 - * @param onMessageSend 发送消息的回调函数 - * @param onClearAllHistory 清除所有历史记录的回调函数 - */ - inputAreaRender?: ConversationProps['inputAreaRender']; - - /** - * inputRender 是一个函数,用于自定义输入框的渲染。 - * @param defaultDom 默认的 DOM 元素 - * @param onMessageSend 发送消息的回调函数 - */ - inputRender?: ConversationProps['inputRender']; - - /** - * 聊天发送按钮的渲染配置 - * @param defaultDom 默认的 DOM 元素 - * @param defaultProps 默认的属性 - */ - sendButtonRender?: ConversationProps['sendButtonRender']; - - /** - * __PRO_CHAT_STORE_DEVTOOLS__ 是一个可选的布尔值或 DevtoolsOptions 对象,用于开启 ProChat 的开发者工具。 - */ - __PRO_CHAT_STORE_DEVTOOLS__?: boolean | DevtoolsOptions; - - /** - * showTitle 是一个可选的布尔值,用于控制是否显示聊天窗口的标题。 - */ - showTitle?: boolean; - - /** - * style 是一个可选的 CSSProperties 对象,用于自定义聊天窗口的样式。 - */ - style?: CSSProperties; - - /** - * className 是一个可选的字符串,用于自定义聊天窗口的类名。 - */ - className?: string; - - /** - * chatRef 是一个可选的 ProChatChatReference 对象,用于获取 ProChat 组件的引用。 - */ - chatRef?: ProChatChatReference; - - /** - * appStyle 是一个可选的 CSSProperties 对象,用于自定义整个应用的样式。 - */ - appStyle?: CSSProperties; - - /** - * backToBottomConfig 是一个 Omit<BackBottomProps, 'target'> 对象,用于配置返回底部按钮的行为。 - */ - backToBottomConfig?: Omit<BackBottomProps, 'target'>; -} - -export function ProChat<T extends Record<string, any> = Record<string, any>>({ - renderInputArea, - __PRO_CHAT_STORE_DEVTOOLS__, - showTitle, - style, - className, - chatItemRenderConfig, - backToBottomConfig, - appStyle, - inputRender, - markdownProps, - inputAreaRender, - sendButtonRender, - ...props -}: ProChatProps<T>) { - return ( - <ProChatProvider {...props} devtoolOptions={__PRO_CHAT_STORE_DEVTOOLS__}> - <Container - style={{ - height: '100%', - width: '100%', - position: 'relative', - ...appStyle, - }} - className={className} - > - <App - chatItemRenderConfig={chatItemRenderConfig} - inputRender={inputRender} - sendButtonRender={sendButtonRender} - inputAreaRender={renderInputArea || inputAreaRender} - chatRef={props.chatRef} - showTitle={showTitle} - style={style} - backToBottomConfig={backToBottomConfig} - className={className} - markdownProps={markdownProps} - /> - </Container> - </ProChatProvider> - ); -} diff --git a/src/ProChat/demos/actions.tsx b/src/ProChat/demos/actions.tsx deleted file mode 100644 index 2d620328..00000000 --- a/src/ProChat/demos/actions.tsx +++ /dev/null @@ -1,45 +0,0 @@ -/** - * compact: true - */ -import { ProChat } from '@ant-design/pro-chat'; -import { useTheme } from 'antd-style'; - -import { MockResponse } from '../mocks/streamResponse'; - -export default () => { - const theme = useTheme(); - - return ( - <div style={{ background: theme.colorBgLayout }}> - <ProChat - actions={{ - render: (defaultDoms) => { - return [ - <a - key="user" - onClick={() => { - window.open('https://github.com/ant-design/pro-chat'); - }} - > - 人工服务 - </a>, - ...defaultDoms, - ]; - }, - flexConfig: { - gap: 24, - direction: 'horizontal', - justify: 'space-between', - }, - }} - request={async (messages) => { - const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; - - const mockResponse = new MockResponse(mockedData); - - return mockResponse.getResponse(); - }} - /> - </div> - ); -}; diff --git a/src/ProChat/demos/doc-mode.tsx b/src/ProChat/demos/doc-mode.tsx deleted file mode 100644 index 9dc8f415..00000000 --- a/src/ProChat/demos/doc-mode.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/** - * iframe: 800 - * compact: true - */ -import { ProChat } from '@ant-design/pro-chat'; -import { useTheme } from 'antd-style'; - -import { example } from '../mocks/fullFeature'; -import { MockResponse } from '../mocks/streamResponse'; - -export default () => { - const theme = useTheme(); - return ( - <div style={{ background: theme.colorBgLayout, height: '100vh' }}> - <ProChat - displayMode={'docs'} - style={{ height: '100%' }} - request={async (messages) => { - const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; - - const mockResponse = new MockResponse(mockedData, 100); - - return mockResponse.getResponse(); - }} - chats={example.chats} - config={example.config} - /> - </div> - ); -}; diff --git a/src/ProChat/demos/draggable.tsx b/src/ProChat/demos/draggable.tsx deleted file mode 100644 index 43292bb3..00000000 --- a/src/ProChat/demos/draggable.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/** - * iframe: 500 - */ -import { MockResponse } from '@/ProChat/mocks/streamResponse'; -import { ProChat } from '@ant-design/pro-chat'; -import { DraggablePanel } from '@ant-design/pro-editor'; -import { useTheme } from 'antd-style'; -import { Flexbox } from 'react-layout-kit'; - -export default () => { - const theme = useTheme(); - - return ( - <DraggablePanel - mode={'float'} - defaultPosition={{ x: 400, y: 30 }} - minHeight={400} - style={{ background: theme.colorBgLayout, display: 'flex', flexDirection: 'column' }} - > - <Flexbox align={'center'} style={{ fontSize: 18 }}> - 客服助理 - </Flexbox> - <div style={{ flex: '1' }}> - <ProChat - request={async (messages) => { - const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; - - const mockResponse = new MockResponse(mockedData); - - return mockResponse.getResponse(); - }} - /> - </div> - </DraggablePanel> - ); -}; diff --git a/src/ProChat/demos/request.tsx b/src/ProChat/demos/request.tsx deleted file mode 100644 index 922e0294..00000000 --- a/src/ProChat/demos/request.tsx +++ /dev/null @@ -1,16 +0,0 @@ -/** - * compact: true - * title: 流式请求 - */ -import { ProChat } from '@ant-design/pro-chat'; -import { useTheme } from 'antd-style'; - -export default () => { - const theme = useTheme(); - - return ( - <div style={{ background: theme.colorBgLayout }}> - <ProChat locale="en-US" /> - </div> - ); -}; diff --git a/src/ProChat/demos/sse.tsx b/src/ProChat/demos/sse.tsx deleted file mode 100644 index 0a028242..00000000 --- a/src/ProChat/demos/sse.tsx +++ /dev/null @@ -1,82 +0,0 @@ -/** - * compact: true - * title: SSE - */ -import { ProChat } from '@ant-design/pro-chat'; -import { MockSSEResponse } from '../mocks/sseResponse'; - -import { useTheme } from 'antd-style'; - -const dataArray = [ - `data: {"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "苹"}, "index": 0, "finish_reason": null}]}`, - `data: {"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "果"}, "index": 0, "finish_reason": null}]}`, - `data: {"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "公司"}, "index": 0, "finish_reason": null}]}`, - `data: {"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "是"}, "index": 0, "finish_reason": null}]}`, - `data: {"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "一"}, "index": 0, "finish_reason": null}]}`, - `data: {"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "家"}, "index": 0, "finish_reason": null}]}`, - `data: {"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "科技"}, "index": 0, "finish_reason": null}]}`, - `data: {"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "公司"}, "index": 0, "finish_reason": "complete"}]}`, -]; - -export default () => { - const theme = useTheme(); - return ( - <div style={{ background: theme.colorBgLayout }}> - <ProChat - request={async (messages: any) => { - // 正常业务中如下: - // const response = await fetch('/api/chat/completion', { - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json;charset=UTF-8', - // }, - // body: JSON.stringify({ - // messages, - // stream: true, - // }), - // }); - console.log('messages', messages); - - const mockResponse = new MockSSEResponse(dataArray); - const response = mockResponse.getResponse(); - - // 确保服务器响应是成功的 - if (!response.ok || !response.body) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - // 获取 reader - const reader = response.body.getReader(); - const decoder = new TextDecoder('utf-8'); - const encoder = new TextEncoder(); - - const readableStream = new ReadableStream({ - async start(controller) { - function push() { - reader - .read() - .then(({ done, value }) => { - if (done) { - controller.close(); - return; - } - const chunk = decoder.decode(value, { stream: true }); - const message = chunk.replace('data: ', ''); - const parsed = JSON.parse(message); - controller.enqueue(encoder.encode(parsed.choices[0].delta.content)); - push(); - }) - .catch((err) => { - console.error('读取流中的数据时发生错误', err); - controller.error(err); - }); - } - push(); - }, - }); - return new Response(readableStream); - }} - /> - </div> - ); -}; diff --git a/src/ProChat/demos/use-pro-chat.tsx b/src/ProChat/demos/use-pro-chat.tsx deleted file mode 100644 index 7a55ce4f..00000000 --- a/src/ProChat/demos/use-pro-chat.tsx +++ /dev/null @@ -1,104 +0,0 @@ -/** - * compact: true - */ -import { ProChat, ProChatProvider, useProChat } from '@ant-design/pro-chat'; -import { Button, Divider, Flex, message } from 'antd'; -import { useTheme } from 'antd-style'; - -import { MockResponse } from '@/ProChat/mocks/streamResponse'; -import { example } from '../mocks/basic'; - -const Chat = () => { - const theme = useTheme(); - return ( - <div style={{ background: theme.colorBgLayout }}> - <ProChat - request={async (messages) => { - const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; - - const mockResponse = new MockResponse(mockedData, 100); - - return mockResponse.getResponse(); - }} - /> - </div> - ); -}; - -const Control = () => { - const proChat = useProChat(); - - return ( - <Flex style={{ padding: 24 }} gap={8} justify={'space-between'}> - <Flex gap={8}> - <Button - type={'primary'} - onClick={() => { - proChat.sendMessage('这是程序化发送的消息'); - }} - > - 发送一条消息 - </Button> - <Button - onClick={() => { - const messages = proChat.getChatMessages(); - - const msg = messages.at(-1); - if (msg) { - message.info(msg.content); - } else { - message.warning('会话为空'); - } - }} - > - 获取最新会话消息 - </Button> - </Flex> - - <Button - onClick={() => { - const messages = proChat.getChatMessages(); - const { id, content } = messages[0] || {}; - - if (!id) return; - proChat.setMessageContent(id, content + '👋'); - }} - > - 修改首条消息,添加表情:👋 - </Button> - <Flex gap={8}> - <Button - danger - onClick={() => { - const messages = proChat.getChatMessages(); - if (!messages.length) { - message.warning('会话为空'); - } else { - proChat.deleteMessage(messages[0].id); - message.success('已删除第一条消息'); - } - }} - > - 删除第一条消息 - </Button> - <Button - type={'primary'} - danger - onClick={() => { - proChat.clearMessage(); - }} - > - 清空消息 - </Button> - </Flex> - </Flex> - ); -}; - -export default () => ( - <ProChatProvider initialChats={example.chats}> - <Control /> - <Divider>🔼 程序化控制 | 🔽 用户控制</Divider> - <Chat /> - </ProChatProvider> -); diff --git a/src/ProChat/hooks/useProChat.ts b/src/ProChat/hooks/useProChat.ts deleted file mode 100644 index f805c7d8..00000000 --- a/src/ProChat/hooks/useProChat.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { ChatMessage } from '@/types'; -import { useMemo } from 'react'; -import { ChatStore, useStoreApi } from '../store'; -import { chatSelectors } from '../store/selectors'; -import { useRefFunction } from './useRefFunction'; - -export interface ProChatInstance - extends Pick< - ChatStore, - 'resendMessage' | 'stopGenerateMessage' | 'sendMessage' | 'deleteMessage' | 'clearMessage' - > { - /** - * 获取当前聊天列表对象 - * @returns ChatStore['chats'] - */ - getChats: () => ChatStore['chats']; - /** - * 获取当前聊天消息列表 - * @returns ChatMessage[] - */ - getChatMessages: () => ChatMessage[]; - /** - * 设置消息内容 - * @param id - * @param content - * @returns void - */ - setMessageContent: (id: string, content: string) => void; - /** - * 修改消息的某个属性 - * @param id - * @param key - * @param value - * @returns void - */ - setMessageValue: (id: string, key: keyof ChatMessage<Record<string, any>>, value: any) => void; - /** - * 滚动到底部 - * @returns - */ - scrollToBottom?: () => void; - /** - * 获取当前 loading 生成的消息 id - * @returns 消息 id | undefined - */ - getChatLoadingId: () => string | undefined; -} - -export const useProChat = () => { - const storeApi = useStoreApi(); - - const { - resendMessage, - sendMessage, - stopGenerateMessage, - deleteMessage, - clearMessage, - dispatchMessage, - getChatLoadingId, - } = storeApi.getState(); - - const getChats = useRefFunction(() => storeApi.getState().chats); - const getChatMessages = useRefFunction(() => chatSelectors.currentChats(storeApi.getState())); - - const setMessageContent = useRefFunction((id: string, content: string) => { - dispatchMessage({ type: 'updateMessage', id, key: 'content', value: content }); - }); - - const setMessageValue = useRefFunction( - (id: string, key: keyof ChatMessage<Record<string, any>>, value) => { - dispatchMessage({ type: 'updateMessage', id, key, value }); - }, - ); - - return useMemo<ProChatInstance>(() => { - return { - getChats, - getChatMessages, - resendMessage, - sendMessage, - getChatLoadingId, - stopGenerateMessage, - deleteMessage, - clearMessage, - setMessageContent, - setMessageValue, - }; - }, []); -}; diff --git a/src/ProChat/hooks/useProChatLocale.ts b/src/ProChat/hooks/useProChatLocale.ts deleted file mode 100644 index f5a5d2ed..00000000 --- a/src/ProChat/hooks/useProChatLocale.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Locale, gLocaleObject } from '@/locale'; -import { useMemo } from 'react'; -import { useStore } from '../store'; - -const useProChatLocale = () => { - const locale = useStore((s) => s.locale); - - const localeObject = useMemo(() => { - return gLocaleObject(locale as Locale); - }, [locale]); - - return { - locale, - localeObject, - }; -}; - -export default useProChatLocale; diff --git a/src/ProChat/index.tsx b/src/ProChat/index.tsx deleted file mode 100644 index 803ca80c..00000000 --- a/src/ProChat/index.tsx +++ /dev/null @@ -1,6 +0,0 @@ -export * from '../types/message'; - -export { type Locale } from '../locale'; -export { ProChat } from './container'; -export { ProChatProvider } from './container/Provider'; -export { useProChat, type ProChatInstance } from './hooks/useProChat'; diff --git a/src/ProChat/store/action.ts b/src/ProChat/store/action.ts deleted file mode 100644 index 514a5ffd..00000000 --- a/src/ProChat/store/action.ts +++ /dev/null @@ -1,489 +0,0 @@ -import { merge, template } from 'lodash-es'; -import { StateCreator } from 'zustand/vanilla'; - -import { LOADING_FLAT } from '@/ProChat/const/message'; -import { ChatStore } from '@/ProChat/store/index'; -import { fetchSSE } from '@/ProChat/utils/fetch'; -import { isFunctionMessage } from '@/ProChat/utils/message'; -import { setNamespace } from '@/ProChat/utils/storeDebug'; -import { nanoid } from '@/ProChat/utils/uuid'; -import { ChatMessage } from '@/types/message'; - -import { initialModelConfig } from '@/ProChat/store/initialState'; -import { ChatStreamPayload } from '@/ProChat/types/chat'; -import { getSlicedMessagesWithConfig } from '../utils/message'; -import { MessageDispatch, messagesReducer } from './reducers/message'; -import { chatSelectors } from './selectors'; - -const t = setNamespace('chat/message'); - -interface FetchChatModelOptions { - signal?: AbortSignal | undefined; -} - -/** - * 聊天操作 - */ -export interface ChatAction { - /** - * 清除消息 - */ - clearMessage: () => void; - - /** - * 删除消息 - * @param id - 消息 ID - */ - deleteMessage: (id: string) => void; - /** - * 分发消息 - * @param payload - 消息分发参数 - */ - dispatchMessage: (payload: MessageDispatch) => void; - /** - * 生成消息 - * @param messages - 聊天消息数组 - * @param options - 获取 SSE 选项 - */ - generateMessage: ( - messages: ChatMessage[], - assistantMessageId: string, - ) => Promise<{ isFunctionCall: boolean }>; - /** - * 实际获取 AI 响应 - * - * @param messages - 聊天消息数组 - * @param parentId - 父消息 ID,可选 - */ - realFetchAIResponse: (messages: ChatMessage[], parentId: string) => Promise<void>; - - /** - * 重新发送消息 - * @param id - 消息 ID - */ - resendMessage: (id: string) => Promise<void>; - /** - * 发送消息 - * @param text - 消息文本 - */ - sendMessage: (text: string) => Promise<void>; - - /** - * 停止生成消息 - * @returns - */ - stopGenerateMessage: () => void; - - /** - * 切换 loading 状态 - * @param loading - * @param id - * @param action - * @returns - */ - toggleChatLoading: ( - loading: boolean, - id?: string, - action?: string, - ) => AbortController | undefined; - - /** - * 默认的数据请求方法 - * @param params - * @param options - * @returns - */ - defaultModelFetcher: ( - params: Partial<ChatStreamPayload>, - options?: FetchChatModelOptions, - ) => Promise<Response>; - - /** - * 生成消息 ID - * @returns 消息 id - */ - getMessageId: (messages: ChatMessage[], parentId: string) => Promise<string>; - - /** - * 用于更新一条消息的内容(目前仅用于平滑输出时候,其余情况请直接使用 dispatchMessage ) - */ - updateMessageContent: (id: string, content: string) => Promise<void>; - - /** - * 创建一条平滑输出的内容 - */ - createSmoothMessage: (id: string) => { - startAnimation: (speed?: number) => Promise<void>; - stopAnimation: () => void; - outputQueue: string[]; - isAnimationActive: boolean; - }; - - /** - * 获取当前 loading 生成的消息 id - * @returns 消息 id | undefined - */ - getChatLoadingId: () => string | undefined; -} - -export const chatAction: StateCreator<ChatStore, [['zustand/devtools', never]], [], ChatAction> = ( - set, - get, -) => ({ - clearMessage: async () => { - const { dispatchMessage, onResetMessage } = get(); - - // 重置消息,清空聊天记录,等待 onResetMessage 完成后再清空 - if (onResetMessage) await onResetMessage(); - - dispatchMessage({ type: 'resetMessages' }); - - // TODO: need callback after reset - }, - - deleteMessage: (id) => { - get().dispatchMessage({ id, type: 'deleteMessage' }); - }, - - updateMessageContent: async (id, content) => { - const { dispatchMessage, updateMessageContent } = get(); - dispatchMessage({ id, key: 'content', type: 'updateMessage', value: content }); - updateMessageContent(id, content); - }, - - dispatchMessage: (payload) => { - const { chats, onChatsChange } = get(); - - const nextChats = messagesReducer(chats, payload); - - set({ chats: nextChats }, false, t('dispatchMessage')); - - onChatsChange?.(nextChats); - }, - generateMessage: async (messages, assistantId) => { - const { - dispatchMessage, - toggleChatLoading, - config, - defaultModelFetcher, - createSmoothMessage, - updateMessageContent, - } = get(); - const abortController = toggleChatLoading( - true, - assistantId, - t('generateMessage(start)', { assistantId, messages }) as string, - ); - - // ========================== // - // 对 messages 做统一预处理 // - // ========================== // - - // 1. 按参数设定截断长度 - const slicedMessages = getSlicedMessagesWithConfig(messages, config); - - // 2. 替换 inputMessage 模板 - const compilerMessages = (slicedMessages: ChatMessage[]) => { - const compiler = template(config.inputTemplate, { interpolate: /{{([\S\s]+?)}}/g }); - return slicedMessages.map((m) => { - if (m.role === 'user') { - try { - return { ...m, content: compiler({ text: m.content }) }; - } catch (error) { - console.error(error); - - return m; - } - } - return m; - }); - }; - const postMessages = !config.inputTemplate ? slicedMessages : compilerMessages(slicedMessages); - - // 3. 添加 systemRole - if (config.systemRole) { - postMessages.unshift({ content: config.systemRole, role: 'system' } as ChatMessage); - } - - const fetcher = () => - defaultModelFetcher( - { - messages: postMessages, - model: config.model, - ...config.params, - }, - { signal: abortController?.signal }, - ); - - let output = ''; - let isFunctionCall = false; - - const { startAnimation, stopAnimation, outputQueue, isAnimationActive } = - createSmoothMessage(assistantId); - - await fetchSSE(fetcher, { - onErrorHandle: (error) => { - dispatchMessage({ id: assistantId, key: 'error', type: 'updateMessage', value: error }); - }, - onAbort: async () => { - stopAnimation(); - }, - onFinish: async (content) => { - stopAnimation(); - if (outputQueue.length > 0 && !isFunctionCall) { - await startAnimation(15); - } - await updateMessageContent(assistantId, content); - }, - onMessageHandle: (text) => { - output += text; - - if (!isAnimationActive && !isFunctionCall) startAnimation(); - - if (abortController?.signal.aborted) { - // aborted 后停止当前输出 - return; - } else { - outputQueue.push(text); - } - - // TODO: need a function call judge callback - // 如果是 function call - if (isFunctionMessage(output)) { - isFunctionCall = true; - } - }, - }); - - let timeoutId; // 用于存储轮询队列的计时器id - const checkAndToggleChatLoading = () => { - clearTimeout(timeoutId); // 清除任何现有的计时器 - // 等待队列内容输出完毕 - if (outputQueue === undefined || outputQueue.length === 0 || outputQueue.toString() === '') { - // 当队列为空时 - toggleChatLoading(false, undefined, t('generateMessage(end)') as string); - clearTimeout(timeoutId); - } else { - // 如果队列不为空,则设置一个延迟或者使用某种形式的轮询来再次检查队列 - timeoutId = setTimeout(checkAndToggleChatLoading, 30); // CHECK_INTERVAL 是毫秒数,代表检查间隔时间 - } - }; - - checkAndToggleChatLoading(); - - return { isFunctionCall }; - }, - - realFetchAIResponse: async (messages, userMessageId) => { - const { dispatchMessage, generateMessage, config, getMessageId } = get(); - - // 添加一个空的信息用于放置 ai 响应,注意顺序不能反 - // 因为如果顺序反了,messages 中将包含新增的 ai message - const mid = await getMessageId(messages, userMessageId); - - dispatchMessage({ - id: mid, - message: LOADING_FLAT, - parentId: userMessageId, - role: 'assistant', - type: 'addMessage', - }); - - // TODO: need a callback before generate message - - // 为模型添加 fromModel 的额外信息 - // TODO: 此处需要model 信息 - dispatchMessage({ id: mid, key: 'fromModel', type: 'updateMessageExtra', value: config.model }); - - // 生成 ai message - await generateMessage(messages, mid); - - // todo: need callback after generate message - }, - - resendMessage: async (messageId) => { - // 1. 构造所有相关的历史记录 - const chats = chatSelectors.currentChats(get()); - - const currentIndex = chats.findIndex((c) => c.id === messageId); - if (currentIndex < 0) return; - - const currentMessage = chats[currentIndex]; - - let contextMessages: ChatMessage[] = []; - - switch (currentMessage.role) { - case 'function': - case 'user': { - contextMessages = chats.slice(0, currentIndex + 1); - break; - } - case 'assistant': { - // 消息是 AI 发出的因此需要找到它的 user 消息 - const userId = currentMessage.parentId; - const userIndex = chats.findIndex((c) => c.id === userId); - // 如果消息没有 parentId,那么同 user/function 模式 - contextMessages = chats.slice(0, userIndex < 0 ? currentIndex + 1 : userIndex + 1); - break; - } - } - - if (contextMessages.length <= 0) return; - - const { realFetchAIResponse } = get(); - - const latestMsg = contextMessages.filter((s) => s.role === 'user').at(-1); - - if (!latestMsg) return; - - await realFetchAIResponse(contextMessages, latestMsg.id); - }, - - sendMessage: async (message) => { - const { dispatchMessage, realFetchAIResponse } = get(); - - if (!message) return; - - const userId = nanoid(); - dispatchMessage({ id: userId, message, role: 'user', type: 'addMessage' }); - - // Todo: need a callback before send message - - // Get the current messages to generate AI response - const messages = chatSelectors.currentChats(get()); - - await realFetchAIResponse(messages, userId); - - // TODO: need a callback after send - }, - - stopGenerateMessage: () => { - const { abortController, toggleChatLoading, chatLoadingId, chats, dispatchMessage } = get(); - // 如果当前 最后一条为 chatLoadingId 停止前需要清空 - if (chats && chats.length > 0) { - const lastChat = chats[chats.length - 1]; - if (lastChat.content === LOADING_FLAT) { - dispatchMessage({ - id: chatLoadingId, - key: 'content', - type: 'updateMessage', - value: '', - }); - } - } - - if (!abortController) return; - - abortController.abort(); - - toggleChatLoading(false); - }, - toggleChatLoading: (loading, id, action) => { - if (loading) { - const abortController = new AbortController(); - set({ abortController, chatLoadingId: id }, false, action); - return abortController; - } else { - set({ abortController: undefined, chatLoadingId: undefined }, false, action); - } - }, - - defaultModelFetcher: (params, options) => { - const { request } = get(); - const payload = merge( - { - model: initialModelConfig.model, - stream: true, - ...initialModelConfig.params, - }, - params, - ); - - if (typeof request === 'function') - return request(payload.messages as ChatMessage[], payload, options?.signal); - - const url = typeof request === 'string' ? request : '/api/openai/chat'; - - return fetch(url, { - body: JSON.stringify(payload), - headers: { 'Content-Type': 'application/json' }, - method: 'POST', - signal: options?.signal, - }); - }, - getMessageId: async (messages, parentId) => { - const { genMessageId } = get(); - if (typeof genMessageId === 'function') return genMessageId(messages, parentId); - return nanoid(); - }, - - createSmoothMessage: (id) => { - const { dispatchMessage } = get(); - - let buffer = ''; - // why use queue: https://shareg.pt/GLBrjpK - let outputQueue: string[] = []; - - // eslint-disable-next-line no-undef - let animationTimeoutId: NodeJS.Timeout | null = null; - let isAnimationActive = false; - - // when you need to stop the animation, call this function - const stopAnimation = () => { - isAnimationActive = false; - if (animationTimeoutId !== null) { - clearTimeout(animationTimeoutId); - animationTimeoutId = null; - } - }; - - // define startAnimation function to display the text in buffer smooth - // when you need to start the animation, call this function - const startAnimation = (speed = 2) => - new Promise<void>((resolve) => { - if (isAnimationActive) { - resolve(); - return; - } - - isAnimationActive = true; - - const updateText = () => { - // 如果动画已经不再激活,则停止更新文本 - if (!isAnimationActive) { - clearTimeout(animationTimeoutId!); - animationTimeoutId = null; - resolve(); - } - - // 如果还有文本没有显示 - // 检查队列中是否有字符待显示 - if (outputQueue.length > 0) { - // 从队列中获取前两个字符(如果存在) - const charsToAdd = outputQueue.splice(0, speed).join(''); - buffer += charsToAdd; - - // 更新消息内容,这里可能需要结合实际情况调整 - dispatchMessage({ id, key: 'content', type: 'updateMessage', value: buffer }); - - // 设置下一个字符的延迟 - animationTimeoutId = setTimeout(updateText, 16); // 16 毫秒的延迟模拟打字机效果 - } else { - // 当所有字符都显示完毕时,清除动画状态 - isAnimationActive = false; - animationTimeoutId = null; - resolve(); - } - }; - - updateText(); - }); - - return { startAnimation, stopAnimation, outputQueue, isAnimationActive }; - }, - - getChatLoadingId: () => { - const { chatLoadingId } = get(); - return chatLoadingId; - }, -}); diff --git a/src/ProChat/store/index.ts b/src/ProChat/store/index.ts deleted file mode 100644 index 367df469..00000000 --- a/src/ProChat/store/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { StoreApi } from 'zustand'; -import { createContext } from 'zustand-utils'; -import { ChatStore } from './store'; - -export type { ChatState } from './initialState'; -export * from './store'; - -export const { useStore, useStoreApi, Provider } = createContext<StoreApi<ChatStore>>(); diff --git a/src/ProChat/store/initialState.ts b/src/ProChat/store/initialState.ts deleted file mode 100644 index 84f17fc4..00000000 --- a/src/ProChat/store/initialState.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { DEFAULT_AVATAR, DEFAULT_USER_AVATAR } from '@/ProChat/const/meta'; -import { ModelConfig } from '@/ProChat/types/config'; -import { MetaData } from '@/ProChat/types/meta'; -import { ChatMessage } from '@/types/message'; -import { AutoCompleteProps } from 'antd'; -import { TextAreaProps } from 'antd/es/input'; -import { ReactNode } from 'react'; -import { FlexBasicProps } from 'react-layout-kit/lib/FlexBasic'; -import { Locale } from '../../locale'; -import { ProChatChatReference } from '../container/StoreUpdater'; - -export type ChatRequest = ( - messages: ChatMessage[], - config: ModelConfig, - signal: AbortSignal | undefined, -) => Promise<Response>; - -export interface ChatPropsState<T extends Record<string, any> = Record<string, any>> { - /** - * 语言模型角色设定 - */ - config: ModelConfig; - /** - * 聊天记录 - */ - chats: ChatMessage<T>[]; - onChatsChange?: (chats: ChatMessage<T>[]) => void; - chatRef?: ProChatChatReference; - displayMode: 'chat' | 'docs'; - userMeta: MetaData; - assistantMeta: MetaData; - /** - * 帮助消息 - */ - helloMessage?: ReactNode; - request?: string | ChatRequest; - - /** - * 生成消息 id - * @param message - * @returns message id - */ - genMessageId?: (message: ChatMessage<T>[], parentId: string) => Promise<string>; - - /** - * 重置消息 - * @returns - */ - onResetMessage?: () => Promise<void>; - - /** - * 获取自动完成列表的 request - * @param value - * @returns - */ - autocompleteRequest?: (value: string) => Promise< - { - value: string; - label?: string; - }[] - >; - - /** - * 输入框的 placeholder - */ - placeholder?: string; - - /** - * 国际化 - */ - locale?: Locale; - - /** - * 输入框的 props,优先级最高 - */ - inputAreaProps?: TextAreaProps & { autoCompleteProps?: AutoCompleteProps }; - - /** - * 信息框额外渲染 - */ - messageItemExtraRender?: (message: ChatMessage<T>, type: 'assistant' | 'user') => React.ReactNode; - - /** - * 信息框顶部的操作列表 - */ - actions?: { - /** - * 控制 input 顶部的操作区域的 flex 布局 - */ - flexConfig?: FlexBasicProps; - /** - * 控制 input 顶部的操作区域的操作按钮 - * @param defaultDoms - * @returns - */ - render?: (defaultDoms: JSX.Element[]) => JSX.Element[]; - }; -} - -export interface ChatState extends ChatPropsState { - init?: boolean; - abortController?: AbortController; - chatLoadingId?: string; -} - -export const initialModelConfig: ModelConfig = { - historyCount: 1, - model: 'gpt-3.5-turbo', - params: { - frequency_penalty: 0, - presence_penalty: 0, - temperature: 0.6, - top_p: 1, - }, - systemRole: '', -}; - -export const initialState: ChatState = { - chats: [], - init: true, - displayMode: 'chat', - userMeta: { - avatar: DEFAULT_USER_AVATAR, - }, - assistantMeta: { - avatar: DEFAULT_AVATAR, - }, - config: initialModelConfig, - // stream: true, -}; diff --git a/src/ProChat/store/reducers/message.test.ts b/src/ProChat/store/reducers/message.test.ts deleted file mode 100644 index dbd12314..00000000 --- a/src/ProChat/store/reducers/message.test.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { ChatMessage } from '@/types/message'; - -import { MessageDispatch, messagesReducer } from './message'; - -describe('messagesReducer', () => { - let initialState: ChatMessage[]; - - beforeEach(() => { - initialState = [ - { - id: 'message1', - content: 'Hello World', - createAt: 1629264000000, - updateAt: 1629264000000, - role: 'user', - }, - { - id: 'message2', - content: 'How are you?', - createAt: 1629264000000, - updateAt: 1629264000000, - role: 'system', - }, - ]; - }); - - describe('addMessage', () => { - it('should add a new message to the state', () => { - const payload: MessageDispatch = { - type: 'addMessage', - message: 'New Message', - role: 'user', - id: 'message3', - }; - - const newState = messagesReducer(initialState, payload); - - expect(Object.keys(newState)).toHaveLength(3); - // eslint-disable-next-line jest/valid-expect - expect(newState.some((m) => m.id === 'message1')); - // eslint-disable-next-line jest/valid-expect - expect(newState.some((m) => m.id === 'message2')); - // eslint-disable-next-line jest/valid-expect - expect(newState.some((m) => m.id === 'message3')); - expect(newState.find((m) => m.id === 'message3')).toEqual({ - id: 'message3', - content: 'New Message', - createAt: expect.any(Number), - updateAt: expect.any(Number), - parentId: undefined, - role: 'user', - }); - }); - - it('should use the provided id when adding a new message', () => { - const payload: MessageDispatch = { - type: 'addMessage', - id: 'customId', - message: 'New Message', - role: 'user', - }; - - const newState = messagesReducer(initialState, payload); - - expect(Object.keys(newState)).toHaveLength(3); - // eslint-disable-next-line jest/valid-expect - expect(newState.some((m) => m.id === 'message1')); - // eslint-disable-next-line jest/valid-expect - expect(newState.some((m) => m.id === 'message2')); - // eslint-disable-next-line jest/valid-expect - expect(newState.some((m) => m.id === 'customId')); - expect(newState.find((m) => m.id === 'customId')).toEqual({ - id: 'customId', - content: 'New Message', - createAt: expect.any(Number), - updateAt: expect.any(Number), - parentId: undefined, - role: 'user', - }); - }); - - it('should use the provided parentId when adding a new message', () => { - const payload: MessageDispatch = { - type: 'addMessage', - message: 'New Message', - id: 'message3', - role: 'user', - parentId: 'message1', - }; - - const newState = messagesReducer(initialState, payload); - - expect(newState.find((m) => m.id === 'message3')).toEqual({ - id: 'message3', - content: 'New Message', - createAt: expect.any(Number), - updateAt: expect.any(Number), - role: 'user', - parentId: 'message1', - }); - }); - - it('should use the provided parentId and quotaId when adding a new message', () => { - const payload: MessageDispatch = { - type: 'addMessage', - message: 'New Message', - id: 'message3', - role: 'user', - parentId: 'message1', - }; - - const newState = messagesReducer(initialState, payload); - - expect(newState.find((m) => m.id === 'message3')).toEqual({ - id: 'message3', - content: 'New Message', - createAt: expect.any(Number), - updateAt: expect.any(Number), - role: 'user', - parentId: 'message1', - }); - }); - }); - - describe('deleteMessage', () => { - it('should remove the specified message from the state', () => { - const payload: MessageDispatch = { - type: 'deleteMessage', - id: 'message1', - }; - - const newState = messagesReducer(initialState, payload); - - expect(Object.keys(newState)).toHaveLength(1); - // eslint-disable-next-line jest/valid-expect - expect(!newState.some((m) => m.id === 'message1')); - // eslint-disable-next-line jest/valid-expect - expect(newState.some((m) => m.id === 'message2')); - }); - - it('should not modify the state if the specified message does not exist', () => { - const payload: MessageDispatch = { - type: 'deleteMessage', - id: 'nonexistentMessage', - }; - - const newState = messagesReducer(initialState, payload); - - expect(newState).toEqual(initialState); - }); - }); - - describe('updateMessage', () => { - it('should update the specified message with the provided value', () => { - const payload: MessageDispatch = { - type: 'updateMessage', - id: 'message1', - key: 'content', - value: 'Updated Message', - }; - - const newState = messagesReducer(initialState, payload); - - const message1 = newState.find((m) => m.id === 'message1'); - expect(message1?.content).toBe('Updated Message'); - }); - - it('should not modify the state if the specified message does not exist', () => { - const payload: MessageDispatch = { - type: 'updateMessage', - id: 'nonexistentMessage', - key: 'content', - value: 'Updated Message', - }; - - const newState = messagesReducer(initialState, payload); - - expect(newState).toEqual(initialState); - }); - }); - - describe('updateMessageExtra', () => { - it('should update the specified message extra property with the provided value', () => { - const payload: MessageDispatch = { - type: 'updateMessageExtra', - id: 'message1', - key: 'translate', - value: { target: 'en', to: 'zh' }, - }; - - const newState = messagesReducer(initialState, payload); - const message1 = newState.find((m) => m.id === 'message1'); - expect(message1?.extra!.translate).toEqual({ target: 'en', to: 'zh' }); - }); - - it('should not modify the state if the specified message does not exist', () => { - const payload: MessageDispatch = { - type: 'updateMessageExtra', - id: 'nonexistentMessage', - key: 'translate', - value: { target: 'en', to: 'zh' }, - }; - - const newState = messagesReducer(initialState, payload); - - expect(newState).toEqual(initialState); - }); - }); - - describe('resetMessages', () => { - it('should reset the state to an empty object', () => { - const payload: MessageDispatch = { - type: 'resetMessages', - }; - - const newState = messagesReducer(initialState, payload); - - expect(newState).toEqual([]); - }); - }); - - describe('unimplemented type', () => { - it('should throw an error when an unimplemented type is provided', () => { - // @ts-ignore - const payload: MessageDispatch = { type: 'unimplementedType' }; - - expect(() => messagesReducer(initialState, payload)).toThrow( - '暂未实现的 type,请检查 reducer', - ); - }); - }); -}); diff --git a/src/ProChat/store/reducers/message.ts b/src/ProChat/store/reducers/message.ts deleted file mode 100644 index e0a7bd8c..00000000 --- a/src/ProChat/store/reducers/message.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { produce } from 'immer'; - -import { LLMRoleType } from '@/types/llm'; -import { ChatMessage } from '@/types/message'; -import { MetaData } from '@/types/meta'; -import { nanoid } from '../../utils/uuid'; - -interface AddMessage { - id?: string; - message: string; - meta?: MetaData; - parentId?: string; - quotaId?: string; - role: LLMRoleType; - type: 'addMessage'; -} - -interface DeleteMessage { - id: string; - type: 'deleteMessage'; -} - -interface ResetMessages { - topicId?: string; - type: 'resetMessages'; -} - -interface UpdateMessage { - id: string; - key: keyof ChatMessage; - type: 'updateMessage'; - value: ChatMessage[keyof ChatMessage]; -} -interface UpdateMessageExtra { - id: string; - key: string; - type: 'updateMessageExtra'; - value: any; -} - -export type MessageDispatch = - | AddMessage - | DeleteMessage - | ResetMessages - | UpdateMessage - | UpdateMessageExtra; - -export const messagesReducer = ( - state: ChatMessage<any>[], - payload: MessageDispatch, -): ChatMessage<any>[] => { - switch (payload.type) { - case 'addMessage': { - return produce(state, (draftState) => { - const mid = payload.id || nanoid(); - - draftState.push({ - content: payload.message, - createAt: Date.now(), - id: mid, - parentId: payload.parentId, - role: payload.role, - updateAt: Date.now(), - }); - }); - } - - case 'deleteMessage': { - return state - .map((m) => { - if (m.id !== payload.id) return m; - return false; - }) - .filter(Boolean) as ChatMessage<any>[]; - } - - case 'updateMessage': { - return produce(state, (draftState) => { - const { id, key, value } = payload; - const message = draftState.find((m) => m.id === id); - if (!message) return; - - // @ts-ignore - message[key] = value; - message.updateAt = Date.now(); - }); - } - - case 'updateMessageExtra': { - return produce(state, (draftState) => { - const { id, key, value } = payload; - - const message = draftState.find((m) => m.id === id); - if (!message) return; - - if (!message.extra) { - message.extra = { [key]: value } as any; - } else { - message.extra[key] = value; - } - - message.updateAt = Date.now(); - }); - } - - case 'resetMessages': { - return []; - } - - default: { - throw new Error('暂未实现的 type,请检查 reducer'); - } - } -}; diff --git a/src/ProChat/store/selectors/chat.ts b/src/ProChat/store/selectors/chat.ts deleted file mode 100644 index 7290c9d9..00000000 --- a/src/ProChat/store/selectors/chat.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { ChatMessage } from '@/types/message'; - -import { MetaData } from '@/ProChat/types/meta'; -import { gLocaleObject } from '@/locale'; -import { getSlicedMessagesWithConfig } from '../../utils/message'; -import type { ChatStore } from '../store'; - -// 当前激活的消息列表 -export const currentChats = (s: ChatStore): ChatMessage[] => { - if (Object.keys(s.chats).length === 0) return []; - - const getMeta = (message: ChatMessage): MetaData => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { avatar, title, backgroundColor, ...rest } = s.userMeta; - const assistant = s.assistantMeta; - switch (message?.role) { - case 'user': { - return { - avatar, - title, - ...rest, - }; - } - case 'system': { - return assistant; - } - case 'assistant': { - return { - avatar: assistant?.avatar, - backgroundColor: assistant?.backgroundColor, - title: assistant?.title, - }; - } - } - return { - ...message, - }; - }; - - const basic = s.chats - // 映射头像关系 - .map((m) => { - return { - ...m, - meta: getMeta(m), - }; - }); - - const finalList: ChatMessage[] = []; - - const addItem = (item: ChatMessage) => { - const isExist = finalList.findIndex((i) => item.id === i.id) > -1; - if (!isExist) { - finalList.push(item); - } - }; - - // 基于添加逻辑进行重排序 - for (const item of basic) { - // 先判存在与否,不存在就加入 - addItem(item); - - for (const another of basic) { - if (another.parentId === item.id) { - addItem(another); - } - } - } - - return finalList; -}; - -// 针对新助手添加初始化时的自定义消息 -export const currentChatsWithGuideMessage = (s: ChatStore): ChatMessage[] => { - const data = currentChats(s); - // TODO: need topic inject - const isBrandNewChat = data.length === 0; - if (!isBrandNewChat) return data; - - const emptyInboxGuideMessage = { - content: s.helloMessage ?? gLocaleObject(s.locale).defaultHelloMessage, - createAt: Date.now(), - extra: {}, - id: 'default', - meta: s.assistantMeta, - role: 'hello', - updateAt: Date.now(), - } as ChatMessage; - - return [emptyInboxGuideMessage]; -}; - -export const currentChatsWithHistoryConfig = (s: ChatStore): ChatMessage[] => { - const chats = currentChats(s); - - return getSlicedMessagesWithConfig(chats, s.config); -}; - -export const chatsMessageString = (s: ChatStore): string => { - const chats = currentChatsWithHistoryConfig(s); - return chats.map((m) => m.content).join(''); -}; diff --git a/src/ProChat/store/selectors/index.ts b/src/ProChat/store/selectors/index.ts deleted file mode 100644 index 88f68ef2..00000000 --- a/src/ProChat/store/selectors/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { - chatsMessageString, - currentChats, - currentChatsWithGuideMessage, - currentChatsWithHistoryConfig, -} from './chat'; - -export const chatSelectors = { - chatsMessageString, - currentChats, - currentChatsWithGuideMessage, - currentChatsWithHistoryConfig, -}; diff --git a/src/ProChat/store/store.ts b/src/ProChat/store/store.ts deleted file mode 100644 index 51586e64..00000000 --- a/src/ProChat/store/store.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { StateCreator } from 'zustand/vanilla'; - -import { ChatListProps } from '@/ChatList'; -import { MetaData } from '@/ProChat/types/meta'; -import { MarkdownProps } from '@ant-design/pro-editor'; -import isEqual from 'fast-deep-equal'; -import { merge } from 'lodash-es'; -import { optionalDevtools } from 'zustand-utils'; -import { DevtoolsOptions } from 'zustand/middleware'; -import { createWithEqualityFn } from 'zustand/traditional'; -import { ChatAction, chatAction } from './action'; -import { ChatPropsState, ChatState, initialState } from './initialState'; - -export interface ChatProps<T extends Record<string, any> = Record<string, any>> - extends Partial<ChatPropsState<T>> { - // init - loading?: boolean; - initialChats?: ChatPropsState<T>['chats']; - userMeta?: MetaData; - assistantMeta?: MetaData; - /** - * @description 聊天项的渲染函数 - */ - chatItemRenderConfig?: ChatListProps['chatItemRenderConfig']; - /** - * @description markdown组件的参数 - */ - markdownProps?: MarkdownProps; - /** - * @description 判断聊天项的更新函数 - */ - itemShouldUpdate?: ChatListProps['itemShouldUpdate']; -} - -// =============== 聚合 createStoreFn ============ // - -export type ChatStore = ChatAction & ChatState; - -const vanillaStore = - ({ - loading, - initialChats, - chats, - ...props - }: ChatProps): StateCreator<ChatStore, [['zustand/devtools', never]]> => - (...parameters) => { - // initState = innerState + props - - const finalInitChats = chats ?? initialChats; - - const state = merge({}, initialState, { - init: !loading, - chats: Array.isArray(finalInitChats) ? finalInitChats : Object.values(finalInitChats || {}), - ...props, - } as ChatState); - - return { - ...state, - ...chatAction(...parameters), - }; - }; -// - -// =============== 封装 createStore ============ // - -const PRO_CHAT = 'PRO_CHAT'; - -const isDev = process.env.NODE_ENV === 'development'; - -export const createStore = (props: ChatProps, options: boolean | DevtoolsOptions = false) => { - const devtools = optionalDevtools(options !== false); - - const devtoolOptions = - options === false - ? undefined - : options === true - ? { name: PRO_CHAT + (isDev ? '_DEV' : '') } - : options; - - return createWithEqualityFn<ChatStore>()(devtools(vanillaStore(props), devtoolOptions), isEqual); -}; diff --git a/src/ProChat/types/meta.ts b/src/ProChat/types/meta.ts deleted file mode 100644 index 572694f9..00000000 --- a/src/ProChat/types/meta.ts +++ /dev/null @@ -1,23 +0,0 @@ -export interface MetaData { - /** - * 角色头像 - * @description 可选参数,如果不传则使用默认头像 - */ - avatar?: string; - /** - * 背景色 - * @description 可选参数,如果不传则使用默认背景色 - */ - backgroundColor?: string; - /** - * 名称 - * @description 可选参数,如果不传则使用默认名称 - */ - title?: string; - - /** - * 附加数据 - * @description 可选参数,如果不传则使用默认名称 - */ - [key: string]: any; -} diff --git a/src/ProChat/utils/message.ts b/src/ProChat/utils/message.ts deleted file mode 100644 index ad46ce94..00000000 --- a/src/ProChat/utils/message.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { FUNCTION_MESSAGE_FLAG } from '@/ProChat/const/message'; -import { ModelConfig } from '@/ProChat/types/config'; -import { ChatMessage } from '@/types/message'; - -export const isFunctionMessage = (content: string) => { - return content.startsWith(FUNCTION_MESSAGE_FLAG); -}; - -export const getSlicedMessagesWithConfig = ( - messages: ChatMessage[], - config: ModelConfig, -): ChatMessage[] => { - // 如果没有开启历史消息数限制,或者限制为 0,则直接返回 - if (!config.enableHistoryCount || !config.historyCount) return messages; - - // 如果开启了,则返回尾部的N条消息 - return messages.reverse().slice(0, config.historyCount).reverse(); -}; diff --git a/src/ProChat/utils/storeDebug.ts b/src/ProChat/utils/storeDebug.ts deleted file mode 100644 index 3507d29c..00000000 --- a/src/ProChat/utils/storeDebug.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const setNamespace = (namespace: string) => { - return (type: string, payload?: any) => { - const name = [namespace, type].filter(Boolean).join('/'); - return payload - ? { - payload, - type: name, - } - : name; - }; -}; diff --git a/src/ProChat/utils/uuid.ts b/src/ProChat/utils/uuid.ts deleted file mode 100644 index 8cc31f3c..00000000 --- a/src/ProChat/utils/uuid.ts +++ /dev/null @@ -1,7 +0,0 @@ -// generate('1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 16); //=> "4f90d13a42" -import { customAlphabet } from 'nanoid/non-secure'; - -export const nanoid = customAlphabet( - '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', - 8, -); diff --git a/src/TokenTag/demos/index.tsx b/src/TokenTag/demos/index.tsx deleted file mode 100644 index 5ec5877f..00000000 --- a/src/TokenTag/demos/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { TokenTag, TokenTagProps } from '@ant-design/pro-chat'; - -export default () => { - const control: TokenTagProps | any = { - maxValue: { - step: 1, - value: 5000, - }, - value: { - step: 1, - value: 1000, - }, - }; - - return <TokenTag {...control} />; -}; diff --git a/src/TokenTag/index.en-US.md b/src/TokenTag/index.en-US.md deleted file mode 100644 index b58d7215..00000000 --- a/src/TokenTag/index.en-US.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -nav: Components -group: Chat -title: TokenTag -description: The TokenTag component is used to display a token tag with a FluentEmoji icon and a text indicating the remaining tokens. -order: 10 ---- - -## Default - -The remaining tokens are calculated based on the `maxValue` and `value` props. The component has three types of visual styles: normal, low, and overload, which are determined by the percentage of remaining tokens. The component is memoized for performance optimization. - -<code src="./demos/index.tsx" nopadding></code> - -## APIs - -<API></API> diff --git a/src/TokenTag/index.md b/src/TokenTag/index.md deleted file mode 100644 index 54fa21c2..00000000 --- a/src/TokenTag/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -nav: 组件 -group: Chat -title: TokenTag -description: The TokenTag component is used to display a token tag with a FluentEmoji icon and a text indicating the remaining tokens. -order: 10 ---- - -## Default - -The remaining tokens are calculated based on the `maxValue` and `value` props. The component has three types of visual styles: normal, low, and overload, which are determined by the percentage of remaining tokens. The component is memoized for performance optimization. - -<code src="./demos/index.tsx" nopadding></code> - -## APIs - -<API></API> diff --git a/src/TokenTag/index.tsx b/src/TokenTag/index.tsx deleted file mode 100644 index e04cc638..00000000 --- a/src/TokenTag/index.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { useResponsive } from 'antd-style'; -import { forwardRef } from 'react'; - -import Emoji from '@/Emoji'; -import { DivProps } from '@/types'; - -import { ICON_SIZE, useStyles } from './style'; - -export interface TokenTagProps extends DivProps { - /** - * @default 'left' - */ - displayMode?: 'remained' | 'used'; - /** - * @description Maximum value for the token - */ - maxValue: number; - shape?: 'round' | 'square'; - text?: { - overload?: string; - remained?: string; - used?: string; - }; - /** - * @description Current value of the token - */ - value: number; -} - -const TokenTag = forwardRef<HTMLDivElement, TokenTagProps>( - ( - { className, displayMode = 'remained', maxValue, value, text, shape = 'round', ...props }, - ref, - ) => { - const { mobile } = useResponsive(); - const valueLeft = maxValue - value; - const percent = valueLeft / maxValue; - let type: 'normal' | 'low' | 'overload'; - let emoji; - - if (percent > 0.3) { - type = 'normal'; - emoji = '😀'; - } else if (percent > 0) { - type = 'low'; - emoji = '😅'; - } else { - type = 'overload'; - emoji = '🤯'; - } - - const { styles, cx } = useStyles({ shape, type }); - - return ( - <div className={cx(styles.container, className)} ref={ref} {...props}> - <Emoji emoji={emoji} size={ICON_SIZE} /> - {valueLeft > 0 - ? [ - mobile - ? '' - : displayMode === 'remained' - ? text?.remained || 'Remained' - : text?.used || 'Used', - displayMode === 'remained' ? valueLeft : value, - ].join(' ') - : text?.overload || 'Overload'} - </div> - ); - }, -); - -export default TokenTag; diff --git a/src/TokenTag/style.ts b/src/TokenTag/style.ts deleted file mode 100644 index 3e5ac302..00000000 --- a/src/TokenTag/style.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { createStyles } from 'antd-style'; - -const HEIGHT = 28; -export const ICON_SIZE = 20; - -export const useStyles = createStyles( - ( - { cx, css, token, isDarkMode }, - { type, shape }: { shape: 'round' | 'square'; type: 'normal' | 'low' | 'overload' }, - ) => { - let percentStyle; - - switch (type) { - case 'normal': { - percentStyle = css` - color: ${token.colorSuccessText}; - `; - break; - } - case 'low': { - percentStyle = css` - color: ${token.colorWarningText}; - `; - break; - } - case 'overload': { - percentStyle = css` - color: ${token.colorErrorText}; - `; - break; - } - } - - const roundStylish = css` - padding: 0 ${(HEIGHT - ICON_SIZE) * 1.2}px 0 ${(HEIGHT - ICON_SIZE) / 2}px; - background: ${isDarkMode ? token.colorFillSecondary : token.colorFillTertiary}; - border-radius: ${HEIGHT / 2}px; - `; - - const squareStylish = css` - border-radius: ${token.borderRadiusSM}px; - `; - - return { - container: cx( - percentStyle, - shape === 'round' ? roundStylish : squareStylish, - css` - user-select: none; - - overflow: hidden; - display: flex; - flex: 0; - gap: 4px; - align-items: center; - - min-width: fit-content; - height: ${HEIGHT}px; - - font-family: ${token.fontFamilyCode}; - font-size: 13px; - line-height: 1; - `, - ), - }; - }, -); diff --git a/src/components/Animation/AnimText.tsx b/src/components/Animation/AnimText.tsx new file mode 100644 index 00000000..d52ac15a --- /dev/null +++ b/src/components/Animation/AnimText.tsx @@ -0,0 +1,44 @@ +import { animate, motion, useMotionValue, useTransform } from 'framer-motion'; +import { useEffect, useState } from 'react'; + +export interface IAnimTextProps { + children: string; + Render: any; +} + +export function AnimText({ children, Render }: IAnimTextProps) { + const [done, setDone] = useState(false); + const baseText = children; + const count = useMotionValue(1); + const rounded = useTransform(count, (latest) => Math.round(latest)); + const displayText = useTransform(rounded, (latest) => baseText.slice(0, latest)); + + useEffect(() => { + setDone(false); + const conText = animate(count, baseText.length, { + type: 'tween', + delay: -0.1, + duration: 1, + ease: 'easeInOut', + onComplete: () => { + setDone(true); + }, + }); + return () => { + try { + conText.stop(); + } catch (e) {} + }; + }, [baseText]); + return done ? ( + <Render>{baseText}</Render> + ) : ( + <motion.div + style={{ + lineHeight: 1.8, + }} + > + {displayText} + </motion.div> + ); +} diff --git a/src/components/Animation/index.tsx b/src/components/Animation/index.tsx new file mode 100644 index 00000000..213221a4 --- /dev/null +++ b/src/components/Animation/index.tsx @@ -0,0 +1,21 @@ +import { HTMLMotionProps, motion } from 'framer-motion'; + +export default function AnimationItem({ + children, + animation, + ...rest +}: { children: React.ReactNode; animation: boolean } & HTMLMotionProps<'div'>) { + if (animation !== true) { + return <div {...(rest as any)}>{children}</div>; + } + return ( + <motion.div + initial={{ y: 20, opacity: 0 }} + animate={{ y: 0, opacity: 1 }} + transition={{ ease: 'easeInOut', duration: 0.75 }} + {...rest} + > + {children} + </motion.div> + ); +} diff --git a/src/components/Avatar/getEmojiByCharacter.ts b/src/components/Avatar/getEmojiByCharacter.ts deleted file mode 100644 index ce15c56d..00000000 --- a/src/components/Avatar/getEmojiByCharacter.ts +++ /dev/null @@ -1,6 +0,0 @@ -import emojiRegex from 'emoji-regex'; - -export const getEmoji = (emoji: string): string | undefined => { - const regex = emojiRegex(); - return emoji.match(regex)?.[0]; -}; diff --git a/src/components/Avatar/index.tsx b/src/components/Avatar/index.tsx deleted file mode 100644 index d8c65e33..00000000 --- a/src/components/Avatar/index.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { Avatar as AntAvatar, type AvatarProps as AntAvatarProps } from 'antd'; -import { memo, useMemo } from 'react'; - -import Emoji from '@/Emoji'; -import { getEmoji } from '@/components/Avatar/getEmojiByCharacter'; - -import { useStyles } from './style'; - -export interface AvatarProps extends AntAvatarProps { - /** - * @description The URL or base64 data of the avatar image - */ - avatar?: string; - /** - * @description The background color of the avatar - */ - background?: string; - /** - * @description The shape of the avatar - * @default 'circle' - */ - shape?: 'circle' | 'square'; - /** - * @description The size of the avatar in pixels - * @default 40 - */ - size?: number; - /** - * @description The title text to display if avatar is not provided - */ - title?: string; -} - -/** - * @module Avatar - * @description 头像组件,用于显示用户头像信息 - * @exports Avatar - * @component - * - * @param {string} [avatar] - 头像图片的URL或base64数据 - * @param {string} [background] - 头像的背景颜色 - * @param {'circle' | 'square'} [shape='circle'] - 头像的形状,默认为圆形 - * @param {number} [size=40] - 头像的尺寸(像素) - * @param {string} [title] - 如果未提供头像,则显示的标题文本 - * @param {string} [className] - 自定义的CSS类名 - * @param {Function} [onClick] - 点击头像时触发的回调函数 - * @param {Object} [style] - 自定义的行内样式 - * @param {Object} [props] - 其他传递给AntAvatar组件的属性 - * - */ -const Avatar = memo<AvatarProps>( - ({ - className, - avatar, - title, - size = 40, - shape = 'circle', - background = 'rgba(0,0,0,0)', - onClick, - style, - ...props - }) => { - const isImage = Boolean( - avatar && ['/', 'http', 'data:'].some((index) => avatar.startsWith(index)), - ); - const isBase64 = Boolean(avatar?.startsWith('data')); - const emoji = useMemo(() => avatar && !isImage && getEmoji(avatar), [avatar]); - - const { styles, cx } = useStyles({ background, isEmoji: Boolean(emoji), size }); - - const text = String(isImage ? title : avatar); - - const avatarProps = { - className: cx(styles.avatar, className), - shape: shape, - size, - style: onClick ? style : { cursor: 'default', ...style }, - }; - - return isImage ? ( - <AntAvatar - src={isBase64 ? avatar : <img src={avatar} alt="avatar" />} - {...avatarProps} - {...props} - /> - ) : ( - <AntAvatar {...avatarProps} {...props}> - {emoji ? <Emoji emoji={emoji} size={size * 0.8} /> : text?.toUpperCase().slice(0, 2)} - </AntAvatar> - ); - }, -); - -export default Avatar; diff --git a/src/components/Avatar/style.ts b/src/components/Avatar/style.ts deleted file mode 100644 index d5136272..00000000 --- a/src/components/Avatar/style.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { createStyles } from 'antd-style'; -import { readableColor } from 'polished'; - -export const useStyles = createStyles( - ( - { css, token, prefixCls }, - { background, size, isEmoji }: { background?: string; isEmoji?: boolean; size: number }, - ) => { - const backgroundColor = background ?? token.colorBgContainer; - const color = readableColor(backgroundColor); - - return { - avatar: css` - cursor: pointer; - - display: flex; - align-items: center; - justify-content: center; - - background: ${backgroundColor}; - border: 1px solid ${background ? 'transparent' : token.colorSplit}; - - > .${prefixCls}-avatar-string { - font-size: ${size * (isEmoji ? 0.7 : 0.5)}px; - font-weight: 700; - line-height: 1 !important; - color: ${color}; - } - - > * { - cursor: pointer; - } - `, - }; - }, -); diff --git a/src/components/BackToBottomButton/index.tsx b/src/components/BackToBottomButton/index.tsx new file mode 100644 index 00000000..f7035e0c --- /dev/null +++ b/src/components/BackToBottomButton/index.tsx @@ -0,0 +1,59 @@ +import { VerticalAlignBottomOutlined } from '@ant-design/icons'; +import { FloatButton, FloatButtonProps, FloatButtonRef } from 'antd'; +import React, { useEffect, useState } from 'react'; +import getScroll from './utils/getScroll'; +import throttleByAnimationFrame from './utils/throttleByAnimationFrame'; + +type BackToBottmButtonProps = Omit<FloatButtonProps, 'target'> & { + target?: () => HTMLElement | Window | Document; + visibilityHeight?: number; +}; + +const BackToBottmButton: React.FC<BackToBottmButtonProps> = (props) => { + const { target, visibilityHeight = 50, ...rest } = props; + const [visible, setVisible] = useState<boolean>(visibilityHeight === 0); + + const handleScroll = throttleByAnimationFrame( + (e: React.UIEvent<HTMLElement, UIEvent> | { target: any }) => { + const scrollTop = getScroll(e.target, true); + const scrollHeight = e.target?.scrollHeight; + const targetHeight = e.target?.clientHeight; + setVisible(scrollHeight - scrollTop - targetHeight >= visibilityHeight); + }, + ); + + const internalRef = React.useRef<FloatButtonRef['nativeElement']>(null); + + const getDefaultTarget = (): HTMLElement | Document | Window => + internalRef.current && internalRef.current.ownerDocument + ? internalRef.current.ownerDocument + : window; + + useEffect(() => { + const getTarget = target || getDefaultTarget; + const container = getTarget(); + handleScroll({ target: container }); + container?.addEventListener('scroll', handleScroll); + return () => { + handleScroll.cancel(); + container?.removeEventListener('scroll', handleScroll); + }; + }, [target]); + + return ( + <FloatButton + ref={internalRef} + style={{ + bottom: 168, + position: 'absolute', + display: visible ? 'block' : 'none', + }} + icon={<VerticalAlignBottomOutlined />} + {...rest} + ></FloatButton> + ); +}; + +export { BackToBottmButton }; + +export type { BackToBottmButtonProps }; diff --git a/src/components/BackToBottomButton/utils/getScroll.ts b/src/components/BackToBottomButton/utils/getScroll.ts new file mode 100644 index 00000000..2889b43e --- /dev/null +++ b/src/components/BackToBottomButton/utils/getScroll.ts @@ -0,0 +1,33 @@ +export function isWindow(obj: any): obj is Window { + return obj !== null && obj !== undefined && obj === obj.window; +} + +export default function getScroll( + target: HTMLElement | Window | Document | null, + top: boolean, +): number { + if (typeof window === 'undefined') { + return 0; + } + const method = top ? 'scrollTop' : 'scrollLeft'; + let result = 0; + if (isWindow(target)) { + result = target[top ? 'pageYOffset' : 'pageXOffset']; + } else if (target instanceof Document) { + result = target.documentElement[method]; + } else if (target instanceof HTMLElement) { + result = target[method]; + } else if (target) { + // According to the type inference, the `target` is `never` type. + // Since we configured the loose mode type checking, and supports mocking the target with such shape below:: + // `{ documentElement: { scrollLeft: 200, scrollTop: 400 } }`, + // the program may falls into this branch. + // Check the corresponding tests for details. Don't sure what is the real scenario this happens. + result = target[method]; + } + + if (target && !isWindow(target) && typeof result !== 'number') { + result = ((target.ownerDocument ?? target) as any).documentElement?.[method]; + } + return result; +} diff --git a/src/components/BackToBottomButton/utils/throttleByAnimationFrame.ts b/src/components/BackToBottomButton/utils/throttleByAnimationFrame.ts new file mode 100644 index 00000000..536ef025 --- /dev/null +++ b/src/components/BackToBottomButton/utils/throttleByAnimationFrame.ts @@ -0,0 +1,26 @@ +import raf from 'rc-util/lib/raf'; + +function throttleByAnimationFrame<T extends any[]>(fn: (...args: T) => void) { + let requestId: number | null; + + const later = (args: T) => () => { + requestId = null; + fn(...args); + }; + + const throttled = (...args: T) => { + // eslint-disable-next-line eqeqeq + if (requestId == null) { + requestId = raf(later(args)); + } + }; + + throttled.cancel = () => { + raf.cancel(requestId!); + requestId = null; + }; + + return throttled; +} + +export default throttleByAnimationFrame; diff --git a/src/components/ChatItem/demos/Alert.tsx b/src/components/ChatItem/demos/Alert.tsx new file mode 100644 index 00000000..44611b03 --- /dev/null +++ b/src/components/ChatItem/demos/Alert.tsx @@ -0,0 +1,5 @@ +import { ChatItem } from '@ant-design/pro-chat'; + +import { avatar } from './data'; + +export default () => <ChatItem avatar={avatar} />; diff --git a/src/components/ChatItem/demos/data.tsx b/src/components/ChatItem/demos/data.tsx new file mode 100644 index 00000000..b30a25b1 --- /dev/null +++ b/src/components/ChatItem/demos/data.tsx @@ -0,0 +1,7 @@ +import { ProChatMetaData } from '@/hooks/useChatList'; + +export const avatar: ProChatMetaData = { + avatar: '😎', + backgroundColor: '#E8DA5A', + title: 'Advertiser', +}; diff --git a/src/ChatItem/demos/index.tsx b/src/components/ChatItem/demos/index.tsx similarity index 55% rename from src/ChatItem/demos/index.tsx rename to src/components/ChatItem/demos/index.tsx index 05b2c5a8..87ecefd8 100644 --- a/src/ChatItem/demos/index.tsx +++ b/src/components/ChatItem/demos/index.tsx @@ -1,7 +1,7 @@ -import { ActionIconGroup, ChatItem, ChatItemProps } from '@ant-design/pro-chat'; +import { ChatItem, ChatItemProps } from '@ant-design/pro-chat'; import { useState } from 'react'; -import { avatar, dropdownMenu, items } from './data'; +import { avatar } from './data'; export default () => { const [edit, setEdit] = useState(false); @@ -17,7 +17,6 @@ export default () => { value: 'left', }, primary: false, - showTitle: false, time: 1_686_538_950_084, type: { options: ['block', 'pure'], @@ -25,24 +24,5 @@ export default () => { }, }; - return ( - <ChatItem - {...control} - actions={ - <ActionIconGroup - dropdownMenu={dropdownMenu} - items={items} - onActionClick={(action) => { - if (action.key === 'edit') { - setEdit(true); - } - }} - type="ghost" - /> - } - avatar={avatar} - editing={edit} - onEditingChange={setEdit} - /> - ); + return <ChatItem {...control} avatar={avatar} editing={edit} onEditingChange={setEdit} />; }; diff --git a/src/ChatItem/index.en-US.md b/src/components/ChatItem/index.en-US.md similarity index 100% rename from src/ChatItem/index.en-US.md rename to src/components/ChatItem/index.en-US.md diff --git a/src/ChatItem/index.md b/src/components/ChatItem/index.md similarity index 100% rename from src/ChatItem/index.md rename to src/components/ChatItem/index.md diff --git a/src/components/ChatItem/index.tsx b/src/components/ChatItem/index.tsx new file mode 100644 index 00000000..76f9b25e --- /dev/null +++ b/src/components/ChatItem/index.tsx @@ -0,0 +1,197 @@ +import { useContext } from 'react'; + +import { ConfigProvider, Flex } from 'antd'; +import cx from 'classnames'; +import AnimationItem from '../Animation'; +import { ProChatAvatar } from '../ProChatAvatar'; +import { ProChatTitle } from '../ProChatTitle'; +import { useStyle } from './style'; +import type { ChatItemProps } from './type'; + +const runRender = (render: any, props: ChatItemProps, defaultDom, ...rest) => { + if (render) { + return render(props, defaultDom, ...rest); + } + return defaultDom; +}; + +/** + * Represents a chat item component. + * + * @component + * @example + * ```tsx + * <ChatItem + * onAvatarClick={handleAvatarClick} + * className="chat-item" + * placement="left" + * avatar={avatarData} + * style={itemStyle} + * time={messageTime} + * messageExtra={extraContent} + * chatListItemContentStyle={contentStyle} + * chatListItemTitleStyle={titleStyle} + * chatItemRenderConfig={renderConfig} + * chatListItemAvatarStyle={avatarStyle} + * chatListItemExtraStyle={extraStyle} + * onDoubleClick={handleDoubleClick} + * > + * {messageContent} + * </ChatItem> + * ``` + * + * @param {ChatItemProps} props - The props for the ChatItem component. + * @returns {React.ReactElement} The rendered ChatItem component. + */ +export const ChatItem: React.FC<ChatItemProps> = (props) => { + const { + onAvatarClick, + className, + children, + placement = 'left', + avatar, + style, + time, + animation, + contentAfter, + contentBefore, + chatListItemContentStyle, + chatListItemTitleStyle, + chatItemRenderConfig, + chatListItemAvatarStyle, + chatListItemExtraStyle, + } = props; + + const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); + + const prefixClass = getPrefixCls('pro-chat-list-item'); + + const { wrapSSR, hashId } = useStyle(prefixClass); + + if (chatItemRenderConfig?.render === false) return null; + + const titleDom = runRender( + chatItemRenderConfig?.titleRender, + props, + <ProChatTitle + style={chatListItemTitleStyle} + prefixClass={cx(`${prefixClass}-message-title`)} + title={avatar?.title} + placement={placement} + time={time} + />, + ); + + const avatarDom = runRender( + chatItemRenderConfig?.avatarRender, + props, + <ProChatAvatar + avatar={avatar?.avatar} + background={avatar?.backgroundColor} + title={avatar?.title} + onClick={onAvatarClick} + prefixCls={`${prefixClass}-message-avatar`} + style={chatListItemAvatarStyle} + />, + ); + + const childrenDom = runRender(chatItemRenderConfig?.contentRender, props, children); + + const contentBeforeRender = runRender( + chatItemRenderConfig?.contentBeforeRender, + props, + contentBefore, + ); + + const contentAfterRender = runRender( + chatItemRenderConfig?.contentAfterRender, + props, + contentAfter, + ); + + const itemDom = wrapSSR( + <Flex + className={cx(prefixClass, hashId, `${prefixClass}-${placement}`, className)} + style={style} + vertical + gap={12} + > + {titleDom} + <Flex + style={{ + flexDirection: placement === 'left' ? 'row' : 'row-reverse', + ...style, + }} + gap={8} + align={'flex-start'} + className={cx(`${prefixClass}-message-container`, hashId)} + > + {avatarDom} + <Flex + vertical + gap={4} + className={cx( + `${prefixClass}-message-container`, + `${prefixClass}-message-container-${placement}`, + hashId, + )} + > + <div> + {contentBeforeRender ? ( + <div + className={cx( + `${prefixClass}-message-before`, + `${prefixClass}-message-before-${placement}`, + hashId, + )} + style={chatListItemExtraStyle} + > + {contentBeforeRender} + </div> + ) : null} + <AnimationItem + animation={animation} + className={cx( + `${prefixClass}-message-content`, + `${prefixClass}-message-content-${placement}`, + + hashId, + )} + style={chatListItemContentStyle} + > + {childrenDom} + </AnimationItem> + + {contentAfterRender ? ( + <div + className={cx( + `${prefixClass}-message-after`, + `${prefixClass}-message-after-${placement}`, + hashId, + )} + style={chatListItemExtraStyle} + > + {contentAfterRender} + </div> + ) : null} + </div> + </Flex> + </Flex> + </Flex>, + ); + + return ( + <> + {chatItemRenderConfig?.render?.( + props, + { + avatar: <ProChatAvatar avatar={avatar?.avatar} title={avatar?.title} />, + title: <ProChatTitle title={avatar?.title} time={time} />, + messageContent: children, + itemDom, + }, + itemDom, + ) || itemDom} + </> + ); +}; diff --git a/src/components/ChatItem/style.ts b/src/components/ChatItem/style.ts new file mode 100644 index 00000000..289dbd50 --- /dev/null +++ b/src/components/ChatItem/style.ts @@ -0,0 +1,71 @@ +import { + ChatTokenType, + GenerateStyle, + resetComponent, + useProChatStyleRegister, +} from '@/utils/useStyle'; + +const genStyle: GenerateStyle<ChatTokenType> = (token) => { + return { + [token.componentCls]: { + position: 'relative', + maxWidth: '100vw', + padding: '16px', + contentVisibility: 'auto', + cursor: 'pointer', + containIntrinsicSize: '100px', + '&:hover': { + [`${token.componentCls}-message-title-time`]: { + visibility: 'visible', + opacity: 1, + }, + }, + '&-message-avatar': { + width: 40, + height: 40, + }, + '&-message-avatar-emoji': { + fontSize: 24, + textAlign: 'center', + lineHeight: '36px', + }, + '&-message-container': { + width: '100%', + display: 'flex', + '&-right': { + alignItems: 'flex-end', + }, + '&-left': { + alignItems: 'flex-start', + }, + }, + '&-message-content': { + width: 'max-content', + fontSize: token.fontSize, + padding: token.paddingXS, + border: `1px solid ${token.colorBorderSecondary}`, + borderRadius: token.borderRadius, + + backgroundColor: token.colorBgContainer, + p: resetComponent(token), + pre: resetComponent(token), + }, + }, + }; +}; + +/** + * ProchatItem + * @param prefixCls + * @returns + */ +export function useStyle(prefixCls?: string) { + return useProChatStyleRegister('ListItem', (token) => { + const proChatToken = { + ...token, + componentCls: `.${prefixCls}`, + }; + + return [genStyle(proChatToken), resetComponent(proChatToken)]; + }); +} diff --git a/src/components/ChatItem/type.ts b/src/components/ChatItem/type.ts new file mode 100644 index 00000000..04009593 --- /dev/null +++ b/src/components/ChatItem/type.ts @@ -0,0 +1,157 @@ +import { ProChatMetaData } from '@/hooks/useChatList'; +import { DivProps } from '@/types'; +import { ReactNode } from 'react'; + +export type WithFalse<T> = T | false; + +/** + * Represents the props for a chat item component. + */ +export interface ChatItemProps<T = Record<string, any>> { + /** + * @description Metadata for the avatar. + */ + avatar: ProChatMetaData; + + /** + * @description Custom CSS class name for the chat item. + */ + className?: string; + + /** + * @description Whether the chat item is in loading state. + */ + loading?: boolean; + + /** + * @description The message content of the chat item. + */ + children?: ReactNode; + + /** + * @description Additional content to be displayed alongside the message. + */ + contentAfter?: ReactNode; + + /** + * @description Additional content to be displayed alongside the message. + */ + contentBefore?: ReactNode; + + /** + * @description Callback function for avatar click event. + */ + onAvatarClick?: () => void; + + /** + * @description Callback function for double click event. + */ + onDoubleClick?: DivProps['onDoubleClick']; + + /** + * @description The placement of the chat item. Defaults to 'left'. + */ + placement?: 'left' | 'right'; + + /** + * @description The timestamp of the chat item. + */ + time?: number; + + /** + * @description Configuration for custom rendering of chat item components. + */ + chatItemRenderConfig?: { + /** + * @description Custom rendering function for the title component. + */ + titleRender?: WithFalse<(props: ChatItemProps, defaultDom: ReactNode) => ReactNode>; + + /** + * @description Custom rendering function for the content component. + */ + contentRender?: WithFalse<(props: ChatItemProps, defaultDom: ReactNode) => ReactNode>; + + /** + * @description Custom rendering function for the actions component. + */ + contentAfterRender?: WithFalse<(props: ChatItemProps, defaultDom: ReactNode) => ReactNode>; + /** + * @description Custom rendering function for the before component. + */ + contentBeforeRender?: WithFalse<(props: ChatItemProps, defaultDom: ReactNode) => ReactNode>; + + /** + * @description Custom rendering function for the avatar component. + */ + avatarRender?: WithFalse<(props: ChatItemProps, defaultDom: ReactNode) => ReactNode>; + + /** + * @description Custom rendering function for the chat item component. + */ + render?: WithFalse< + ( + props: ChatItemProps, + domsMap: { + avatar: ReactNode; + title: ReactNode; + messageContent: ReactNode; + itemDom: ReactNode; + }, + defaultDom: ReactNode, + ) => ReactNode + >; + }; + + /** + * @description Custom CSS styles for the chat item component. + */ + style?: React.CSSProperties; + + /** + * @description Additional data associated with the chat item. + */ + originData?: T; + + /** + * @description Custom CSS styles for the chat item content. + */ + chatListItemContentStyle?: React.CSSProperties; + + /** + * @description Custom CSS styles for the chat item title. + */ + chatListItemTitleStyle?: React.CSSProperties; + + /** + * @description Custom CSS styles for the chat item avatar. + */ + chatListItemAvatarStyle?: React.CSSProperties; + + /** + * @description Custom CSS styles for the chat item extra content. + */ + chatListItemExtraStyle?: React.CSSProperties; + + /** + * @description Custom CSS class name for the chat item content. + */ + chatListItemContentClassName?: string; + + /** + * @description Custom CSS class name for the chat item title. + */ + chatListItemTitleClassName?: string; + + /** + * @description Custom CSS class name for the chat item extra content. + */ + chatListItemExtraClassName?: string; + + /** + * @description Custom CSS class name for the chat item avatar. + */ + chatListItemAvatarClassName?: string; + + animation?: boolean; +} diff --git a/src/ProChat/components/ChatList/Loading.tsx b/src/components/ChatList/Loading.tsx similarity index 97% rename from src/ProChat/components/ChatList/Loading.tsx rename to src/components/ChatList/Loading.tsx index adbc08b2..b95ebeb8 100644 --- a/src/ProChat/components/ChatList/Loading.tsx +++ b/src/components/ChatList/Loading.tsx @@ -41,7 +41,7 @@ const Svg = () => ( </svg> ); -const BubblesLoading = () => { +export const BubblesLoading = () => { const { colorTextTertiary } = useTheme(); return ( <div style={{ fill: colorTextTertiary, height: 24, width: 32 }}> diff --git a/src/components/ChatList/Messages/index.tsx b/src/components/ChatList/Messages/index.tsx new file mode 100644 index 00000000..033eb45c --- /dev/null +++ b/src/components/ChatList/Messages/index.tsx @@ -0,0 +1,52 @@ +import { AnimText } from '@/components/Animation/AnimText'; +import { LOADING_FLAT } from '@/const/message'; +import { Collapse, Divider, Typography } from 'antd'; +import { memo } from 'react'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; +import BubblesLoading from '../Loading'; +import { useStyles } from './style'; + +const MemoHr = memo((props) => ( + <Divider style={{ marginBottom: '1em', marginTop: 0 }} {...props} /> +)); +const MemoDetails = memo((props) => <Collapse style={{ marginBottom: '1em' }} {...props} />); +const MemoImage = memo((props) => <img {...props} />); +const MemoAlink = memo((props) => <Typography.Link {...props} />); + +const components: any = { + details: MemoDetails, + hr: MemoHr, + a: MemoAlink, + img: MemoImage, + // pre: Code, +}; + +const Render = ({ children }: { children: string }) => { + const { styles } = useStyles(); + return ( + <ReactMarkdown + remarkPlugins={[remarkGfm] as any[]} + className={styles.markdown} + components={components} + > + {children} + </ReactMarkdown> + ); +}; + +export const MessageComponent: React.FC<{ + content: string | React.ReactNode; + animation?: boolean; +}> = memo(({ content, animation }) => { + if (content === LOADING_FLAT) return <BubblesLoading />; + if (typeof content !== 'string') return content; + if (!animation) { + return <Render>{content}</Render>; + } + return ( + <Typography> + <AnimText Render={Render}>{content}</AnimText> + </Typography> + ); +}); diff --git a/src/styles/stylish.ts b/src/components/ChatList/Messages/style.ts similarity index 65% rename from src/styles/stylish.ts rename to src/components/ChatList/Messages/style.ts index 99ba13e1..75c84310 100644 --- a/src/styles/stylish.ts +++ b/src/components/ChatList/Messages/style.ts @@ -1,58 +1,21 @@ -import { createStylish, keyframes } from 'antd-style'; - -export const useStylish = createStylish(({ css, token, isDarkMode }) => { - const gradient = keyframes` - 0% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } - 100% { - background-position: 0% 50%; - } - `; - - const cyanColor = isDarkMode ? token.cyan9A : token.cyan11A; - const cyanBackground = isDarkMode ? token.cyan2A : token.cyan6A; +import { createStyles } from 'antd-style'; - return { - blur: css` - backdrop-filter: saturate(180%) blur(10px); - `, - blurStrong: css` - backdrop-filter: blur(36px); - `, - bottomScrollbar: css` - ::-webkit-scrollbar { - width: 0; - height: 4px; - background-color: transparent; - - &-thumb { - background-color: ${token.colorFill}; - border-radius: 4px; - transition: background-color 500ms ${token.motionEaseOut}; - } +export const useStyles = createStyles(({ css, cx, token, prefixCls }) => { + const prefix = `${prefixCls}-${token?.editorPrefix}-markdown`; - &-corner { - display: none; - width: 0; - height: 0; - } + return { + container: css` + :not(:last-child) { + margin-block-start: 1em; + margin-block-end: 1em; + margin-inline-start: 0; + margin-inline-end: 0; } `, - gradientAnimation: css` - background-image: linear-gradient( - -45deg, - ${token.gold}, - ${token.magenta}, - ${token.geekblue}, - ${token.cyan} - ); - background-size: 400% 400%; - border-radius: inherit; - animation: 5s ${gradient} 5s ease infinite; + highlight: css` + pre { + padding: 12px !important; + } `, markdown: css` color: ${token.colorText}; @@ -129,10 +92,6 @@ export const useStylish = createStylish(({ css, token, isDarkMode }) => { padding: 2px 6px; font-size: ${token.fontSizeSM}px; - color: ${cyanColor}; - - background: ${cyanBackground}; - border: 1px solid ${isDarkMode ? token.cyan1A : token.cyan6A}; border-radius: ${token.borderRadiusSM}px; } @@ -181,7 +140,7 @@ export const useStylish = createStylish(({ css, token, isDarkMode }) => { } > ol > li::marker { - color: ${isDarkMode ? token.cyan9A : token.cyan10A} !important; + color: ${token.colorPrimary} !important; } > ul > li { @@ -189,7 +148,7 @@ export const useStylish = createStylish(({ css, token, isDarkMode }) => { list-style-type: disc; &::marker { - color: ${isDarkMode ? token.cyan9A : token.cyan10A} !important; + color: ${token.colorPrimary} !important; } } @@ -218,21 +177,63 @@ export const useStylish = createStylish(({ css, token, isDarkMode }) => { } } `, - noScrollbar: css` - ::-webkit-scrollbar { - display: none; - width: 0; - height: 0; - background-color: transparent; + wrapper: cx(css` + background-color: ${token.colorFillTertiary}; + border-radius: ${token.borderRadius}px; + `), + highlighter: css` + max-height: 400px; + overflow: auto; + `, + header: cx( + `${prefix}-header`, + css` + padding: 4px 8px; + width: auto !important; // override self width + `, + css` + .${prefix}-btn { + &:hover { + color: ${token.colorTextSecondary} !important; + } + } + `, + ), + copy: css` + background-color: transparent; + position: inherit; + width: 30px; + padding-left: 6px; + `, + select: css` + min-width: 100px; + .${prefixCls}-select-selector { + padding-inline-end: 4px !important; + } + .${prefixCls}-select-selection-overflow-item-suffix { + .${prefixCls}-select-selection-search { + display: none; + } } `, - resetLinkColor: css` - cursor: pointer; - color: ${token.colorTextSecondary}; - - &:hover { - color: ${token.colorText}; + trigger: css` + min-width: 100px; + display: flex; + justify-content: center; + span { + font-family: ${token.fontFamilyCode} !important; } `, + lang: cx(css` + position: absolute; + z-index: 2; + right: 0; + bottom: 8px; + + font-family: ${token.fontFamilyCode}; + color: ${token.colorTextSecondary}; + + transition: opacity 0.1s; + `), }; }); diff --git a/src/components/ChatList/SkeletonList.tsx b/src/components/ChatList/SkeletonList.tsx new file mode 100644 index 00000000..04cd7458 --- /dev/null +++ b/src/components/ChatList/SkeletonList.tsx @@ -0,0 +1,12 @@ +import { Flex, Skeleton } from 'antd'; +import { memo } from 'react'; + +const SkeletonList = memo(() => { + return ( + <Flex gap={24} vertical> + <Skeleton active avatar={{ size: 32 }} paragraph={{ width: ['50%', '30%'] }} title={false} /> + <Skeleton active avatar={{ size: 32 }} paragraph={{ width: ['50%', '30%'] }} title={false} /> + </Flex> + ); +}); +export default SkeletonList; diff --git a/src/components/ChatList/index.tsx b/src/components/ChatList/index.tsx new file mode 100644 index 00000000..2531ff15 --- /dev/null +++ b/src/components/ChatList/index.tsx @@ -0,0 +1,144 @@ +import SkeletonList from './SkeletonList'; + +import { MutableRefObject, useContext } from 'react'; + +import type { ChatMessage } from '@/types'; + +import { DEFAULT_AVATAR, DEFAULT_USER_AVATAR } from '@/const/meta'; +import { ProChatMetaData } from '@/hooks/useChatList'; +import { ConfigProvider } from 'antd'; +import { cx } from 'antd-style'; +import { ChatItem } from '../ChatItem'; +import { ChatItemProps } from '../ChatItem/type'; +import { MessageComponent } from './Messages'; +import { useStyle } from './style'; + +export type ChatListProps = { + chatList: ChatMessage[]; + chatListRef: MutableRefObject<HTMLDivElement>; + loadingMessage?: ChatMessage<any>; + loading: boolean; + className?: string; + chatItemRenderConfig: ChatItemProps['chatItemRenderConfig']; + style?: React.CSSProperties; + userMeta?: ProChatMetaData; + assistantMeta?: ProChatMetaData; + chatListItemStyle?: React.CSSProperties; + chatListItemContentStyle?: React.CSSProperties; + chatListLeftItemContentStyle?: React.CSSProperties; + chatListRightItemContentStyle?: React.CSSProperties; + chatListItemTitleStyle?: React.CSSProperties; + chatListItemAvatarStyle?: React.CSSProperties; + chatListItemExtraStyle?: React.CSSProperties; + chatListItemClassName?: string; + chatListItemContentClassName?: string; + chatListItemTitleClassName?: string; + chatListItemExtraClassName?: string; + chatListItemAvatarClassName?: string; +}; + +const ChatList: React.FC<ChatListProps> = (props) => { + const { + chatListRef, + chatItemRenderConfig, + className, + loading, + chatListItemContentStyle, + chatListItemTitleStyle, + chatListLeftItemContentStyle, + chatListRightItemContentStyle, + chatListItemAvatarStyle, + chatListItemAvatarClassName, + chatListItemContentClassName, + chatListItemTitleClassName, + chatListItemExtraClassName, + loadingMessage, + userMeta = { + avatar: DEFAULT_USER_AVATAR, + }, + assistantMeta = { + avatar: DEFAULT_AVATAR, + }, + chatList = [], + style, + } = props; + const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); + + const prefixClass = getPrefixCls('pro-chat-list'); + const { wrapSSR, hashId } = useStyle(prefixClass); + + if (loading) + return wrapSSR( + <div + className={cx(`${prefixClass} ${prefixClass}-loading`, className, hashId)} + ref={chatListRef} + > + <SkeletonList /> + </div>, + ); + + return wrapSSR( + <div className={cx(`${prefixClass}`, className, hashId)} style={style} ref={chatListRef}> + {chatList.map((item) => { + return ( + <ChatItem + key={item.id} + data-id={item.id} + avatar={(item as any).meta || (item.role === 'user' ? userMeta : assistantMeta)} + style={props.chatListItemStyle} + originData={item} + placement={item.role === 'user' ? 'right' : 'left'} + time={item.updateAt || item.createAt} + chatListItemContentStyle={{ + ...chatListItemContentStyle, + ...(item.role === 'user' + ? chatListRightItemContentStyle + : chatListLeftItemContentStyle), + }} + chatListItemTitleStyle={chatListItemTitleStyle} + chatItemRenderConfig={chatItemRenderConfig} + chatListItemAvatarStyle={chatListItemAvatarStyle} + chatListItemAvatarClassName={chatListItemAvatarClassName} + chatListItemContentClassName={chatListItemContentClassName} + chatListItemTitleClassName={chatListItemTitleClassName} + chatListItemExtraClassName={chatListItemExtraClassName} + > + <MessageComponent {...item} /> + </ChatItem> + ); + })} + {loadingMessage && ( + <ChatItem + key={loadingMessage.id} + data-id={loadingMessage.id} + avatar={ + (loadingMessage as any).meta || + (loadingMessage.role === 'user' ? userMeta : assistantMeta) + } + animation + style={props.chatListItemStyle} + originData={loadingMessage} + placement={loadingMessage.role === 'user' ? 'right' : 'left'} + time={loadingMessage.updateAt || loadingMessage.createAt} + chatListItemContentStyle={{ + ...chatListItemContentStyle, + ...(loadingMessage.role === 'user' + ? chatListRightItemContentStyle + : chatListLeftItemContentStyle), + }} + chatListItemTitleStyle={chatListItemTitleStyle} + chatItemRenderConfig={chatItemRenderConfig} + chatListItemAvatarStyle={chatListItemAvatarStyle} + chatListItemAvatarClassName={chatListItemAvatarClassName} + chatListItemContentClassName={chatListItemContentClassName} + chatListItemTitleClassName={chatListItemTitleClassName} + chatListItemExtraClassName={chatListItemExtraClassName} + > + <MessageComponent {...loadingMessage} /> + </ChatItem> + )} + </div>, + ); +}; + +export default ChatList; diff --git a/src/components/ChatList/style.ts b/src/components/ChatList/style.ts new file mode 100644 index 00000000..f14d4340 --- /dev/null +++ b/src/components/ChatList/style.ts @@ -0,0 +1,39 @@ +import { + ChatTokenType, + GenerateStyle, + resetComponent, + useProChatStyleRegister, +} from '@/utils/useStyle'; + +const genStyle: GenerateStyle<ChatTokenType> = (token) => { + return { + [token.componentCls]: { + overflow: 'auto', + minHeight: 300, + [`${token.componentCls}-content-list`]: { + paddingTop: `${token.padding}px`, + paddingBottom: `${token.padding}px`, + }, + + '&-loading': { + padding: '0 24px', + }, + }, + }; +}; + +/** + * ProchatItem + * @param prefixCls + * @returns + */ +export function useStyle(prefixCls?: string) { + return useProChatStyleRegister('ChatList', (token) => { + const proChatToken = { + ...token, + componentCls: `.${prefixCls}`, + }; + + return [genStyle(proChatToken), resetComponent(proChatToken)]; + }); +} diff --git a/src/components/ControlInput.tsx b/src/components/ControlInput.tsx deleted file mode 100644 index 26ba3c09..00000000 --- a/src/components/ControlInput.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { ConfigProvider, Space, type InputRef } from 'antd'; -import { RotateCcw, Save } from 'lucide-react'; -import { forwardRef, useCallback, useEffect, useRef, useState } from 'react'; - -import ActionIcon from '@/ActionIcon'; -import { Input, InputProps } from '@/components/Input'; - -export interface ControlInputProps extends Omit<InputProps, 'onChange' | 'value' | 'onAbort'> { - /** - * @description Callback function that is triggered when the input value changes - */ - onChange?: (value: string) => void; - /** - * @description Callback function that is triggered when the input value has stopped changing - */ - onChangeEnd?: (value: string) => void; - /** - * @description Callback function that is triggered when the input value is changing - */ - onValueChanging?: (value: string) => void; - /** - * @description The initial value of the input - */ - value?: string; -} - -export const ControlInput = forwardRef<InputRef, ControlInputProps>( - ({ value, onChange, onValueChanging, onChangeEnd, ...props }, ref) => { - const [input, setInput] = useState<string>(value || ''); - - const isChineseInput = useRef(false); - const isFocusing = useRef(false); - - const updateValue = useCallback(() => { - onChange?.(input); - }, [input]); - - useEffect(() => { - if (value !== undefined) setInput(value); - }, [value]); - - return ( - <Input - autoFocus - onBlur={() => { - isFocusing.current = false; - onChangeEnd?.(input); - }} - onChange={(e) => { - setInput(e.target.value); - onValueChanging?.(e.target.value); - }} - onCompositionEnd={() => { - isChineseInput.current = false; - }} - onCompositionStart={() => { - isChineseInput.current = true; - }} - onFocus={() => { - isFocusing.current = true; - }} - onPressEnter={(e) => { - if (!e.shiftKey && !isChineseInput.current) { - e.preventDefault(); - updateValue(); - isFocusing.current = false; - onChangeEnd?.(input); - } - }} - ref={ref} - suffix={ - value === input ? ( - <span /> - ) : ( - <ConfigProvider theme={{ token: { fontSize: 14 } }}> - <Space size={2}> - <ActionIcon - icon={RotateCcw} - onClick={() => { - setInput(value as string); - }} - size="small" - title="Reset" - /> - <ActionIcon icon={Save} onClick={updateValue} size="small" title="✅ Save" /> - </Space> - </ConfigProvider> - ) - } - value={input} - {...props} - /> - ); - }, -); diff --git a/src/components/CopyButton/index.tsx b/src/components/CopyButton/index.tsx index 797a054d..a6e48dd9 100644 --- a/src/components/CopyButton/index.tsx +++ b/src/components/CopyButton/index.tsx @@ -1,13 +1,11 @@ import copy from 'copy-to-clipboard'; -import { Copy } from 'lucide-react'; import { memo } from 'react'; -import ActionIcon, { type ActionIconSize } from '@/ActionIcon'; import { useCopied } from '@/hooks/useCopied'; -import { DivProps } from '@/types'; -import { type TooltipProps } from 'antd'; +import { CopyOutlined } from '@ant-design/icons'; +import { Tooltip, type TooltipProps } from 'antd'; -export interface CopyButtonProps extends DivProps { +export type CopyButtonProps = { /** * @description Additional class name */ @@ -16,40 +14,22 @@ export interface CopyButtonProps extends DivProps { * @description The text content to be copied */ content: string; - /** - * @description The placement of the tooltip - * @enum ['top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight', 'leftTop', 'leftBottom', 'rightTop', 'rightBottom'] - * @default 'right' - */ - placement?: TooltipProps['placement']; - /** - * @description The size of the icon - * @enum ['large', 'normal', 'small', 'site'] - * @default 'site' - */ - size?: ActionIconSize; -} +} & TooltipProps; -const CopyButton = memo<CopyButtonProps>( - ({ content, className, placement = 'right', size = 'site', ...props }) => { +export const CopyButton = memo<CopyButtonProps>( + ({ content, className, placement = 'right', ...props }) => { const { copied, setCopied } = useCopied(); return ( - <ActionIcon - {...props} - className={className} - glass - icon={Copy} - onClick={() => { - copy(content); - setCopied(); - }} - placement={placement} - size={size} - title={copied ? '✅ Success' : 'Copy'} - /> + <Tooltip {...props} title={copied ? '✅ Success' : 'Copy'} placement={placement}> + <CopyOutlined + className={className} + onClick={() => { + copy(content); + setCopied(); + }} + /> + </Tooltip> ); }, ); - -export default CopyButton; diff --git a/src/components/Form/components/FormDivider.tsx b/src/components/Form/components/FormDivider.tsx deleted file mode 100644 index 45e9a8dc..00000000 --- a/src/components/Form/components/FormDivider.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { Divider as AntDivider, DividerProps } from 'antd'; -import { memo } from 'react'; - -export type FormDividerProps = DividerProps; -const Divider = memo<FormDividerProps>(({ style, ...props }) => ( - <AntDivider style={{ margin: 0, opacity: 0.5, ...style }} {...props} /> -)); -export default Divider; diff --git a/src/components/Form/components/FormFooter.tsx b/src/components/Form/components/FormFooter.tsx deleted file mode 100644 index 7a247272..00000000 --- a/src/components/Form/components/FormFooter.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { memo } from 'react'; - -import { DivProps } from '@/types'; - -import { useStyles } from './style'; - -export type FormFooterProps = DivProps; - -const FormFooter = memo<FormFooterProps>(({ className, children, ...props }) => { - const { cx, styles } = useStyles(); - return ( - <div className={cx(styles.footer, className)} {...props}> - {children} - </div> - ); -}); - -export default FormFooter; diff --git a/src/components/Form/components/FormGroup.tsx b/src/components/Form/components/FormGroup.tsx deleted file mode 100644 index 69c3d3ca..00000000 --- a/src/components/Form/components/FormGroup.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import Icon, { type IconProps } from '@/Icon'; -import { Collapse, type CollapseProps } from 'antd'; -import { useResponsive } from 'antd-style'; -import { ChevronDown } from 'lucide-react'; -import { memo, type ReactNode } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import { useStyles } from './style'; - -export interface FormGroupProps extends CollapseProps { - children: ReactNode; - extra?: ReactNode; - icon?: IconProps['icon']; - title: string; -} - -const FormGroup = memo<FormGroupProps>(({ className, icon, title, children, extra, ...props }) => { - const { mobile } = useResponsive(); - const { cx, styles } = useStyles(); - - const titleContent = ( - <div className={styles.title}> - {icon && <Icon icon={icon} />} - {title} - </div> - ); - - if (mobile) - return ( - <Flexbox className={className}> - <Flexbox className={styles.mobileGroupHeader} horizontal justify={'space-between'}> - {titleContent} - {extra} - </Flexbox> - <div className={styles.mobileGroupBody}>{children}</div> - </Flexbox> - ); - - return ( - <Collapse - className={cx(styles.group, className)} - defaultActiveKey={[1]} - expandIcon={({ isActive }) => ( - <Icon - className={styles.icon} - icon={ChevronDown} - size={{ fontSize: 16 }} - style={isActive ? {} : { rotate: '-90deg' }} - /> - )} - items={[ - { - children, - extra, - key: 1, - label: titleContent, - }, - ]} - key={1} - {...props} - /> - ); -}); - -export default FormGroup; diff --git a/src/components/Form/components/FormItem.tsx b/src/components/Form/components/FormItem.tsx deleted file mode 100644 index b3691e75..00000000 --- a/src/components/Form/components/FormItem.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { FormItemProps as AntdFormItemProps, Form } from 'antd'; -import { memo } from 'react'; - -import FormDivider from './FormDivider'; -import FormTitle, { type FormTitleProps } from './FormTitle'; -import { useStyles } from './style'; - -const { Item } = Form; - -export interface FormItemProps extends AntdFormItemProps { - avatar?: FormTitleProps['avatar']; - desc?: FormTitleProps['desc']; - divider?: boolean; - hidden?: boolean; - minWidth?: string | number; - tag?: FormTitleProps['tag']; -} - -const FormItem = memo<FormItemProps>( - ({ desc, tag, minWidth, avatar, className, label, children, divider, ...props }) => { - const { cx, styles } = useStyles(minWidth); - return ( - <> - {divider && <FormDivider />} - <Item - className={cx(styles.item, !divider && styles.itemNoDivider, className)} - label={<FormTitle avatar={avatar} desc={desc} tag={tag} title={label as any} />} - {...props} - > - {children} - </Item> - </> - ); - }, -); - -export default FormItem; diff --git a/src/components/Form/components/FormTitle.tsx b/src/components/Form/components/FormTitle.tsx deleted file mode 100644 index d1e8e502..00000000 --- a/src/components/Form/components/FormTitle.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { ReactNode, memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -import Tag from '@/components/Tag'; -import { DivProps } from '@/types'; - -import { useStyles } from './style'; - -export interface FormTitleProps extends DivProps { - avatar?: ReactNode; - desc?: ReactNode; - tag?: string; - title: string; -} - -const FormTitle = memo<FormTitleProps>(({ className, tag, title, desc, avatar }) => { - const { cx, styles } = useStyles(); - const titleNode = ( - <div className={cx(styles.formTitle, className)}> - <Flexbox align={'center'} direction={'horizontal'} gap={8}> - {title} - {tag && <Tag>{tag}</Tag>} - </Flexbox> - {desc && <small>{desc}</small>} - </div> - ); - - if (avatar) { - return ( - <Flexbox align={`center`} gap={8} horizontal> - {avatar} - {titleNode} - </Flexbox> - ); - } - return titleNode; -}); - -export default FormTitle; diff --git a/src/components/Form/components/style.ts b/src/components/Form/components/style.ts deleted file mode 100644 index c3e2b971..00000000 --- a/src/components/Form/components/style.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { createStyles } from 'antd-style'; -import { isNumber } from 'lodash-es'; - -export const useStyles = createStyles( - ({ css, cx, token, isDarkMode, responsive, prefixCls }, itemMinWidth?: string | number) => ({ - footer: css` - display: flex; - gap: 8px; - justify-content: flex-end; - `, - formTitle: css` - position: relative; - - display: flex; - flex-direction: column; - gap: 6px; - - text-align: left; - - > div { - font-weight: 500; - line-height: 1; - } - - > small { - display: block; - - line-height: 1; - color: ${token.colorTextDescription}; - word-wrap: break-word; - white-space: pre-wrap; - } - - .${prefixCls}-tag { - font-family: ${token.fontFamilyCode}; - } - `, - group: cx( - isDarkMode && - css` - .${prefixCls}-collapse-content { - background: transparent; - } - - .${prefixCls}-collapse-header { - background: ${token.colorFillTertiary}; - } - `, - css` - .${prefixCls}-collapse-header { - align-items: center !important; - border-radius: 0 !important; - } - - .${prefixCls}-collapse-content-box { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - - .${prefixCls}-form-item-label { - display: flex; - flex-direction: column; - justify-content: center; - } - `, - ), - icon: css` - transition: all 100ms ${token.motionEaseOut}; - `, - item: css` - padding: 16px 0; - - .${prefixCls}-row { - justify-content: space-between; - - > div { - flex: unset !important; - flex-grow: unset !important; - } - } - - .${prefixCls}-form-item-required::before { - align-self: flex-start; - } - - ${itemMinWidth && - css` - .${prefixCls}-form-item-control { - width: ${isNumber(itemMinWidth) ? `${itemMinWidth}px` : itemMinWidth}; - } - `} - - ${responsive.mobile} { - padding: 16px 0; - - ${itemMinWidth - ? css` - .${prefixCls}-row { - flex-direction: column; - gap: 4px; - } - - .${prefixCls}-form-item-control { - flex: 1; - width: 100%; - } - ` - : css` - .${prefixCls}-row { - flex-wrap: wrap; - gap: 4px; - } - `} - } - `, - itemNoDivider: css` - &:not(:first-child) { - padding-top: 0; - } - `, - mobileGroupBody: css` - padding: 0 16px; - background: ${token.colorBgContainer}; - `, - mobileGroupHeader: css` - padding: 16px; - background: ${token.colorBgLayout}; - `, - title: css` - display: flex; - gap: 8px; - align-items: center; - - font-size: 16px; - font-weight: 600; - - .anticon { - color: ${token.colorPrimary}; - } - - ${responsive.mobile} { - font-size: 14px; - font-weight: 400; - opacity: 0.5; - } - `, - }), -); diff --git a/src/components/Form/index.tsx b/src/components/Form/index.tsx deleted file mode 100644 index 59dd8f17..00000000 --- a/src/components/Form/index.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { Form as AntForm, FormProps as AntFormProps, type FormInstance } from 'antd'; -import { RefAttributes, forwardRef, type ReactNode } from 'react'; - -import FormFooter from './components/FormFooter'; -import FormGroup, { type FormGroupProps } from './components/FormGroup'; -import FormItem, { type FormItemProps } from './components/FormItem'; -import { useStyles } from './style'; - -export interface ItemGroup { - children: FormItemProps[]; - extra?: FormGroupProps['extra']; - icon?: FormGroupProps['icon']; - title: FormGroupProps['title']; -} - -export interface FormProps extends AntFormProps { - children?: ReactNode; - footer?: ReactNode; - itemMinWidth?: FormItemProps['minWidth']; - items?: ItemGroup[]; -} - -const FormParent = forwardRef<FormInstance, FormProps>( - ({ className, itemMinWidth, footer, form, items, children, ...props }, ref) => { - const { cx, styles } = useStyles(); - return ( - <AntForm - className={cx(styles.form, className)} - colon={false} - form={form} - layout="horizontal" - ref={ref} - {...props} - > - {items?.map((group, groupIndex) => ( - <FormGroup extra={group?.extra} icon={group?.icon} key={groupIndex} title={group.title}> - {group.children - .filter((item) => !item.hidden) - .map((item, itemIndex) => { - return ( - <FormItem - divider={itemIndex !== 0} - key={itemIndex} - minWidth={itemMinWidth} - {...item} - /> - ); - })} - </FormGroup> - ))} - {children} - {footer && <FormFooter>{footer}</FormFooter>} - </AntForm> - ); - }, -); - -export interface IForm { - (props: FormProps & RefAttributes<FormInstance>): ReactNode; - Group: typeof FormGroup; - Item: typeof FormItem; -} - -const Form = FormParent as unknown as IForm; - -Form.Item = FormItem; -Form.Group = FormGroup; - -export default Form; diff --git a/src/components/Form/style.ts b/src/components/Form/style.ts deleted file mode 100644 index 3f1dd0ed..00000000 --- a/src/components/Form/style.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles(({ css, token, prefixCls, responsive }) => ({ - footer: css` - display: flex; - gap: 8px; - justify-content: flex-end; - `, - form: css` - display: flex; - flex-direction: column; - gap: 16px; - - ${responsive.mobile} { - gap: 0; - } - - .${prefixCls}-form-item { - margin: 0 !important; - } - - .${prefixCls}-form-item .${prefixCls}-form-item-label > label { - height: unset; - } - - .${prefixCls}-row { - position: relative; - flex-wrap: nowrap; - } - - .${prefixCls}-form-item-label { - position: relative; - flex: 1; - max-width: 100%; - } - - .${prefixCls}-form-item-control { - position: relative; - flex: 0; - min-width: unset !important; - } - - .${prefixCls}-collapse-item { - overflow: hidden !important; - border-radius: ${token.borderRadius}px !important; - } - `, -})); diff --git a/src/components/Input/index.tsx b/src/components/Input/index.tsx deleted file mode 100644 index 7102bc1e..00000000 --- a/src/components/Input/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { Input as AntInput, type InputProps as AntdInputProps, type InputRef } from 'antd'; -import { TextAreaProps as AntdTextAreaProps, type TextAreaRef } from 'antd/es/input/TextArea'; -import { forwardRef } from 'react'; - -import { useStyles } from './style'; - -export interface InputProps extends AntdInputProps { - /** - * @description Type of the input - * @default 'ghost' - */ - type?: 'ghost' | 'block' | 'pure'; -} - -export const Input = forwardRef<InputRef, InputProps>( - ({ className, type = 'ghost', ...props }, reference) => { - const { styles, cx } = useStyles({ type }); - - return ( - <AntInput - bordered={type !== 'pure'} - className={cx(styles.input, className)} - ref={reference} - {...props} - /> - ); - }, -); - -export interface TextAreaProps extends AntdTextAreaProps { - /** - * @description Whether to enable resizing of the textarea - * @default true - */ - resize?: boolean; - /** - * @description Type of the textarea - * @default 'ghost' - */ - type?: 'ghost' | 'block' | 'pure'; -} - -export const TextArea = forwardRef<TextAreaRef, TextAreaProps>( - ({ className, type = 'ghost', resize = true, style, ...props }, reference) => { - const { styles, cx } = useStyles({ type }); - - return ( - <AntInput.TextArea - bordered={type !== 'pure'} - className={cx(styles.textarea, className)} - ref={reference} - style={resize ? style : { resize: 'none', ...style }} - {...props} - /> - ); - }, -); diff --git a/src/components/Input/style.ts b/src/components/Input/style.ts deleted file mode 100644 index 3dde9af0..00000000 --- a/src/components/Input/style.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles( - ({ cx, css, token, prefixCls }, { type }: { type: 'ghost' | 'block' | 'pure' }) => { - const typeStylish = css` - background-color: ${type === 'block' ? token.colorFillTertiary : 'transparent'}; - border: 1px solid ${type === 'block' ? 'transparent' : token.colorBorder}; - transition: - background-color 100ms ${token.motionEaseOut}, - border-color 200ms ${token.motionEaseOut}; - - &:hover { - background-color: ${token.colorFillTertiary}; - } - - &:focus { - border-color: ${token.colorTextQuaternary}; - } - - &.${prefixCls}-input-affix-wrapper-focused { - border-color: ${token.colorTextQuaternary}; - } - `; - - return { - input: cx( - type !== 'pure' && typeStylish, - css` - position: relative; - max-width: 100%; - height: ${type === 'pure' ? 'unset' : '36px'}; - padding: ${type === 'pure' ? '0' : '0 12px'}; - - input { - background: transparent; - } - `, - ), - textarea: cx( - type !== 'pure' && typeStylish, - css` - position: relative; - max-width: 100%; - padding: ${type === 'pure' ? '0' : '8px 12px'}; - border-radius: ${type === 'pure' ? '0' : `${token.borderRadius}px`}; - - textarea { - background: transparent; - } - `, - ), - }; - }, -); diff --git a/src/components/Loading.tsx b/src/components/Loading.tsx new file mode 100644 index 00000000..ab1d1b8f --- /dev/null +++ b/src/components/Loading.tsx @@ -0,0 +1,31 @@ +import { LoadingOutlined } from '@ant-design/icons'; +import { Flex } from 'antd'; +import { ChatItemProps } from './ChatItem/type'; + +/** + * Props for the Loading component. + */ +export interface LoadingProps { + loading?: ChatItemProps['loading']; + placement?: ChatItemProps['placement']; +} + +/** + * A component that displays a loading indicator. + * + * @component + * @param {Object} props - The component props. + * @param {boolean} props.loading - Indicates whether the loading indicator should be displayed. + * @returns {JSX.Element | null} The loading component. + */ +const Loading: React.FC<LoadingProps> = ({ loading }) => { + if (!loading) return null; + + return ( + <Flex align={'center'} justify={'center'}> + <LoadingOutlined style={{ fontSize: 12, strokeWidth: 3 }} /> + </Flex> + ); +}; + +export default Loading; diff --git a/src/components/ProChat/demos/actions.tsx b/src/components/ProChat/demos/actions.tsx new file mode 100644 index 00000000..8e73ad1a --- /dev/null +++ b/src/components/ProChat/demos/actions.tsx @@ -0,0 +1,38 @@ +/** + * compact: true + */ +import { ProChat } from '@ant-design/pro-chat'; +import { useTheme } from 'antd-style'; + +import { MockResponse } from './mocks/streamResponse'; + +export default () => { + const theme = useTheme(); + + return ( + <div style={{ background: theme.colorBgLayout }}> + <ProChat + actionsRender={(defaultDoms) => { + return [ + <a + key="user" + onClick={() => { + window.open('https://github.com/ant-design/pro-chat'); + }} + > + 人工服务 + </a>, + ...defaultDoms, + ]; + }} + sendMessageRequest={async (messages) => { + const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; + + const mockResponse = new MockResponse(mockedData); + + return mockResponse.getResponse(); + }} + /> + </div> + ); +}; diff --git a/src/ProChat/demos/bigData.tsx b/src/components/ProChat/demos/bigData.tsx similarity index 86% rename from src/ProChat/demos/bigData.tsx rename to src/components/ProChat/demos/bigData.tsx index e4975688..41e6f707 100644 --- a/src/ProChat/demos/bigData.tsx +++ b/src/components/ProChat/demos/bigData.tsx @@ -6,9 +6,9 @@ import { ProChat } from '@ant-design/pro-chat'; import { useTheme } from 'antd-style'; import { Alert } from 'antd'; -import { MockResponse } from '../mocks/streamResponse'; +import { MockResponse } from './mocks/streamResponse'; -const initialChats = new Array(100).fill(0).map((_, index) => { +const initialChatsList = new Array(100).fill(0).map((_, index) => { return { id: 'chat-' + index, content: '这是一段模拟的流式字符串数据。' + index, @@ -18,7 +18,7 @@ const initialChats = new Array(100).fill(0).map((_, index) => { }; }); -initialChats[20] = { +initialChatsList[20] = { id: 'chat-20', content: '这是一条通知消息' + 20, role: 'notification', @@ -32,7 +32,7 @@ export default () => { return ( <div style={{ background: theme.colorBgLayout }}> <ProChat - initialChats={initialChats} + initialChatsList={initialChatsList} chatItemRenderConfig={{ titleRender: (item, dom) => { if (item.placement === 'right') return dom; @@ -63,7 +63,7 @@ export default () => { </div> ); }, - actionsRender: false, + contentAfterRender: false, render: (item, dom, defaultDom) => { if (item?.originData?.role === 'notification') { return ( @@ -74,14 +74,14 @@ export default () => { justifyContent: 'center', }} > - <Alert message={item.message} type="info" showIcon /> + <Alert message={item.originData.message} type="info" showIcon /> </div> ); } return defaultDom; }, }} - request={async (messages) => { + sendMessageRequest={async (messages) => { const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; const mockResponse = new MockResponse(mockedData, 50); diff --git a/src/ProChat/demos/control.tsx b/src/components/ProChat/demos/control.tsx similarity index 67% rename from src/ProChat/demos/control.tsx rename to src/components/ProChat/demos/control.tsx index 1d87e414..9773c0bd 100644 --- a/src/ProChat/demos/control.tsx +++ b/src/components/ProChat/demos/control.tsx @@ -6,21 +6,21 @@ import { ChatMessage, ProChat } from '@ant-design/pro-chat'; import { useTheme } from 'antd-style'; import { useState } from 'react'; -import { MockResponse } from '../mocks/streamResponse'; +import { MockResponse } from './mocks/streamResponse'; export default () => { const theme = useTheme(); - const [chats, setChats] = useState<ChatMessage<Record<string, any>>[]>(); + const [chatList, setChatList] = useState<ChatMessage<Record<string, any>>[]>(); return ( <div style={{ background: theme.colorBgLayout }}> <ProChat - chats={chats} - onChatsChange={(chats) => { - setChats(chats); + chatList={chatList} + onChatsChange={(chatList) => { + setChatList(chatList); }} - request={async (messages) => { + sendMessageRequest={async (messages) => { const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; const mockResponse = new MockResponse(mockedData, 100); diff --git a/src/ProChat/demos/default.tsx b/src/components/ProChat/demos/default.tsx similarity index 70% rename from src/ProChat/demos/default.tsx rename to src/components/ProChat/demos/default.tsx index 83425bff..19240659 100644 --- a/src/ProChat/demos/default.tsx +++ b/src/components/ProChat/demos/default.tsx @@ -4,33 +4,18 @@ import { ProChat } from '@ant-design/pro-chat'; import { useTheme } from 'antd-style'; -import { example } from '../mocks/basic'; export default () => { const theme = useTheme(); return ( <div style={{ background: theme.colorBgLayout }}> <ProChat - request={'/api/chat'} - config={{ - ...example.config, - params: { - ...example.config.params, - userId: '123', - extra: 'extra', - }, - }} autocompleteRequest={async (value) => { if (value === '/') { return [{ value: '你可以帮助我列出问题吗?', label: '你可以帮助我列出问题吗?' }]; } return []; }} - inputAreaProps={{ - autoCompleteProps: { - placement: 'topRight', - }, - }} userMeta={{ extra: 'extra', }} diff --git a/src/components/ProChat/demos/draggable.tsx b/src/components/ProChat/demos/draggable.tsx new file mode 100644 index 00000000..0fadc0a6 --- /dev/null +++ b/src/components/ProChat/demos/draggable.tsx @@ -0,0 +1,27 @@ +/** + * iframe: 500 + */ +import { ProChat } from '@ant-design/pro-chat'; +import { Flex } from 'antd'; +import { MockResponse } from './mocks/streamResponse'; + +export default () => { + return ( + <div> + <Flex align={'center'} style={{ fontSize: 18 }}> + 客服助理 + </Flex> + <div style={{ flex: '1' }}> + <ProChat + sendMessageRequest={async (messages) => { + const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; + + const mockResponse = new MockResponse(mockedData); + + return mockResponse.getResponse(); + }} + /> + </div> + </div> + ); +}; diff --git a/src/ProChat/demos/helloMessage.tsx b/src/components/ProChat/demos/helloMessage.tsx similarity index 100% rename from src/ProChat/demos/helloMessage.tsx rename to src/components/ProChat/demos/helloMessage.tsx diff --git a/src/ProChat/demos/initialChats.tsx b/src/components/ProChat/demos/initialChats.tsx similarity index 72% rename from src/ProChat/demos/initialChats.tsx rename to src/components/ProChat/demos/initialChats.tsx index ca688244..82a49121 100644 --- a/src/ProChat/demos/initialChats.tsx +++ b/src/components/ProChat/demos/initialChats.tsx @@ -4,13 +4,13 @@ import { ProChat } from '@ant-design/pro-chat'; import { useTheme } from 'antd-style'; -import { example } from '../mocks/basic'; +import { example } from './mocks/basic'; export default () => { const theme = useTheme(); return ( <div style={{ background: theme.colorBgLayout }}> - <ProChat initialChats={example.chats} /> + <ProChat initialChatsList={example.chatList} /> </div> ); }; diff --git a/src/ProChat/demos/loading.tsx b/src/components/ProChat/demos/loading.tsx similarity index 75% rename from src/ProChat/demos/loading.tsx rename to src/components/ProChat/demos/loading.tsx index 4781485d..11ee9456 100644 --- a/src/ProChat/demos/loading.tsx +++ b/src/components/ProChat/demos/loading.tsx @@ -3,18 +3,17 @@ * compact: true */ import { ProChat } from '@ant-design/pro-chat'; -import { Button, Divider } from 'antd'; +import { Button, Divider, Flex } from 'antd'; import { useTheme } from 'antd-style'; import { useState } from 'react'; -import { Flexbox } from 'react-layout-kit'; export default () => { const [loading, setLoading] = useState(true); const theme = useTheme(); return ( - <Flexbox style={{ background: theme.colorBgLayout }}> - <Flexbox padding={16} gap={16} horizontal> + <Flex style={{ background: theme.colorBgLayout }} vertical> + <Flex gap={16}> <Button type={'primary'} onClick={() => { @@ -30,9 +29,9 @@ export default () => { > 开始加载 </Button> - </Flexbox> + </Flex> <Divider /> <ProChat loading={loading} /> - </Flexbox> + </Flex> ); }; diff --git a/src/ProChat/demos/meta.tsx b/src/components/ProChat/demos/meta.tsx similarity index 81% rename from src/ProChat/demos/meta.tsx rename to src/components/ProChat/demos/meta.tsx index 2b1b02d2..1a0a2068 100644 --- a/src/ProChat/demos/meta.tsx +++ b/src/components/ProChat/demos/meta.tsx @@ -1,9 +1,9 @@ /** * compact: true */ -import { chats } from '@/ProChat/mocks/threebody'; import { ProChat } from '@ant-design/pro-chat'; import { useTheme } from 'antd-style'; +import { chatList } from './mocks/threebody'; export default () => { const theme = useTheme(); @@ -11,13 +11,12 @@ export default () => { return ( <div style={{ background: theme.colorBgLayout }}> <ProChat - showTitle userMeta={{ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg', title: 'Ant Design', }} assistantMeta={{ avatar: '🛸', title: '三体世界', backgroundColor: '#67dedd' }} - initialChats={Object.values(chats.chats)} + initialChatsList={chatList.chatList} /> </div> ); diff --git a/src/ProChat/mocks/basic.ts b/src/components/ProChat/demos/mocks/basic.ts similarity index 97% rename from src/ProChat/mocks/basic.ts rename to src/components/ProChat/demos/mocks/basic.ts index 054d587e..e126b9b7 100644 --- a/src/ProChat/mocks/basic.ts +++ b/src/components/ProChat/demos/mocks/basic.ts @@ -1,5 +1,5 @@ export const example = { - chats: [ + chatList: [ { content: '昨天的当天是明天的什么?', createAt: 1697862242452, diff --git a/src/ProChat/mocks/fullFeature.ts b/src/components/ProChat/demos/mocks/fullFeature.ts similarity index 99% rename from src/ProChat/mocks/fullFeature.ts rename to src/components/ProChat/demos/mocks/fullFeature.ts index d25fe3cf..d946a4a4 100644 --- a/src/ProChat/mocks/fullFeature.ts +++ b/src/components/ProChat/demos/mocks/fullFeature.ts @@ -1,5 +1,5 @@ export const example = { - chats: [ + chatList: [ { content: '请展示完整的会话高亮效果?', createAt: 1697862242452, diff --git a/src/ProChat/mocks/sseResponse.ts b/src/components/ProChat/demos/mocks/sseResponse.ts similarity index 100% rename from src/ProChat/mocks/sseResponse.ts rename to src/components/ProChat/demos/mocks/sseResponse.ts diff --git a/src/ProChat/mocks/streamResponse.ts b/src/components/ProChat/demos/mocks/streamResponse.ts similarity index 100% rename from src/ProChat/mocks/streamResponse.ts rename to src/components/ProChat/demos/mocks/streamResponse.ts diff --git a/src/ProChat/mocks/threebody.ts b/src/components/ProChat/demos/mocks/threebody.ts similarity index 89% rename from src/ProChat/mocks/threebody.ts rename to src/components/ProChat/demos/mocks/threebody.ts index 2c8b8c61..2b6163fc 100644 --- a/src/ProChat/mocks/threebody.ts +++ b/src/components/ProChat/demos/mocks/threebody.ts @@ -1,13 +1,13 @@ -export const chats = { - chats: { - ZGxiX2p4: { +export const chatList = { + chatList: [ + { content: '我对三体世界说话。', createAt: 1697862242452, id: 'ZGxiX2p4', role: 'user', updateAt: 1697862243540, }, - Sb5pAzLL: { + { content: '保持静默,不要回答,不要回答。', createAt: 1697862247302, id: 'Sb5pAzLL', @@ -16,7 +16,7 @@ export const chats = { updateAt: 1697862249387, model: 'gpt-3.5-turbo', }, - }, + ], config: { model: 'gpt-3.5-turbo', params: { diff --git a/src/ProChat/demos/modal.tsx b/src/components/ProChat/demos/modal.tsx similarity index 100% rename from src/ProChat/demos/modal.tsx rename to src/components/ProChat/demos/modal.tsx diff --git a/src/ProChat/demos/no-stream.tsx b/src/components/ProChat/demos/no-stream.tsx similarity index 93% rename from src/ProChat/demos/no-stream.tsx rename to src/components/ProChat/demos/no-stream.tsx index 88d8e721..652a2580 100644 --- a/src/ProChat/demos/no-stream.tsx +++ b/src/components/ProChat/demos/no-stream.tsx @@ -19,11 +19,10 @@ export default () => { return ( <div style={{ background: theme.colorBgLayout, height: '100vh' }}> <ProChat - request={async (messages) => { + sendMessageRequest={async (messages) => { const text = await delay( `这是一条模拟非流式输出的消息的消息。本次会话传入了${messages.length}条消息`, ); - return new Response(text); }} style={{ height: '100vh' }} diff --git a/src/ProChat/demos/renderInputArea.tsx b/src/components/ProChat/demos/renderInputArea.tsx similarity index 100% rename from src/ProChat/demos/renderInputArea.tsx rename to src/components/ProChat/demos/renderInputArea.tsx diff --git a/src/components/ProChat/demos/request.tsx b/src/components/ProChat/demos/request.tsx new file mode 100644 index 00000000..f677fd38 --- /dev/null +++ b/src/components/ProChat/demos/request.tsx @@ -0,0 +1,36 @@ +/** + * compact: true + * title: 流式请求 + */ +import { genUUID } from '@/utils/uuid'; +import { ChatMessage, ProChat } from '@ant-design/pro-chat'; +import { useTheme } from 'antd-style'; + +export default () => { + const theme = useTheme(); + + return ( + <div style={{ background: theme.colorBgLayout }}> + <ProChat + locale="en-US" + actionsRender={() => null} + inputAreaProps={{ + rows: 1, + }} + sendMessageRequest={() => { + return new Promise((resolve) => { + setTimeout(() => { + resolve({ + content: 'Hello, I am a robot', + role: 'assistant', + createAt: Date.now(), + updateAt: Date.now(), + id: genUUID(), + }); + }, 4000); + }) as Promise<ChatMessage>; + }} + /> + </div> + ); +}; diff --git a/src/components/ProChat/demos/sse.tsx b/src/components/ProChat/demos/sse.tsx new file mode 100644 index 00000000..3e9ade5f --- /dev/null +++ b/src/components/ProChat/demos/sse.tsx @@ -0,0 +1,62 @@ +/** + * compact: true + * title: SSE + */ +import { ProChat } from '@ant-design/pro-chat'; + +import { useTheme } from 'antd-style'; + +export default () => { + const theme = useTheme(); + return ( + <div style={{ background: theme.colorBgLayout }}> + <ProChat + sendMessageRequest={async () => { + const encoder = new TextEncoder(); + const dataArray = [ + `{"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "苹"}, "index": 0, "finish_reason": null}]}`, + `{"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "果"}, "index": 0, "finish_reason": null}]}`, + `{"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "公司"}, "index": 0, "finish_reason": null}]}`, + `{"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "是"}, "index": 0, "finish_reason": null}]}`, + `{"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "一"}, "index": 0, "finish_reason": null}]}`, + `{"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "家"}, "index": 0, "finish_reason": null}]}`, + `{"id":"chatcmpl-6w****KZb6hx****RzIghUz****Qy","object":"chat.completion.chunk","task":[{}],"created":1703582861554,"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"科技"},"index":0,"finish_reason":null}]}`, + `{"id": "chatcmpl-6w****KZb6hx****RzIghUz****Qy", "object": "chat.completion.chunk", "created": 1703582861554, "model": "gpt-3.5-turbo-0301", "choices": [{"delta": {"content": "公司"}, "index": 0, "finish_reason": "complete"}]}`, + ]; + const readableStream = new ReadableStream({ + async start(controller) { + const push = () => { + setTimeout(() => { + const data = dataArray.shift(); + if (data) { + controller.enqueue(encoder.encode(data)); + push(); + } else { + controller.close(); + } + }, 300); + }; + push(); + }, + }); + return new Response(readableStream); + }} + transformToChatMessage={async (oldChatMessage, current) => { + if (!current.currentContent) { + return oldChatMessage; + } + try { + JSON.parse(current.currentContent); + } catch (e) { + console.log(current.currentContent, e); + } + return { + ...oldChatMessage, + content: + current.preContent + JSON.parse(current.currentContent).choices[0].delta.content, + }; + }} + /> + </div> + ); +}; diff --git a/src/ProChat/demos/toBottomConfig.tsx b/src/components/ProChat/demos/toBottomConfig.tsx similarity index 91% rename from src/ProChat/demos/toBottomConfig.tsx rename to src/components/ProChat/demos/toBottomConfig.tsx index feaf91e7..40bf7522 100644 --- a/src/ProChat/demos/toBottomConfig.tsx +++ b/src/components/ProChat/demos/toBottomConfig.tsx @@ -5,7 +5,7 @@ import { ProChat } from '@ant-design/pro-chat'; import { useTheme } from 'antd-style'; import { Button } from 'antd'; -import { example } from '../mocks/fullFeature'; +import { example } from './mocks/fullFeature'; export default () => { const theme = useTheme(); @@ -15,7 +15,7 @@ export default () => { <ProChat displayMode={'docs'} style={{ height: '100%' }} - chats={example.chats} + chatList={example.chatList} config={example.config} backToBottomConfig={{ render: (_, scrollToBottom) => { diff --git a/src/ProChat/demos/use-ref.tsx b/src/components/ProChat/demos/use-ref.tsx similarity index 83% rename from src/ProChat/demos/use-ref.tsx rename to src/components/ProChat/demos/use-ref.tsx index 5a837154..a7b35127 100644 --- a/src/ProChat/demos/use-ref.tsx +++ b/src/components/ProChat/demos/use-ref.tsx @@ -19,19 +19,19 @@ export default () => { type={'primary'} onClick={() => { if (!proChatRef.current) return; - const messages = proChatRef.current.getChatMessages(); + const messages = proChatRef.current.getChatList(); const { id, content } = messages[0] || {}; proChatRef.current.scrollToBottom?.(); if (!id) return; - proChatRef.current.setMessageContent(id, content + '👋'); + proChatRef.current.sendMessage(content + '👋'); }} > 修改首条消息,添加表情:👋 </Button> <ProChat - initialChats={example.chats} + initialChatsList={example.chatList} chatRef={proChatRef} - request={async (messages) => { + sendMessageRequest={async (messages) => { const mockedData: string = `这是一段模拟的流式字符串数据。本次会话传入了${messages.length}条消息`; const mockResponse = new MockResponse(mockedData, 100); diff --git a/src/ProChat/index.en-US.md b/src/components/ProChat/index.en-US.md similarity index 53% rename from src/ProChat/index.en-US.md rename to src/components/ProChat/index.en-US.md index 1fa78fb1..559cd433 100644 --- a/src/ProChat/index.en-US.md +++ b/src/components/ProChat/index.en-US.md @@ -12,136 +12,32 @@ By returning a streaming response request, achieve the typewriter output effect <code src="./demos/request.tsx">Streaming requests</code> -<code src="./demos/default.tsx"></code> - -## SSE Data stream processing - -For cases where the backend directly returns Server Side Event data, the frontend needs to encapsulate ` ReadableStream` themselves - -Generally speaking, a third-party solution can be directly adopted, such as parsing Vercel's AI library. For details, please refer to [Document - What is Streaming Output](../guide/sse) - -<code src="./demos/sse.tsx"></code> - -## Big data rendering - -<code src="./demos/bigData.tsx">Stream requests</code> - -## Non streaming mode - -In non streaming mode, all session messages will be returned at once, which is suitable for scenarios with low message volume. If the message volume is large, the user experience may be poor. - -<code src="./demos/no-stream.tsx" description='The message will return after waiting for 5 seconds'>Non streams requests</code> - -## Controlled mode - -Implement controlled chat session messages using `chats` and `onChatsChange` - -<code src="./demos/control.tsx"></code> - -## Set initial session messages - -Use `initialChats` to set the initial session message. - -<code src="./demos/initialChats.tsx"></code> - -## Set greeting messages - -Set greeting messages through `helloMessage`. - -<code src="./demos/helloMessage.tsx"></code> - -## Loading - -Use the loading field to control the loading status. Suitable for use when loading data for the first time. - -<code src="./demos/loading.tsx">Set loading to add data acquisition status</code> - -## Document Mode - -OpenAI like document mode, using the `doc` field to control document mode. Suitable for scenarios where documents need to be displayed. - -<code src="./demos/doc-mode.tsx"></code> - -## Specify the avatars and names of both parties in the conversation - -ProChat uses `meta` to represent the avatars, names, and other information of both parties in the conversation. Set the assistant's avatar and name to use `assistantMeta` , and set the user's avatar and name to use `userMeta`. Use `showTitle` to display the name. - -<code src="./demos/meta.tsx"></code> - -## Custom Actions - -<code src="./demos/actions.tsx"></code> - -## Customize the [Back to Bottom] button - -You can customize the [Back to Bottom] button to varying degrees through the backToBottomConfiguration parameter - -<code src="./demos/toBottomConfig.tsx"></code> - -## Custom input area - -Sometimes you may feel that the default input area is not user-friendly enough, or if you have some custom input module requirements, you can use renderInputArea for custom input. If you do not need an input area, you can pass in `renderInputArea={()=>null}`。 - -Here is a demonstration case that supports image uploading. Try uploading files and submitting them. - -<code src="./demos/renderInputArea.tsx"></code> - -## Suspended window usage - -Using the `ProChat` component as a session solution - -<code src="./demos/draggable.tsx"></code> - -## Programming operation control - -### chatRef - -In some simple scenarios, using `chatRef` can obtain `ProChatInstance` to control ProChat behavior at the same level as the component. - -<code src="./demos/use-ref.tsx"></code> - -### useProChat - -For some complex scenarios, `ProChatProvider` and `useProChat` hooks can be used to achieve programmatic message sending, retrieval, deletion, and other behaviors. - -<code src="./demos/use-pro-chat.tsx"></code> - -:::warning - UseProChat hooks must be used in the `ProChatProvider` before they can be used. -::: - :::warning -All initialization props such as `initialChats` need to be moved from `ProChat` to `ProChatProvider` +All initialization props such as `initialChatsList` need to be moved from `ProChat` to `ProChatProvider` ::: -## International - -<code src="./demos/i18n.tsx"></code> - ## APIs | Parameter | description | type | default | | --- | --- | --- | --- | -| showTitle | Is the title displayed | Boolean | - | | style | style | CSSProperties | - | | className | Main className | string | - | | chatRef | Chat references, used for manipulating data | ProChatChatReference | - | | loading | Loading or not | boolean | - | -| initialChats | Initial chat history | ChatPropsState\['chats'] | - | +| initialChatsList | Initial chat history | ChatPropsState\['chatList'] | - | | userMeta | User Metadata | MetaData | - | | assistantMeta | Assistant metadata | MetaData | - | | config | Language Model Role Setting | ModelConfig | - | -| chats | Chat history | ChatMessage[] | - | -| onChatsChange | Chat record change callback function, | (chats: ChatMessage[]) => void | chat | +| chatList | Chat history | ChatMessage[] | - | +| onChatsChange | Chat record change callback function, | (chatList: ChatMessage[]) => void | chat | | displayMode | Display mode, default to chat | 'chat' \| 'docs' | - | | helloMessage | Welcome message | string\| ReactNode | - | | request | Request message | string \| ChatRequest | - | | onResetMessage | Reset message callback function | `() => Promise<void>` | - | -| itemShouldUpdate | Determine if each sub item needs to be re evaluated render | `(prevProps: ChatListItemProps, nextProps: ChatListItemProps) => boolean` | - | | genMessageId | The function for generating message IDs is only needed if your project needs persistence | \`() => Promise<string>\`\` | nanoid | | autocompleteRequest | Request function for obtaining the auto complete list | \`(value: string) => Promise<{ value: string; label?: string; }\[]>\`\` | - | | placeholder | Input box placeholder | string | - | @@ -156,7 +52,7 @@ All initialization props such as `initialChats` need to be moved from `ProChat` | Parameter | description | type | default | | --- | --- | --- | --- | -| getChats | Get the current chat list object | () => ChatStore['chats'] | - | +| getChats | Get the current chat list object | () => ChatStore['chatList'] | - | | getChatMessages | Get the current chat message list | () => ChatMessage[] | - | | setMessageContent | Set message content | (id: string, content: string) => void | - | | setMessageValue | Modify a certain property of a message | (id: string, key: keyof ChatMessage<Record<string, any>>, value: any) => void | - | diff --git a/src/ProChat/index.md b/src/components/ProChat/index.md similarity index 77% rename from src/ProChat/index.md rename to src/components/ProChat/index.md index 4d20f4ae..905a0743 100644 --- a/src/ProChat/index.md +++ b/src/components/ProChat/index.md @@ -12,27 +12,9 @@ description: a Chat Solution <code src="./demos/request.tsx"></code> -<code src="./demos/default.tsx"></code> - -## SSE 数据流处理 - -对于后台直接返回 Server Side Event 数据的情况需要前端自己封装 `ReadableStream` - -一般来说直接采用三方方案,例如 Vercel 的 AI 库进行解析即可,详情见 [文档 - 什么是流式输出](../guide/sse) - <code src="./demos/sse.tsx"></code> -## 大数据渲染 - -<code src="./demos/bigData.tsx"></code> - -## 非流式模式 - -非流式模式下,会话消息会一次性全部返回,适用于消息量较少的场景。如果消息量较大,可能用户体验较差。 - -<code src="./demos/no-stream.tsx"></code> - -## 受控模式 +# 受控模式 使用 `chats` 和 `onChatsChange` 实现 chats 会话消息的受控 @@ -60,8 +42,6 @@ description: a Chat Solution 类 OpenAI 的文档模式,使用 `doc` 字段控制文档模式。适用于需要展示文档的场景。 -<code src="./demos/doc-mode.tsx"></code> - ## 指定会话双方的头像、名称 ProChat 使用 `meta` 来表意会话双方的头像、名称等信息。设定助手的头像、名称使用 `assistantMeta`,设定用户的头像、名称使用 `userMeta`。 使用 `showTitle` 显示名称。 @@ -92,56 +72,24 @@ ProChat 使用 `meta` 来表意会话双方的头像、名称等信息。设定 <code src="./demos/draggable.tsx"></code> -## 编程式操作控制 - -### chatRef - -在一些简单场景下,使用 `chatRef` 可以获取 `ProChatInstance` ,以在组件同级控制 ProChat 行为。 - -<code src="./demos/use-ref.tsx"></code> - -### useProChat - -针对一些复杂场景,可以搭配 `ProChatProvider` 和 `useProChat` hooks, 实现编程式消息发送、获取、删除等行为。 - -<code src="./demos/use-pro-chat.tsx"></code> - -:::warning - -useProChat hooks 必须在包裹 `ProChatProvider` 后方可使用。 - -::: - -:::warning - -所有 `initialChats` 等初始化 props 需要从 `ProChat` 移动至 `ProChatProvider` - -::: - -## 国际化 - -<code src="./demos/i18n.tsx"></code> - ## APIs | 参数 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | -| showTitle | 是否显示标题 | Boolean | - | | style | 样式 | CSSProperties | - | | className | 主类名 | string | - | | chatRef | 聊天引用,用于操作数据 | ProChatChatReference | - | | loading | 是否加载中 | boolean | - | -| initialChats | 初始聊天记录 | ChatPropsState\['chats'] | - | +| initialChatsList | 初始聊天记录 | ChatPropsState\['chatList'] | - | | userMeta | 用户元数据 | MetaData | - | | assistantMeta | 助手元数据 | MetaData | - | | config | 语言模型角色设定 | ModelConfig | - | -| chats | 聊天记录 | ChatMessage[] | - | -| onChatsChange | 聊天记录变化回调函数, | (chats: ChatMessage[]) => void | chat | +| chatList | 聊天记录 | ChatMessage[] | - | +| onChatsChange | 聊天记录变化回调函数, | (chatList: ChatMessage[]) => void | chat | | displayMode | 显示模式,默认是 chat | 'chat' \| 'docs' | - | | helloMessage | 欢迎消息 | string\| ReactNode | - | | request | 请求消息 | string \| ChatRequest | - | | onResetMessage | 重置消息回调函数 | `() => Promise<void>` | - | -| itemShouldUpdate | 判断每个子项是否需要重新 render | `(prevProps: ChatListItemProps, nextProps: ChatListItemProps) => boolean` | - | | genMessageId | 生成消息 id 的函数,如果你的项目需要持久化时才需要使用 | \`() => Promise<string>\`\` | nanoid | | autocompleteRequest | 获取自动完成列表的请求函数 | \`(value: string) => Promise<{ value: string; label?: string; }\[]>\`\` | - | | placeholder | 输入框占位符 | string | - | @@ -156,7 +104,7 @@ useProChat hooks 必须在包裹 `ProChatProvider` 后方可使用。 | 属性 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | -| getChats | 获取当前聊天列表对象 | () => ChatStore['chats'] | - | +| getChats | 获取当前聊天列表对象 | () => ChatStore['chatList'] | - | | getChatMessages | 获取当前聊天消息列表 | () => ChatMessage[] | - | | setMessageContent | 设置消息内容 | (id: string, content: string) => void | - | | setMessageValue | 修改消息的某个属性 | (id: string, key: keyof ChatMessage<Record<string, any>>, value: any) => void | - | diff --git a/src/components/ProChat/index.tsx b/src/components/ProChat/index.tsx new file mode 100644 index 00000000..c36c2a01 --- /dev/null +++ b/src/components/ProChat/index.tsx @@ -0,0 +1,543 @@ +import { + CSSProperties, + MutableRefObject, + ReactNode, + useEffect, + useImperativeHandle, + useMemo, +} from 'react'; + +import RcResizeObserver from 'rc-resize-observer'; +import { useRef, useState } from 'react'; + +import { useRefFunction } from '@/hooks/useRefFunction'; +import { BackToBottmButton, BackToBottmButtonProps } from '@/index'; +import { ProChatLocale } from '@/locale'; +import { ChatMessage } from '@/types'; +import { Flex } from 'antd'; +import cx from 'classnames'; +import { ProChatMetaData, ProChatUserProfile, useChatList } from '../../hooks/useChatList'; +import { ModelConfig } from '../../types/config'; +import ChatList, { ChatListProps } from '../ChatList'; +import ChatInputArea, { ChatInputAreaProps } from '../ProChatInputArea'; +import { ProChatActionBarProps } from '../ProChatInputArea/ActionBar'; +import { MentionsTextAreaProps } from '../ProChatInputArea/AutoCompleteTextArea'; + +export type ChatListRequest<Params> = (params: Params & ModelConfig) => Promise<ChatMessage[]>; + +/** + * Represents an instance of the ProChat component. + * @template T - The type of additional data associated with each chat message. + */ +export interface ProChatInstance<T = Record<string, any>> { + /** + * Retrieves the current chat message list. + * @returns {ChatMessage[]} The array of chat messages. + */ + getChatList: () => ChatMessage[]; + + /** + * Modifies a specific property of a message. + * @param {string} id - The ID of the message. + * @param {ChatMessage<T>} content - The updated content of the message. + * @returns {void} + */ + setMessageItem: (id: string, content: ChatMessage<T>) => void; + + /** + * Scrolls to the bottom of the chat. + * @returns {void} + */ + scrollToBottom?: () => void; + + /** + * Retrieves the message ID generated by the current loading state. + * @returns {ChatMessage<T> | undefined} The message ID or undefined if there is no loading message. + */ + getChatLoadingMessage: () => ChatMessage<T> | undefined; + + /** + * Stops generating new chat messages. + * @returns {void} + */ + stopGenerateMessage: () => void; + + /** + * Clears all chat messages. + * @returns {void} + */ + clearMessage: () => void; + + /** + * Sends a chat message. + * @param {ChatInputAreaProps['onMessageSend']} - The function to handle the message send event. + * @returns {void} + */ + sendMessage: ChatInputAreaProps['onMessageSend']; + + /** + * genMessageRecord 生成消息对象 + * @param message + * @returns + */ + genMessageRecord: ( + message: Partial<ChatMessage<T>>, + userType: 'assistant' | 'user', + ) => ChatMessage<T>; +} + +export type ProChatChatReference<T = Record<string, any>> = MutableRefObject< + ProChatInstance<T> | undefined +>; + +/** + * ProChatProps 是 ProChat 组件的属性类型定义。 + * @template T - 聊天记录的数据类型 + */ +/** + * Represents the props for the ProChat component. + * + * @template T - The type of the chat message. + * @template Params - The type of the chat parameters. + */ +export interface ProChatProps< + T extends Record<string, any> = Record<string, any>, + Params extends Record<string, any> = Record<string, any>, +> { + /** + * 聊天的参数,没次发起请求都会带入 + */ + params?: Params; + + /** + * The initial list of chat messages. + */ + initialChatsList?: ChatMessage<T>[]; + + /** + * The configuration for the language model. + */ + config?: ModelConfig; + + /** + * The list of chat messages. + */ + chatList?: ChatMessage<T>[]; + + /** + * @todo + */ + beforeSendMessage?: (message: ChatMessage<T>) => Promise<ChatMessage<T>>; + + /** + * The DOM element to render before the chat list. + */ + beforeChatListDom?: React.ReactNode; + + /** + * The callback function that is called when the chat list changes. + * + * @param chatList - The updated chat list. + */ + onChatsChange?: (chatList: ChatMessage<T>[]) => void; + + /** + * The request for fetching the chat list. + */ + request?: ChatListRequest<Params>; + + /** + * The request for sending a chat message. + * + * @param message - The chat message to send. + * @param params - The parameters for the chat. + * @returns A promise that resolves to the response or the sent chat message. + */ + sendMessageRequest?: ( + message: ChatMessage<T>[], + params: Params & ModelConfig, + ) => Promise<Response | ChatMessage<T>>; + + /** + * The function to transform a pre-chat message to a chat message. + * + * @param preChatMessage - The pre-chat message. + * @param currentContent - The current content of the chat message. + * @returns A promise that resolves to the transformed chat message. + */ + transformToChatMessage?: ( + preChatMessage: ChatMessage, + currentContent: { preContent: React.ReactNode; currentContent: string }, + ) => Promise<ChatMessage<T>>; + + /** + * The user profile for the chat. + */ + userProfile?: ProChatUserProfile; + + /** + * The hello message to display. + */ + helloMessage?: ReactNode; + + /** + * The function to generate a message ID. + * + * @param message - The chat message. + * @param parentId - The ID of the parent message. + * @returns The generated message ID. + */ + genMessageId?: (message: ChatMessage<T>[], parentId: string) => Promise<string>; + + /** + * The function to reset the chat messages. + */ + onResetMessage?: () => Promise<void>; + + /** + * The request for fetching the autocomplete list. + * + * @param value - The value to autocomplete. + * @returns A promise that resolves to the autocomplete list. + */ + autocompleteRequest?: (value: string) => Promise< + { + value: string; + label?: string; + }[] + >; + + /** + * The placeholder text for the input area. + */ + placeholder?: string; + + /** + * The localization settings for the chat. + */ + locale?: ProChatLocale; + + /** + * The props for the input area. + */ + inputAreaProps?: MentionsTextAreaProps; + + /** + * The function to render extra content for each chat message. + * + * @param message - The chat message. + * @param type - The type of the message ('assistant' or 'user'). + * @returns The rendered React node. + */ + messageItemExtraRender?: (message: ChatMessage<T>, type: 'assistant' | 'user') => React.ReactNode; + + /** + * The function to render actions for the chat messages. + * + * @param defaultDoms - The default DOM elements. + * @returns The rendered React node. + */ + actionsRender?: ProChatActionBarProps['actionsRender']; + + /** + * The loading state of the chat. + */ + loading?: boolean; + + /** + * The configuration for rendering chat items. + */ + chatItemRenderConfig?: ChatListProps['chatItemRenderConfig']; + + /** + * The reference to the ProChat component. + */ + chatRef?: ProChatChatReference; + + /** + * The configuration for the back to bottom button. + */ + backToBottomConfig?: BackToBottmButtonProps; + + /** + * The styles for the component. + */ + style?: CSSProperties; + + /** + * The user's metadata. + */ + userMeta?: ProChatMetaData; + + /** + * The assistant's metadata. + */ + assistantMeta?: ProChatMetaData; + + /** + * The CSS class names for the component. + */ + classNames?: { + chatList?: string; + chatInputAction?: string; + chatInputArea?: string; + chatListItem?: string; + chatListItemContent?: string; + chatListItemTitle?: string; + chatListItemExtra?: string; + chatListItemAvatar?: string; + }; + + /** + * The CSS styles for the component. + */ + styles?: { + chatList?: CSSProperties; + chatInputAction?: CSSProperties; + chatInputArea?: CSSProperties; + chatSendButton?: CSSProperties; + chatSendAreaStyle?: CSSProperties; + chatListItem?: CSSProperties; + chatListItemContent?: CSSProperties; + chatListLeftItemContent?: CSSProperties; + chatListRightItemContent?: CSSProperties; + chatListItemTitle?: CSSProperties; + chatListItemExtra?: CSSProperties; + chatListItemAvatar?: CSSProperties; + }; + + /** + * The CSS class name for the component. + */ + className?: string; + + /** + * The function to render the input area. + * + * @param defaultDom - The default DOM element. + * @param onMessageSend - The callback function for sending a message. + * @param onClearAllHistory - The callback function for clearing all history. + * @returns The rendered React element. + */ + inputAreaRender?: ChatInputAreaProps['inputAreaRender']; + + /** + * The function to render the input box. + * + * @param defaultDom - The default DOM element. + * @param onMessageSend - The callback function for sending a message. + * @param props - The props for the input box. + */ + inputRender?: ChatInputAreaProps['inputRender']; + + /** + * The function to render the send button. + * + * @param defaultDom - The default DOM element. + * @param defaultProps - The default props. + */ + sendButtonRender?: ChatInputAreaProps['sendButtonRender']; +} + +/** + * 对话组件的属性接口 + */ + +export function ProChat< + T extends Record<string, any> = Record<string, any>, + Params extends Record<string, any> = Record<string, any>, +>(props: ProChatProps<T, Params>) { + const { + style, + className, + chatItemRenderConfig, + backToBottomConfig, + inputRender, + inputAreaRender, + inputAreaProps, + chatRef, + userProfile, + sendButtonRender, + placeholder, + styles, + request, + onChatsChange, + userMeta, + assistantMeta, + classNames, + sendMessageRequest, + } = props; + const chatListContainerRef = useRef<HTMLDivElement>(null); + const areaHtml = useRef<HTMLDivElement>(null); + const [isInitRender, setIsRender] = useState(false); + const [height, setHeight] = useState('100%' as string | number); + + useEffect(() => { + setIsRender(true); + }, []); + + const { + chatList, + loadingMessage, + loading, + setMessageItem, + stopGenerateMessage, + clearMessage, + sendMessage, + genMessageRecord, + } = useChatList({ + chatList: props.chatList, + loading: props.loading, + initialChatList: props.initialChatsList, + onChatsChange: onChatsChange ? onChatsChange : undefined, + helloMessage: <>{props.helloMessage || '让我们开始对话吧'}</>, + userProfile, + request: request + ? () => { + return request({ + ...props.config, + ...props.params, + }); + } + : undefined, + transformToChatMessage: props.transformToChatMessage, + sendMessageRequest: (message: ChatMessage<T>[]) => + sendMessageRequest + ? sendMessageRequest(message, { + ...props.config, + ...props.params, + }) + : undefined, + }); + + const getChatLoadingMessage = useRefFunction(() => loadingMessage); + + const getChatList = useRefFunction(() => { + return chatList; + }); + + useImperativeHandle( + chatRef, + () => { + return { + stopGenerateMessage, + clearMessage, + sendMessage, + getChatList, + getChatLoadingMessage, + setMessageItem, + genMessageRecord, + scrollToBottom: () => { + (chatListContainerRef as any)?.current?.scrollTo({ + behavior: 'smooth', + left: 0, + top: chatListContainerRef.current?.scrollHeight || 99999, + }); + }, + } as ProChatInstance<T>; + }, + [chatRef], + ); + + const scrollToBottom = useMemo(() => { + if (chatListContainerRef.current) { + return () => { + chatListContainerRef.current.scrollTo({ + behavior: 'smooth', + left: 0, + top: chatListContainerRef.current.scrollHeight, + }); + }; + } + return () => {}; + }, [chatListContainerRef]); + + useEffect(() => { + if (chatListContainerRef.current) { + chatListContainerRef.current.scrollTo({ + behavior: 'smooth', + left: 0, + top: chatListContainerRef.current.scrollHeight, + }); + } + }, [loadingMessage]); + + const backBottomDom = useMemo(() => { + if (!isInitRender) return null; + return ( + <BackToBottmButton + target={() => chatListContainerRef.current as HTMLElement} + {...backToBottomConfig} + onClick={scrollToBottom} + /> + ); + }, [isInitRender]); + + return ( + <RcResizeObserver + onResize={(e) => { + if (e.height !== height) { + setHeight(e.height - 1); + } + }} + > + <Flex + className={cx(className)} + style={{ + maxHeight: '100vh', + height: '100%', + position: 'relative', + ...style, + }} + vertical + > + {props.beforeChatListDom} + <ChatList + chatListRef={chatListContainerRef} + chatList={chatList} + userMeta={userMeta} + assistantMeta={assistantMeta} + loading={loading} + loadingMessage={loadingMessage} + chatItemRenderConfig={chatItemRenderConfig} + style={{ + ...styles?.chatList, + height: (height as number) - (areaHtml.current?.clientHeight || 0) || '100%', + }} + className={classNames?.chatList} + chatListItemClassName={classNames?.chatListItem} + chatListItemContentClassName={classNames?.chatListItem} + chatListItemTitleClassName={classNames?.chatListItemTitle} + chatListItemExtraClassName={classNames?.chatListItemExtra} + chatListItemAvatarClassName={classNames?.chatListItemAvatar} + chatListItemStyle={styles?.chatListItem} + chatListLeftItemContentStyle={styles?.chatListLeftItemContent} + chatListRightItemContentStyle={styles?.chatListRightItemContent} + chatListItemContentStyle={styles?.chatListItemContent} + chatListItemTitleStyle={styles?.chatListItemTitle} + chatListItemExtraStyle={styles?.chatListItemExtra} + chatListItemAvatarStyle={styles?.chatListItemAvatar} + /> + {backBottomDom} + <ChatInputArea + className={classNames?.chatInputArea} + typing={!!loadingMessage?.id} + placeholder={placeholder || '请输入消息...'} + onMessageSend={sendMessage} + stopGenerateMessage={stopGenerateMessage} + clearMessage={clearMessage} + areaRef={areaHtml} + sendButtonStyle={styles?.chatSendButton} + actionsRender={props.actionsRender} + sendButtonRender={sendButtonRender} + inputAreaRender={inputAreaRender} + inputRender={inputRender} + inputAreaProps={inputAreaProps} + actionStyle={styles?.chatInputAction} + sendAreaStyle={styles?.chatSendAreaStyle} + areaStyle={styles?.chatInputArea} + /> + </Flex> + </RcResizeObserver> + ); +} diff --git a/src/components/ProChatAvatar/index.tsx b/src/components/ProChatAvatar/index.tsx new file mode 100644 index 00000000..79f44ea4 --- /dev/null +++ b/src/components/ProChatAvatar/index.tsx @@ -0,0 +1,91 @@ +import { Avatar, theme, type AvatarProps } from 'antd'; + +import cx from 'classnames'; +import { isEmoji } from './isEmoji'; + +export interface ProChatAvatarProps extends AvatarProps { + /** + * @description The URL or base64 data of the avatar image + */ + avatar?: string; + /** + * @description The background color of the avatar + */ + background?: string; + /** + * @description The shape of the avatar + * @default 'circle' + */ + shape?: 'circle' | 'square'; + /** + * @description The size of the avatar in pixels + * @default 40 + */ + size?: number; + /** + * @description The title text to display if avatar is not provided + */ + title?: string; + + loading?: boolean; +} + +/** + * @module Avatar + * @description 头像组件,用于显示用户头像信息 + * @exports Avatar + * @component + * + * @param {string} [avatar] - 头像图片的URL或base64数据 + * @param {string} [background] - 头像的背景颜色 + * @param {'circle' | 'square'} [shape='circle'] - 头像的形状,默认为圆形 + * @param {number} [size=40] - 头像的尺寸(像素) + * @param {string} [title] - 如果未提供头像,则显示的标题文本 + * @param {string} [className] - 自定义的CSS类名 + * @param {Function} [onClick] - 点击头像时触发的回调函数 + * @param {Object} [style] - 自定义的行内样式 + * @param {Object} [props] - 其他传递给AntAvatar组件的属性 + * + */ +export const ProChatAvatar: React.FC<ProChatAvatarProps> = ({ + className, + avatar, + title, + size = 40, + shape = 'circle', + onClick, + prefixCls, + style, + ...props +}) => { + const { hashId } = theme.useToken(); + const isImage = Boolean( + avatar && ['/', 'http', 'data:'].some((index) => avatar.startsWith(index)), + ); + const isBase64 = Boolean(avatar?.startsWith('data')); + + if (typeof avatar === 'string' && isEmoji(String(avatar))) { + return <div className={cx(`${prefixCls}-emoji`, hashId)}>{avatar}</div>; + } + + const text = String(isImage ? title : avatar); + + const avatarProps = { + className: cx(className, `${prefixCls}`, hashId), + shape: shape, + size, + style: onClick ? style : { cursor: 'default', ...style }, + }; + + return isImage ? ( + <Avatar + src={isBase64 ? avatar : <img src={avatar} alt="avatar" />} + {...avatarProps} + {...props} + /> + ) : ( + <Avatar {...avatarProps} {...props}> + {text?.toUpperCase().slice(0, 2)} + </Avatar> + ); +}; diff --git a/src/components/ProChatAvatar/isEmoji.ts b/src/components/ProChatAvatar/isEmoji.ts new file mode 100644 index 00000000..809163ba --- /dev/null +++ b/src/components/ProChatAvatar/isEmoji.ts @@ -0,0 +1,6 @@ +const emojiRegx = + /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/; + +export const isEmoji = (str: string) => { + return emojiRegx.test(str); +}; diff --git a/src/components/ProChatInputArea/ActionBar.tsx b/src/components/ProChatInputArea/ActionBar.tsx new file mode 100644 index 00000000..8fc654ec --- /dev/null +++ b/src/components/ProChatInputArea/ActionBar.tsx @@ -0,0 +1,54 @@ +import { ProChatLocale, gLocaleObject } from '@/locale'; +import { DeleteFilled } from '@ant-design/icons'; +import { Flex, Popconfirm, theme } from 'antd'; +import cx from 'classnames'; + +export type ProChatActionBarProps = { + className?: string; + prefixClass?: string; + clearMessage: () => void; + actionsRender: (defaultDoms: React.ReactNode[], props: ProChatActionBarProps) => React.ReactNode; + locale?: ProChatLocale; + style?: React.CSSProperties; +}; + +export const ProChatActionBar: React.FC<ProChatActionBarProps> = (props) => { + const { className, prefixClass, clearMessage, actionsRender, locale, style } = props; + const { hashId } = theme.useToken(); + const defaultDoms = [ + <Popconfirm + title={gLocaleObject(locale).clearModalTitle} + okButtonProps={{ danger: true }} + okText={gLocaleObject(locale).clearDialogue} + key={'clear'} + onConfirm={() => { + clearMessage(); + }} + > + <DeleteFilled + className={cx(`${prefixClass}-item`, `${prefixClass}-clear-icon`, hashId)} + title={gLocaleObject(locale).clearCurrentDialogue} + style={{ + cursor: 'pointer', + }} + /> + </Popconfirm>, + ]; + + const renderDoms = actionsRender ? actionsRender?.(defaultDoms, props) : defaultDoms; + + if (!renderDoms) return null; + return ( + <Flex + align={'center'} + style={{ + flexDirection: 'row-reverse', + ...style, + }} + className={cx(className, prefixClass, hashId)} + gap={8} + > + {renderDoms} + </Flex> + ); +}; diff --git a/src/components/ProChatInputArea/AutoCompleteTextArea.tsx b/src/components/ProChatInputArea/AutoCompleteTextArea.tsx new file mode 100644 index 00000000..77e91280 --- /dev/null +++ b/src/components/ProChatInputArea/AutoCompleteTextArea.tsx @@ -0,0 +1,74 @@ +import { Input } from 'antd'; +import { TextAreaProps } from 'antd/es/input'; + +/** + * Props for the MentionsTextArea component. + */ +export type MentionsTextAreaProps = TextAreaProps & { + /** + * A function that is called when a mention is requested. + * @param value - The value of the mention. + * @returns A promise that resolves to an array of mention objects. + */ + mentionRequest?: (value: string) => Promise<{ value: string; label?: string }[]>; +}; + +/** + * A component that provides a textarea with mention functionality. + * It allows users to mention other users by typing "@" followed by their name. + * + * @component + * @example + * ```tsx + * <MentionsTextArea + * disabled={false} + * mentionRequest={fetchMentions} + * className="mentions-textarea" + * onChange={handleInputChange} + * onPressEnter={handleEnterPress} + * style={{ width: '100%' }} + * /> + * ``` + */ +export const MentionsTextArea: React.FC<MentionsTextAreaProps> = (props) => { + const { disabled, mentionRequest, ...rest } = props; + + // const [options, setOptions] = useState<{ value: string; label: string }[]>([]); + return ( + <Input.TextArea + className={props.className} + disabled={disabled} + autoSize={{ + minRows: rest.rows || 5, + }} + rows={rest.rows || 5} + {...rest} + style={{ + backgroundColor: 'transparent', + flex: 1, + outline: 'none', + boxShadow: 'none', + padding: '0 8px', + margin: 0, + border: 'none', + height: 'auto', + ...rest.style, + }} + // options={options} + // onSelect={(value) => { + // props.onChange?.({ target: { value } } as any); + // setOptions([]); + // }} + // prefix="/" + // onSearch={async (value, prefix) => { + // const result = await mentionRequest?.(value); + // setOptions((result as any[]) || []); + // rest?.onSearch?.(value, prefix); + // }} + onPressEnter={(e) => { + // if (open && options.length > 0) return; + props.onPressEnter?.(e); + }} + /> + ); +}; diff --git a/src/ProChat/components/InputArea/StopLoading.tsx b/src/components/ProChatInputArea/StopLoading.tsx similarity index 100% rename from src/ProChat/components/InputArea/StopLoading.tsx rename to src/components/ProChatInputArea/StopLoading.tsx diff --git a/src/components/ProChatInputArea/index.tsx b/src/components/ProChatInputArea/index.tsx new file mode 100644 index 00000000..ddd881c3 --- /dev/null +++ b/src/components/ProChatInputArea/index.tsx @@ -0,0 +1,295 @@ +import { useRefFunction } from '@/hooks/useRefFunction'; +import { ChatMessage } from '@/index'; +import { ProChatLocale } from '@/locale'; +import { SendOutlined } from '@ant-design/icons'; +import { Button, ButtonProps, ConfigProvider, Flex } from 'antd'; +import cx from 'classnames'; +import { useContext, useMemo, useRef, useState } from 'react'; +import AnimationItem from '../Animation'; +import { ProChatActionBar, ProChatActionBarProps } from './ActionBar'; +import { MentionsTextArea, MentionsTextAreaProps } from './AutoCompleteTextArea'; +import StopLoadingIcon from './StopLoading'; +import { useStyle } from './style'; + +/** + * Props for the ChatInputArea component. + */ +export type ChatInputAreaProps = { + /** + * Ref to the input area container. + */ + areaRef?: React.RefObject<HTMLDivElement>; + /** + * Additional class name for the input area container. + */ + className?: string; + /** + * Callback function triggered when the send button is clicked or the enter key is pressed. + * Return `true` or a `Promise` that resolves to `true` to allow sending the message, + * or `false` or a `Promise` that resolves to `false` to prevent sending the message. + */ + onSend?: (message: string) => boolean | Promise<boolean>; + /** + * Custom render function for the input area. + * Receives the default input DOM, the `onMessageSend` function, and the default props for the MentionsTextArea component. + * Should return the custom input DOM. + */ + inputRender?: ( + defaultDom: React.ReactNode, + onMessageSend: (message: string) => void | Promise<any>, + defaultProps: MentionsTextAreaProps, + ) => React.ReactNode; + /** + * Custom render function for the send button. + * Receives the default send button DOM and the default props for the Button component. + * Should return the custom send button DOM. + */ + sendButtonRender?: (defaultDom: React.ReactNode, defaultProps: ButtonProps) => React.ReactNode; + /** + * Custom render function for the input area container. + * Receives the default input area DOM, the `onMessageSend` function, and the `onClearAllHistory` function. + * Should return the custom input area DOM. + */ + inputAreaRender?: ( + defaultDom: React.ReactNode, + onMessageSend: (message: string) => void | Promise<any>, + onClearAllHistory: () => void, + ) => React.ReactNode; + /** + * Placeholder text for the input area. + */ + placeholder?: string; + /** + * Props for the MentionsTextArea component. + */ + inputAreaProps: MentionsTextAreaProps; + /** + * Custom CSS styles for the action buttons container. + */ + actionStyle?: React.CSSProperties; + /** + * Custom CSS styles for the input area container. + */ + areaStyle?: React.CSSProperties; + /** + * Locale configuration for the ProChat component. + */ + locale?: ProChatLocale; + /** + * Callback function to clear the message input. + */ + clearMessage: () => void; + /** + * Callback function to stop generating messages. + */ + stopGenerateMessage: () => void; + /** + * Callback function triggered when a message is sent. + * Receives the sent message as a parameter. + */ + onMessageSend: (message: string | ChatMessage<any>) => void | Promise<any>; + /** + * Custom render function for the action buttons. + * Receives an array of default action button DOMs. + * Should return the custom action buttons DOM. + */ + actionsRender?: ProChatActionBarProps['actionsRender']; + /** + * Flag indicating whether the user is currently typing. + */ + typing: boolean; + + /** + * Custom CSS styles for the send button. + */ + sendButtonStyle?: React.CSSProperties; + + sendAreaStyle?: React.CSSProperties; +}; + +/** + * Represents the ChatInputArea component. + * @param props - The props for the ChatInputArea component. + * @returns The rendered ChatInputArea component. + */ +export const ChatInputArea = (props: ChatInputAreaProps) => { + const { + className, + placeholder, + onSend, + inputAreaRender, + areaRef, + typing, + areaStyle, + sendAreaStyle, + inputRender, + sendButtonRender, + inputAreaProps, + sendButtonStyle, + clearMessage, + stopGenerateMessage, + onMessageSend, + actionStyle, + locale, + actionsRender, + } = props || {}; + + const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); + const [message, setMessage] = useState(''); + const isChineseInput = useRef(false); + + const prefixClass = getPrefixCls('pro-chat-input-area'); + + const { wrapSSR, hashId } = useStyle(prefixClass); + + const send = useRefFunction(async () => { + if (onSend && message) { + const success = await onSend(message); + if (success) { + onMessageSend(message); + setMessage(''); + } + } else { + onMessageSend(message); + setMessage(''); + } + }); + + /** + * Default props for the auto-complete text area. + */ + const defaultAutoCompleteTextAreaProps = { + placeholder: placeholder, + ...inputAreaProps, + className: cx(inputAreaProps?.className, `${prefixClass}-input`, hashId), + value: message, + onChange: (value) => { + setMessage(value.target.value); + }, + autoSize: { maxRows: 8 }, + onCompositionStart: () => { + isChineseInput.current = true; + }, + onCompositionEnd: () => { + isChineseInput.current = false; + }, + onPressEnter: (e: React.KeyboardEvent<HTMLTextAreaElement>) => { + if (!typing && !e.shiftKey && !isChineseInput.current) { + e.preventDefault(); + send(); + } + }, + } as MentionsTextAreaProps; + + const defaultInput = <MentionsTextArea {...defaultAutoCompleteTextAreaProps} />; + + /** + * Supports custom input rendering. + */ + const inputDom = inputRender + ? inputRender?.( + defaultInput, + (message) => { + onMessageSend(message); + }, + defaultAutoCompleteTextAreaProps, + ) + : defaultInput; + + /** + * Returns the default button props based on the loading state. + * If loading is true, the button will have a text type, with the stopGenerateMessage click handler, + * and the StopLoadingIcon as the icon. + * If loading is false, the button will have a text type, the send click handler, + * and the SendOutlined icon as the icon. + * @returns The default button props. + */ + const defaultButtonProps = useMemo(() => { + return typing + ? ({ + onClick: () => stopGenerateMessage(), + icon: <StopLoadingIcon />, + style: { + padding: '4px 8px', + lineHeight: 1, + height: 28, + }, + } as const) + : ({ + disabled: !message, + onClick: () => send(), + icon: <SendOutlined />, + style: { + padding: '4px 8px', + lineHeight: 1, + height: 28, + }, + } as const); + }, [typing, message]); + + const defaultButtonDom = ( + <Button + {...defaultButtonProps} + style={sendButtonStyle} + className={cx(`${prefixClass}-button`, hashId)} + > + {typing ? '停止生成' : '发送'} + </Button> + ); + + const buttonDom = sendButtonRender + ? sendButtonRender(defaultButtonDom, defaultButtonProps) + : defaultButtonDom; + + const defaultInputArea = wrapSSR( + <ConfigProvider + theme={{ + token: { + borderRadius: 4, + }, + }} + > + <Flex + ref={areaRef} + gap={2} + vertical + align={'right'} + style={areaStyle} + className={cx(`${prefixClass}`, className, hashId)} + > + <ProChatActionBar + clearMessage={clearMessage} + actionsRender={actionsRender} + className={cx(hashId)} + locale={locale} + prefixClass={`${prefixClass}-action-bar`} + style={actionStyle} + /> + {inputDom} + {buttonDom ? ( + <AnimationItem + animation + style={sendAreaStyle} + className={cx(`${prefixClass}-send-area`, hashId)} + > + {buttonDom} + </AnimationItem> + ) : null} + </Flex> + </ConfigProvider>, + ); + + if (inputAreaRender) { + return inputAreaRender( + defaultInputArea, + (message) => { + onMessageSend(message); + }, + clearMessage, + ); + } + + return defaultInputArea; +}; + +export default ChatInputArea; diff --git a/src/components/ProChatInputArea/style.ts b/src/components/ProChatInputArea/style.ts new file mode 100644 index 00000000..ffb1f442 --- /dev/null +++ b/src/components/ProChatInputArea/style.ts @@ -0,0 +1,56 @@ +import { + ChatTokenType, + GenerateStyle, + resetComponent, + useProChatStyleRegister, +} from '@/utils/useStyle'; + +const genStyle: GenerateStyle<ChatTokenType> = (token) => { + return { + [token.componentCls]: { + minHeight: 44, + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-end', + position: 'relative', + borderTop: `1px solid ${token.colorBorder}`, + '&-send-area': { + display: 'flex', + justifyContent: 'flex-end', + width: 'max-content', + padding: '8px', + position: 'absolute', + right: 0, + bottom: 0, + }, + }, + [`${token.componentCls}-action-bar`]: { + position: 'relative', + display: 'flex', + padding: `0 ${token.paddingSM}px`, + [`& > ${token.componentCls}-action-bar-item`]: { + padding: token.paddingXS, + borderRadius: token.borderRadius, + '&:hover': { + backgroundColor: token.colorBgTextHover, + }, + }, + }, + }; +}; + +/** + * ProchatItem + * @param prefixCls + * @returns + */ +export function useStyle(prefixCls?: string) { + return useProChatStyleRegister('InputArea', (token) => { + const proChatToken = { + ...token, + componentCls: `.${prefixCls}`, + }; + + return [genStyle(proChatToken), resetComponent(proChatToken)]; + }); +} diff --git a/src/components/ProChatTitle.tsx b/src/components/ProChatTitle.tsx new file mode 100644 index 00000000..5da4e032 --- /dev/null +++ b/src/components/ProChatTitle.tsx @@ -0,0 +1,114 @@ +import { formatTime } from '@/utils/formatTime'; +import { + ChatTokenType, + GenerateStyle, + resetComponent, + useProChatStyleRegister, +} from '@/utils/useStyle'; +import { Flex } from 'antd'; +import cx from 'classnames'; +import { ChatItemProps } from './ChatItem/type'; + +/** + * Props for the ProChatTitle component. + */ +export interface TitleProps { + /** + * The title of the chat item's avatar. + */ + title: ChatItemProps['avatar']['title']; + + /** + * The placement of the chat item. + */ + placement?: ChatItemProps['placement']; + + /** + * The time of the chat item. + */ + time?: ChatItemProps['time']; + + /** + * Additional class name for the component. + */ + className?: string; + + /** + * Prefix class name for the component. + */ + prefixClass?: string; + + /** + * Inline style for the component. + */ + style?: React.CSSProperties; +} + +const genStyle: GenerateStyle<ChatTokenType> = (token) => { + return { + [token.componentCls]: { + fontSize: 12, + color: token.colorTextDescription, + lineHeight: 1, + display: 'flex', + alignItems: 'center', + '&-time': { + visibility: 'hidden', + color: token.colorTextSecondary, + opacity: 0, + lineHeight: 1, + transition: 'all 0.3s ' + token.motionEaseInOut, + }, + '&:hover': { + [`${token.componentCls}-time`]: { + visibility: 'visible', + }, + }, + }, + }; +}; + +/** + * ProChat 的标题组件 + * @param prefixCls + * @returns + */ +function useStyle(prefixCls?: string) { + return useProChatStyleRegister('Title', (token) => { + const proChatToken = { + ...token, + componentCls: `.${prefixCls}`, + }; + return [genStyle(proChatToken), resetComponent(proChatToken)]; + }); +} + +/** + * prochat 的标题组件 + * @param param0 + * @returns + */ +export const ProChatTitle: React.FC<TitleProps> = ({ + style, + prefixClass, + className, + placement, + time, + title, +}) => { + const { wrapSSR, hashId } = useStyle(prefixClass); + + return wrapSSR( + <Flex + className={cx(hashId, prefixClass, className)} + style={{ + flexDirection: placement === 'left' ? 'row' : 'row-reverse', + ...style, + }} + gap={8} + > + {title} + {time && <time className={cx(`${prefixClass}-time`, hashId)}>{formatTime(time)}</time>} + </Flex>, + ); +}; diff --git a/src/components/SliderWithInput/index.tsx b/src/components/SliderWithInput/index.tsx deleted file mode 100644 index eda14738..00000000 --- a/src/components/SliderWithInput/index.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { InputNumber, Slider, type InputNumberProps } from 'antd'; -import { SliderSingleProps } from 'antd/es/slider'; -import { isNull } from 'lodash-es'; -import { memo, useCallback } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -export interface SliderWithInputProps extends SliderSingleProps { - controls?: InputNumberProps['controls']; - size?: InputNumberProps['size']; -} - -const SliderWithInput = memo<SliderWithInputProps>( - ({ - step, - value, - onChange, - max, - min, - defaultValue, - size, - controls, - style, - className, - disabled, - ...props - }) => { - const handleOnchange = useCallback((value: number | null) => { - if (Number.isNaN(value) || isNull(value)) return; - onChange?.(value); - }, []); - - return ( - <Flexbox - align={'center'} - className={className} - direction={'horizontal'} - gap={8} - style={style} - > - <Slider - defaultValue={defaultValue} - disabled={disabled} - max={max} - min={min} - onChange={handleOnchange} - step={step} - style={size === 'small' ? { flex: 1, margin: 0 } : { flex: 1 }} - tooltip={{ open: false }} - value={typeof value === 'number' ? value : 0} - {...props} - /> - <InputNumber - controls={size !== 'small' || controls} - defaultValue={defaultValue} - disabled={disabled} - max={max} - min={min} - onChange={handleOnchange} - size={size} - step={Number.isNaN(step) || isNull(step) ? undefined : step} - style={{ flex: 1, maxWidth: size === 'small' ? 40 : 64 }} - value={typeof value === 'number' ? value : 0} - /> - </Flexbox> - ); - }, -); - -export default SliderWithInput; diff --git a/src/components/Spotlight/index.tsx b/src/components/Spotlight/index.tsx deleted file mode 100644 index ae43170f..00000000 --- a/src/components/Spotlight/index.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { memo, useEffect, useRef, useState } from 'react'; - -import { DivProps } from '@/types'; - -import { useStyles } from './style'; - -const useMouseOffset = (): any => { - const [offset, setOffset] = useState<{ x: number; y: number }>(); - const [outside, setOutside] = useState(true); - const reference = useRef<HTMLDivElement>(); - - useEffect(() => { - if (reference.current && reference.current.parentElement) { - const element = reference.current.parentElement; - - // debounce? - const onMouseMove = (e: MouseEvent) => { - const bound = element.getBoundingClientRect(); - setOffset({ x: e.clientX - bound.x, y: e.clientY - bound.y }); - setOutside(false); - }; - - const onMouseLeave = () => { - setOutside(true); - }; - element.addEventListener('mousemove', onMouseMove); - element.addEventListener('mouseleave', onMouseLeave); - return () => { - element.removeEventListener('mousemove', onMouseMove); - element.removeEventListener('mouseleave', onMouseLeave); - }; - } - }, []); - - return [offset, outside, reference] as const; -}; - -export interface SpotlightProps extends DivProps { - /** - * @description The size of the spotlight circle - * @default 64 - */ - size?: number; -} - -const Spotlight = memo<SpotlightProps>(({ className, size = 64, ...properties }) => { - const [offset, outside, reference] = useMouseOffset(); - const { styles, cx } = useStyles({ offset, outside, size }); - - return <div className={cx(styles, className)} ref={reference} {...properties} />; -}); - -export default Spotlight; diff --git a/src/components/Spotlight/style.ts b/src/components/Spotlight/style.ts deleted file mode 100644 index 279b5f7a..00000000 --- a/src/components/Spotlight/style.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { createStyles } from 'antd-style'; - -export const useStyles = createStyles( - ( - { css, token, isDarkMode }, - { offset, outside, size }: { offset: { x: number; y: number }; outside: boolean; size: number }, - ) => { - const spotlightX = (offset?.x ?? 0) + 'px'; - const spotlightY = (offset?.y ?? 0) + 'px'; - const spotlightOpacity = outside ? '0' : '.1'; - const spotlightSize = size + 'px'; - return css` - pointer-events: none; - - position: absolute; - z-index: 1; - inset: 0; - - opacity: ${spotlightOpacity}; - background: radial-gradient( - ${spotlightSize} circle at ${spotlightX} ${spotlightY}, - ${isDarkMode ? token.colorText : '#fff'}, - ${isDarkMode ? 'transparent' : token.colorTextQuaternary} - ); - border-radius: inherit; - - transition: all 0.2s; - `; - }, -); diff --git a/src/components/Tag/index.tsx b/src/components/Tag/index.tsx deleted file mode 100644 index 88bd4684..00000000 --- a/src/components/Tag/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Tag as AntTag, type TagProps as AntTagProps } from 'antd'; -import { createStyles } from 'antd-style'; -import { ReactNode, memo } from 'react'; -import { Flexbox } from 'react-layout-kit'; - -const useStyles = createStyles(({ cx, css, token }) => ({ - small: css` - padding: 2px 6px; - line-height: 1; - `, - tag: cx(css` - color: ${token.colorTextSecondary} !important; - background: ${token.colorFillSecondary}; - border: ${token.borderRadius}px; - - &:hover { - color: ${token.colorText}; - background: ${token.colorFill}; - } - `), -})); - -export interface TagProps extends AntTagProps { - icon?: ReactNode; - size?: 'default' | 'small'; -} - -const Tag = memo<TagProps>(({ icon, children, size = 'default', ...props }) => { - const { styles, cx } = useStyles(); - - return ( - <AntTag - bordered={false} - className={cx(styles.tag, size === 'small' && styles.small)} - {...props} - > - <Flexbox align={'center'} gap={4} horizontal> - {icon} - {children} - </Flexbox> - </AntTag> - ); -}); - -export default Tag; diff --git a/src/ProChat/const/message.ts b/src/const/message.ts similarity index 100% rename from src/ProChat/const/message.ts rename to src/const/message.ts diff --git a/src/ProChat/const/meta.ts b/src/const/meta.ts similarity index 100% rename from src/ProChat/const/meta.ts rename to src/const/meta.ts diff --git a/src/ProChat/demos/i18n.tsx b/src/demos/i18n.tsx similarity index 78% rename from src/ProChat/demos/i18n.tsx rename to src/demos/i18n.tsx index 897de007..3fbaca98 100644 --- a/src/ProChat/demos/i18n.tsx +++ b/src/demos/i18n.tsx @@ -15,12 +15,7 @@ export default () => { setLanguage(v); }} /> - <ProChat - locale={language} - request={async () => { - return new Response('this is mock data'); - }} - /> + <ProChat locale={language} /> </div> ); }; diff --git a/src/hooks/useChatList.ts b/src/hooks/useChatList.ts new file mode 100644 index 00000000..5a7a9429 --- /dev/null +++ b/src/hooks/useChatList.ts @@ -0,0 +1,338 @@ +import { LOADING_FLAT } from '@/const/message'; +import { DEFAULT_AVATAR, DEFAULT_USER_AVATAR } from '@/const/meta'; +import { ChatMessage } from '@/types'; +import { ModelConfig } from '@/types/config'; +import { processSSE } from '@/utils/fetch'; +import { genUUID } from '@/utils/uuid'; +import { useMergedState } from 'rc-util'; +import React, { useEffect, useMemo, useRef } from 'react'; +import { useRefFunction } from './useRefFunction'; + +export const initialModelConfig: ModelConfig = { + historyCount: 1, + model: 'gpt-3.5-turbo', + params: { + frequency_penalty: 0, + presence_penalty: 0, + temperature: 0.6, + top_p: 1, + }, + systemRole: '', +}; + +export interface ProChatMetaData { + /** + * 角色头像 + * @description 可选参数,如果不传则使用默认头像 + */ + avatar?: string; + /** + * 背景色 + * @description 可选参数,如果不传则使用默认背景色 + */ + backgroundColor?: string; + /** + * 名称 + * @description 可选参数,如果不传则使用默认名称 + */ + title?: string; + + /** + * 附加数据 + * @description 可选参数,如果不传则使用默认名称 + */ + [key: string]: any; +} + +export type ProChatUserProfile = { + user: ProChatMetaData; + assistant: ProChatMetaData; +}; + +export const initialState = { + userProfile: { + user: { + avatar: DEFAULT_USER_AVATAR, + }, + assistant: { + avatar: DEFAULT_AVATAR, + }, + }, + config: initialModelConfig, +}; + +/** + * Props for the ProChatUIUseListChat component. + */ +type ProChatUIUseListChatProps = { + initialChatList: ChatMessage<any>[]; + chatList: ChatMessage<any>[]; + loading: boolean; + helloMessage?: React.ReactNode; + userProfile: ProChatUserProfile; + onChatsChange?: (chatList: ChatMessage<any>[]) => void; + request?: () => Promise<ChatMessage<any>[]>; + sendMessageRequest?: (message: ChatMessage<any>[]) => Promise<Response | ChatMessage<any>>; + transformToChatMessage?: ( + preChatMessage: ChatMessage, + currentContent: { preContent: React.ReactNode; currentContent: string }, + ) => Promise<ChatMessage<any>>; +}; + +/** + * Custom hook for managing a chat list. + * @param props - The hook's configuration options. + * @returns An object containing the chat list, loading state, and various functions to interact with the chat list. + */ +export const useChatList = (props: ProChatUIUseListChatProps) => { + let controller = useRef<AbortController | null>(null); + + const loadingMessageRef = useRef<ChatMessage<any> | undefined>(undefined); + + const [loadingMessage, setLoadingMessage] = useMergedState<ChatMessage<any> | undefined>( + undefined, + { + postState: (value) => { + loadingMessageRef.current = value; + return value; + }, + }, + ); + + const getLoadingMessage = useRefFunction(() => { + return loadingMessageRef.current; + }); + + const chatListRef = useRef<ChatMessage<any>[]>([]); + /** + * Custom hook for managing the chat list. + * + * @template T - The type of the chat message content. + * @param {Object} props - The hook props. + * @param {ChatMessage<T>[]} props.chatList - The initial chat list. + * @param {ChatMessage<T>[]} props.initialChatList - The default chat list. + * @param {Function} props.onChatsChange - The callback function to handle chat list changes. + * @returns {ChatMessage<T>[]} The chat list and the function to update it. + */ + const [chatList, setChatList] = useMergedState<ChatMessage<any>[]>([], { + value: props.chatList, + defaultValue: props.initialChatList, + onChange: async (value) => { + if (props?.onChatsChange) { + await props?.onChatsChange(value); + } + }, + postState: (value) => { + chatListRef.current = value; + return value; + }, + }); + + const setMessageItem = useRefFunction((id: string, content: ChatMessage<any>) => { + const newChatList = chatList.map((item) => { + if (item.id === id) { + return { + ...item, + ...content, + }; + } + return item; + }); + setChatList(newChatList); + }); + + const [loading, setLoading] = useMergedState<boolean>(true, { + value: props.loading, + }); + + /** + * Fetches the chat list using the provided request function. + * If the request function is not provided, it sets the loading state to false and returns. + * Sets the loading state to true before making the request and sets it to false after the request is completed. + * If an error occurs during the request, logs the error to the console. + */ + const fetchChatList = useRefFunction(async () => { + if (!props.request) { + setLoading(false); + return; + } + controller.current = new AbortController(); + + setLoading(true); + try { + const response = await props.request(); + setChatList(response); + setLoading(false); + } catch (error) { + console.error(error); + setLoading(false); + } + }); + + const clearMessage = useRefFunction(() => { + setChatList([]); + }); + + /** + * Generates a message record. + * @param {Partial<ChatMessage<T>>} message - The message to generate. + */ + const genMessageRecord = useRefFunction( + (message: Partial<ChatMessage<any>>, type: 'user' | 'assistant' = 'assistant') => { + return { + id: genUUID(), + content: message, + role: type, + meta: props.userProfile?.[type] || initialState.userProfile?.[type], + createAt: Date.now(), + updateAt: Date.now(), + ...message, + } as ChatMessage<any>; + }, + ); + + /** + * Sends a message and updates the chat list accordingly. + * @param {string} message - The message to send. + * @returns {Promise<void>} - A promise that resolves when the message is sent. + */ + const sendMessage = useRefFunction(async (message: string | Partial<ChatMessage>) => { + controller.current = new AbortController(); + chatList.push( + genMessageRecord( + typeof message === 'string' + ? { content: message } + : { + ...message, + content: message.content, + }, + 'user', + ), + ); + setChatList([...chatList]); + if (!props?.sendMessageRequest) return; + setLoadingMessage( + genMessageRecord( + { + content: LOADING_FLAT, + }, + 'assistant', + ), + ); + + const res = (await Promise.race([ + props.sendMessageRequest?.(chatListRef.current), + new Promise((_, reject) => { + controller.current.signal.addEventListener('abort', () => { + reject(); + }); + }), + ])) as Response | ChatMessage<any>; + + if (res instanceof Response) { + processSSE(res, { + signal: controller.current.signal, + onFinish: async () => { + setLoadingMessage(undefined); + }, + onMessageHandle: async (text, res, type) => { + if (type === 'done' || controller.current.signal.aborted) { + const message = getLoadingMessage(); + if (!message) return; + setChatList((prev) => { + return [...prev, message]; + }); + setLoadingMessage(undefined); + return; + } + const content = + getLoadingMessage()?.content === LOADING_FLAT + ? text + : getLoadingMessage()?.content + text; + + const message = { + ...getLoadingMessage(), + updateAt: Date.now(), + originContent: text, + content: content, + }; + const transformMessage = await props.transformToChatMessage?.(message, { + preContent: + getLoadingMessage()?.content === LOADING_FLAT ? '' : getLoadingMessage()?.content, + currentContent: text, + }); + + loadingMessageRef.current = transformMessage || message; + setLoadingMessage(transformMessage || message); + }, + onErrorHandle: async (error) => { + const content = error.message; + const message = await props.transformToChatMessage?.( + { + ...getLoadingMessage(), + updateAt: Date.now(), + content: content, + originContent: content, + }, + { + preContent: getLoadingMessage()?.content, + currentContent: content, + }, + ); + setLoadingMessage(undefined); + setChatList((prev) => [...prev, message]); + }, + }); + } else { + const message = { + ...getLoadingMessage(), + updateAt: Date.now(), + ...res, + }; + + const transformChatMessage = await props.transformToChatMessage?.(message, { + preContent: getLoadingMessage()?.content, + currentContent: message.originContent, + }); + + setLoadingMessage(undefined); + setChatList((prev) => [...prev, transformChatMessage || message]); + } + }); + + /** + * Stops the generation of messages. + */ + const stopGenerateMessage = useRefFunction(() => { + controller.current.abort?.(); + }); + + useEffect(() => { + fetchChatList(); + }, []); + + const helloMessageList = useMemo( + () => [ + { + id: genUUID(), + content: props.helloMessage, + role: 'bot', + createAt: Date.now(), + updateAt: Date.now(), + meta: props.userProfile?.assistant || initialState.userProfile.assistant, + }, + ], + [], + ); + + return { + chatList: chatList.length > 0 ? chatList : helloMessageList, + loading, + loadingMessage, + stopGenerateMessage, + setMessageItem, + clearMessage, + sendMessage, + genMessageRecord, + }; +}; diff --git a/src/hooks/useChatListActionsBar.tsx b/src/hooks/useChatListActionsBar.tsx deleted file mode 100644 index 9627dce2..00000000 --- a/src/hooks/useChatListActionsBar.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { Copy, Edit, RotateCw, Trash } from 'lucide-react'; - -import { ActionIconGroupItems } from '@/ActionIconGroup'; - -interface ChatListActionsBar { - copy: ActionIconGroupItems; - del: ActionIconGroupItems; - divider: { type: 'divider' }; - edit: ActionIconGroupItems; - regenerate: ActionIconGroupItems; -} - -export const useChatListActionsBar = (text?: { - copy?: string; - delete?: string; - edit?: string; - regenerate?: string; -}): ChatListActionsBar => { - return { - copy: { - icon: Copy, - key: 'copy', - label: text?.copy || 'Copy', - }, - del: { - icon: Trash, - key: 'del', - label: text?.delete || 'Delete', - }, - divider: { - type: 'divider', - }, - edit: { - icon: Edit, - key: 'edit', - label: text?.edit || 'Edit', - }, - regenerate: { - icon: RotateCw, - key: 'regenerate', - label: text?.regenerate || 'Regenerate', - }, - }; -}; diff --git a/src/ProChat/hooks/useRefFunction.ts b/src/hooks/useRefFunction.ts similarity index 100% rename from src/ProChat/hooks/useRefFunction.ts rename to src/hooks/useRefFunction.ts diff --git a/src/index.ts b/src/index.ts index 1a703aa2..96913bad 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,34 +1,9 @@ -export { default as ActionIcon, type ActionIconProps, type ActionIconSize } from './ActionIcon'; -export { default as ActionIconGroup, type ActionIconGroupProps } from './ActionIconGroup'; -export { default as BackBottom, type BackBottomProps } from './BackBottom'; -export { default as ChatItem, type ChatItemProps } from './ChatItem'; -export { default as ChatList } from './ChatList'; -export type { - ChatListProps, - OnActionClick, - OnMessageChange, - RenderAction, - RenderErrorMessage, - RenderItem, - RenderMessage, - RenderMessageExtra, -} from './ChatList'; -export { default as ActionsBar, type ActionsBarProps } from './ChatList/ActionsBar'; -export * from './ProChat'; - -export { default as EditableMessage, type EditableMessageProps } from './EditableMessage'; -export { - default as EditableMessageList, - type EditableMessageListProps, -} from './EditableMessageList'; -export { default as CopyButton, type CopyButtonProps } from './components/CopyButton'; - -export { default as List } from './List'; - -export { default as MessageInput, type MessageInputProps } from './MessageInput'; -export { default as MessageModal, type MessageModalProps } from './MessageModal'; - -export { default as TokenTag, type TokenTagProps } from './TokenTag'; -export { useChatListActionsBar } from './hooks/useChatListActionsBar'; -export * from './styles'; +export { AnimText } from './components/Animation/AnimText'; +export { BackToBottmButton, type BackToBottmButtonProps } from './components/BackToBottomButton'; +export { ChatItem } from './components/ChatItem'; +export type { ChatItemProps } from './components/ChatItem/type'; +export { CopyButton, type CopyButtonProps } from './components/CopyButton'; +export * from './components/ProChat'; export type * from './types'; + +export * from './components/ChatList/Loading'; diff --git a/src/locale/index.ts b/src/locale/index.ts index 30a5c9f2..8b73f528 100644 --- a/src/locale/index.ts +++ b/src/locale/index.ts @@ -1,7 +1,8 @@ import { LocaleProps } from '@/types/locale'; import enUSLocal from './en-US'; import zhCNLocal from './zh-CN'; -export type Locale = 'zh-CN' | 'en-US'; + +export type ProChatLocale = 'zh-CN' | 'en-US'; const locales = { 'en-US': enUSLocal, @@ -9,6 +10,6 @@ const locales = { en: enUSLocal, }; -export const gLocaleObject = (glocale: Locale): LocaleProps => { - return locales[glocale as 'zh-CN'] || locales['zh-CN']; +export const gLocaleObject = (locale: ProChatLocale): LocaleProps => { + return locales[locale as 'zh-CN'] || locales['zh-CN']; }; diff --git a/src/styles/colors.ts b/src/styles/colors.ts deleted file mode 100644 index 897a8a47..00000000 --- a/src/styles/colors.ts +++ /dev/null @@ -1,909 +0,0 @@ -type colorStep = [ - string, - string, - string, - string, - string, - string, - string, - string, - string, - string, - string, - string, - string, -]; -export interface ColorScaleItem { - dark: colorStep; - darkA: colorStep; - light: colorStep; - lightA: colorStep; -} - -export interface ColorScales { - blue: ColorScaleItem; - bnw: ColorScaleItem; - cyan: ColorScaleItem; - geekblue: ColorScaleItem; - gold: ColorScaleItem; - gray: ColorScaleItem; - green: ColorScaleItem; - lime: ColorScaleItem; - magenta: ColorScaleItem; - orange: ColorScaleItem; - purple: ColorScaleItem; - red: ColorScaleItem; - volcano: ColorScaleItem; - yellow: ColorScaleItem; -} - -export const colorScales: ColorScales = { - blue: { - dark: [ - '#000506', - '#002126', - '#00363f', - '#004e59', - '#006675', - '#008093', - '#159ab0', - '#47b3ca', - '#6acde4', - '#8ae8ff', - '#b8f0ff', - '#def7ff', - '#ffffff', - ], - darkA: [ - 'rgba(0, 167, 200, 0.03)', - 'rgba(0, 220, 253, 0.15)', - 'rgba(0, 216, 252, 0.25)', - 'rgba(0, 223, 254, 0.35)', - 'rgba(0, 222, 254, 0.46)', - 'rgba(0, 221, 253, 0.58)', - 'rgba(30, 223, 255, 0.69)', - 'rgba(89, 224, 252, 0.8)', - 'rgba(118, 228, 253, 0.9)', - '#8ae8ff', - '#b8f0ff', - '#def7ff', - '#ffffff', - ], - light: [ - '#ffffff', - '#fbfeff', - '#f4fcff', - '#eafaff', - '#dff7ff', - '#d3f5ff', - '#c4f2ff', - '#b4efff', - '#a1ecff', - '#8ae8ff', - '#159ab0', - '#004e59', - '#000506', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(55, 205, 255, 0.02)', - 'rgba(35, 195, 255, 0.05)', - 'rgba(22, 199, 255, 0.09)', - 'rgba(9, 193, 255, 0.13)', - 'rgba(11, 199, 255, 0.18)', - 'rgba(9, 201, 255, 0.24)', - 'rgba(5, 202, 255, 0.3)', - 'rgba(1, 204, 255, 0.37)', - 'rgba(1, 205, 255, 0.46)', - 'rgba(1, 145, 169, 0.92)', - '#004e59', - '#000506', - ], - }, - bnw: { - dark: [ - '#000000', - '#111111', - '#333333', - '#555555', - '#666666', - '#888888', - '#aaaaaa', - '#cccccc', - '#dddddd', - '#eeeeee', - '#ffffff', - '#ffffff', - '#ffffff', - ], - darkA: [ - 'rgba(255, 255, 255, 0.02)', - 'rgba(255, 255, 255, 0.08)', - 'rgba(255, 255, 255, 0.16)', - 'rgba(255, 255, 255, 0.22)', - 'rgba(255, 255, 255, 0.36)', - 'rgba(255, 255, 255, 0.48)', - 'rgba(255, 255, 255, 0.6)', - 'rgba(255, 255, 255, 0.72)', - 'rgba(255, 255, 255, 0.84)', - 'rgba(255, 255, 255, 0.88)', - 'rgba(255, 255, 255, 0.92)', - 'rgba(255, 255, 255, 0.96)', - 'rgba(255, 255, 255, 0.98)', - ], - light: [ - '#ffffff', - '#f5f5f5', - '#eeeeee', - '#cccccc', - '#aaaaaa', - '#888888', - '#666666', - '#444444', - '#333333', - '#222222', - '#111111', - '#111111', - '#111111', - ], - lightA: [ - 'rgba(0, 0, 0, 0.02)', - 'rgba(0, 0, 0, 0.08)', - 'rgba(0, 0, 0, 0.16)', - 'rgba(0, 0, 0, 0.22)', - 'rgba(0, 0, 0, 0.36)', - 'rgba(0, 0, 0, 0.48)', - 'rgba(0, 0, 0, 0.6)', - 'rgba(0, 0, 0, 0.72)', - 'rgba(0, 0, 0, 0.84)', - 'rgba(0, 0, 0, 0.88)', - 'rgba(0, 0, 0, 0.92)', - 'rgba(0, 0, 0, 0.96)', - 'rgba(0, 0, 0, 0.98)', - ], - }, - cyan: { - dark: [ - '#000503', - '#00221c', - '#003930', - '#005245', - '#006c5b', - '#008772', - '#2fa28a', - '#55bca4', - '#75d7be', - '#95f3d9', - '#bdf7e4', - '#dffcf0', - '#ffffff', - ], - darkA: [ - 'rgba(0, 250, 150, 0.02)', - 'rgba(0, 243, 200, 0.14)', - 'rgba(0, 248, 209, 0.23)', - 'rgba(0, 248, 209, 0.33)', - 'rgba(0, 251, 212, 0.43)', - 'rgba(0, 255, 215, 0.53)', - 'rgba(73, 253, 216, 0.64)', - 'rgba(115, 254, 222, 0.74)', - 'rgba(138, 253, 224, 0.85)', - 'rgba(155, 253, 226, 0.96)', - 'rgba(195, 255, 235, 0.97)', - 'rgba(225, 255, 242, 0.99)', - '#ffffff', - ], - light: [ - '#ffffff', - '#f9fffb', - '#effff8', - '#e3fff4', - '#d8fef0', - '#ccfcec', - '#c0fae8', - '#b3f8e3', - '#a5f6de', - '#95f3d9', - '#2fa28a', - '#005245', - '#000503', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(55, 255, 122, 0.03)', - 'rgba(26, 255, 155, 0.07)', - 'rgba(0, 255, 155, 0.11)', - 'rgba(11, 249, 161, 0.16)', - 'rgba(0, 240, 160, 0.2)', - 'rgba(3, 235, 163, 0.25)', - 'rgba(2, 232, 162, 0.3)', - 'rgba(5, 230, 163, 0.36)', - 'rgba(3, 226, 165, 0.42)', - 'rgba(1, 142, 112, 0.82)', - '#005245', - '#000503', - ], - }, - geekblue: { - dark: [ - '#000216', - '#001343', - '#00225c', - '#003176', - '#00418f', - '#0052a8', - '#0264c1', - '#1877d5', - '#288aea', - '#369eff', - '#88bffb', - '#c5dffd', - '#ffffff', - ], - darkA: [ - 'rgba(0, 22, 244, 0.09)', - 'rgba(0, 70, 248, 0.27)', - 'rgba(0, 92, 249, 0.37)', - 'rgba(0, 104, 251, 0.47)', - 'rgba(0, 116, 255, 0.56)', - 'rgba(0, 124, 255, 0.66)', - 'rgba(3, 132, 254, 0.76)', - 'rgba(29, 142, 254, 0.84)', - 'rgba(43, 150, 254, 0.92)', - '#369eff', - 'rgba(137, 193, 254, 0.99)', - '#c5dffd', - '#ffffff', - ], - light: [ - '#ffffff', - '#f8faff', - '#eaf3ff', - '#daeaff', - '#c7e0ff', - '#b1d5ff', - '#9ac9ff', - '#7fbcff', - '#60aeff', - '#369eff', - '#0264c1', - '#003176', - '#000216', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(22, 88, 255, 0.03)', - 'rgba(22, 122, 255, 0.09)', - 'rgba(8, 115, 255, 0.15)', - 'rgba(0, 114, 255, 0.22)', - 'rgba(3, 120, 255, 0.31)', - 'rgba(3, 120, 255, 0.4)', - 'rgba(4, 124, 255, 0.51)', - 'rgba(3, 126, 255, 0.63)', - 'rgba(1, 132, 255, 0.79)', - '#0264c1', - '#003176', - '#000216', - ], - }, - gold: { - dark: [ - '#070300', - '#271a00', - '#3f2c00', - '#593f00', - '#745400', - '#906a00', - '#ac8100', - '#c99811', - '#e4b12f', - '#ffcb47', - '#ffdd90', - '#ffeecd', - '#ffffff', - ], - darkA: [ - 'rgba(233, 100, 0, 0.03)', - 'rgba(244, 163, 0, 0.16)', - 'rgba(252, 176, 0, 0.25)', - 'rgba(254, 180, 0, 0.35)', - 'rgba(252, 183, 0, 0.46)', - 'rgba(253, 186, 0, 0.57)', - 'rgba(253, 190, 0, 0.68)', - 'rgba(254, 192, 22, 0.79)', - 'rgba(253, 197, 52, 0.9)', - '#ffcb47', - '#ffdd90', - '#ffeecd', - '#ffffff', - ], - light: [ - '#ffffff', - '#fffcff', - '#fff8f2', - '#fff4e2', - '#ffefd0', - '#ffe9bb', - '#ffe3a4', - '#ffdb8b', - '#ffd46d', - '#ffcb47', - '#ac8100', - '#593f00', - '#070300', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(255, 105, 255, 0.02)', - 'rgba(255, 138, 38, 0.06)', - 'rgba(255, 163, 13, 0.12)', - 'rgba(255, 171, 8, 0.19)', - 'rgba(255, 174, 3, 0.27)', - 'rgba(255, 177, 2, 0.36)', - 'rgba(255, 177, 3, 0.46)', - 'rgba(255, 181, 3, 0.58)', - 'rgba(255, 184, 3, 0.73)', - '#ac8100', - '#593f00', - '#070300', - ], - }, - gray: { - dark: [ - '#000000', - '#111111', - '#222222', - '#2d2d2d', - '#333333', - '#444444', - '#555555', - '#666666', - '#6f6f6f', - '#777777', - '#aaaaaa', - '#dddddd', - '#ffffff', - ], - darkA: [ - 'rgba(255, 255, 255, 0.02)', - 'rgba(255, 255, 255, 0.06)', - 'rgba(255, 255, 255, 0.10)', - 'rgba(255, 255, 255, 0.16)', - 'rgba(255, 255, 255, 0.24)', - 'rgba(255, 255, 255, 0.28)', - 'rgba(255, 255, 255, 0.32)', - 'rgba(255, 255, 255, 0.38)', - 'rgba(255, 255, 255, 0.44)', - 'rgba(255, 255, 255, 0.5)', - 'rgba(255, 255, 255, 0.66)', - 'rgba(255, 255, 255, 0.84)', - '#ffffff', - ], - light: [ - '#ffffff', - '#f8f8f8', - '#eeeeee', - '#e3e3e3', - '#dddddd', - '#cccccc', - '#bbbbbb', - '#aaaaaa', - '#999999', - '#888888', - '#666666', - '#333333', - '#080808', - ], - lightA: [ - 'rgba(0, 0, 0, 0.015)', - 'rgba(0, 0, 0, 0.03)', - 'rgba(0, 0, 0, 0.06)', - 'rgba(0, 0, 0, 0.12)', - 'rgba(0, 0, 0, 0.18)', - 'rgba(0, 0, 0, 0.24)', - 'rgba(0, 0, 0, 0.32)', - 'rgba(0, 0, 0, 0.38)', - 'rgba(0, 0, 0, 0.44)', - 'rgba(0, 0, 0, 0.5)', - 'rgba(0, 0, 0, 0.68)', - 'rgba(0, 0, 0, 0.84)', - 'rgba(0, 0, 0, 0.98)', - ], - }, - green: { - dark: [ - '#000503', - '#001d12', - '#002d1d', - '#003f28', - '#005232', - '#00653c', - '#007944', - '#1b8d4d', - '#3ba05a', - '#55b467', - '#96cd92', - '#cde6c3', - '#ffffff', - ], - darkA: [ - 'rgba(0, 250, 150, 0.02)', - 'rgba(0, 242, 150, 0.12)', - 'rgba(0, 250, 161, 0.18)', - 'rgba(0, 252, 160, 0.25)', - 'rgba(0, 248, 152, 0.33)', - 'rgba(0, 252, 150, 0.4)', - 'rgba(0, 252, 142, 0.48)', - 'rgba(48, 252, 137, 0.56)', - 'rgba(94, 254, 143, 0.63)', - 'rgba(120, 254, 145, 0.71)', - 'rgba(185, 253, 180, 0.81)', - 'rgba(225, 253, 214, 0.91)', - '#ffffff', - ], - light: [ - '#ffffff', - '#f4fdeb', - '#e7f8dd', - '#d8f2ce', - '#c7eabd', - '#b4e1ac', - '#a0d79b', - '#89cc8a', - '#71c179', - '#55b467', - '#007944', - '#003f28', - '#000503', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(117, 230, 5, 0.08)', - 'rgba(84, 205, 12, 0.14)', - 'rgba(60, 190, 10, 0.2)', - 'rgba(40, 174, 1, 0.26)', - 'rgba(28, 164, 3, 0.33)', - 'rgba(18, 155, 5, 0.4)', - 'rgba(4, 146, 6, 0.47)', - 'rgba(1, 144, 16, 0.56)', - 'rgba(1, 143, 28, 0.67)', - '#007944', - '#003f28', - '#000503', - ], - }, - lime: { - dark: [ - '#020400', - '#142100', - '#253700', - '#374f00', - '#4b6800', - '#608200', - '#769d00', - '#8fb81b', - '#a9d42f', - '#c4f042', - '#daf685', - '#eefbbe', - '#ffffff', - ], - darkA: [ - 'rgba(100, 200, 0, 0.02)', - 'rgba(154, 254, 0, 0.13)', - 'rgba(168, 250, 0, 0.22)', - 'rgba(177, 255, 0, 0.31)', - 'rgba(183, 254, 0, 0.41)', - 'rgba(188, 255, 0, 0.51)', - 'rgba(190, 253, 0, 0.62)', - 'rgba(196, 252, 37, 0.73)', - 'rgba(204, 255, 57, 0.83)', - 'rgba(209, 255, 70, 0.94)', - 'rgba(225, 254, 137, 0.97)', - 'rgba(240, 254, 192, 0.99)', - '#ffffff', - ], - light: [ - '#ffffff', - '#feffeb', - '#f9ffd8', - '#f2ffc1', - '#ebfdaf', - '#e4fc9b', - '#ddf987', - '#d5f773', - '#cdf35c', - '#c4f042', - '#769d00', - '#374f00', - '#020400', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(242, 255, 5, 0.08)', - 'rgba(218, 255, 11, 0.16)', - 'rgba(203, 255, 7, 0.25)', - 'rgba(193, 249, 5, 0.32)', - 'rgba(187, 247, 5, 0.4)', - 'rgba(183, 242, 0, 0.47)', - 'rgba(179, 240, 0, 0.55)', - 'rgba(177, 236, 0, 0.64)', - 'rgba(175, 235, 0, 0.74)', - '#769d00', - '#374f00', - '#020400', - ], - }, - magenta: { - dark: [ - '#100002', - '#350011', - '#4b001e', - '#63002d', - '#79093f', - '#8e1752', - '#a32466', - '#b8317b', - '#ce3e91', - '#e34ba9', - '#f38bcb', - '#fec5e8', - '#ffffff', - ], - darkA: [ - 'rgba(229, 0, 29, 0.07)', - 'rgba(252, 0, 81, 0.21)', - 'rgba(250, 0, 100, 0.3)', - 'rgba(254, 0, 115, 0.39)', - 'rgba(252, 19, 131, 0.48)', - 'rgba(254, 41, 146, 0.56)', - 'rgba(255, 56, 159, 0.64)', - 'rgba(252, 67, 168, 0.73)', - 'rgba(254, 77, 179, 0.81)', - 'rgba(255, 84, 190, 0.89)', - 'rgba(253, 145, 211, 0.96)', - '#fec5e8', - '#ffffff', - ], - light: [ - '#ffffff', - '#fff7f9', - '#ffeaf4', - '#ffdaee', - '#ffc7e7', - '#ffb2df', - '#ff99d6', - '#f980ca', - '#ef67ba', - '#e34ba9', - '#a32466', - '#63002d', - '#100002', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(255, 55, 105, 0.04)', - 'rgba(255, 22, 133, 0.09)', - 'rgba(255, 8, 142, 0.15)', - 'rgba(255, 0, 146, 0.22)', - 'rgba(255, 7, 152, 0.31)', - 'rgba(255, 0, 153, 0.4)', - 'rgba(243, 1, 149, 0.5)', - 'rgba(228, 2, 140, 0.6)', - 'rgba(216, 1, 134, 0.71)', - 'rgba(148, 0, 77, 0.86)', - '#63002d', - '#100002', - ], - }, - orange: { - dark: [ - '#080300', - '#271400', - '#3d2000', - '#552d00', - '#6f3a00', - '#8a4700', - '#a75400', - '#c66100', - '#e37013', - '#ff802b', - '#ffae87', - '#ffd7c8', - '#ffffff', - ], - darkA: [ - 'rgba(200, 75, 0, 0.04)', - 'rgba(244, 125, 0, 0.16)', - 'rgba(254, 133, 0, 0.24)', - 'rgba(250, 132, 0, 0.34)', - 'rgba(252, 132, 0, 0.44)', - 'rgba(251, 129, 0, 0.55)', - 'rgba(253, 127, 0, 0.66)', - 'rgba(254, 124, 0, 0.78)', - 'rgba(255, 126, 21, 0.89)', - '#ff802b', - '#ffae87', - '#ffd7c8', - '#ffffff', - ], - light: [ - '#ffffff', - '#fff9f8', - '#fff0ec', - '#ffe6dd', - '#ffd9ca', - '#ffcbb5', - '#ffbb9c', - '#ffaa7f', - '#ff975c', - '#ff802b', - '#a75400', - '#552d00', - '#080300', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(255, 55, 22, 0.03)', - 'rgba(255, 67, 17, 0.08)', - 'rgba(255, 76, 12, 0.14)', - 'rgba(255, 74, 3, 0.21)', - 'rgba(255, 76, 0, 0.29)', - 'rgba(255, 81, 1, 0.39)', - 'rgba(255, 88, 4, 0.51)', - 'rgba(255, 93, 0, 0.64)', - 'rgba(255, 102, 0, 0.83)', - '#a75400', - '#552d00', - '#080300', - ], - }, - purple: { - dark: [ - '#0d000b', - '#2e002a', - '#42003e', - '#560053', - '#670e66', - '#781e78', - '#892b8a', - '#9a399e', - '#ab46b2', - '#bd54c6', - '#d590da', - '#edc7ee', - '#ffffff', - ], - darkA: [ - 'rgba(217, 0, 183, 0.06)', - 'rgba(242, 0, 221, 0.19)', - 'rgba(254, 0, 238, 0.26)', - 'rgba(253, 0, 244, 0.34)', - 'rgba(251, 34, 249, 0.41)', - 'rgba(255, 64, 255, 0.47)', - 'rgba(249, 78, 251, 0.55)', - 'rgba(248, 92, 255, 0.62)', - 'rgba(244, 100, 254, 0.7)', - 'rgba(242, 108, 254, 0.78)', - 'rgba(248, 167, 253, 0.86)', - 'rgba(252, 212, 253, 0.94)', - '#ffffff', - ], - light: [ - '#ffffff', - '#fff6fb', - '#ffe7fd', - '#fdd6fe', - '#f6c4f8', - '#eeb1f1', - '#e49ce8', - '#d886de', - '#cb6ed2', - '#bd54c6', - '#892b8a', - '#560053', - '#0d000b', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(255, 30, 155, 0.04)', - 'rgba(255, 15, 235, 0.1)', - 'rgba(243, 14, 249, 0.17)', - 'rgba(218, 9, 226, 0.24)', - 'rgba(200, 3, 210, 0.31)', - 'rgba(186, 1, 196, 0.39)', - 'rgba(174, 3, 186, 0.48)', - 'rgba(164, 1, 176, 0.57)', - 'rgba(156, 0, 170, 0.67)', - 'rgba(113, 0, 114, 0.83)', - '#560053', - '#0d000b', - ], - }, - red: { - dark: [ - '#0f0006', - '#34001d', - '#4b002b', - '#640039', - '#7a0c46', - '#911b53', - '#a72860', - '#bf356e', - '#d7427b', - '#f04f88', - '#ff8eab', - '#ffc9d3', - '#ffffff', - ], - darkA: [ - 'rgba(250, 0, 100, 0.06)', - 'rgba(248, 0, 138, 0.21)', - 'rgba(250, 0, 143, 0.3)', - 'rgba(250, 0, 142, 0.4)', - 'rgba(254, 25, 146, 0.48)', - 'rgba(254, 47, 146, 0.57)', - 'rgba(253, 61, 145, 0.66)', - 'rgba(255, 71, 147, 0.75)', - 'rgba(253, 78, 145, 0.85)', - 'rgba(255, 84, 145, 0.94)', - '#ff8eab', - '#ffc9d3', - '#ffffff', - ], - light: [ - '#ffffff', - '#fff7f7', - '#ffeced', - '#ffdde2', - '#ffccd5', - '#ffb8c7', - '#ffa2b8', - '#ff88a8', - '#fe6998', - '#f04f88', - '#a72860', - '#640039', - '#0f0006', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(255, 55, 55, 0.04)', - 'rgba(255, 17, 30, 0.08)', - 'rgba(255, 12, 48, 0.14)', - 'rgba(255, 0, 45, 0.2)', - 'rgba(255, 1, 55, 0.28)', - 'rgba(255, 4, 63, 0.37)', - 'rgba(255, 2, 70, 0.47)', - 'rgba(253, 1, 80, 0.59)', - 'rgba(233, 0, 83, 0.69)', - 'rgba(151, 2, 68, 0.85)', - '#640039', - '#0f0006', - ], - }, - volcano: { - dark: [ - '#0c0100', - '#2f0a00', - '#451200', - '#5d1900', - '#762000', - '#8e2a07', - '#a53716', - '#bc4424', - '#d45132', - '#ec5e41', - '#ff9480', - '#ffcbc3', - '#ffffff', - ], - darkA: [ - 'rgba(240, 20, 0, 0.05)', - 'rgba(247, 53, 0, 0.19)', - 'rgba(246, 64, 0, 0.28)', - 'rgba(251, 68, 0, 0.37)', - 'rgba(251, 68, 0, 0.47)', - 'rgba(254, 75, 12, 0.56)', - 'rgba(254, 85, 34, 0.65)', - 'rgba(254, 92, 49, 0.74)', - 'rgba(255, 98, 60, 0.83)', - 'rgba(254, 101, 70, 0.93)', - '#ff9480', - '#ffcbc3', - '#ffffff', - ], - light: [ - '#ffffff', - '#fff7f6', - '#ffece9', - '#ffded9', - '#ffcec5', - '#ffbbaf', - '#ffa695', - '#ff8e78', - '#fb745a', - '#ec5e41', - '#a53716', - '#5d1900', - '#0c0100', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(255, 55, 30, 0.04)', - 'rgba(255, 44, 11, 0.09)', - 'rgba(255, 35, 2, 0.15)', - 'rgba(255, 42, 3, 0.23)', - 'rgba(255, 43, 5, 0.32)', - 'rgba(255, 43, 3, 0.42)', - 'rgba(255, 42, 0, 0.53)', - 'rgba(249, 41, 1, 0.65)', - 'rgba(230, 40, 2, 0.75)', - 'rgba(157, 38, 2, 0.92)', - '#5d1900', - '#0c0100', - ], - }, - yellow: { - dark: [ - '#050400', - '#251d00', - '#3e3300', - '#584a00', - '#736300', - '#8e7d00', - '#ab9800', - '#c7b426', - '#e3d142', - '#ffef5c', - '#fff594', - '#fffad3', - '#ffffff', - ], - darkA: [ - 'rgba(250, 200, 0, 0.02)', - 'rgba(247, 193, 0, 0.15)', - 'rgba(248, 204, 0, 0.25)', - 'rgba(251, 211, 0, 0.35)', - 'rgba(250, 215, 0, 0.46)', - 'rgba(254, 223, 0, 0.56)', - 'rgba(255, 227, 0, 0.67)', - 'rgba(255, 231, 49, 0.78)', - 'rgba(255, 235, 74, 0.89)', - '#ffef5c', - '#fff594', - '#fffad3', - '#ffffff', - ], - light: [ - '#ffffff', - '#fffeff', - '#fffcff', - '#fffbf1', - '#fffada', - '#fff9c2', - '#fff7aa', - '#fff592', - '#fff279', - '#ffef5c', - '#ab9800', - '#584a00', - '#050400', - ], - lightA: [ - 'rgba(255, 255, 255, 0.01)', - 'rgba(255, 155, 255, 0.01)', - 'rgba(255, 105, 255, 0.02)', - 'rgba(255, 188, 22, 0.06)', - 'rgba(255, 222, 8, 0.15)', - 'rgba(255, 230, 1, 0.24)', - 'rgba(255, 231, 5, 0.34)', - 'rgba(255, 232, 2, 0.43)', - 'rgba(255, 230, 2, 0.53)', - 'rgba(255, 230, 0, 0.64)', - '#ab9800', - '#584a00', - '#050400', - ], - }, -}; diff --git a/src/styles/index.ts b/src/styles/index.ts deleted file mode 100644 index 63738ce6..00000000 --- a/src/styles/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { colorScales } from './colors'; diff --git a/src/ProChat/types/chat.ts b/src/types/chat.ts similarity index 100% rename from src/ProChat/types/chat.ts rename to src/types/chat.ts diff --git a/src/ProChat/types/config.ts b/src/types/config.ts similarity index 100% rename from src/ProChat/types/config.ts rename to src/types/config.ts diff --git a/src/types/customStylish.ts b/src/types/customStylish.ts deleted file mode 100644 index d75c0ed8..00000000 --- a/src/types/customStylish.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface LobeCustomStylish { - blur: string; - blurStrong: string; - bottomScrollbar: string; - gradientAnimation: string; - markdown: string; - noScrollbar: string; - resetLinkColor: string; -} diff --git a/src/types/customToken.ts b/src/types/customToken.ts deleted file mode 100644 index 9ae52cf9..00000000 --- a/src/types/customToken.ts +++ /dev/null @@ -1,48 +0,0 @@ -const PresetColors = [ - 'red', - 'volcano', - 'orange', - 'gold', - 'yellow', - 'lime', - 'green', - 'cyan', - 'blue', - 'geekblue', - 'purple', - 'magenta', - 'gray', -] as const; - -export type PresetColorKey = (typeof PresetColors)[number]; - -export type PresetColorType = Record<PresetColorKey, string>; - -type ColorPaletteKeyIndex = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11; - -type ColorTokenKey = - | 'Bg' - | 'BgHover' - | 'Border' - | 'BorderSecondary' - | 'BorderHover' - | 'Hover' - | '' - | 'Active' - | 'TextHover' - | 'Text' - | 'TextActive'; - -export type ColorToken = { - [key in `${keyof PresetColorType}${ColorTokenKey}`]: string; -}; - -export type ColorPalettes = { - [key in `${keyof PresetColorType}${ColorPaletteKeyIndex}`]: string; -}; - -export type ColorPalettesAlpha = { - [key in `${keyof PresetColorType}${ColorPaletteKeyIndex}A`]: string; -}; - -export interface LobeCustomToken extends ColorToken, ColorPalettes, ColorPalettesAlpha {} diff --git a/src/types/index.ts b/src/types/index.ts index 04ac9ea8..216c62d1 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,10 +1,7 @@ import { type HTMLAttributes } from 'react'; -export * from './customStylish'; -export * from './customToken'; export * from './llm'; export * from './message'; -export * from './meta'; export type DivProps = HTMLAttributes<HTMLDivElement>; diff --git a/src/types/message.ts b/src/types/message.ts index a83c85ba..c196fc71 100644 --- a/src/types/message.ts +++ b/src/types/message.ts @@ -1,5 +1,6 @@ -import { ModelRoleType } from '@/ProChat/types/config'; -import { ReactNode } from 'react'; +import { ProChatMetaData } from '@/hooks/useChatList'; +import { ModelRoleType } from '@/types/config'; +import React from 'react'; /** * 聊天消息错误对象 @@ -15,7 +16,8 @@ export interface ChatMessage<T extends Record<string, any> = Record<string, any> * @title 内容 * @description 消息内容 */ - content: ReactNode; + content: React.ReactNode; + originContent?: string; error?: any; model?: string; name?: string; @@ -25,10 +27,28 @@ export interface ChatMessage<T extends Record<string, any> = Record<string, any> * @description 消息发送者的角色 */ role: ModelRoleType | string; + /** + * 创建时间 + */ createAt: number; + /** + * 唯一id + */ id: string; + /** + * 修改时间 + */ updateAt: number; + /** + * 附加数据 + * @description 如果不传则为空 + */ extra?: T; + + /** + * 模型元数据 + */ + meta?: ProChatMetaData; } export interface OpenAIFunctionCall { diff --git a/src/types/meta.ts b/src/types/meta.ts deleted file mode 100644 index 3a6b2408..00000000 --- a/src/types/meta.ts +++ /dev/null @@ -1,24 +0,0 @@ -export interface MetaData { - /** - * 角色头像 - * @description 可选参数,如果不传则使用默认头像 - */ - avatar?: string; - /** - * 背景色 - * @description 可选参数,如果不传则使用默认背景色 - */ - backgroundColor?: string; - /** - * 名称 - * @description 可选参数,如果不传则使用默认名称 - */ - title?: string; -} - -export interface BaseDataModel { - createAt: number; - id: string; - meta: MetaData; - updateAt: number; -} diff --git a/src/ProChat/utils/fetch.ts b/src/utils/fetch.ts similarity index 62% rename from src/ProChat/utils/fetch.ts rename to src/utils/fetch.ts index 8020919c..1657d801 100644 --- a/src/ProChat/utils/fetch.ts +++ b/src/utils/fetch.ts @@ -1,4 +1,4 @@ -import { ChatMessageError } from '../../types/message'; +import { ChatMessageError } from '@/types'; export const getMessageError = async (response: Response) => { let chatMessageError: ChatMessageError; @@ -11,23 +11,27 @@ export const getMessageError = async (response: Response) => { return chatMessageError; }; -type SSEFinishType = 'done' | 'error' | 'abort'; +type SSEFinishType = 'done' | 'error' | 'abort' | 'progress'; export interface FetchSSEOptions { onErrorHandle?: (error: ChatMessageError) => void; - onMessageHandle?: (text: string, response: Response) => void; + onMessageHandle?: (text: string, response: Response, type: SSEFinishType) => void; onAbort?: (text: string) => Promise<void>; onFinish?: (text: string, type: SSEFinishType) => Promise<void>; + signal?: AbortSignal; } +const waitTime = (time: number) => + new Promise((resolve) => { + setTimeout(resolve, time); + }); + /** * 使用流式方法获取数据 * @param fetchFn * @param options */ -export const fetchSSE = async (fetchFn: () => Promise<Response>, options: FetchSSEOptions = {}) => { - const response = await fetchFn(); - +export const processSSE = async (response: Response, options: FetchSSEOptions = {}) => { // 如果不 ok 说明有请求错误 if (!response.ok) { // TODO: need a message error custom parser @@ -45,15 +49,24 @@ export const fetchSSE = async (fetchFn: () => Promise<Response>, options: FetchS const reader = data.getReader(); const decoder = new TextDecoder(); - + let finishText = ''; let done = false; + options?.signal?.addEventListener('abort', async () => { + reader.cancel(); + }); + while (!done) { const { value, done: doneReading } = await reader.read(); done = doneReading; const chunkValue = decoder.decode(value, { stream: !doneReading }); + finishText += chunkValue; + await waitTime(0); + options.onMessageHandle?.(chunkValue, returnRes, done ? 'done' : 'progress'); + } - options.onMessageHandle?.(chunkValue, returnRes); + if (done) { + options.onFinish?.(finishText, 'done'); } return returnRes; diff --git a/src/ChatItem/utils/formatTime.ts b/src/utils/formatTime.ts similarity index 100% rename from src/ChatItem/utils/formatTime.ts rename to src/utils/formatTime.ts diff --git a/src/ProChat/utils/merge.ts b/src/utils/merge.ts similarity index 100% rename from src/ProChat/utils/merge.ts rename to src/utils/merge.ts diff --git a/src/utils/useStyle/index.ts b/src/utils/useStyle/index.ts new file mode 100644 index 00000000..ca96a9b7 --- /dev/null +++ b/src/utils/useStyle/index.ts @@ -0,0 +1,95 @@ +import type { CSSInterpolation } from '@ant-design/cssinjs'; +import { useStyleRegister as useDefaultStyleRegister } from '@ant-design/cssinjs'; + +import { ConfigProvider as AntdConfigProvider, theme as antdTheme } from 'antd'; +import type { GlobalToken } from 'antd/lib/theme/interface'; +import type React from 'react'; +import { useContext } from 'react'; + +export type GenerateStyle< + ComponentToken extends object = GlobalToken, + ReturnType = CSSInterpolation, +> = (token: ComponentToken, ...rest: any[]) => ReturnType; + +export type UseStyleResult = { + wrapSSR: (node: React.ReactElement) => React.ReactElement; + hashId: string; +}; + +export type ChatTokenType = GlobalToken & { + themeId: number; + /** + * prochat 的 className + * @type {string} + * @example .ant-pro + */ + chatCls: string; + /** + * antd 的 className + * @type {string} + * @example .ant + */ + antCls: string; + /** + * 组件的 className + */ + componentCls?: string; +}; + +export const resetComponent: GenerateStyle<ChatTokenType> = (token: ChatTokenType) => ({ + boxSizing: 'border-box', + margin: 0, + padding: 0, + color: token.colorText, + fontSize: token.fontSize, + lineHeight: token.lineHeight, + listStyle: 'none', +}); + +export const operationUnit: GenerateStyle<ChatTokenType> = (token: ChatTokenType) => ({ + // FIXME: This use link but is a operation unit. Seems should be a colorPrimary. + // And Typography use this to generate link style which should not do this. + color: token.colorLink, + outline: 'none', + cursor: 'pointer', + transition: `color ${token.motionDurationSlow}`, + + '&:focus, &:hover': { + color: token.colorLinkHover, + }, + + '&:active': { + color: token.colorLinkActive, + }, +}); + +/** + * 封装了一下 antd 的 useStyle,支持了一下antd@4 + * @param componentName {string} 组件的名字 + * @param styleFn {GenerateStyle} 生成样式的函数 + * @returns UseStyleResult + */ +export function useProChatStyleRegister( + componentName: string, + styleFn: (token: ChatTokenType) => CSSInterpolation, +) { + const { token, theme, hashId } = antdTheme.useToken(); + const chatToken = { ...token, chatCls: '', antCls: '' }; + const { getPrefixCls } = useContext(AntdConfigProvider.ConfigContext); + + chatToken.chatCls = `.${getPrefixCls('pro-chat')}`; + chatToken.antCls = `.${getPrefixCls()}`; + + return { + wrapSSR: useDefaultStyleRegister( + { + theme: theme as any, + token, + hashId, + path: [`ProChat${componentName}`], + }, + () => styleFn(token as ChatTokenType), + ), + hashId, + }; +} diff --git a/src/utils/uuid.ts b/src/utils/uuid.ts new file mode 100644 index 00000000..8328b852 --- /dev/null +++ b/src/utils/uuid.ts @@ -0,0 +1,8 @@ +export const genUUID = () => { + if (crypto.randomUUID) { + return crypto.randomUUID(); + } + const random = new Uint32Array(4); + window.crypto.getRandomValues(random); + return window.crypto.getRandomValues(random).join('-'); +}; diff --git a/tests/demo.tsx b/tests/demo.tsx index 222e6802..73568d54 100644 --- a/tests/demo.tsx +++ b/tests/demo.tsx @@ -5,7 +5,7 @@ import { afterEach, beforeEach, describe, it, vi } from 'vitest'; import { resetMockDate, setMockDate } from './utils'; // 特殊情况略过 snapshot 的文件 -const NotSnapshotFileList = ['renderInputArea.tsx']; +const NotSnapshotFileList = ['inputAreaRender.tsx']; function demoTest(component: string) { beforeEach(() => { diff --git a/tsconfig.json b/tsconfig.json index 5c6268c3..69eba97f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,24 @@ { - "include": ["src", "tests", ".dumirc.ts", "*.ts"], + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"], "compilerOptions": { "strict": false, "declaration": true, "skipLibCheck": true, - "esModuleInterop": true, - "resolveJsonModule": true, "jsx": "react-jsx", - "types": ["vitest/globals", "@testing-library/jest-dom"], "baseUrl": "./", + "allowJs": true, + "incremental": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "paths": { "@@/*": [".dumi/tmp/*"], "@/*": ["src/*"], - "@ant-design/pro-chat": ["src"], + "@ant-design/pro-chat": ["./src"], "@ant-design/pro-chat/*": ["src/*"] } }