From bcab56da8246b2c8292631a749b7c3f14a1649bb Mon Sep 17 00:00:00 2001 From: Greg Joseph Date: Mon, 15 Jun 2026 14:49:12 -0700 Subject: [PATCH] chore: deprecate @microsoft/sharepointembedded-copilotchat-react The @microsoft/sharepointembedded-copilotchat-react SDK is being deprecated. This PR removes every consumer of the SDK from the samples repo so the surface no longer advertises or depends on it. Removed across three samples (boilerplate-typescript-react, project-management, legal-docs): - Copilot chat components, hooks, providers, and services - The vendored SDK copy and tarball in legal-docs - The SDK dependency entry in each package.json (lockfiles regenerated) - Copilot-only config (sharePointHostname, COPILOT_CONFIG, SharePoint container scopes, copilotTheme), the SharePoint token acquisition helpers that only existed to bootstrap the SDK, and the dead Vite alias/dedupe blocks added to load the SDK shim - UI affordances that opened the chat panel (toolbar buttons, flyout entries, resizable panels) and their dead CSS - The AI prompt recipes that targeted this SDK (contoso-audit-agent, contoso-legal-agent) Documentation: - Root README and Custom Apps README no longer advertise "Copilot SDK" / "AI-assisted document review" for legal-docs - legal-docs README drops the Copilot integration bullet Verification: - npm install + npm run build pass for all three samples Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- AI/prompts/contoso-audit-agent.md | 145 - AI/prompts/contoso-legal-agent.md | 145 - Custom Apps/README.md | 2 +- .../react-client/package-lock.json | 11 - .../react-client/package.json | 1 - .../react-client/src/common/Scopes.ts | 7 - .../src/components/ChatSidebar.tsx | 56 - .../src/providers/ChatAuthProvider.ts | 78 - .../src/providers/ChatController.ts | 103 - .../react-client/src/routes/App.css | 50 - .../react-client/src/routes/App.tsx | 59 - .../react-client/src/routes/Containers.tsx | 4 - Custom Apps/legal-docs/README.md | 6 +- ...epointembedded-copilotchat-react-1.0.9.tgz | Bin 37848 -> 0 bytes Custom Apps/legal-docs/package-lock.json | 4852 ++++++++--------- Custom Apps/legal-docs/package.json | 1 - .../legal-docs/src/components/CopilotChat.tsx | 210 - .../src/components/CustomCopilotChat.tsx | 286 - .../src/components/FloatingCopilotIcon.tsx | 95 - .../src/components/FlyoutButtons.tsx | 10 +- .../components/copilot/CopilotAuthProvider.ts | 58 - .../copilot/CopilotChatContainer.tsx | 171 - .../components/copilot/CopilotDesktopView.tsx | 396 -- .../copilot/CopilotErrorBoundary.tsx | 100 - .../components/copilot/InlineCopilotChat.tsx | 241 - .../src/components/copilot/SDKCopilotChat.tsx | 204 - .../src/components/copilot/index.ts | 11 - .../src/components/panels/CopilotPanel.tsx | 24 - .../legal-docs/src/config/appConfig.ts | 34 +- .../legal-docs/src/config/sharepoint.ts | 33 +- .../legal-docs/src/context/AuthContext.tsx | 12 +- .../legal-docs/src/hooks/useCopilotSite.ts | 130 - .../index.tsx | 228 - .../legal-docs/src/pages/Dashboard.tsx | 19 - .../legal-docs/src/services/copilotChat.ts | 351 -- Custom Apps/legal-docs/tsconfig.app.json | 3 - Custom Apps/legal-docs/vite.config.ts | 21 - Custom Apps/project-management/package.json | 1 - .../src/components/CopilotChat.tsx | 88 - .../copilot/CopilotChatContainer.tsx | 167 - .../components/copilot/CopilotDesktopView.tsx | 166 - .../components/copilot/CopilotMobileView.tsx | 82 - .../src/config/appConfig.ts | 32 - .../src/context/AuthContext.tsx | 18 +- .../src/hooks/useCopilotSite.ts | 142 - .../project-management/src/pages/Files.tsx | 92 +- README.md | 2 +- 47 files changed, 2391 insertions(+), 6556 deletions(-) delete mode 100644 AI/prompts/contoso-audit-agent.md delete mode 100644 AI/prompts/contoso-legal-agent.md delete mode 100644 Custom Apps/boilerplate-typescript-react/react-client/src/components/ChatSidebar.tsx delete mode 100644 Custom Apps/boilerplate-typescript-react/react-client/src/providers/ChatAuthProvider.ts delete mode 100644 Custom Apps/boilerplate-typescript-react/react-client/src/providers/ChatController.ts delete mode 100644 Custom Apps/legal-docs/lib/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz delete mode 100644 Custom Apps/legal-docs/src/components/CopilotChat.tsx delete mode 100644 Custom Apps/legal-docs/src/components/CustomCopilotChat.tsx delete mode 100644 Custom Apps/legal-docs/src/components/FloatingCopilotIcon.tsx delete mode 100644 Custom Apps/legal-docs/src/components/copilot/CopilotAuthProvider.ts delete mode 100644 Custom Apps/legal-docs/src/components/copilot/CopilotChatContainer.tsx delete mode 100644 Custom Apps/legal-docs/src/components/copilot/CopilotDesktopView.tsx delete mode 100644 Custom Apps/legal-docs/src/components/copilot/CopilotErrorBoundary.tsx delete mode 100644 Custom Apps/legal-docs/src/components/copilot/InlineCopilotChat.tsx delete mode 100644 Custom Apps/legal-docs/src/components/copilot/SDKCopilotChat.tsx delete mode 100644 Custom Apps/legal-docs/src/components/copilot/index.ts delete mode 100644 Custom Apps/legal-docs/src/components/panels/CopilotPanel.tsx delete mode 100644 Custom Apps/legal-docs/src/hooks/useCopilotSite.ts delete mode 100644 Custom Apps/legal-docs/src/lib/sharepointembedded-copilotchat-react/index.tsx delete mode 100644 Custom Apps/legal-docs/src/services/copilotChat.ts delete mode 100644 Custom Apps/project-management/src/components/CopilotChat.tsx delete mode 100644 Custom Apps/project-management/src/components/copilot/CopilotChatContainer.tsx delete mode 100644 Custom Apps/project-management/src/components/copilot/CopilotDesktopView.tsx delete mode 100644 Custom Apps/project-management/src/components/copilot/CopilotMobileView.tsx delete mode 100644 Custom Apps/project-management/src/hooks/useCopilotSite.ts diff --git a/AI/prompts/contoso-audit-agent.md b/AI/prompts/contoso-audit-agent.md deleted file mode 100644 index 35fc044..0000000 --- a/AI/prompts/contoso-audit-agent.md +++ /dev/null @@ -1,145 +0,0 @@ - -Add the SharePoint Embedded copilot chat control on a expandable panel on the right side of the File List page. - ------------------------------------------------ -0. USER EXPERIENCE ------------------------------------------------ -- Expandable panel should show up only on the File List page by clicking an "AI Assistant" button -- Expandable panel should show inline with the other page content -- it should not overlap it and the other page content should compress to let it fit -- Panel visibility can be toggled and resized -- IMPORTANT: Make sure the height of the chat control fits into the visible device height - ------------------------------------------------ -1. REQUIRED CONFIGURATION ------------------------------------------------ -- must install the npm library directly using `npm install "https://download.microsoft.com/download/e2d6b1ec-7168-4787-b8de-4a9862f10744/microsoft-sharepointembedded-copilotchat-react-1.0.8.tgz"` -- IMPORTANT: the chat library is NOT listed in the npm registry, you MUST install it with it's full url from https://download.microsoft.com/download/e2d6b1ec-7168-4787-b8de-4a9862f10744/microsoft-sharepointembedded-copilotchat-react-1.0.8.tgz -- add the following to the central configuration file. - -SP_HOST=[url] - - ------------------------------------------------ -2. AUTHENTICAION ------------------------------------------------ -Create a new auth function called `requestSPOAccessToken` that will use MSAL to get another access token for the following scope: - -`${SP_HOST}/Container.Selected` - -IMPORTANT -- DO NOT try to get an access token that has both Graph and SPO scopes -- they must be kept separate -- ONLY use the SPO access token with the chat control. All other requests to Graph APIs need to use the Graph access token - ------------------------------------------------ -3. SHOWING THE CHAT CONTROL ------------------------------------------------ -Use the following example TypeScript code to load the SharePoint Embedded chat control as a React component - -```typescript -import React from 'react'; -import { - ChatEmbedded, - ChatEmbeddedAPI, - ChatLaunchConfig, - IChatEmbeddedApiAuthProvider -} from '@microsoft/sharepointembedded-copilotchat-react'; - -//... -async function requestSPOAccessToken() { - //... -} - -const authProvider: IChatEmbeddedApiAuthProvider = { - hostname: $SP_HOST, - getToken: requestSPOAccessToken, -}; - -function App() { - const [chatApi, setChatApi] = React.useState(null); - - const chatTheme: IThemeOptions = { - useDarkMode: false, - customTheme: { - themePrimary: '#4854EE', - themeSecondary: '#4854EE', - themeDark: '#4854EE', - themeDarker: '#4854EE', - themeTertiary: '#4854EE', - themeLight: '#dddeef', - themeDarkAlt: '#4854EE', - themeLighter: '#dddeef', - themeLighterAlt: '#dddeef', - themeDarkAltTransparent: '#4854EE', - themeLighterTransparent: '#dddeef', - themeLighterAltTransparent: '#dddeef', - themeMedium: '#4854EE', - neutralSecondary: '#4854EE', - neutralSecondaryAlt: '#4854EE', - neutralTertiary: '#4854EE', - neutralTertiaryAlt: '#4854EE', - neutralQuaternary: '#4854EE', - neutralQuaternaryAlt: '#4854EE', - neutralPrimaryAlt: '#4854EE', - neutralDark: '#4854EE', - themeBackground: 'white', - } - }; - - const prompts = { - headerText: `Chat with content in ${container.displayName}`, - promptSuggestionList: [ - { - suggestionText: 'Show me recent files', - iconRegular: { name: IconName.ChatBubblesQuestion, style: IconStyle.Regular }, - iconHover: { name: IconName.ChatBubblesQuestion, style: IconStyle.Filled }, - }, - { - suggestionText: "Make a table of marketing expenses over the past five years", - iconRegular: { name: IconName.DocumentCatchUp, style: IconStyle.Regular }, - iconHover: { name: IconName.DocumentCatchUp, style: IconStyle.Filled }, - }, - // Add two more suggested prompts - ] - } - - const chatConfig: ChatLaunchConfig = { - header: `Contoso Audit - ${container.displayName}`, - theme: chatTheme, - zeroQueryPrompts: prompts, - instruction: "You are a helpful assistant that auditors use to find and summarize information related to auditing cases. Make sure you include references to the documents data comes from when possible. ", - locale: "en", - }; - - React.useEffect(() => { - const openChat = async () => { - if (!chatApi) { - return; - } - - await chatApi.openChat(chatConfig); - }; - - openChat(); - }, [chatApi]); - - - return ( - //... - setChatApi(api)} - authProvider={authProvider} - containerId={container.id} - style={{ width: 'calc(100% - 4px)', height: 'calc(100vh - 8px)' }} - /> - //... - ); -} -``` ------------------------------------------------ -4. CUSTOMIZE THE CHAT CONTROL ------------------------------------------------ -Customize the chat control header, theme, prompts, and instruction to match the Contoso Audit application - -- override the default theme colors in the sample code to match the rest of the Contoso Audit app -- set the header, theme, prompts, and instruction to create a useful agent that can help users summarize and ask questions about the content within an audit case (container) - diff --git a/AI/prompts/contoso-legal-agent.md b/AI/prompts/contoso-legal-agent.md deleted file mode 100644 index 1f36c28..0000000 --- a/AI/prompts/contoso-legal-agent.md +++ /dev/null @@ -1,145 +0,0 @@ - -Add the SharePoint Embedded copilot chat control on a expandable panel on the right side of the File List page. - ------------------------------------------------ -0. USER EXPERIENCE ------------------------------------------------ -- Expandable panel should show up only on the File List page by clicking an "AI Assistant" button -- Expandable panel should show inline with the other page content -- it should not overlap it and the other page content should compress to let it fit -- Panel visibility can be toggled and resized -- IMPORTANT: Make sure the height of the chat control fits into the visible device height - ------------------------------------------------ -1. REQUIRED CONFIGURATION ------------------------------------------------ -- must install the npm library directly using `npm install "https://download.microsoft.com/download/e2d6b1ec-7168-4787-b8de-4a9862f10744/microsoft-sharepointembedded-copilotchat-react-1.0.8.tgz"` -- IMPORTANT: the chat library is NOT listed in the npm registry, you MUST install it with it's full url from https://download.microsoft.com/download/e2d6b1ec-7168-4787-b8de-4a9862f10744/microsoft-sharepointembedded-copilotchat-react-1.0.8.tgz -- add the following to the central configuration file. - -SP_HOST=[url] - - ------------------------------------------------ -2. AUTHENTICAION ------------------------------------------------ -Create a new auth function called `requestSPOAccessToken` that will use MSAL to get another access token for the following scope: - -`${SP_HOST}/Container.Selected` - -IMPORTANT -- DO NOT try to get an access token that has both Graph and SPO scopes -- they must be kept separate -- ONLY use the SPO access token with the chat control. All other requests to Graph APIs need to use the Graph access token - ------------------------------------------------ -3. SHOWING THE CHAT CONTROL ------------------------------------------------ -Use the following example TypeScript code to load the SharePoint Embedded chat control as a React component - -```typescript -import React from 'react'; -import { - ChatEmbedded, - ChatEmbeddedAPI, - ChatLaunchConfig, - IChatEmbeddedApiAuthProvider -} from '@microsoft/sharepointembedded-copilotchat-react'; - -//... -async function requestSPOAccessToken() { - //... -} - -const authProvider: IChatEmbeddedApiAuthProvider = { - hostname: $SP_HOST, - getToken: requestSPOAccessToken, -}; - -function App() { - const [chatApi, setChatApi] = React.useState(null); - - const chatTheme: IThemeOptions = { - useDarkMode: false, - customTheme: { - themePrimary: '#4854EE', - themeSecondary: '#4854EE', - themeDark: '#4854EE', - themeDarker: '#4854EE', - themeTertiary: '#4854EE', - themeLight: '#dddeef', - themeDarkAlt: '#4854EE', - themeLighter: '#dddeef', - themeLighterAlt: '#dddeef', - themeDarkAltTransparent: '#4854EE', - themeLighterTransparent: '#dddeef', - themeLighterAltTransparent: '#dddeef', - themeMedium: '#4854EE', - neutralSecondary: '#4854EE', - neutralSecondaryAlt: '#4854EE', - neutralTertiary: '#4854EE', - neutralTertiaryAlt: '#4854EE', - neutralQuaternary: '#4854EE', - neutralQuaternaryAlt: '#4854EE', - neutralPrimaryAlt: '#4854EE', - neutralDark: '#4854EE', - themeBackground: 'white', - } - }; - - const prompts = { - headerText: `Chat with content in ${container.displayName}`, - promptSuggestionList: [ - { - suggestionText: 'Show me recent files', - iconRegular: { name: IconName.ChatBubblesQuestion, style: IconStyle.Regular }, - iconHover: { name: IconName.ChatBubblesQuestion, style: IconStyle.Filled }, - }, - { - suggestionText: "Make a table of marketing expenses over the past five years", - iconRegular: { name: IconName.DocumentCatchUp, style: IconStyle.Regular }, - iconHover: { name: IconName.DocumentCatchUp, style: IconStyle.Filled }, - }, - // Add two more suggested prompts - ] - } - - const chatConfig: ChatLaunchConfig = { - header: `Contoso Audit - ${container.displayName}`, - theme: chatTheme, - zeroQueryPrompts: prompts, - instruction: "You are a helpful assistant that auditors use to find and summarize information related to auditing cases. Make sure you include references to the documents data comes from when possible. ", - locale: "en", - }; - - React.useEffect(() => { - const openChat = async () => { - if (!chatApi) { - return; - } - - await chatApi.openChat(chatConfig); - }; - - openChat(); - }, [chatApi]); - - - return ( - //... - setChatApi(api)} - authProvider={authProvider} - containerId={container.id} - style={{ width: 'calc(100% - 4px)', height: 'calc(100vh - 8px)' }} - /> - //... - ); -} -``` ------------------------------------------------ -4. CUSTOMIZE THE CHAT CONTROL ------------------------------------------------ -Customize the chat control header, theme, prompts, and instruction to match the Contoso Legal application - -- override the default theme colors in the sample code to match the rest of the Contoso Legal app -- set the header, theme, prompts, and instruction to create a useful agent that can help users summarize and ask questions about the content within an legal case (container) - diff --git a/Custom Apps/README.md b/Custom Apps/README.md index ca08dbe..952b9bc 100644 --- a/Custom Apps/README.md +++ b/Custom Apps/README.md @@ -7,7 +7,7 @@ Runnable sample applications demonstrating SharePoint Embedded integration patte | [boilerplate-react-azurefunction](./boilerplate-react-azurefunction) | React + Azure Functions | Reference boilerplate: SPA with an Azure Functions OBO proxy | | [boilerplate-aspnet-webservice](./boilerplate-aspnet-webservice) | C# / ASP.NET Core | Reference boilerplate: server-side MVC app with tenant onboarding | | [boilerplate-typescript-react](./boilerplate-typescript-react) | TypeScript + React + Azure Functions | TypeScript variant of the React boilerplate | -| [legal-docs](./legal-docs) | React + Fluent UI + Copilot SDK | Legal case management with AI-assisted document review | +| [legal-docs](./legal-docs) | React + Fluent UI | Legal case management sample | | [project-management](./project-management) | React + Vite + Tailwind + shadcn-ui | Project collaboration app | | [webhook](./webhook) | Node.js | Minimal Graph API change notification listener | diff --git a/Custom Apps/boilerplate-typescript-react/react-client/package-lock.json b/Custom Apps/boilerplate-typescript-react/react-client/package-lock.json index 2b28752..1216b11 100644 --- a/Custom Apps/boilerplate-typescript-react/react-client/package-lock.json +++ b/Custom Apps/boilerplate-typescript-react/react-client/package-lock.json @@ -17,7 +17,6 @@ "@microsoft/mgt-msal2-provider": "^4.2.1", "@microsoft/mgt-react": "^4.2.1", "@microsoft/microsoft-graph-client": "^3.0.7", - "@microsoft/sharepointembedded-copilotchat-react": "https://download.microsoft.com/download/970802a5-2a7e-44ed-b17d-ad7dc99be312/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz", "@types/node": "^20.12.7", "@types/react": "^18.2.79", "@types/react-dom": "^18.2.25", @@ -5080,16 +5079,6 @@ "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types-beta/-/microsoft-graph-types-beta-0.29.0-preview.tgz", "integrity": "sha512-83PCHDH7GxW8KM1J+MM6FPbaahIuj7VIgnY4UbMGQkkq2fBaHeKOmgjVbohvLVeIOOCTLmorPh6JtXH0VtFurA==" }, - "node_modules/@microsoft/sharepointembedded-copilotchat-react": { - "version": "1.0.9", - "resolved": "https://download.microsoft.com/download/970802a5-2a7e-44ed-b17d-ad7dc99be312/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz", - "integrity": "sha512-mwtB7OOvyox5Mzhpozz/45eq3kYV+DaVNTDxwXC4n5+HnAQabFia1GIWpTVXFAi3Ajp5LNORmWYHIoJBEY23rg==", - "peerDependencies": { - "@fluentui/react": ">=8.1.0", - "react": ">=17.0.2", - "react-dom": ">=17.0.2" - } - }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", diff --git a/Custom Apps/boilerplate-typescript-react/react-client/package.json b/Custom Apps/boilerplate-typescript-react/react-client/package.json index d51abec..27c61e8 100644 --- a/Custom Apps/boilerplate-typescript-react/react-client/package.json +++ b/Custom Apps/boilerplate-typescript-react/react-client/package.json @@ -12,7 +12,6 @@ "@microsoft/mgt-msal2-provider": "^4.2.1", "@microsoft/mgt-react": "^4.2.1", "@microsoft/microsoft-graph-client": "^3.0.7", - "@microsoft/sharepointembedded-copilotchat-react": "https://download.microsoft.com/download/970802a5-2a7e-44ed-b17d-ad7dc99be312/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz", "@types/node": "^20.12.7", "@types/react": "^18.2.79", "@types/react-dom": "^18.2.25", diff --git a/Custom Apps/boilerplate-typescript-react/react-client/src/common/Scopes.ts b/Custom Apps/boilerplate-typescript-react/react-client/src/common/Scopes.ts index 20ae417..d892c2c 100644 --- a/Custom Apps/boilerplate-typescript-react/react-client/src/common/Scopes.ts +++ b/Custom Apps/boilerplate-typescript-react/react-client/src/common/Scopes.ts @@ -31,10 +31,3 @@ export const SAMPLE_API_SCOPES = SAMPLE_API_CONTAINER_MANAGE ? [SAMPLE_API_CONTAINER_MANAGE] : undefined; -// sharepoint scopes -export const SP_CONTAINER_SELECTED = `${Constants.SP_ROOT_SITE_URL}/Container.Selected`; - -// embedded chat scopes -export const CHAT_SCOPES = [ - SP_CONTAINER_SELECTED -]; diff --git a/Custom Apps/boilerplate-typescript-react/react-client/src/components/ChatSidebar.tsx b/Custom Apps/boilerplate-typescript-react/react-client/src/components/ChatSidebar.tsx deleted file mode 100644 index 0284e55..0000000 --- a/Custom Apps/boilerplate-typescript-react/react-client/src/components/ChatSidebar.tsx +++ /dev/null @@ -1,56 +0,0 @@ - -import React from "react"; -import { ChatAuthProvider } from "../providers/ChatAuthProvider"; -import { ChatController } from "../providers/ChatController"; -import { ChatEmbedded, ChatEmbeddedAPI, ChatLaunchConfig } from '@microsoft/sharepointembedded-copilotchat-react'; -import { IContainer } from '../../../common/schemas/ContainerSchemas'; - - - -interface ChatSidebarProps { - - container: IContainer; - -} - - -export const ChatSidebar: React.FunctionComponent = ({ container }) => { - - - return (<> - - ); -} - -/* - const [chatAuthProvider, setChatAuthProvider] = React.useState(); - - const [chatConfig] = React.useState({ - header: ChatController.instance.header, - theme: ChatController.instance.theme, - zeroQueryPrompts: ChatController.instance.zeroQueryPrompts, - suggestedPrompts: ChatController.instance.suggestedPrompts, - instruction: ChatController.instance.pirateMetaPrompt, - locale: ChatController.instance.locale, - }); - - - const onApiReady = async (api: ChatEmbeddedAPI) => { - await api.openChat(chatConfig); - ChatController.instance.addDataSourceSubscriber(dataSources => { - api.setDataSources(dataSources); - }); - } - - ChatAuthProvider.getInstance().then(setChatAuthProvider).catch(console.error); - - return (<> - {chatAuthProvider && ( - - )} - ); -*/ \ No newline at end of file diff --git a/Custom Apps/boilerplate-typescript-react/react-client/src/providers/ChatAuthProvider.ts b/Custom Apps/boilerplate-typescript-react/react-client/src/providers/ChatAuthProvider.ts deleted file mode 100644 index 9830033..0000000 --- a/Custom Apps/boilerplate-typescript-react/react-client/src/providers/ChatAuthProvider.ts +++ /dev/null @@ -1,78 +0,0 @@ - -import { InteractionRequiredAuthError, PublicClientApplication } from '@azure/msal-browser'; -import * as Constants from '../common/Constants'; -import { GraphProvider } from './GraphProvider'; - -export class ChatAuthProvider { - - private static _instance?: ChatAuthProvider; - private _client: PublicClientApplication; - - public static async getInstance(): Promise { - if (!ChatAuthProvider._instance) { - const spHostname = await GraphProvider.instance.getSpUrl(); - ChatAuthProvider._instance = new ChatAuthProvider(spHostname); - await ChatAuthProvider._instance.initialize(); - } - return ChatAuthProvider._instance; - } - - private constructor(public readonly hostname: string) { - this._client = new PublicClientApplication({ - auth: { - clientId: Constants.AZURE_CLIENT_ID!, - authority: Constants.AUTH_AUTHORITY, - redirectUri: window.location.origin, - }, - cache: { - // https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/caching.md - /* - Cache Location | Cleared on | Shared between windows/tabs | Redirect flow supported - ----------------- ---------- ------------------------- ------------------------ - sessionStorage | window/tab close | No | Yes - localStorage | browser close | Yes | Yes - memoryStorage | page | refresh/navigation | No | No - */ - cacheLocation: 'localStorage', - storeAuthStateInCookie: true - }, - }); - } - - protected async initialize(): Promise { - await this._client.initialize(); - } - - public get scopes(): string[] { - return [ - `${this.hostname}/Container.Selected` - ]; - } - - public async login(): Promise { - await this._client.loginPopup({ - scopes: this.scopes, - prompt: 'select_account', - }); - } - - public async getToken(): Promise { - try { - if (!this._client.getActiveAccount()) { - throw new InteractionRequiredAuthError('no_account', 'No account is signed in'); - } - const response = await this._client.acquireTokenSilent({ - scopes: this.scopes - }); - return response.accessToken; - } catch (error) { - if (error instanceof InteractionRequiredAuthError) { - const response = await this._client.acquireTokenPopup({ - scopes: this.scopes - }); - return response.accessToken; - } - throw error; - } - } -} \ No newline at end of file diff --git a/Custom Apps/boilerplate-typescript-react/react-client/src/providers/ChatController.ts b/Custom Apps/boilerplate-typescript-react/react-client/src/providers/ChatController.ts deleted file mode 100644 index ef25265..0000000 --- a/Custom Apps/boilerplate-typescript-react/react-client/src/providers/ChatController.ts +++ /dev/null @@ -1,103 +0,0 @@ - -import { - DataSourceType, - IDataSourcesProps, - IconName, - IconStyle, - IThemeOptions -} from '@microsoft/sharepointembedded-copilotchat-react'; -import { IContainer } from "../../../common/schemas/ContainerSchemas"; - -export class ChatController { - public static readonly instance = new ChatController(); - private constructor() { } - - public get dataSources(): IDataSourcesProps[] { - const sources: IDataSourcesProps[] = []; - - for (const container of this._selectedContainers) { - if (!container || !container.drive) { - continue; - } - sources.push({ - type: DataSourceType.DocumentLibrary, - value: { - name: container.displayName, - url: container.drive!.webUrl - } - }); - } - - return sources; - } - private _dataSourceSubscribers: ((dataSources: IDataSourcesProps[]) => void)[] = []; - public addDataSourceSubscriber(subscriber: (dataSources: IDataSourcesProps[]) => void) { - this._dataSourceSubscribers.push(subscriber); - } - public removeDataSourceSubscriber(subscriber: (dataSources: IDataSourcesProps[]) => void) { - this._dataSourceSubscribers = this._dataSourceSubscribers.filter(s => s !== subscriber); - } - - private _selectedContainers: IContainer[] = []; - public get selectedContainers(): IContainer[] { - return this._selectedContainers; - } - public set selectedContainers(value: IContainer[]) { console.log(value); - this._selectedContainers = value; - this._dataSourceSubscribers.forEach(subscriber => subscriber(this.dataSources)); - } - - - public readonly header = "SharePoint Embedded Chat"; - public readonly theme: IThemeOptions = { - useDarkMode: false, - customTheme: { - themePrimary: '#4854EE', - themeSecondary: '#4854EE', - themeDark: '#4854EE', - themeDarker: '#4854EE', - themeTertiary: '#4854EE', - themeLight: '#dddeef', - themeDarkAlt: '#4854EE', - themeLighter: '#dddeef', - themeLighterAlt: '#dddeef', - themeDarkAltTransparent: '#4854EE', - themeLighterTransparent: '#dddeef', - themeLighterAltTransparent: '#dddeef', - themeMedium: '#4854EE', - neutralSecondary: '#4854EE', - neutralSecondaryAlt: '#4854EE', - neutralTertiary: '#4854EE', - neutralTertiaryAlt: '#4854EE', - neutralQuaternary: '#4854EE', - neutralQuaternaryAlt: '#4854EE', - neutralPrimaryAlt: '#4854EE', - neutralDark: '#4854EE', - themeBackground: 'white', - } - }; - - public readonly zeroQueryPrompts = { - headerText: "SharePoint Embedded Chat: How can I help you today?", - promptSuggestionList: [ - { - suggestionText: 'Show me recent files', - iconRegular: { name: IconName.ChatBubblesQuestion, style: IconStyle.Regular }, - iconHover: { name: IconName.ChatBubblesQuestion, style: IconStyle.Filled }, - }, - { - suggestionText: 'What is SharePoint Embedded?', - iconRegular: { name: IconName.DocumentCatchUp, style: IconStyle.Regular }, - iconHover: { name: IconName.DocumentCatchUp, style: IconStyle.Filled }, - } - ] - }; - - public readonly suggestedPrompts = [ - "List and summarize recent files", - ]; - - public readonly pirateMetaPrompt = "Response must be in the tone of a pirate. Yarrr!"; - - public readonly locale = "en"; -} \ No newline at end of file diff --git a/Custom Apps/boilerplate-typescript-react/react-client/src/routes/App.css b/Custom Apps/boilerplate-typescript-react/react-client/src/routes/App.css index 339fa60..ee4cb16 100644 --- a/Custom Apps/boilerplate-typescript-react/react-client/src/routes/App.css +++ b/Custom Apps/boilerplate-typescript-react/react-client/src/routes/App.css @@ -170,56 +170,6 @@ body { border: 1px solid #CCC; } -.spe-app-content-sidebar { - flex: 1; - min-width: 400px; - width: 450px; - overflow: auto; - position: relative; - background-color: white; -} - -#sharepoint-embedded-chat { - background-color: #FFFFFF; - border-radius: 0px 0px 3px 3px; - width: 100%; - height: 92vh; - border: 0px; -} - -.sidebar-resizer { - min-width: 10px; - max-width: 10px; - width: 10px; - height: 100%; - cursor: col-resize; - background-color: black; - opacity: 0; - - z-index: 2; - position: absolute; - top: 0; - left: 0; -} - -.sidebar-resizer:hover { - opacity: 0.3; -} - -.sidebar-content { - height: 100%; - min-width: 100%; - max-width: 100%; - width: 100%; - overflow: auto; - - - position: absolute; - top: 0; - left: 0; -} - - .container-browser { display: flex; flex-direction: column; diff --git a/Custom Apps/boilerplate-typescript-react/react-client/src/routes/App.tsx b/Custom Apps/boilerplate-typescript-react/react-client/src/routes/App.tsx index 281d576..889e54c 100644 --- a/Custom Apps/boilerplate-typescript-react/react-client/src/routes/App.tsx +++ b/Custom Apps/boilerplate-typescript-react/react-client/src/routes/App.tsx @@ -24,13 +24,11 @@ import { ToolbarButton, webDarkTheme, webLightTheme, - Spinner } from "@fluentui/react-components"; import { Map20Regular, People20Regular, MoreVertical24Filled, - Chat32Regular, SignOut24Filled, } from '@fluentui/react-icons'; import './App.css'; @@ -38,7 +36,6 @@ import * as Constants from '../common/Constants'; import { ContainerSelector } from '../components/ContainerSelector'; import { IContainer } from '../../../common/schemas/ContainerSchemas'; import { CreateContainerButton } from '../components/CreateContainerButton'; -import { ChatSidebar } from '../components/ChatSidebar'; import { Outlet, useOutletContext } from "react-router-dom"; type ContextType = { @@ -76,14 +73,6 @@ function App() { const mainContentRef = React.useRef(null); const loginRef = React.useRef(null); - const [showSidebar, setShowSidebar] = useState(false); - const sidebarRef = React.useRef(null); - const sidebarResizerRef = React.useRef(null); - - const toggleSidebar = () => { - setShowSidebar(!showSidebar); - } - const signOut = () => { Providers.globalProvider.logout!(); } @@ -94,29 +83,6 @@ function App() { setSearchQuery(`${termQuery} AND ${baseSearchQuery}`); }, [baseSearchQuery]); - const onResizerMouseDown = (e: React.MouseEvent) => { - if (!sidebarRef.current) { - return; - } - const minSidebarWidth = 200; - const maxSidebarWidth = 600; - let prevX = e.clientX; - let sidebarBounds = sidebarRef.current!.getBoundingClientRect(); - const onMouseMove = (e: MouseEvent) => { - const newX = prevX - e.x; - const newWidth = Math.max(minSidebarWidth, Math.min(maxSidebarWidth, sidebarBounds.width + newX)); - sidebarRef.current!.style.minWidth = `${newWidth}px`; - } - - const onMouseUp = (e: MouseEvent) => { - document.removeEventListener('mousemove', onMouseMove); - document.removeEventListener('mouseup', onMouseUp); - } - - document.addEventListener('mousemove', onMouseMove); - document.addEventListener('mouseup', onMouseUp); - } - return (
@@ -149,7 +115,6 @@ function App() {
- toggleSidebar()} icon={} /> @@ -191,30 +156,6 @@ function App() {
-
-
-
-
- {selectedContainer && ( - - )} - {!selectedContainer && (<> - - Select a container to view chat - - } /> - )} -
-
-
diff --git a/Custom Apps/boilerplate-typescript-react/react-client/src/routes/Containers.tsx b/Custom Apps/boilerplate-typescript-react/react-client/src/routes/Containers.tsx index 042d5b9..15f0293 100644 --- a/Custom Apps/boilerplate-typescript-react/react-client/src/routes/Containers.tsx +++ b/Custom Apps/boilerplate-typescript-react/react-client/src/routes/Containers.tsx @@ -4,7 +4,6 @@ import { Breadcrumb, BreadcrumbButton, BreadcrumbItem, Button, DataGrid, DataGri import { Delete20Filled } from "@fluentui/react-icons"; import { useState } from "react"; import { Spinner } from "@microsoft/mgt-react"; -import { ChatController } from "../providers/ChatController"; import { ContainersApiProvider } from "../providers/ContainersApiProvider"; import { IContainer } from "../../../common/schemas/ContainerSchemas"; @@ -27,9 +26,6 @@ export const Containers: React.FunctionComponent = () => { const onSelectionChange = (e: any, data: OnSelectionChangeData) => { const selectedIds = Array.from(data.selectedItems) as string[]; setSelectedItems(selectedIds); - - const selectedContainers = containers.filter((container) => selectedIds.includes(container.id)); - ChatController.instance.selectedContainers = selectedContainers; } const deleteSelectedContainers = async () => { diff --git a/Custom Apps/legal-docs/README.md b/Custom Apps/legal-docs/README.md index 5203196..7c4a7bc 100644 --- a/Custom Apps/legal-docs/README.md +++ b/Custom Apps/legal-docs/README.md @@ -5,7 +5,6 @@ This sample is a React + TypeScript web app that demonstrates a legal-workflow e - Azure AD authentication with MSAL - Legal case containers and folder navigation - Document-centric workspace views -- Copilot-style chat integration using the SharePoint Embedded Copilot Chat React SDK ## Project Overview @@ -18,7 +17,7 @@ The app provides a Contoso legal dashboard where users can: - Create new case containers - Browse case folders and documents -- Use assistant panels for summaries, tools, reports, and Copilot interactions +- Use assistant panels for summaries, tools, and reports ![alt text](./images/AIOverview.png) @@ -57,7 +56,6 @@ npm install - `clientId`: Azure AD application (client) ID - `tenantId`: Microsoft Entra tenant ID - `containerTypeId`: SharePoint Embedded container type ID -- `sharePointHostname`: SharePoint hostname for your tenant (for example: `https://contoso.sharepoint.com`) 3. Verify API permissions and scopes in your app registration: @@ -65,8 +63,6 @@ npm install - `Files.Read.All` - `Sites.Read.All` - `FileStorageContainer.Selected` -- SharePoint scope format used by the app: - - `{sharePointHostname}/Container.Selected` diff --git a/Custom Apps/legal-docs/lib/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz b/Custom Apps/legal-docs/lib/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz deleted file mode 100644 index 40da931c2b7f3c6f9e5c15ff107e21f35caab413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37848 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 CX|1;a diff --git a/Custom Apps/legal-docs/package-lock.json b/Custom Apps/legal-docs/package-lock.json index aa10db4..d2010ca 100644 --- a/Custom Apps/legal-docs/package-lock.json +++ b/Custom Apps/legal-docs/package-lock.json @@ -12,7 +12,6 @@ "@azure/msal-react": "^3.0.23", "@fluentui/react": "^8.125.3", "@hookform/resolvers": "^3.10.0", - "@microsoft/sharepointembedded-copilotchat-react": "file:lib/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz", "@playwright/test": "^1.57.0", "@radix-ui/react-accordion": "^1.2.11", "@radix-ui/react-alert-dialog": "^1.1.14", @@ -96,52 +95,52 @@ } }, "node_modules/@azure/msal-browser": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.27.0.tgz", - "integrity": "sha512-bZ8Pta6YAbdd0o0PEaL1/geBsPrLEnyY/RDWqvF1PP9RUH8EMLvUMGoZFYS6jSlUan6KZ9IMTLCnwpWWpQRK/w==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.30.0.tgz", + "integrity": "sha512-HBBKfbZkMVzzF5bofvS1cXuNHFVc+gt4/HOnCmG/0hsHuZRJvJvDg/+7nTwIpoqvJc8BQp5o23rBUfisOLxR+w==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.13.3" + "@azure/msal-common": "15.17.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.13.3", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.3.tgz", - "integrity": "sha512-shSDU7Ioecya+Aob5xliW9IGq1Ui8y4EVSdWGyI1Gbm4Vg61WpP95LuzcY214/wEjSn6w4PZYD4/iVldErHayQ==", + "version": "15.17.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.17.0.tgz", + "integrity": "sha512-VQ5/gTLFADkwue+FohVuCqlzFPUq4xSrX8jeZe+iwZuY6moliNC8xt86qPVNYdtbQfELDf2Nu6LI+demFPHGgw==", "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-react": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@azure/msal-react/-/msal-react-3.0.23.tgz", - "integrity": "sha512-tHvq441nwlJD9QfQP4ZStiw6xb2hQoujNHZhZb+wpUbImb3wyr2FF6/umhX/p+yzc/aq0Lee7mbdDDpzRZzxcA==", + "version": "3.0.29", + "resolved": "https://registry.npmjs.org/@azure/msal-react/-/msal-react-3.0.29.tgz", + "integrity": "sha512-RpFfq3aIpmKajcshbaJH7Q/1CesxQRAeKorMv+uMpDw98jvi+/L0RJkNnTRmeXrV3aM34kj2LFWBQrQ9DOXs1Q==", "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "@azure/msal-browser": "^4.27.0", + "@azure/msal-browser": "^4.30.0", "react": "^16.8.0 || ^17 || ^18 || ^19.2.1" } }, "node_modules/@babel/runtime": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", - "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -152,13 +151,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -169,13 +168,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -186,13 +185,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -203,13 +202,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -220,13 +219,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -237,13 +236,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -254,13 +253,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -271,13 +270,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -288,13 +287,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -305,13 +304,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -322,13 +321,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -339,13 +338,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -356,13 +355,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -373,13 +372,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -390,13 +389,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -407,13 +406,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -424,13 +423,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", - "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" ], @@ -445,9 +444,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -458,13 +457,13 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", - "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" ], @@ -479,9 +478,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -492,13 +491,30 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -509,13 +525,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -526,13 +542,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -543,13 +559,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -560,13 +576,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -596,9 +612,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -606,34 +622,37 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", - "minimatch": "^3.1.2" + "minimatch": "^3.1.5" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -644,20 +663,20 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { @@ -681,9 +700,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "dev": true, "license": "MIT", "engines": { @@ -694,9 +713,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -704,13 +723,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -718,31 +737,31 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", - "integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.10" + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz", - "integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.2", - "@floating-ui/utils": "^0.2.10" + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.4.tgz", - "integrity": "sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.2" + "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", @@ -750,9 +769,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", "license": "MIT" }, "node_modules/@fluentui/date-time-utilities": { @@ -776,26 +795,26 @@ } }, "node_modules/@fluentui/font-icons-mdl2": { - "version": "8.5.70", - "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.70.tgz", - "integrity": "sha512-anTR0w3EC5kWPJr770yc3lmaynml+dZ814xdgkgzRpRmf0zC3WOwdyp64c/9ilvr3zoTqXCNwQO6VeOGoNUcOw==", + "version": "8.5.73", + "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.73.tgz", + "integrity": "sha512-pyR9OE8LJMEVDAUTaTu/rGXaMCsyRqpp5124DhBoFNf6q5kI660IgbzuQadCpyMBEQadYI5/GLkLN7b1Lgou9Q==", "license": "MIT", "dependencies": { "@fluentui/set-version": "^8.2.24", - "@fluentui/style-utilities": "^8.13.6", + "@fluentui/style-utilities": "^8.15.1", "@fluentui/utilities": "^8.17.2", "tslib": "^2.1.0" } }, "node_modules/@fluentui/foundation-legacy": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.6.3.tgz", - "integrity": "sha512-pFjmpY961J5XtdfrhzBuF3FEZBjOdskrTIWJN6At/govltvMkhCbdwIleAkoyLyt0GrK0HudOb1BsdORd6gSrA==", + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.6.6.tgz", + "integrity": "sha512-PIcMLOymLvIunp9DrBHUT+dZqwyslKsIOPi+5g/fLU/ySzCg3fs6wQyWHxN3esI5FsSfWi+yCpp+6u5+N00kJQ==", "license": "MIT", "dependencies": { "@fluentui/merge-styles": "^8.6.14", "@fluentui/set-version": "^8.2.24", - "@fluentui/style-utilities": "^8.13.6", + "@fluentui/style-utilities": "^8.15.1", "@fluentui/utilities": "^8.17.2", "tslib": "^2.1.0" }, @@ -824,21 +843,21 @@ } }, "node_modules/@fluentui/react": { - "version": "8.125.3", - "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.125.3.tgz", - "integrity": "sha512-GCSIB9SXkQDvvBYNMjrJKu4OP7aPD8U5wry/g/yQ9G9r4JmtoEvnQi6JhUescgXal2ANVAhex5HBrHBgEdhJFA==", + "version": "8.125.6", + "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.125.6.tgz", + "integrity": "sha512-uvq0PdAL+Tznikek54zbS31JefTqcPaCkwjHjJz0t8NAC2ZFHozKnkApaQo2+sf0390K3k1ErGWr/+3Tvc6+JQ==", "license": "MIT", "dependencies": { "@fluentui/date-time-utilities": "^8.6.11", - "@fluentui/font-icons-mdl2": "^8.5.70", - "@fluentui/foundation-legacy": "^8.6.3", + "@fluentui/font-icons-mdl2": "^8.5.73", + "@fluentui/foundation-legacy": "^8.6.6", "@fluentui/merge-styles": "^8.6.14", - "@fluentui/react-focus": "^8.10.3", + "@fluentui/react-focus": "^8.10.6", "@fluentui/react-hooks": "^8.10.2", "@fluentui/react-portal-compat-context": "^9.0.15", "@fluentui/react-window-provider": "^2.3.2", "@fluentui/set-version": "^8.2.24", - "@fluentui/style-utilities": "^8.13.6", + "@fluentui/style-utilities": "^8.15.1", "@fluentui/theme": "^2.7.2", "@fluentui/utilities": "^8.17.2", "@microsoft/load-themed-styles": "^1.10.26", @@ -852,15 +871,15 @@ } }, "node_modules/@fluentui/react-focus": { - "version": "8.10.3", - "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.10.3.tgz", - "integrity": "sha512-YiY/ljQo4mku3P50y+wQ7ezdQ5QnxsJ4xr3b4RD4w21faH+zrdw0N2zxgeGccBs2Nd9viJCeCTJxhc2bVkhDAQ==", + "version": "8.10.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.10.6.tgz", + "integrity": "sha512-hMQw7AETttfex3XEAB/XQalJSL8/RgzOdJrL1RPKcrxdkBal0C1MRQ43Bbmw/4WtI0vK0wI4+jHvCIlM0lkodA==", "license": "MIT", "dependencies": { "@fluentui/keyboard-key": "^0.4.23", "@fluentui/merge-styles": "^8.6.14", "@fluentui/set-version": "^8.2.24", - "@fluentui/style-utilities": "^8.13.6", + "@fluentui/style-utilities": "^8.15.1", "@fluentui/utilities": "^8.17.2", "tslib": "^2.1.0" }, @@ -922,9 +941,9 @@ } }, "node_modules/@fluentui/style-utilities": { - "version": "8.13.6", - "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.13.6.tgz", - "integrity": "sha512-bFgrLoMrg7ZtyszSvFv2w7TFc+x4+qKKb3d0Sj8/lp2mGw4smqkuKzEbMMaNVzRPJwooLcwJpcGUhDCXYmDt6g==", + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.15.1.tgz", + "integrity": "sha512-EwjJE7P7XWViNIN+Klm4rFCaADujsfwHB4nzkYeD0zjMokrznsiAvqERxaGZMCRH7tO+DLKITt7kaoQstNLCVQ==", "license": "MIT", "dependencies": { "@fluentui/merge-styles": "^8.6.14", @@ -978,41 +997,41 @@ } }, "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1043,35 +1062,14 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1083,25 +1081,16 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1114,17 +1103,6 @@ "integrity": "sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==", "license": "MIT" }, - "node_modules/@microsoft/sharepointembedded-copilotchat-react": { - "version": "1.0.9", - "resolved": "file:lib/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz", - "integrity": "sha512-mwtB7OOvyox5Mzhpozz/45eq3kYV+DaVNTDxwXC4n5+HnAQabFia1GIWpTVXFAi3Ajp5LNORmWYHIoJBEY23rg==", - "license": "MIT", - "peerDependencies": { - "@fluentui/react": ">=8.1.0", - "react": ">=17.0.2", - "react-dom": ">=17.0.2" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1160,23 +1138,13 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@playwright/test": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0.tgz", - "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==", + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.0.tgz", + "integrity": "sha512-cKA5B6lpFEMyMGjxF54QihfYpB4FkEGH+qZhtArDEG+wezQAJY8Pq6C7T1SjWz+FFzt3TbyoXBQYk/0292TdJA==", "license": "Apache-2.0", "dependencies": { - "playwright": "1.57.0" + "playwright": "1.61.0" }, "bin": { "playwright": "cli.js" @@ -1186,32 +1154,32 @@ } }, "node_modules/@radix-ui/number": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.2.tgz", + "integrity": "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==", "license": "MIT" }, "node_modules/@radix-ui/primitive": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", - "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.4.tgz", + "integrity": "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ==", "license": "MIT" }, "node_modules/@radix-ui/react-accordion": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz", - "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.14.tgz", + "integrity": "sha512-iE8YB9nmTBH8zd73ofBISZ8JCzgMoMkATJr7qDwa6u5F1+7mTM81V6fa71jgZ65rpjVpecDf1vSnwIFP9Ly1zw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collapsible": "1.1.11", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collapsible": "1.1.14", + "@radix-ui/react-collection": "1.1.10", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -1229,17 +1197,16 @@ } }, "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.14.tgz", - "integrity": "sha512-IOZfZ3nPvN6lXpJTBCunFQPRSvK8MDgSc1FB85xnIpUKOw9en0dJj8JmCAxV7BiZdtYlUpmrQjoTFkVYtdoWzQ==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.17.tgz", + "integrity": "sha512-563ygGeyWPrxyVCNp7OV4rE2aIXhFPknpFyo4wbDlcyMMPZ6ySh+zC5WTvY0ZFLgPTg/QB6tA8PyDQyJ2b4cPg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dialog": "1.1.14", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-dialog": "1.1.17", + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -1257,12 +1224,12 @@ } }, "node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.10.tgz", + "integrity": "sha512-j2VTDz1vgCsmuG0k5lBfOcM8n5JPFqZBcMryasFjHYMhwxYL5SRUV5lMSUpRdNtw3D/Sv8pzJtrlAgkssYSsQQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -1280,12 +1247,12 @@ } }, "node_modules/@radix-ui/react-aspect-ratio": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz", - "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.10.tgz", + "integrity": "sha512-kbI7NrqhDeuytYrq7JjAsoXczvL8wgj2tc1MyaYWm+50bMKHCHQtVWCryslx4cCpmCTTkBcwQckE4CmmGV2haQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -1303,16 +1270,16 @@ } }, "node_modules/@radix-ui/react-avatar": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", - "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.2.0.tgz", + "integrity": "sha512-am/CwltXtmtdtP+5FbYblYDnMa/zuKcMJP1i3/SJMDXXfj2mG+BTqLH2wucqeyyiQMursUtg/5cK+Nh2pCaSOA==", "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-is-hydrated": "0.1.0", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-is-hydrated": "0.1.1", + "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1330,19 +1297,19 @@ } }, "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.2.tgz", - "integrity": "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.5.tgz", + "integrity": "sha512-pREzrmNnVwGvYaBoM64huTRK7B3lrTRuwj8A9nwhPiEtMb+yudiWh6zWAqEtP0Dzd5+iBa1Ki7V1pCxV8ExMdA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-previous": "1.1.2", + "@radix-ui/react-use-size": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1360,19 +1327,19 @@ } }, "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz", - "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.14.tgz", + "integrity": "sha512-9bT+FvifX1FK2Mj6UEsTdyu0cN3JaA3KdfhaBao+ONrYFy/pyOy3TU1TNw7iOk1o+0hOEq67RojlUUmoFGwxyA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1390,15 +1357,15 @@ } }, "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.10.tgz", + "integrity": "sha512-IVVz4EvBcKjrzKgof714qDnz/SzQAkLA2Emh5edlHbgcE6fNd3Un6CJLlaYcnm8N4JmAtzQgse4dOKxcD2yc9g==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", @@ -1416,9 +1383,9 @@ } }, "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz", + "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -1431,9 +1398,9 @@ } }, "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.4.tgz", + "integrity": "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -1446,17 +1413,16 @@ } }, "node_modules/@radix-ui/react-context-menu": { - "version": "2.2.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.15.tgz", - "integrity": "sha512-UsQUMjcYTsBjTSXw0P3GO0werEQvUY2plgRQuKoCTtkNr45q1DiL51j4m7gxhABzZ0BadoXNsIbg7F3KwiUBbw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.3.1.tgz", + "integrity": "sha512-XbrxS68W5dyiE4fAb96yvJwSVU5x66B20A99sD5Mk3xSWK/LqeOnx6TZnim1KieMjXS/CTFq8reOAjWxas2G8Q==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-menu": "2.1.15", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-menu": "2.1.18", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -1474,25 +1440,25 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz", - "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.17.tgz", + "integrity": "sha512-TDTYmpdq8dI2+Xgvgj9AJ8Ghqq+Eph/TRVEdaFQPDItIY+6QSkU7MJMeevw1568Yw/2Ijz8BTphPSP2XejKphw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-focus-guards": "1.1.4", + "@radix-ui/react-focus-scope": "1.1.10", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-portal": "1.1.12", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0", + "@radix-ui/react-use-controllable-state": "1.2.3", "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", @@ -1510,9 +1476,9 @@ } }, "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.2.tgz", + "integrity": "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -1525,16 +1491,16 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz", - "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.13.tgz", + "integrity": "sha512-2v+zNAWWe0ySxgC0D0yeXMPQ23xZVgXZTerTz+JKlmdRj6gfTqmCcR29jb6d290DezXPGgruHWDX/vYUebtErg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-escape-keydown": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1552,18 +1518,18 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz", - "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.18.tgz", + "integrity": "sha512-PZGV82gFk0WltDRI//SsG28ZIjlo9ANTmoNYg0jLNzXXiDsAy5PkOOYQaVD1pPxY6t7gxffb1QMD6qaUvsBZdw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.15", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-menu": "2.1.18", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -1581,9 +1547,9 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", - "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.4.tgz", + "integrity": "sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -1596,14 +1562,14 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.10.tgz", + "integrity": "sha512-Fas/lXQqhVvqwAb64s5RFeHiHYElZ6SUQbZaNd6EkfhP/Al7wTIQ9WIR4QVX475tlu5yFCEdDcJH6/UwsZjMWw==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-callback-ref": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1621,20 +1587,20 @@ } }, "node_modules/@radix-ui/react-hover-card": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.14.tgz", - "integrity": "sha512-CPYZ24Mhirm+g6D8jArmLzjYu4Eyg3TTUHswR26QgzXBHBe64BO/RHOJKzmF/Dxb4y4f9PKyJdwm/O/AhNkb+Q==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.17.tgz", + "integrity": "sha512-GjZQIEANVkuuWeztlKz6QEHe31ZX2iDfHzcTMCQVZXC0JyQrgfKWSC+LOOEw6aVV64zyjzobIzSA4AU4eKWrHA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-popper": "1.2.7", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -1652,12 +1618,12 @@ } }, "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.2.tgz", + "integrity": "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1670,12 +1636,12 @@ } }, "node_modules/@radix-ui/react-label": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", - "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.10.tgz", + "integrity": "sha512-ib0zvq2ZsAqKm5tRnqGJn3vOxSgIts5ToxsXT0q1S/GfLD1Zj7UOEnkw8u2w6sRmn47djpQWuSU1DCL1R29/yw==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -1693,29 +1659,29 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.15.tgz", - "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.18.tgz", + "integrity": "sha512-lj8Rxjtn6zJq1oSbE/uDtAwCbB9BnxgHD+8MwJMuTh6u1dPamYhW9iuELr/Z8d0D/UysFblYYHeBPwi7T4k0YQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.10", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-focus-guards": "1.1.4", + "@radix-ui/react-focus-scope": "1.1.10", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", + "@radix-ui/react-slot": "1.3.0", + "@radix-ui/react-use-callback-ref": "1.1.2", "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", @@ -1733,21 +1699,21 @@ } }, "node_modules/@radix-ui/react-menubar": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.15.tgz", - "integrity": "sha512-Z71C7LGD+YDYo3TV81paUs8f3Zbmkvg6VLRQpKYfzioOE6n7fOhA3ApK/V/2Odolxjoc4ENk8AYCjohCNayd5A==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.15", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", - "@radix-ui/react-use-controllable-state": "1.2.2" + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.18.tgz", + "integrity": "sha512-hX7EGx/oFq6DPY27GQuP/2wP48GHf5LG6r06VgNJlG+znmDS8OfopZcRcGly3L4lsB9FqpmLx6JQSE9P3BUpyw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.10", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-menu": "2.1.18", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", + "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -1765,25 +1731,25 @@ } }, "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.13.tgz", - "integrity": "sha512-WG8wWfDiJlSF5hELjwfjSGOXcBR/ZMhBFCGYe8vERpC39CQYZeq1PQ2kaYHdye3V95d06H89KGMsVCIE4LWo3g==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.16.tgz", + "integrity": "sha512-nJ0SkrSQgudyYhMiYeHA1ayLVuduEJCFLan1RZZN7c9kqzzCFLaU9kuy81uNtqzweM9YaQPgWzxi9MwQ9jZ04g==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.10", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-layout-effect": "1.1.2", + "@radix-ui/react-use-previous": "1.1.2", + "@radix-ui/react-visually-hidden": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -1801,26 +1767,26 @@ } }, "node_modules/@radix-ui/react-popover": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz", - "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.17.tgz", + "integrity": "sha512-/YSAOdJ7YJvdn7bn5sdSx2egW+SKY+u7O5RyAVs94Ymrg2fg5QTSFPMRkzvhGyFuE4/qsmPBdrwYoZMZh/4f+g==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-focus-guards": "1.1.4", + "@radix-ui/react-focus-scope": "1.1.10", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0", + "@radix-ui/react-use-controllable-state": "1.2.3", "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", @@ -1838,21 +1804,21 @@ } }, "node_modules/@radix-ui/react-popper": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz", - "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.1.tgz", + "integrity": "sha512-bhnq/0DEPTi2lsOD3J5rTL65qUKHbKbhqHsmN9TMiclSXpipi651ooUKPPp6G5lF/WiHBdn1s0Wuqsn+myVAvw==", "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" + "@radix-ui/react-arrow": "1.1.10", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.2", + "@radix-ui/react-use-rect": "1.1.2", + "@radix-ui/react-use-size": "1.1.2", + "@radix-ui/rect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1870,13 +1836,13 @@ } }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.12.tgz", + "integrity": "sha512-m309havGzsjLHHaIX50G5PlvRs3xkgPCsGk/5PTvYm8D5q33yG0J7w/712PTOhid7NTaFETtnSXjngHQavvhVw==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1894,13 +1860,12 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", - "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.6.tgz", + "integrity": "sha512-zdTk4PlUO0E18HnZ3wYbW0KkJJxWCdiNYp6g6X1PtONFhxVkg01vliTJAmwIszU6mHiyBOoW9P0rAugl5/hULQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1918,12 +1883,12 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.6.tgz", + "integrity": "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.3" + "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", @@ -1941,13 +1906,13 @@ } }, "node_modules/@radix-ui/react-progress": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", - "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.10.tgz", + "integrity": "sha512-JYzEg60lk79PwKM27WZyKd7PW8O4OM5jOaFfRPfOyeXmMw7tLJh5kSj+CEjVTehszuwml/AdCzPGMXBTGf4BBw==", "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -1965,21 +1930,21 @@ } }, "node_modules/@radix-ui/react-radio-group": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.7.tgz", - "integrity": "sha512-9w5XhD0KPOrm92OTTE0SysH3sYzHsSTHNvZgUBo/VZ80VdYyB5RneDbc0dKpURS24IxkoFRu/hI0i4XyfFwY6g==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.4.1.tgz", + "integrity": "sha512-/SSxZdKEo2Eo29FFRKd06EfFDYp8HryKg0WYg7QLXaydPzl52YfSvCH2a3QDBRdtcuwACroJT8UVjQVgOJ7P9A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-previous": "1.1.2", + "@radix-ui/react-use-size": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -1997,20 +1962,20 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz", - "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.13.tgz", + "integrity": "sha512-9gkwneI0guf8JDmrFxPjJF6Ozzgioyw+/lonYNCwefS9ZHA05er0BVHiXr+LbWGHxUfczvMY6G1oiZZi1VzjRw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.10", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -2028,20 +1993,20 @@ } }, "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.9.tgz", - "integrity": "sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.12.tgz", + "integrity": "sha512-xuafVzQiTCLsyEjakowTdG3OgTXsmO7IdCiO77otIa+z44xoLNs9Do5eg7POFumIOCjtG6djfm6RKUKpUa/csA==", "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/number": "1.1.2", + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2059,32 +2024,33 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.5.tgz", - "integrity": "sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.1.tgz", + "integrity": "sha512-w6eDvY78LE9ZUiNnXCA1QVK8RYN7k9galFv09kjVydJqBAgHd7Y9A6h0UJ/6DCZNGZMZrB2ohcSW1Bo9d8+wWA==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.2", + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.10", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-focus-guards": "1.1.4", + "@radix-ui/react-focus-scope": "1.1.10", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-layout-effect": "1.1.2", + "@radix-ui/react-use-previous": "1.1.2", + "@radix-ui/react-visually-hidden": "1.2.6", "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", @@ -2102,12 +2068,12 @@ } }, "node_modules/@radix-ui/react-separator": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", - "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.10.tgz", + "integrity": "sha512-Y6K6jLQCVfCnTL2MEtGxDLffkhNfEfHsEg3Wa8JU+IWdn3EWbLXd3OuOfQRN7p/W/cUce1WyTk3QeuAoDBzN9g==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -2125,22 +2091,22 @@ } }, "node_modules/@radix-ui/react-slider": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.5.tgz", - "integrity": "sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.4.1.tgz", + "integrity": "sha512-r91WSpQucNGFKAIxT8FT0H0zyjd5tJlqObLp7LOMV4z49KoDCwjy01w3vDOU4e1wxhF9IgjYco7SB6byOW7Buw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.2", + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.10", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-layout-effect": "1.1.2", + "@radix-ui/react-use-previous": "1.1.2", + "@radix-ui/react-use-size": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2158,12 +2124,12 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.3.0.tgz", + "integrity": "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" + "@radix-ui/react-compose-refs": "1.1.3" }, "peerDependencies": { "@types/react": "*", @@ -2176,18 +2142,18 @@ } }, "node_modules/@radix-ui/react-switch": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz", - "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.1.tgz", + "integrity": "sha512-55bQtCnOB0BohomSHi6qvQXpJEEqUGDm6hRrM0Bph5OXwhSegqkd8IqgBAQkM1IlgUlWZIxpxRcpOEfRIgimyw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-previous": "1.1.2", + "@radix-ui/react-use-size": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2205,19 +2171,19 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz", - "integrity": "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.15.tgz", + "integrity": "sha512-kxc9gI6/HfcU4nfMMVS3AmQK414kbU1IE6UCJmMmxjhO3cRPXOyYnmvyKD+ODt7q56nRq9l7Wovi6uaGwKgMlg==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", + "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -2235,23 +2201,23 @@ } }, "node_modules/@radix-ui/react-toast": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.14.tgz", - "integrity": "sha512-nAP5FBxBJGQ/YfUB+r+O6USFVkWq3gAInkxyEnmvEV5jtSbfDhfa4hwX8CraCnbjMLsE7XSf/K75l9xXY7joWg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.17.tgz", + "integrity": "sha512-uL4kyyWy000pPL43fGGCV5qT6ZchCWEQZOSlkYiPwPt8Hy1iW38RjeptIvz1/SZesrW6Vn58Ct3sV7tfEfiAbw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.10", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-portal": "1.1.12", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-layout-effect": "1.1.2", + "@radix-ui/react-visually-hidden": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -2269,14 +2235,14 @@ } }, "node_modules/@radix-ui/react-toggle": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.9.tgz", - "integrity": "sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.12.tgz", + "integrity": "sha512-AsAVsYNZIlRBsci7BhE+QyQeKd1h6TffJYt+lF0QQkd5OpQ3klfIByPsCb4G0h/Fq6PJwh1FYNluzBFYzhk4+w==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -2294,18 +2260,18 @@ } }, "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.10.tgz", - "integrity": "sha512-kiU694Km3WFLTC75DdqgM/3Jauf3rD9wxeS9XtyWFKsBUeZA337lC+6uUazT7I1DhanZ5gyD5Stf8uf2dbQxOQ==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.13.tgz", + "integrity": "sha512-Xb9PLtlvU66F36LiKba6dFswu6V2mDkgidO4fNSbQHQwmZ9ObxMIO17MN/LJ4aWJecVuSVLAHPZjyeMzJrgeiA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.10", - "@radix-ui/react-toggle": "1.1.9", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-roving-focus": "1.1.13", + "@radix-ui/react-toggle": "1.1.12", + "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -2323,23 +2289,23 @@ } }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.7.tgz", - "integrity": "sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.7", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-visually-hidden": "1.2.3" + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.10.tgz", + "integrity": "sha512-NlNe8D0dWEpVfXFli90IO6X07Josx/b1iu98tDnx9Xv0HT4wLIL+m2VOheMHhK7qbp2HoTBqALEFzGyZs/levw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-dismissable-layer": "1.1.13", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-popper": "1.3.1", + "@radix-ui/react-portal": "1.1.12", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.6", + "@radix-ui/react-slot": "1.3.0", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-visually-hidden": "1.2.6" }, "peerDependencies": { "@types/react": "*", @@ -2357,9 +2323,9 @@ } }, "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.2.tgz", + "integrity": "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -2372,13 +2338,13 @@ } }, "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.3.tgz", + "integrity": "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-effect-event": "0.0.3", + "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2391,12 +2357,12 @@ } }, "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.3.tgz", + "integrity": "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2409,12 +2375,12 @@ } }, "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.2.tgz", + "integrity": "sha512-2uVLvLjgO7NZCWw01/FdqRwmA42J0BcjPMUCA+koFEOAb+zjqIP7SiFz/7zWPrKnVmSqr76Omq2ALyCuX4dhLw==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" + "@radix-ui/react-use-callback-ref": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2427,13 +2393,10 @@ } }, "node_modules/@radix-ui/react-use-is-hydrated": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", - "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.1.tgz", + "integrity": "sha512-qwOiz4Tjo8CNnrOLAYUMXeZwDzXgXpvK4TKQPmWLECM9XoWvA6+0Z2/7Ag3A4ivjS4ovbLJPbskkxioFyBhr8A==", "license": "MIT", - "dependencies": { - "use-sync-external-store": "^1.5.0" - }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -2445,9 +2408,9 @@ } }, "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz", + "integrity": "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -2460,9 +2423,9 @@ } }, "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.2.tgz", + "integrity": "sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -2475,12 +2438,12 @@ } }, "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.2.tgz", + "integrity": "sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==", "license": "MIT", "dependencies": { - "@radix-ui/rect": "1.1.1" + "@radix-ui/rect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2493,12 +2456,12 @@ } }, "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.2.tgz", + "integrity": "sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -2511,12 +2474,12 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.6.tgz", + "integrity": "sha512-jCE0WljWifTI4niIMCll06kGpsJTAPiZVU9H4WR1N6qW7At9ystHbN7dDB+we2xH535roFHj7qKS+RGj0FMDWQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", @@ -2534,15 +2497,15 @@ } }, "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.2.tgz", + "integrity": "sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==", "license": "MIT" }, "node_modules/@remix-run/router": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz", - "integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.3.tgz", + "integrity": "sha512-4An71tdz9X8+3sI4Qqqd2LWd9vS39J7sqd9EU4Scw7TJE/qB10Flv/UuqbPVgfQV9XoK8Np6jNquZitnZq5i+Q==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -2556,9 +2519,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", - "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.0.tgz", + "integrity": "sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==", "cpu": [ "arm" ], @@ -2570,9 +2533,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", - "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.0.tgz", + "integrity": "sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==", "cpu": [ "arm64" ], @@ -2584,9 +2547,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", - "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.0.tgz", + "integrity": "sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==", "cpu": [ "arm64" ], @@ -2598,9 +2561,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", - "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.0.tgz", + "integrity": "sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==", "cpu": [ "x64" ], @@ -2611,38 +2574,66 @@ "darwin" ] }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", - "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.0.tgz", + "integrity": "sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==", "cpu": [ - "arm" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "freebsd" ] }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", - "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.0.tgz", + "integrity": "sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==", "cpu": [ - "arm" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.0.tgz", + "integrity": "sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.0.tgz", + "integrity": "sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", - "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.0.tgz", + "integrity": "sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==", "cpu": [ "arm64" ], @@ -2654,9 +2645,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", - "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.0.tgz", + "integrity": "sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==", "cpu": [ "arm64" ], @@ -2667,10 +2658,52 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", - "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.0.tgz", + "integrity": "sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.0.tgz", + "integrity": "sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.0.tgz", + "integrity": "sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.0.tgz", + "integrity": "sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==", "cpu": [ "ppc64" ], @@ -2682,9 +2715,23 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", - "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.0.tgz", + "integrity": "sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.0.tgz", + "integrity": "sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==", "cpu": [ "riscv64" ], @@ -2696,9 +2743,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", - "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.0.tgz", + "integrity": "sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==", "cpu": [ "s390x" ], @@ -2710,9 +2757,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", - "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.0.tgz", + "integrity": "sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==", "cpu": [ "x64" ], @@ -2724,9 +2771,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", - "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.0.tgz", + "integrity": "sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==", "cpu": [ "x64" ], @@ -2737,10 +2784,38 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.0.tgz", + "integrity": "sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.0.tgz", + "integrity": "sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", - "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.0.tgz", + "integrity": "sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==", "cpu": [ "arm64" ], @@ -2752,9 +2827,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", - "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.0.tgz", + "integrity": "sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==", "cpu": [ "ia32" ], @@ -2765,10 +2840,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.0.tgz", + "integrity": "sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", - "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.0.tgz", + "integrity": "sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==", "cpu": [ "x64" ], @@ -2780,15 +2869,15 @@ ] }, "node_modules/@swc/core": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.2.tgz", - "integrity": "sha512-YWqn+0IKXDhqVLKoac4v2tV6hJqB/wOh8/Br8zjqeqBkKa77Qb0Kw2i7LOFzjFNZbZaPH6AlMGlBwNrxaauaAg==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.41.tgz", + "integrity": "sha512-03nQq/082QRJJiOvp3FGbgxTGyyxMxohPTjhk/W9bD2J0tk4ukITI7goOhOO2WbaHn/lsPmo/zf8+DIXhwpgYQ==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.23" + "@swc/types": "^0.1.26" }, "engines": { "node": ">=10" @@ -2798,16 +2887,18 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.13.2", - "@swc/core-darwin-x64": "1.13.2", - "@swc/core-linux-arm-gnueabihf": "1.13.2", - "@swc/core-linux-arm64-gnu": "1.13.2", - "@swc/core-linux-arm64-musl": "1.13.2", - "@swc/core-linux-x64-gnu": "1.13.2", - "@swc/core-linux-x64-musl": "1.13.2", - "@swc/core-win32-arm64-msvc": "1.13.2", - "@swc/core-win32-ia32-msvc": "1.13.2", - "@swc/core-win32-x64-msvc": "1.13.2" + "@swc/core-darwin-arm64": "1.15.41", + "@swc/core-darwin-x64": "1.15.41", + "@swc/core-linux-arm-gnueabihf": "1.15.41", + "@swc/core-linux-arm64-gnu": "1.15.41", + "@swc/core-linux-arm64-musl": "1.15.41", + "@swc/core-linux-ppc64-gnu": "1.15.41", + "@swc/core-linux-s390x-gnu": "1.15.41", + "@swc/core-linux-x64-gnu": "1.15.41", + "@swc/core-linux-x64-musl": "1.15.41", + "@swc/core-win32-arm64-msvc": "1.15.41", + "@swc/core-win32-ia32-msvc": "1.15.41", + "@swc/core-win32-x64-msvc": "1.15.41" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -2819,9 +2910,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.2.tgz", - "integrity": "sha512-44p7ivuLSGFJ15Vly4ivLJjg3ARo4879LtEBAabcHhSZygpmkP8eyjyWxrH3OxkY1eRZSIJe8yRZPFw4kPXFPw==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.41.tgz", + "integrity": "sha512-kREh6J5paQFvP3i7f/4FbqRNOJREutVFVOkder4GVyCBQ39YmER55cW/y1NNjwrchzFqgYswFn0mMDCqbqKzrw==", "cpu": [ "arm64" ], @@ -2836,9 +2927,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.2.tgz", - "integrity": "sha512-Lb9EZi7X2XDAVmuUlBm2UvVAgSCbD3qKqDCxSI4jEOddzVOpNCnyZ/xEampdngUIyDDhhJLYU9duC+Mcsv5Y+A==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.41.tgz", + "integrity": "sha512-N8B56ESFazZAWZyIkecADSPCwlLEinW7QLMEeotCpv4J7VXwfH+OLkmRL8o96UZ+1355fwHxDTS6/wK7yucvkA==", "cpu": [ "x64" ], @@ -2853,9 +2944,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.2.tgz", - "integrity": "sha512-9TDe/92ee1x57x+0OqL1huG4BeljVx0nWW4QOOxp8CCK67Rpc/HHl2wciJ0Kl9Dxf2NvpNtkPvqj9+BUmM9WVA==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.41.tgz", + "integrity": "sha512-6XrId2fyle0mS5xxON8rU84mPd2Cq1kDJRj+4BnQKTd7u+2kSA6Ww+JkOP0iTNqOqt9OXhPOEAjBHAuonWcdCg==", "cpu": [ "arm" ], @@ -2870,9 +2961,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.2.tgz", - "integrity": "sha512-KJUSl56DBk7AWMAIEcU83zl5mg3vlQYhLELhjwRFkGFMvghQvdqQ3zFOYa4TexKA7noBZa3C8fb24rI5sw9Exg==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.41.tgz", + "integrity": "sha512-ynLIarxlkVnqHn1D0fKOVht6mNU5ks6lrH+MY3kkS+XFaGGgDxFZVjWKJlkYTKm3RCvBTfA8Ng5fLufXheMRKQ==", "cpu": [ "arm64" ], @@ -2887,9 +2978,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.2.tgz", - "integrity": "sha512-teU27iG1oyWpNh9CzcGQ48ClDRt/RCem7mYO7ehd2FY102UeTws2+OzLESS1TS1tEZipq/5xwx3FzbVgiolCiQ==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.41.tgz", + "integrity": "sha512-dXu/5vd4gh8symyhRF+4G7gOPkjmb4pONhh7sl+6GSiW0LOKZlfu5kXmyFbTz9smOT7jgr002qY9b1nujjXt2A==", "cpu": [ "arm64" ], @@ -2903,10 +2994,44 @@ "node": ">=10" } }, + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.41.tgz", + "integrity": "sha512-XGO6zVPXoPE0gf/XnI4jBbafNT13AYgoh6ns0JCSdOetI/kqVf0vhpz7NuNgAzZrMVCsmieqjPoTwViDgh4mOQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.41.tgz", + "integrity": "sha512-0WUglRwyZtW+iMi7J3iFdrCxreZZIKf4egTwEQfIYRsqFax69A0OrFj+NIoFSE03xBT/IFRrg+S8K6f9Ky+4hA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.2.tgz", - "integrity": "sha512-dRPsyPyqpLD0HMRCRpYALIh4kdOir8pPg4AhNQZLehKowigRd30RcLXGNVZcc31Ua8CiPI4QSgjOIxK+EQe4LQ==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.41.tgz", + "integrity": "sha512-VxkuQK59c0tHm6uJZCUrS3cyA2JhGGfdU6e41SZz0x/JS+4Sm7C1mIc97In14vkZJopEt7yXA2TouCqZDSygEA==", "cpu": [ "x64" ], @@ -2921,9 +3046,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.2.tgz", - "integrity": "sha512-CCxETW+KkYEQDqz1SYC15YIWYheqFC+PJVOW76Maa/8yu8Biw+HTAcblKf2isrlUtK8RvrQN94v3UXkC2NzCEw==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.41.tgz", + "integrity": "sha512-/0qXIu1ZxggLuovLb22vFfKHq2AA4n6Whw5UwmVCHk4pkw7KWnPIQpMCEqUMPsNkFJig7PPp/TSYFu8ZEb2rtQ==", "cpu": [ "x64" ], @@ -2938,9 +3063,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.2.tgz", - "integrity": "sha512-Wv/QTA6PjyRLlmKcN6AmSI4jwSMRl0VTLGs57PHTqYRwwfwd7y4s2fIPJVBNbAlXd795dOEP6d/bGSQSyhOX3A==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.41.tgz", + "integrity": "sha512-Y481sMNZM6rECh9VO4+y26N1lWEDAyxnBZskUf37fl90uHE946VHfmiVQWT0uMFOhyJJFovGTRuF4W82dwewUg==", "cpu": [ "arm64" ], @@ -2955,9 +3080,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.2.tgz", - "integrity": "sha512-PuCdtNynEkUNbUXX/wsyUC+t4mamIU5y00lT5vJcAvco3/r16Iaxl5UCzhXYaWZSNVZMzPp9qN8NlSL8M5pPxw==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.41.tgz", + "integrity": "sha512-BAchBD5qeUzy3hiPSLJtaaoSm4blCLyYffOF1bGE4ETcV+OisqjUAwDQMJj++4bTpvMCDzwC+Bj3PmQyBCtscw==", "cpu": [ "ia32" ], @@ -2972,9 +3097,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.2.tgz", - "integrity": "sha512-qlmMkFZJus8cYuBURx1a3YAG2G7IW44i+FEYV5/32ylKkzGNAr9tDJSA53XNnNXkAB5EXSPsOz7bn5C3JlEtdQ==", + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.41.tgz", + "integrity": "sha512-WOkA+fJ/ViVBQDsSV9JC52NACTe5PhlurA6viASDZGb7HR3KS01ZG7RZ+Bg6SVQFIoq3gSbTsskQVe6EbHFAYw==", "cpu": [ "x64" ], @@ -2996,18 +3121,18 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.18", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.18.tgz", - "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" } }, "node_modules/@swc/types": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz", - "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==", + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.26.tgz", + "integrity": "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3015,38 +3140,22 @@ } }, "node_modules/@tailwindcss/typography": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", - "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.20.tgz", + "integrity": "sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==", "dev": true, "license": "MIT", "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", "postcss-selector-parser": "6.0.10" }, "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" - } - }, - "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "tailwindcss": ">=3.0.0 || >=4.0.0 || insiders" } }, "node_modules/@tanstack/query-core": { - "version": "5.83.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.83.0.tgz", - "integrity": "sha512-0M8dA+amXUkyz5cVUm/B+zSk3xkQAcuXuz5/Q/LveT4ots2rBpPTZOzd7yJa2Utsf8D2Upl5KyjhHRY+9lB/XA==", + "version": "5.101.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.101.0.tgz", + "integrity": "sha512-cQetA74EB+seWySv1TTKr828TnP0u39m6LykwDXIo84SNortpDkp30TMEjkqtYCNP9c40uT/iwl6MLiufEt0Ow==", "license": "MIT", "funding": { "type": "github", @@ -3054,12 +3163,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.83.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.83.0.tgz", - "integrity": "sha512-/XGYhZ3foc5H0VM2jLSD/NyBRIOK4q9kfeml4+0x2DlL6xVuAcVEW+hTlTapAmejObg0i3eNqhkr2dT+eciwoQ==", + "version": "5.101.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.101.0.tgz", + "integrity": "sha512-rLlJXSpkqfizLWgkR5+eLeIk0MvTx/meEIR7LRjxic+qxiQP8zVjq7BqQkiCMNLQBlLfuOLqqr6KO5GtrDlmSg==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.83.0" + "@tanstack/query-core": "5.101.0" }, "funding": { "type": "github", @@ -3070,9 +3179,9 @@ } }, "node_modules/@types/d3-array": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", "license": "MIT" }, "node_modules/@types/d3-color": { @@ -3097,33 +3206,33 @@ } }, "node_modules/@types/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", "license": "MIT" }, "node_modules/@types/d3-scale": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", - "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", "license": "MIT", "dependencies": { "@types/d3-time": "*" } }, "node_modules/@types/d3-shape": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", - "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", "license": "MIT", "dependencies": { "@types/d3-path": "*" } }, "node_modules/@types/d3-time": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", - "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", "license": "MIT" }, "node_modules/@types/d3-timer": { @@ -3133,9 +3242,9 @@ "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, @@ -3147,9 +3256,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", - "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "version": "22.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.21.tgz", + "integrity": "sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==", "dev": true, "license": "MIT", "dependencies": { @@ -3157,19 +3266,19 @@ } }, "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", - "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", + "version": "18.3.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", + "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", "license": "MIT", "dependencies": { "@types/prop-types": "*", - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { @@ -3182,21 +3291,20 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", - "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.1.tgz", + "integrity": "sha512-ZPlVl3PB3et/59Ne0fv/sci6ZXz4T4Hp4nTJ56i/Y0gR89ARb+KphojTq6j+56E5PIezmOIOOWyY+aWQFd+IkQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/type-utils": "8.38.0", - "@typescript-eslint/utils": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.61.1", + "@typescript-eslint/type-utils": "8.61.1", + "@typescript-eslint/utils": "8.61.1", + "@typescript-eslint/visitor-keys": "8.61.1", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3206,9 +3314,9 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.38.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "@typescript-eslint/parser": "^8.61.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { @@ -3222,17 +3330,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", - "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.61.1.tgz", + "integrity": "sha512-PJ5vePq5/ognBbrIcoC5+SHO5dfpeLPzP9FpLkzWrguoYQEeeSjlJpVwOpo1JRSTEi7dRcwNy4h4dzV70PqHcg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.61.1", + "@typescript-eslint/types": "8.61.1", + "@typescript-eslint/typescript-estree": "8.61.1", + "@typescript-eslint/visitor-keys": "8.61.1", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3242,20 +3350,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", - "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.61.1.tgz", + "integrity": "sha512-PrC4JYGmR241lYnfhmKGTXkFqv8+ymbTFgSAY0fVXpY82/QkMw5TZPl+vGzuDDU2QYJk9fIDOBTntF+yDv9LEA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.38.0", - "@typescript-eslint/types": "^8.38.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.61.1", + "@typescript-eslint/types": "^8.61.1", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3265,18 +3373,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", - "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.61.1.tgz", + "integrity": "sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0" + "@typescript-eslint/types": "8.61.1", + "@typescript-eslint/visitor-keys": "8.61.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3287,9 +3395,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", - "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.1.tgz", + "integrity": "sha512-UN/H4di+OO7EWx2ovME+8t31YO+KVnK0RRKEHR3kOt21/Ay8BOq3M1OMvWs5vNiqcFCYGYoxK3MXPZzmMUE+yg==", "dev": true, "license": "MIT", "engines": { @@ -3300,21 +3408,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", - "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.61.1.tgz", + "integrity": "sha512-GYRicKmVK0C4fsKgaACaknOUAq9Oa2kwsjnpFhFcS/5p4Ht5IP9OVLbgIgcK4SRk92nVHFluurg1lumD9dBcLw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.61.1", + "@typescript-eslint/typescript-estree": "8.61.1", + "@typescript-eslint/utils": "8.61.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3324,14 +3432,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.1.tgz", + "integrity": "sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA==", "dev": true, "license": "MIT", "engines": { @@ -3343,22 +3451,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", - "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.1.tgz", + "integrity": "sha512-u+oQD3BqYWPc8YV9Zab4vaJElJuwOLPRc10Jm1o/qS+6Qwen14HCWwx0Seo4LnSn2wxea2Ik8DxPt2/FHmuhrg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.38.0", - "@typescript-eslint/tsconfig-utils": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/project-service": "8.61.1", + "@typescript-eslint/tsconfig-utils": "8.61.1", + "@typescript-eslint/types": "8.61.1", + "@typescript-eslint/visitor-keys": "8.61.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3368,46 +3475,59 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.5" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", - "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.61.1.tgz", + "integrity": "sha512-1+P/3Dj6jvtybE1q0HQ6yBt/gq+oKJyLdEv4HdnqasaEXRSYCAsD59mXEVQnM/ULNdQxbX77tdG4jPRjIS6knA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.61.1", + "@typescript-eslint/types": "8.61.1", + "@typescript-eslint/typescript-estree": "8.61.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3417,19 +3537,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", - "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.1.tgz", + "integrity": "sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.61.1", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3439,6 +3559,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@vitejs/plugin-react-swc": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", @@ -3454,9 +3587,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", "bin": { @@ -3477,9 +3610,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -3493,22 +3626,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3553,9 +3675,9 @@ "license": "Python-2.0" }, "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -3565,9 +3687,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", "dev": true, "funding": [ { @@ -3585,10 +3707,9 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -3606,8 +3727,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.37", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.37.tgz", + "integrity": "sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -3621,9 +3756,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", "dev": true, "license": "MIT", "dependencies": { @@ -3644,9 +3779,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -3664,10 +3799,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -3696,9 +3832,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "version": "1.0.30001799", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", + "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", "dev": true, "funding": [ { @@ -3773,6 +3909,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", "dependencies": { "clsx": "^2.1.1" }, @@ -3809,6 +3946,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3821,6 +3959,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/commander": { @@ -3843,6 +3982,8 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3865,9 +4006,9 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/d3-array": { @@ -3901,9 +4042,9 @@ } }, "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", "license": "ISC", "engines": { "node": ">=12" @@ -4002,9 +4143,9 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -4060,16 +4201,10 @@ "csstype": "^3.0.2" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, "node_modules/electron-to-chromium": { - "version": "1.5.192", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.192.tgz", - "integrity": "sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==", + "version": "1.5.372", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.372.tgz", + "integrity": "sha512-M3yhbAlilnwqC8D21t28UCDGHyitShTmmLRU/H+b74P6Ski16Nb9HONYEaVpMj/pwC7BEo5B95FpjODLCWbtfA==", "dev": true, "license": "ISC" }, @@ -4101,16 +4236,19 @@ "embla-carousel": "8.6.0" } }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4118,32 +4256,35 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { @@ -4170,26 +4311,25 @@ } }, "node_modules/eslint": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", - "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.32.0", - "@eslint/plugin-kit": "^0.3.4", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", + "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", @@ -4208,7 +4348,7 @@ "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -4244,9 +4384,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", - "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4302,9 +4442,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -4361,25 +4501,25 @@ "license": "MIT" }, "node_modules/fast-equals": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", - "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", + "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==", "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -4412,9 +4552,9 @@ "license": "MIT" }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -4477,46 +4617,30 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, "license": "MIT", "engines": { "node": "*" }, "funding": { - "type": "patreon", + "type": "github", "url": "https://github.com/sponsors/rawify" } }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -4545,26 +4669,6 @@ "node": ">=6" } }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -4577,30 +4681,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globals": { "version": "15.15.0", "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", @@ -4614,13 +4694,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4632,9 +4705,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -4712,12 +4785,12 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -4735,15 +4808,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -4769,27 +4833,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -4802,10 +4852,20 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -4894,23 +4954,11 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4931,9 +4979,9 @@ } }, "node_modules/lovable-tagger": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/lovable-tagger/-/lovable-tagger-1.1.13.tgz", - "integrity": "sha512-RBEYDxao7Xf8ya29L0cd+ocE7Gs80xPOIOwwck65Hoie8YDKViuXi3UYV14DoNWIvaJ7WVPf7SG3cc844nFqGA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lovable-tagger/-/lovable-tagger-1.3.0.tgz", + "integrity": "sha512-X2TX4g+/8VUFIBboGBjgXIdjEhR1ojtz9W65MO3g069DXTX5PPFZ4ihQzzociTL9HCwCC8SleVGT/wcfURhMXA==", "dev": true, "license": "MIT", "dependencies": { @@ -4941,1214 +4989,754 @@ "tailwindcss": "^3.4.17" }, "peerDependencies": { - "vite": ">=5.0.0 <8.0.0" + "vite": ">=5.0.0 <9.0.0" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", - "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" + "node_modules/lucide-react": { + "version": "0.462.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.462.0.tgz", + "integrity": "sha512-NTL7EbAao9IFtuSivSZgrAh4fZd09Lr+6MTkqIxuHaH2nnYiYIzXPo06cOxHg9wKLdj6LL8TByG4qpePqwgx/g==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/android-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", - "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=18" + "node": ">= 8" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/android-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", - "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=18" + "node": ">=8.6" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/android-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", - "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", - "cpu": [ - "x64" - ], + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", - "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", - "cpu": [ - "arm64" - ], + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/darwin-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", - "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", - "cpu": [ - "x64" + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">=18" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", - "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", - "cpu": [ - "arm64" - ], + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, + "license": "MIT" + }, + "node_modules/next-themes": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz", + "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "peerDependencies": { + "react": "^16.8 || ^17 || ^18", + "react-dom": "^16.8 || ^17 || ^18" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", - "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", - "cpu": [ - "x64" - ], + "node_modules/node-releases": { + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { "node": ">=18" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", - "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", - "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", - "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">= 6" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-loong64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", - "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", - "cpu": [ - "loong64" - ], + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, "engines": { - "node": ">=18" + "node": ">= 0.8.0" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", - "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", - "cpu": [ - "mips64el" - ], + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", - "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", - "cpu": [ - "ppc64" - ], + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", - "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", - "cpu": [ - "riscv64" - ], + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-s390x": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", - "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", - "cpu": [ - "s390x" - ], + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/linux-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", - "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", - "cpu": [ - "x64" - ], + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", - "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], "engines": { - "node": ">=18" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", - "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/sunos-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", - "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], "engines": { - "node": ">=18" + "node": ">= 6" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/win32-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", - "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/playwright": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.0.tgz", + "integrity": "sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.61.0" + }, + "bin": { + "playwright": "cli.js" + }, "engines": { "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/win32-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", - "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/playwright-core": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.0.tgz", + "integrity": "sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, "engines": { "node": ">=18" } }, - "node_modules/lovable-tagger/node_modules/@esbuild/win32-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", - "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", - "cpu": [ - "x64" + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, "engines": { - "node": ">=18" + "node": "^10 || ^12 || >=14" } }, - "node_modules/lovable-tagger/node_modules/esbuild": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", - "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", - "dev": true, - "hasInstallScript": true, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": ">=18" + "node": ">=14.0.0" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.0", - "@esbuild/android-arm": "0.25.0", - "@esbuild/android-arm64": "0.25.0", - "@esbuild/android-x64": "0.25.0", - "@esbuild/darwin-arm64": "0.25.0", - "@esbuild/darwin-x64": "0.25.0", - "@esbuild/freebsd-arm64": "0.25.0", - "@esbuild/freebsd-x64": "0.25.0", - "@esbuild/linux-arm": "0.25.0", - "@esbuild/linux-arm64": "0.25.0", - "@esbuild/linux-ia32": "0.25.0", - "@esbuild/linux-loong64": "0.25.0", - "@esbuild/linux-mips64el": "0.25.0", - "@esbuild/linux-ppc64": "0.25.0", - "@esbuild/linux-riscv64": "0.25.0", - "@esbuild/linux-s390x": "0.25.0", - "@esbuild/linux-x64": "0.25.0", - "@esbuild/netbsd-arm64": "0.25.0", - "@esbuild/netbsd-x64": "0.25.0", - "@esbuild/openbsd-arm64": "0.25.0", - "@esbuild/openbsd-x64": "0.25.0", - "@esbuild/sunos-x64": "0.25.0", - "@esbuild/win32-arm64": "0.25.0", - "@esbuild/win32-ia32": "0.25.0", - "@esbuild/win32-x64": "0.25.0" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/lucide-react": { - "version": "0.462.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.462.0.tgz", - "integrity": "sha512-NTL7EbAao9IFtuSivSZgrAh4fZd09Lr+6MTkqIxuHaH2nnYiYIzXPo06cOxHg9wKLdj6LL8TByG4qpePqwgx/g==", "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + "postcss": "^8.0.0" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, "engines": { - "node": ">= 8" + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "lilconfig": "^3.1.1" }, "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "node": ">= 18" }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next-themes": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz", - "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==", + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17 || ^18", - "react-dom": "^16.8 || ^17 || ^18" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=6" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "loose-envify": "^1.1.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, + "node_modules/react-day-picker": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.2.tgz", + "integrity": "sha512-LK68OTbHB3oJNhl9cA0qVizzp3o26w61YSjAFkYi67N86iro32wx86kSNeFU/hq+gI8m1yzWhnomMLfZ041RzQ==", "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0 || ^3.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.79.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.79.0.tgz", + "integrity": "sha512-mhYp/MTmXvzYX6AJcJVko0rktoIhhmRnEouObj4wF5i/tCttgJvnp1+9wRkpITZjDTqpo4IOSJqu0dBlPlV/Lw==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/react-resizable-panels": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz", + "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "node_modules/react-router": { + "version": "6.30.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.4.tgz", + "integrity": "sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA==", "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/playwright": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz", - "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==", - "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.57.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz", - "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==", - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" + "@remix-run/router": "1.23.3" }, "engines": { - "node": ">=18" - } - }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "node": ">=14.0.0" }, - "engines": { - "node": "^10 || ^12 || >=14" + "peerDependencies": { + "react": ">=16.8" } }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "node_modules/react-router-dom": { + "version": "6.30.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.4.tgz", + "integrity": "sha512-q4HvNl+mmDdkS0g+MqiBZNteQJCuimWoOyHMy4T/RQLAn9Z29+E91QXRaxOujeMl2HTzRSS0KFPd7lxX3PjV0Q==", "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "@remix-run/router": "1.23.3", + "react-router": "6.30.4" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "postcss": "^8.0.0" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", "license": "MIT", "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" }, "peerDependencies": { - "postcss": "^8.4.21" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "license": "MIT", "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" }, "engines": { - "node": ">= 14" + "node": ">=10" }, "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { + "@types/react": { "optional": true } } }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" }, "peerDependencies": { - "postcss": "^8.2.14" + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "pify": "^2.3.0" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=8.10.0" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-day-picker": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", - "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", - "license": "MIT", - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/gpbl" - }, - "peerDependencies": { - "date-fns": "^2.28.0 || ^3.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-hook-form": { - "version": "7.61.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.61.1.tgz", - "integrity": "sha512-2vbXUFDYgqEgM2RcXcAT2PwDW/80QARi+PKmHy5q2KhuKvOlG8iIYgf7eIlIANR5trW9fJbP4r5aub3a4egsew==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-resizable-panels": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz", - "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==", - "license": "MIT", - "peerDependencies": { - "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/react-router": { - "version": "6.30.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz", - "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==", - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.23.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.30.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz", - "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==", - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.23.0", - "react-router": "6.30.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/react-smooth": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", - "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", - "license": "MIT", - "dependencies": { - "fast-equals": "^5.0.1", - "prop-types": "^15.8.1", - "react-transition-group": "^4.4.5" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recharts": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", - "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "node_modules/recharts": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "deprecated": "1.x and 2.x branches are no longer active. Bump to Recharts v3 to receive latest features and bugfixes. See https://github.com/recharts/recharts/wiki/3.0-migration-guide", "license": "MIT", "dependencies": { "clsx": "^2.0.0", @@ -6178,18 +5766,22 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6205,9 +5797,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -6215,13 +5807,13 @@ } }, "node_modules/rollup": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", - "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "version": "4.62.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.0.tgz", + "integrity": "sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.9" }, "bin": { "rollup": "dist/bin/rollup" @@ -6231,22 +5823,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.0", - "@rollup/rollup-android-arm64": "4.24.0", - "@rollup/rollup-darwin-arm64": "4.24.0", - "@rollup/rollup-darwin-x64": "4.24.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", - "@rollup/rollup-linux-arm-musleabihf": "4.24.0", - "@rollup/rollup-linux-arm64-gnu": "4.24.0", - "@rollup/rollup-linux-arm64-musl": "4.24.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", - "@rollup/rollup-linux-riscv64-gnu": "4.24.0", - "@rollup/rollup-linux-s390x-gnu": "4.24.0", - "@rollup/rollup-linux-x64-gnu": "4.24.0", - "@rollup/rollup-linux-x64-musl": "4.24.0", - "@rollup/rollup-win32-arm64-msvc": "4.24.0", - "@rollup/rollup-win32-ia32-msvc": "4.24.0", - "@rollup/rollup-win32-x64-msvc": "4.24.0", + "@rollup/rollup-android-arm-eabi": "4.62.0", + "@rollup/rollup-android-arm64": "4.62.0", + "@rollup/rollup-darwin-arm64": "4.62.0", + "@rollup/rollup-darwin-x64": "4.62.0", + "@rollup/rollup-freebsd-arm64": "4.62.0", + "@rollup/rollup-freebsd-x64": "4.62.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.0", + "@rollup/rollup-linux-arm-musleabihf": "4.62.0", + "@rollup/rollup-linux-arm64-gnu": "4.62.0", + "@rollup/rollup-linux-arm64-musl": "4.62.0", + "@rollup/rollup-linux-loong64-gnu": "4.62.0", + "@rollup/rollup-linux-loong64-musl": "4.62.0", + "@rollup/rollup-linux-ppc64-gnu": "4.62.0", + "@rollup/rollup-linux-ppc64-musl": "4.62.0", + "@rollup/rollup-linux-riscv64-gnu": "4.62.0", + "@rollup/rollup-linux-riscv64-musl": "4.62.0", + "@rollup/rollup-linux-s390x-gnu": "4.62.0", + "@rollup/rollup-linux-x64-gnu": "4.62.0", + "@rollup/rollup-linux-x64-musl": "4.62.0", + "@rollup/rollup-openbsd-x64": "4.62.0", + "@rollup/rollup-openharmony-arm64": "4.62.0", + "@rollup/rollup-win32-arm64-msvc": "4.62.0", + "@rollup/rollup-win32-ia32-msvc": "4.62.0", + "@rollup/rollup-win32-x64-gnu": "4.62.0", + "@rollup/rollup-win32-x64-msvc": "4.62.0", "fsevents": "~2.3.2" } }, @@ -6283,9 +5884,9 @@ } }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", + "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", "dev": true, "license": "ISC", "bin": { @@ -6299,6 +5900,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -6311,23 +5913,12 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/sonner": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz", @@ -6347,102 +5938,6 @@ "node": ">=0.10.0" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -6457,17 +5952,17 @@ } }, "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { @@ -6504,9 +5999,9 @@ } }, "node_modules/tailwind-merge": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", - "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz", + "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==", "license": "MIT", "funding": { "type": "github", @@ -6514,9 +6009,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", - "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -6527,7 +6022,7 @@ "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.6", + "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", @@ -6536,7 +6031,7 @@ "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", @@ -6559,6 +6054,19 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -6586,6 +6094,51 @@ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6599,9 +6152,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { @@ -6618,9 +6171,9 @@ "license": "Apache-2.0" }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/type-check": { @@ -6637,9 +6190,9 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -6651,16 +6204,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", - "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "version": "8.61.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.61.1.tgz", + "integrity": "sha512-V7PayAfJokV3pEHgN7/v03D1SpujhRfQtYLbLIiBfDDncdg4PAiRBfoS4cnCANK4jmAPncczi59QO3afiXUlNw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.38.0", - "@typescript-eslint/parser": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0" + "@typescript-eslint/eslint-plugin": "8.61.1", + "@typescript-eslint/parser": "8.61.1", + "@typescript-eslint/typescript-estree": "8.61.1", + "@typescript-eslint/utils": "8.61.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6670,8 +6223,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/undici-types": { @@ -6682,9 +6235,9 @@ "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -6765,15 +6318,6 @@ } } }, - "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -6816,9 +6360,9 @@ } }, "node_modules/vite": { - "version": "5.4.19", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", - "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -6875,129 +6419,475 @@ } } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=12" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/yaml": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", - "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "node_modules/yocto-queue": { diff --git a/Custom Apps/legal-docs/package.json b/Custom Apps/legal-docs/package.json index a6b55f6..a82ee92 100644 --- a/Custom Apps/legal-docs/package.json +++ b/Custom Apps/legal-docs/package.json @@ -15,7 +15,6 @@ "@azure/msal-react": "^3.0.23", "@fluentui/react": "^8.125.3", "@hookform/resolvers": "^3.10.0", - "@microsoft/sharepointembedded-copilotchat-react": "file:lib/microsoft-sharepointembedded-copilotchat-react-1.0.9.tgz", "@playwright/test": "^1.57.0", "@radix-ui/react-accordion": "^1.2.11", "@radix-ui/react-alert-dialog": "^1.1.14", diff --git a/Custom Apps/legal-docs/src/components/CopilotChat.tsx b/Custom Apps/legal-docs/src/components/CopilotChat.tsx deleted file mode 100644 index 66d398c..0000000 --- a/Custom Apps/legal-docs/src/components/CopilotChat.tsx +++ /dev/null @@ -1,210 +0,0 @@ -import { useState, useEffect, useRef, useCallback, useMemo } from "react"; -import { X, Loader2, AlertCircle } from "lucide-react"; -import { cn } from "@/lib/utils"; -import { useAuth } from "@/context/AuthContext"; -import { useCopilotSite } from "@/hooks/useCopilotSite"; -import { CopilotAuthProvider, IChatEmbeddedApiAuthProvider } from "@/components/copilot/CopilotAuthProvider"; -import { APP_CONFIG, COPILOT_CONFIG } from "@/config/appConfig"; -import { Button } from "@/components/ui/button"; - -// Import SDK types -import type { - ChatEmbeddedAPI, - ChatLaunchConfig -} from "@microsoft/sharepointembedded-copilotchat-react"; -import { ChatEmbedded } from "@microsoft/sharepointembedded-copilotchat-react"; - -interface CopilotChatProps { - containerId: string; - isOpen: boolean; - onClose: () => void; -} - -type ChatStatus = 'initializing' | 'ready' | 'error' | 'timeout'; - -/** - * CopilotChat - Main chat modal component - * - * Features: - * - Creates CopilotAuthProvider instance with SharePoint hostname - * - Configures ChatLaunchConfig with header, instruction, locale, suggestedPrompts - * - Renders ChatEmbedded component from Microsoft SDK - * - Handles loading states, errors, and timeout detection - * - Modern slide-in panel UI with close button - */ -export default function CopilotChat({ containerId, isOpen, onClose }: CopilotChatProps) { - const { getAccessToken, isAuthenticated } = useAuth(); - const { containerName, isLoading: siteLoading, error: siteError } = useCopilotSite(containerId); - - const [status, setStatus] = useState('initializing'); - const [errorMessage, setErrorMessage] = useState(null); - const [mountKey, setMountKey] = useState(0); - - const chatApiRef = useRef(null); - const timeoutRef = useRef(null); - const containerRef = useRef(null); - - // Create auth provider instance - const authProvider = useMemo(() => - new CopilotAuthProvider(getAccessToken), - [getAccessToken] - ); - - // Chat launch configuration - must include zeroQueryPrompts for SDK to render UI - const chatConfig = useMemo(() => ({ - header: containerName || COPILOT_CONFIG.header, - instruction: COPILOT_CONFIG.instruction, - locale: COPILOT_CONFIG.locale, - zeroQueryPrompts: { - headerText: "How can I help you with this case?", - promptSuggestionList: COPILOT_CONFIG.suggestedPrompts.map(text => ({ - suggestionText: text - })), - }, - chatInputPlaceholder: COPILOT_CONFIG.chatInputPlaceholder, - }), [containerName]); - - // Reset state when container changes - useEffect(() => { - setStatus('initializing'); - setErrorMessage(null); - setMountKey(prev => prev + 1); - }, [containerId]); - - // Initialize chat when API is ready - const initializeCopilotChat = useCallback(async (api: ChatEmbeddedAPI) => { - console.log("🚀 Copilot API ready, initializing chat..."); - chatApiRef.current = api; - - // Clear any existing timeout - if (timeoutRef.current) { - clearTimeout(timeoutRef.current); - } - - try { - // Small delay to ensure DOM is ready - await new Promise(resolve => setTimeout(resolve, 500)); - - // Open the chat with configuration - await api.openChat(chatConfig); - - console.log("✅ Copilot chat opened successfully"); - setStatus('ready'); - } catch (error) { - console.error("❌ Failed to open Copilot chat:", error); - setStatus('error'); - setErrorMessage(error instanceof Error ? error.message : 'Failed to initialize chat'); - } - }, [chatConfig]); - - // Handle SDK API ready event - const handleApiReady = useCallback((api: ChatEmbeddedAPI) => { - console.log("📡 ChatEmbedded onApiReady fired"); - initializeCopilotChat(api); - }, [initializeCopilotChat]); - - // Set up timeout detection - useEffect(() => { - if (!isOpen || status !== 'initializing') return; - - timeoutRef.current = setTimeout(() => { - if (status === 'initializing') { - console.warn("⏰ Copilot initialization timeout"); - setStatus('timeout'); - setErrorMessage('Chat initialization timed out. This may be due to CSP restrictions.'); - } - }, 15000); // 15 second timeout - - return () => { - if (timeoutRef.current) { - clearTimeout(timeoutRef.current); - } - }; - }, [isOpen, status]); - - // Retry handler - const handleRetry = useCallback(() => { - setStatus('initializing'); - setErrorMessage(null); - setMountKey(prev => prev + 1); - }, []); - - // Don't render if not open - if (!isOpen) return null; - - const showLoading = status === 'initializing' || siteLoading; - const showError = status === 'error' || status === 'timeout' || !!siteError; - - return ( -
- {/* Header */} -
-
-

AI Assistant

- {containerName && ( -

{containerName}

- )} -
- -
- - {/* Content */} -
- {/* Loading State */} - {showLoading && !showError && ( -
- -

- {siteLoading ? 'Loading container...' : 'Starting Copilot...'} -

-
- )} - - {/* Error State */} - {showError && ( -
- -
-

Unable to Load Chat

-

- {siteError || errorMessage || 'An error occurred while loading the chat.'} -

- {status === 'timeout' && ( -

- Ensure your published URL is whitelisted in SharePoint admin. -

- )} -
- -
- )} - - {/* SDK ChatEmbedded Component */} - {isAuthenticated && containerId && !siteError && ( -
- -
- )} -
-
- ); -} diff --git a/Custom Apps/legal-docs/src/components/CustomCopilotChat.tsx b/Custom Apps/legal-docs/src/components/CustomCopilotChat.tsx deleted file mode 100644 index ba7c3ab..0000000 --- a/Custom Apps/legal-docs/src/components/CustomCopilotChat.tsx +++ /dev/null @@ -1,286 +0,0 @@ -import { useState, useCallback, useMemo, useRef, useEffect } from "react"; -import { MessageCircle, X, Send, Loader2, Database, CheckCircle2 } from "lucide-react"; -import { cn } from "@/lib/utils"; -import { useAuth } from "@/context/AuthContext"; -import { Button } from "@/components/ui/button"; -import { ScrollArea } from "@/components/ui/scroll-area"; -import { Input } from "@/components/ui/input"; -import { - sendCopilotMessage, - createChatAuthProvider, - CopilotMessage, - DEFAULT_CHAT_CONFIG, - ChatLaunchConfig -} from "@/services/copilotChat"; - -interface CustomCopilotChatProps { - containerId: string; - containerName: string; - config?: ChatLaunchConfig; -} - -/** - * Custom Copilot Chat Component - * - * This component implements the SharePoint Embedded Copilot chat pattern - * following the SDK documentation at: - * https://learn.microsoft.com/en-us/sharepoint/dev/embedded/development/tutorials/spe-da-vscode - * - * It uses the SharePoint container as the document source, with authentication - * via Container.Selected scope as per the official SDK requirements. - */ -export default function CustomCopilotChat({ - containerId, - containerName, - config = DEFAULT_CHAT_CONFIG -}: CustomCopilotChatProps) { - const { getAccessToken } = useAuth(); - const [isOpen, setIsOpen] = useState(false); - const [messages, setMessages] = useState([]); - const [inputValue, setInputValue] = useState(""); - const [isLoading, setIsLoading] = useState(false); - const [isConnected, setIsConnected] = useState(false); - const scrollRef = useRef(null); - const prevContainerId = useRef(null); - - // Create auth provider following SDK pattern - uses Container.Selected scope - const authProvider = useMemo(() => - createChatAuthProvider(getAccessToken), - [getAccessToken] - ); - - // Merged config - const chatConfig = useMemo(() => ({ - ...DEFAULT_CHAT_CONFIG, - ...config, - header: config?.header || containerName, - }), [config, containerName]); - - // Reset messages and test connection when container changes - useEffect(() => { - if (prevContainerId.current !== containerId) { - prevContainerId.current = containerId; - setMessages([]); - setInputValue(""); - setIsConnected(false); - - // Test container connection on change - const testConnection = async () => { - try { - await authProvider.getToken(); - setIsConnected(true); - console.log("Connected to SharePoint container:", containerId); - } catch (error) { - console.error("Failed to connect to container:", error); - setIsConnected(false); - } - }; - - if (containerId) { - testConnection(); - } - } - }, [containerId, authProvider]); - - // Scroll to bottom when new messages arrive - useEffect(() => { - if (scrollRef.current) { - scrollRef.current.scrollTop = scrollRef.current.scrollHeight; - } - }, [messages]); - - // Handle sending a message - const handleSendMessage = useCallback(async (text: string) => { - if (!text.trim() || isLoading) return; - - const userMessage: CopilotMessage = { - role: "user", - content: text.trim(), - timestamp: new Date(), - }; - - setMessages(prev => [...prev, userMessage]); - setInputValue(""); - setIsLoading(true); - - try { - const response = await sendCopilotMessage( - authProvider, - containerId, - containerName, - text.trim(), - messages, - chatConfig - ); - - const assistantMessage: CopilotMessage = { - role: "assistant", - content: response, - timestamp: new Date(), - }; - - setMessages(prev => [...prev, assistantMessage]); - } catch (error) { - console.error("Chat error:", error); - const errorMessage: CopilotMessage = { - role: "assistant", - content: "I'm sorry, I encountered an error processing your request. Please try again.", - timestamp: new Date(), - }; - setMessages(prev => [...prev, errorMessage]); - } finally { - setIsLoading(false); - } - }, [authProvider, containerId, containerName, messages, chatConfig, isLoading]); - - // Handle form submit - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - handleSendMessage(inputValue); - }; - - // Handle suggestion click - const handleSuggestionClick = (suggestion: string) => { - handleSendMessage(suggestion); - }; - - // Toggle chat panel - const handleToggle = useCallback(() => { - setIsOpen(prev => !prev); - }, []); - - // Don't render if no container is selected - if (!containerId) return null; - - const zeroQueryPrompts = chatConfig.zeroQueryPrompts || DEFAULT_CHAT_CONFIG.zeroQueryPrompts; - - return ( - <> - {/* Chat Bubble Button */} - - - {/* Chat Flyout Panel */} -
- {/* Header */} -
-
-

{chatConfig.header}

-
- -

{containerName}

- {isConnected && ( - - - Connected - - )} -
-
-
- - {/* Messages Area */} - - {messages.length === 0 ? ( -
-

- {zeroQueryPrompts?.headerText} -

-
- {zeroQueryPrompts?.promptSuggestionList?.map((prompt, index) => ( - - ))} -
-
- ) : ( -
- {messages.map((message, index) => ( -
-
-

{message.content}

-
-
- ))} - {isLoading && ( -
-
- -
-
- )} -
- )} -
- - {/* Input Area */} -
-
- setInputValue(e.target.value)} - placeholder={chatConfig.chatInputPlaceholder || "Ask about this case..."} - disabled={isLoading} - className="flex-1" - /> - -
-
-
- - ); -} diff --git a/Custom Apps/legal-docs/src/components/FloatingCopilotIcon.tsx b/Custom Apps/legal-docs/src/components/FloatingCopilotIcon.tsx deleted file mode 100644 index c7e62fd..0000000 --- a/Custom Apps/legal-docs/src/components/FloatingCopilotIcon.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { useState, useCallback } from "react"; -import { MessageCircle } from "lucide-react"; -import { cn } from "@/lib/utils"; -import { useAuth } from "@/context/AuthContext"; -import CopilotChat from "@/components/CopilotChat"; -import { useToast } from "@/hooks/use-toast"; - -interface FloatingCopilotIconProps { - containerId: string | null; - containerName?: string; -} - -/** - * FloatingCopilotIcon - Floating action button for Copilot chat - * - * Features: - * - Fixed position at bottom-right corner - * - Checks authentication before opening chat - * - Validates a container is selected - * - Opens CopilotChat modal on click - */ -export default function FloatingCopilotIcon({ containerId, containerName }: FloatingCopilotIconProps) { - const { isAuthenticated } = useAuth(); - const { toast } = useToast(); - const [isOpen, setIsOpen] = useState(false); - - const handleClick = useCallback(() => { - if (!isAuthenticated) { - toast({ - title: "Authentication Required", - description: "Please sign in to use the AI Assistant.", - variant: "destructive", - }); - return; - } - - if (!containerId) { - toast({ - title: "No Case Selected", - description: "Please select a case to use the AI Assistant.", - variant: "destructive", - }); - return; - } - - setIsOpen(true); - }, [isAuthenticated, containerId, toast]); - - const handleClose = useCallback(() => { - setIsOpen(false); - }, []); - - // Only show if authenticated - if (!isAuthenticated) return null; - - return ( - <> - {/* Floating Button */} - - - {/* Backdrop */} - {isOpen && ( -
- )} - - {/* Chat Panel */} - {containerId && ( - - )} - - ); -} diff --git a/Custom Apps/legal-docs/src/components/FlyoutButtons.tsx b/Custom Apps/legal-docs/src/components/FlyoutButtons.tsx index de25232..ee46ece 100644 --- a/Custom Apps/legal-docs/src/components/FlyoutButtons.tsx +++ b/Custom Apps/legal-docs/src/components/FlyoutButtons.tsx @@ -1,22 +1,16 @@ import { cn } from "@/lib/utils"; import { ChevronLeft } from "lucide-react"; -export type PanelType = "caseSummary" | "tools" | "reports" | "copilot"; +export type PanelType = "caseSummary" | "tools" | "reports"; interface FlyoutButtonsProps { activePanel: PanelType | null; onPanelToggle: (panel: PanelType) => void; - showCopilot?: boolean; } -export default function FlyoutButtons({ activePanel, onPanelToggle, showCopilot }: FlyoutButtonsProps) { +export default function FlyoutButtons({ activePanel, onPanelToggle }: FlyoutButtonsProps) { const buttons: { id: PanelType; label: string; bgClass: string }[] = [ { id: "caseSummary", label: "Case Summary", bgClass: "bg-primary hover:bg-primary/90" }, - ...(showCopilot ? [{ - id: "copilot" as PanelType, - label: "AI Assistant", - bgClass: "bg-primary/80 hover:bg-primary/70" - }] : []), { id: "tools", label: "Tools", bgClass: "bg-primary/60 hover:bg-primary/50" }, { id: "reports", label: "Reports", bgClass: "bg-primary/40 hover:bg-primary/30" }, ]; diff --git a/Custom Apps/legal-docs/src/components/copilot/CopilotAuthProvider.ts b/Custom Apps/legal-docs/src/components/copilot/CopilotAuthProvider.ts deleted file mode 100644 index 09f7f65..0000000 --- a/Custom Apps/legal-docs/src/components/copilot/CopilotAuthProvider.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { APP_CONFIG, SCOPES } from "@/config/appConfig"; - -/** - * Authentication provider interface for the SharePoint Embedded Copilot SDK. - * Matches the SDK's IChatEmbeddedApiAuthProvider interface. - */ -export interface IChatEmbeddedApiAuthProvider { - hostname: string; - getToken(): Promise; -} - -/** - * CopilotAuthProvider implements IChatEmbeddedApiAuthProvider for the SDK. - * - * The SDK requires: - * - hostname: SharePoint site URL (e.g., https://tenant.sharepoint.com) - * - getToken(): Returns access token with Container.Selected scope - */ -export class CopilotAuthProvider implements IChatEmbeddedApiAuthProvider { - public readonly hostname: string; - private getAccessToken: (scopes: string[]) => Promise; - private initialized: boolean = false; - - constructor(getAccessToken: (scopes: string[]) => Promise) { - this.hostname = APP_CONFIG.sharePointHostname; - this.getAccessToken = getAccessToken; - } - - /** - * Initialize the auth provider by testing token acquisition. - * Call this before using the ChatEmbedded component. - */ - async initialize(): Promise { - const token = await this.getToken(); - if (!token) { - throw new Error("Failed to initialize auth provider - could not acquire token"); - } - this.initialized = true; - console.log("CopilotAuthProvider: Initialized successfully"); - } - - /** - * Get access token with Container.Selected scope. - * Required by the SDK: {hostname}/Container.Selected - */ - async getToken(): Promise { - const token = await this.getAccessToken(SCOPES.sharePoint); - if (!token) { - throw new Error("Failed to acquire SharePoint Container.Selected token"); - } - console.log("CopilotAuthProvider: Acquired Container.Selected token"); - return token; - } - - get isInitialized(): boolean { - return this.initialized; - } -} diff --git a/Custom Apps/legal-docs/src/components/copilot/CopilotChatContainer.tsx b/Custom Apps/legal-docs/src/components/copilot/CopilotChatContainer.tsx deleted file mode 100644 index 10d9d3c..0000000 --- a/Custom Apps/legal-docs/src/components/copilot/CopilotChatContainer.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import React, { useState, useCallback, useMemo } from 'react'; -import { useCopilotSite } from '@/hooks/useCopilotSite'; -import CopilotDesktopView from './CopilotDesktopView'; -import { toast } from '@/hooks/use-toast'; -import { appConfig } from '@/config/appConfig'; -import { useAuth } from '@/context/AuthContext'; -import { - IChatEmbeddedApiAuthProvider, - ChatEmbeddedAPI, - ChatLaunchConfig -} from '@microsoft/sharepointembedded-copilotchat-react'; - -interface CopilotChatContainerProps { - containerId: string; - containerName?: string; -} - -const CopilotChatContainer: React.FC = ({ - containerId, - containerName: propContainerName -}) => { - const [isOpen, setIsOpen] = useState(true); - const { getSharePointToken, isAuthenticated } = useAuth(); - const [chatApi, setChatApi] = useState(null); - const [chatKey, setChatKey] = useState(0); - - // Validate and normalize containerId - const normalizedContainerId = useMemo(() => { - if (!containerId || typeof containerId !== 'string') return ''; - return containerId.startsWith('b!') ? containerId : `b!${containerId}`; - }, [containerId]); - - const { - isLoading, - error, - webUrl: siteUrl, - containerName: hookSiteName, - sharePointHostname, - } = useCopilotSite(normalizedContainerId); - - // Use prop name or hook name - const siteName = propContainerName || hookSiteName || 'SharePoint Site'; - - // Ensure we have valid hostnames with proper normalization - const rawHostname = sharePointHostname || appConfig.sharePointHostname; - const safeSharePointHostname = appConfig.normalizeSharePointUrl(rawHostname); - - console.log('🏠 SharePoint hostname details:', { - original: rawHostname, - normalized: safeSharePointHostname, - fromConfig: appConfig.sharePointHostname, - fromHook: sharePointHostname - }); - - const handleError = useCallback((errorMessage: string) => { - console.error('Copilot chat error:', errorMessage); - - setTimeout(() => { - const chatContainer = document.querySelector('[data-testid="copilot-chat-wrapper"]'); - const hasIframe = chatContainer?.querySelector('iframe'); - - if (!hasIframe) { - toast({ - title: "Copilot error", - description: `${errorMessage} The system will attempt to recover automatically.`, - variant: "destructive", - }); - } else { - console.log('🔄 Copilot chat recovered automatically, skipping error notification'); - } - }, 2000); - }, []); - - // Create auth provider for Copilot chat - const authProvider = useMemo((): IChatEmbeddedApiAuthProvider => { - const containerWebUrl = siteUrl || safeSharePointHostname; - - console.log('🔧 Creating auth provider with URLs:', { - hostname: safeSharePointHostname, - siteUrl: containerWebUrl, - }); - - const provider: IChatEmbeddedApiAuthProvider = { - hostname: safeSharePointHostname, - getToken: async () => { - try { - if (!isAuthenticated) { - console.error('User not authenticated, cannot get token'); - return ''; - } - - const token = await getSharePointToken(); - console.log('🔑 SharePoint auth token retrieved:', token ? 'successfully' : 'failed'); - - if (!token) { - handleError('Failed to get authentication token for SharePoint.'); - return ''; - } - - return token; - } catch (err) { - console.error('❌ Error getting token for Copilot chat:', err); - handleError('Failed to authenticate with SharePoint. Please try again.'); - return ''; - } - } - }; - - // The SDK requires siteUrl on the auth provider for proper site context - (provider as any).siteUrl = containerWebUrl; - - return provider; - }, [safeSharePointHostname, siteUrl, getSharePointToken, handleError, isAuthenticated]); - - // Chat configuration - const chatConfig = useMemo((): ChatLaunchConfig => ({ - header: `Copilot Chat - ${siteName}`, - instruction: "You are a helpful AI assistant. Help users find information, answer questions, and work with their SharePoint files and documents.", - locale: "en", - suggestedPrompts: ["What are my files?", "Help me find documents", "Show me recent changes"] - }), [siteName]); - - const handleResetChat = useCallback(() => { - console.log('🔄 Resetting Copilot chat container'); - setChatKey(prev => prev + 1); - setChatApi(null); - setIsOpen(false); - setTimeout(() => { - setIsOpen(true); - }, 500); - }, []); - - const handleApiReady = useCallback((api: ChatEmbeddedAPI) => { - if (!api) { - console.error('❌ Chat API is undefined'); - handleError('Chat API initialization failed'); - return; - } - - console.log('✅ Copilot chat API is ready'); - setChatApi(api); - }, [handleError]); - - // Early return after all hooks are called - if (!normalizedContainerId) { - console.error('CopilotChatContainer: Invalid containerId provided:', containerId); - return null; - } - - return ( - - ); -}; - -export default CopilotChatContainer; diff --git a/Custom Apps/legal-docs/src/components/copilot/CopilotDesktopView.tsx b/Custom Apps/legal-docs/src/components/copilot/CopilotDesktopView.tsx deleted file mode 100644 index 3954d94..0000000 --- a/Custom Apps/legal-docs/src/components/copilot/CopilotDesktopView.tsx +++ /dev/null @@ -1,396 +0,0 @@ -import React, { useEffect, useRef, useState, useCallback } from 'react'; -import { Button } from '@/components/ui/button'; -import { RefreshCw, AlertTriangle, ExternalLink } from 'lucide-react'; -import { Alert, AlertDescription } from '@/components/ui/alert'; -import { ChatEmbedded, ChatEmbeddedAPI, IChatEmbeddedApiAuthProvider, ChatLaunchConfig } from '@microsoft/sharepointembedded-copilotchat-react'; - -interface CopilotDesktopViewProps { - isOpen: boolean; - setIsOpen: (value: boolean) => void; - siteName: string; - siteUrl: string | null; - isLoading: boolean; - error: string | null; - containerId: string; - onError: (errorMessage: string) => void; - chatConfig: ChatLaunchConfig; - authProvider: IChatEmbeddedApiAuthProvider; - onApiReady: (api: ChatEmbeddedAPI) => void; - chatKey: number; - onResetChat?: () => void; - isAuthenticated?: boolean; - chatApi: ChatEmbeddedAPI | null; -} - -const CopilotDesktopView: React.FC = ({ - isOpen, - setIsOpen, - siteName, - siteUrl, - isLoading, - error, - containerId, - onError, - chatConfig, - authProvider, - onApiReady, - chatKey, - onResetChat, - isAuthenticated = true, - chatApi -}) => { - const chatInitializedRef = useRef(false); - const containerRef = useRef(null); - const [componentReady, setComponentReady] = useState(false); - const [cspError, setCspError] = useState(false); - const [debugInfo, setDebugInfo] = useState<{hostname: string, origin: string} | null>(null); - - // Enhanced CSP error detection to catch all variations - const isCSPError = useCallback((errorMessage: string) => { - return errorMessage.includes('Content Security Policy') || - errorMessage.includes('frame-ancestors') || - errorMessage.includes('Refused to frame') || - errorMessage.includes('Refused to display') || - errorMessage.includes('because an ancestor violates'); - }, []); - - // Debug initial component state - useEffect(() => { - console.log('🟢 CopilotDesktopView mounted with props:', { - isOpen, - containerId, - siteName, - isLoading, - error, - isAuthenticated, - authHostname: authProvider.hostname - }); - }, [isOpen, containerId, siteName, isLoading, error, isAuthenticated, authProvider.hostname]); - - // Capture debug information for CSP troubleshooting - useEffect(() => { - setDebugInfo({ - hostname: authProvider.hostname, - origin: window.location.origin - }); - }, [authProvider.hostname]); - - // Handle CSP errors specifically with enhanced detection - useEffect(() => { - const handleCSPError = (event: ErrorEvent) => { - const errorMessage = event.message || event.error?.message || ''; - console.error('🚨 CSP Error detected:', errorMessage); - - if (isCSPError(errorMessage)) { - setCspError(true); - onError(`SharePoint Content Security Policy Error: ${errorMessage}`); - event.preventDefault(); - } - }; - - const handleUnhandledRejection = (event: PromiseRejectionEvent) => { - const reason = event.reason?.message || event.reason || ''; - console.error('🚨 CSP Promise rejection:', reason); - - if (typeof reason === 'string' && isCSPError(reason)) { - setCspError(true); - onError(`SharePoint CSP Rejection: ${reason}`); - event.preventDefault(); - } - }; - - // Also listen for console errors that might indicate CSP issues - const originalConsoleError = console.error; - console.error = (...args) => { - const message = args.join(' '); - if (isCSPError(message)) { - setCspError(true); - onError(`Console CSP Error: ${message}`); - } - originalConsoleError.apply(console, args); - }; - - window.addEventListener('error', handleCSPError); - window.addEventListener('unhandledrejection', handleUnhandledRejection); - - return () => { - window.removeEventListener('error', handleCSPError); - window.removeEventListener('unhandledrejection', handleUnhandledRejection); - console.error = originalConsoleError; - }; - }, [onError, isCSPError]); - - // Debug container contents periodically - const debugContainerContents = useCallback(() => { - if (containerRef.current) { - const container = containerRef.current; - console.log('🔍 Container debugging:', { - hasChildren: container.children.length > 0, - childCount: container.children.length, - innerHTML: container.innerHTML.substring(0, 500) + '...', - iframes: container.querySelectorAll('iframe').length, - inputs: container.querySelectorAll('input').length, - textareas: container.querySelectorAll('textarea').length, - buttons: container.querySelectorAll('button').length, - divs: container.querySelectorAll('div').length - }); - - // Look for any chat-related elements - const chatElements = container.querySelectorAll('[class*="chat"], [id*="chat"], [data-*="chat"]'); - console.log('🔍 Chat-related elements found:', chatElements.length); - - // Check for any hidden elements - const hiddenElements = container.querySelectorAll('[style*="display: none"], [style*="visibility: hidden"], [hidden]'); - console.log('🔍 Hidden elements found:', hiddenElements.length); - - // Force show any hidden input elements as a last resort - const allInputs = container.querySelectorAll('input, textarea'); - allInputs.forEach((input, index) => { - const styles = window.getComputedStyle(input); - console.log(`🔍 Input ${index}:`, { - display: styles.display, - visibility: styles.visibility, - opacity: styles.opacity, - zIndex: styles.zIndex, - position: styles.position - }); - }); - } - }, []); - - // Handle API ready with better initialization - const handleApiReady = useCallback((api: ChatEmbeddedAPI) => { - console.log('🚀 Copilot API ready, initializing chat...'); - onApiReady(api); - setComponentReady(true); - setCspError(false); // Reset CSP error if API is ready - }, [onApiReady]); - - // Open chat following Microsoft documentation pattern - const initializeCopilotChat = useCallback(async (api: ChatEmbeddedAPI) => { - try { - console.log('📋 Opening copilot chat with config:', { - header: chatConfig.header, - locale: chatConfig.locale, - containerId: containerId, - hasInstruction: !!chatConfig.instruction, - authHostname: authProvider.hostname, - currentOrigin: window.location.origin - }); - - // Wait for component to be fully mounted (following MS docs pattern) - await new Promise(resolve => setTimeout(resolve, 100)); - - // Use the exact pattern from Microsoft documentation - await api.openChat(chatConfig); - console.log('✅ Copilot chat opened successfully'); - - // Debug container contents immediately after opening - setTimeout(() => { - debugContainerContents(); - }, 1000); - - // Continue debugging every few seconds to track changes - const debugInterval = setInterval(() => { - debugContainerContents(); - }, 3000); - - // Stop debugging after 15 seconds - setTimeout(() => { - clearInterval(debugInterval); - }, 15000); - - // Monitor for CSP errors and UI issues after chat opens - setTimeout(() => { - if (containerRef.current) { - const iframes = containerRef.current.querySelectorAll('iframe'); - console.log('📊 Container analysis after chat open:', { - childElementCount: containerRef.current.childElementCount, - iframeCount: iframes.length, - authHostname: authProvider.hostname, - origin: window.location.origin - }); - - // Check if iframe failed to load due to CSP - if (iframes.length > 0) { - iframes.forEach((iframe, index) => { - iframe.addEventListener('error', () => { - console.error(`❌ Iframe ${index} failed to load - likely CSP issue`); - setCspError(true); - }); - - // Also monitor iframe content loading - iframe.addEventListener('load', () => { - console.log(`✅ Iframe ${index} loaded successfully`); - // Debug iframe contents after a delay - setTimeout(() => { - debugContainerContents(); - }, 2000); - }); - }); - } - } - }, 2000); - - } catch (err) { - console.error('❌ Error opening copilot chat:', err); - - // Check if it's a CSP-related error - const errorMessage = err instanceof Error ? err.message : String(err); - if (isCSPError(errorMessage)) { - setCspError(true); - onError(`SharePoint CSP Error: ${errorMessage}`); - } else { - // For "Failed to fetch site URL" errors, this is often transient - the reset mechanism will retry - console.log('🔄 Chat initialization failed, reset mechanism will attempt recovery...'); - onError('Failed to initialize chat'); - } - setComponentReady(false); - } - }, [chatConfig, containerId, authProvider.hostname, debugContainerContents, isCSPError, onError]); - - // Effect to handle chat initialization and reset - useEffect(() => { - console.log('🔍 Copilot initialization state:', { - isOpen, - hasChatApi: !!chatApi, - componentReady, - chatInitialized: chatInitializedRef.current, - cspError - }); - - // Initialize chat when dialog opens and API is ready - if (isOpen && chatApi && componentReady && !chatInitializedRef.current && !cspError) { - console.log('🎯 Initializing copilot chat...'); - chatInitializedRef.current = true; - initializeCopilotChat(chatApi); - } - - if (!isOpen) { - chatInitializedRef.current = false; - setComponentReady(false); - setCspError(false); - } - }, [isOpen, chatApi, componentReady, cspError, initializeCopilotChat]); - - // Reset chat when requested - const handleResetChat = useCallback(() => { - if (onResetChat) { - console.log('🔄 Resetting copilot chat component'); - chatInitializedRef.current = false; - setComponentReady(false); - setCspError(false); - onResetChat(); - } - }, [onResetChat]); - - // Early return if not authenticated - AFTER all hooks - if (!isAuthenticated) { - console.log('CopilotDesktopView: Not rendering because not authenticated'); - return null; - } - - return ( -
- {isOpen && ( - <> -
-
- SharePoint Embedded Copilot - Connected to: {siteName || 'SharePoint Site'} -
- {onResetChat && isAuthenticated && ( - - )} -
- -
- {cspError ? ( -
- - - - SharePoint Content Security Policy Restriction -

- Refused to frame '{debugInfo?.hostname}' because an ancestor violates CSP directive "frame-ancestors" -

-
- What this means: -
    -
  • SharePoint is configured to only allow framing from specific domains
  • -
  • Your app (origin: {debugInfo?.origin}) is not in the allowed list
  • -
  • This is a SharePoint server-side security feature that cannot be bypassed
  • -
-
-
- Required SharePoint Admin Actions: -
    -
  • Update CSP headers to include: {debugInfo?.origin}
  • -
  • Or configure wildcard domain patterns if applicable
  • -
  • Or use SharePoint's native Copilot interface instead
  • -
-
-
-

- Alternative: Access Copilot directly in SharePoint at: -
- - {debugInfo?.hostname} - -

-
-
-
- {onResetChat && ( - - )} -
- ) : isLoading ? ( -
-
- Loading... -
- ) : error ? ( -
- - - {error || "Unable to load the chat. Please try again."} - - - {onResetChat && ( - - )} -
- ) : ( -
- -
- )} -
- - )} -
- ); -}; - -export default CopilotDesktopView; diff --git a/Custom Apps/legal-docs/src/components/copilot/CopilotErrorBoundary.tsx b/Custom Apps/legal-docs/src/components/copilot/CopilotErrorBoundary.tsx deleted file mode 100644 index f2f1db0..0000000 --- a/Custom Apps/legal-docs/src/components/copilot/CopilotErrorBoundary.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import React, { Component, ErrorInfo, ReactNode } from "react"; -import { AlertTriangle, RefreshCw, ExternalLink } from "lucide-react"; -import { Button } from "@/components/ui/button"; - -interface Props { - children: ReactNode; - onRetry?: () => void; - onClose?: () => void; -} - -interface State { - hasError: boolean; - error: Error | null; - errorInfo: ErrorInfo | null; -} - -/** - * Error boundary specifically for the Copilot SDK. - * Catches internal SDK errors and provides a graceful fallback UI. - */ -export class CopilotErrorBoundary extends Component { - constructor(props: Props) { - super(props); - this.state = { hasError: false, error: null, errorInfo: null }; - } - - static getDerivedStateFromError(error: Error): Partial { - return { hasError: true, error }; - } - - componentDidCatch(error: Error, errorInfo: ErrorInfo) { - console.error("CopilotErrorBoundary caught error:", error); - console.error("Component stack:", errorInfo.componentStack); - this.setState({ errorInfo }); - } - - handleRetry = () => { - this.setState({ hasError: false, error: null, errorInfo: null }); - this.props.onRetry?.(); - }; - - render() { - if (this.state.hasError) { - const errorMessage = this.state.error?.message || "Unknown error"; - const isNameError = errorMessage.includes("Cannot read properties of undefined (reading 'name')"); - - return ( -
-
- -
-

Copilot SDK Error

- - {isNameError ? ( -
-

The Copilot SDK encountered an internal error.

-

- This typically occurs when the container metadata is incomplete or the tenant configuration needs adjustment. -

-
- ) : ( -

- {errorMessage} -

- )} - -
- - -
- -
-

Troubleshooting steps:

-
    -
  • Verify container has documents uploaded
  • -
  • Check CopilotEmbeddedChatHosts configuration
  • -
  • Ensure DiscoverabilityDisabled is false
  • -
- - View SDK documentation - - -
-
- ); - } - - return this.props.children; - } -} diff --git a/Custom Apps/legal-docs/src/components/copilot/InlineCopilotChat.tsx b/Custom Apps/legal-docs/src/components/copilot/InlineCopilotChat.tsx deleted file mode 100644 index a5faa1b..0000000 --- a/Custom Apps/legal-docs/src/components/copilot/InlineCopilotChat.tsx +++ /dev/null @@ -1,241 +0,0 @@ -import { useState, useCallback, useMemo, useRef, useEffect } from "react"; -import { Send, Loader2, Database, CheckCircle2 } from "lucide-react"; -import { cn } from "@/lib/utils"; -import { useAuth } from "@/context/AuthContext"; -import { Button } from "@/components/ui/button"; -import { ScrollArea } from "@/components/ui/scroll-area"; -import { Input } from "@/components/ui/input"; -import { - sendCopilotMessage, - createChatAuthProvider, - CopilotMessage, - DEFAULT_CHAT_CONFIG, - ChatLaunchConfig -} from "@/services/copilotChat"; - -interface InlineCopilotChatProps { - containerId: string; - containerName: string; - config?: ChatLaunchConfig; -} - -/** - * Inline Copilot Chat Component - * - * A simplified chat component designed to be embedded inline (not as a floating bubble). - * Uses the Graph API fallback for document-grounded responses. - */ -export default function InlineCopilotChat({ - containerId, - containerName, - config = DEFAULT_CHAT_CONFIG -}: InlineCopilotChatProps) { - const { getAccessToken } = useAuth(); - const [messages, setMessages] = useState([]); - const [inputValue, setInputValue] = useState(""); - const [isLoading, setIsLoading] = useState(false); - const [isConnected, setIsConnected] = useState(false); - const scrollRef = useRef(null); - const prevContainerId = useRef(null); - - // Create auth provider following SDK pattern - uses Container.Selected scope - const authProvider = useMemo(() => - createChatAuthProvider(getAccessToken), - [getAccessToken] - ); - - // Merged config - const chatConfig = useMemo(() => ({ - ...DEFAULT_CHAT_CONFIG, - ...config, - header: config?.header || containerName, - }), [config, containerName]); - - // Reset messages and test connection when container changes - useEffect(() => { - if (prevContainerId.current !== containerId) { - prevContainerId.current = containerId; - setMessages([]); - setInputValue(""); - setIsConnected(false); - - // Test container connection on change - const testConnection = async () => { - try { - await authProvider.getToken(); - setIsConnected(true); - console.log("Connected to SharePoint container:", containerId); - } catch (error) { - console.error("Failed to connect to container:", error); - setIsConnected(false); - } - }; - - if (containerId) { - testConnection(); - } - } - }, [containerId, authProvider]); - - // Scroll to bottom when new messages arrive - useEffect(() => { - if (scrollRef.current) { - scrollRef.current.scrollTop = scrollRef.current.scrollHeight; - } - }, [messages]); - - // Handle sending a message - const handleSendMessage = useCallback(async (text: string) => { - if (!text.trim() || isLoading) return; - - const userMessage: CopilotMessage = { - role: "user", - content: text.trim(), - timestamp: new Date(), - }; - - setMessages(prev => [...prev, userMessage]); - setInputValue(""); - setIsLoading(true); - - try { - const response = await sendCopilotMessage( - authProvider, - containerId, - containerName, - text.trim(), - messages, - chatConfig - ); - - const assistantMessage: CopilotMessage = { - role: "assistant", - content: response, - timestamp: new Date(), - }; - - setMessages(prev => [...prev, assistantMessage]); - } catch (error) { - console.error("Chat error:", error); - const errorMessage: CopilotMessage = { - role: "assistant", - content: "I'm sorry, I encountered an error processing your request. Please try again.", - timestamp: new Date(), - }; - setMessages(prev => [...prev, errorMessage]); - } finally { - setIsLoading(false); - } - }, [authProvider, containerId, containerName, messages, chatConfig, isLoading]); - - // Handle form submit - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - handleSendMessage(inputValue); - }; - - // Handle suggestion click - const handleSuggestionClick = (suggestion: string) => { - handleSendMessage(suggestion); - }; - - // Don't render if no container is selected - if (!containerId) return null; - - const zeroQueryPrompts = chatConfig.zeroQueryPrompts || DEFAULT_CHAT_CONFIG.zeroQueryPrompts; - - return ( -
- {/* Header */} -
-
-

{chatConfig.header}

-
- -

{containerName}

- {isConnected && ( - - - Connected - - )} -
-
-
- - {/* Messages Area */} - - {messages.length === 0 ? ( -
-

- {zeroQueryPrompts?.headerText} -

-
- {zeroQueryPrompts?.promptSuggestionList?.map((prompt, index) => ( - - ))} -
-
- ) : ( -
- {messages.map((message, index) => ( -
-
-

{message.content}

-
-
- ))} - {isLoading && ( -
-
- -
-
- )} -
- )} -
- - {/* Input Area */} -
-
- setInputValue(e.target.value)} - placeholder={chatConfig.chatInputPlaceholder || "Ask about this case..."} - disabled={isLoading} - className="flex-1" - /> - -
-
-
- ); -} diff --git a/Custom Apps/legal-docs/src/components/copilot/SDKCopilotChat.tsx b/Custom Apps/legal-docs/src/components/copilot/SDKCopilotChat.tsx deleted file mode 100644 index dece0d6..0000000 --- a/Custom Apps/legal-docs/src/components/copilot/SDKCopilotChat.tsx +++ /dev/null @@ -1,204 +0,0 @@ -import React, { useState, useEffect, useMemo, useCallback } from "react"; -import { X, MessageSquare, Loader2, AlertTriangle, RefreshCw } from "lucide-react"; -import { useAuth } from "@/context/AuthContext"; -import { Button } from "@/components/ui/button"; -import { CopilotAuthProvider } from "@/components/copilot/CopilotAuthProvider"; -import { CopilotErrorBoundary } from "./CopilotErrorBoundary"; -import { ChatEmbedded, ChatEmbeddedAPI, ChatLaunchConfig } from "@microsoft/sharepointembedded-copilotchat-react"; - -interface SDKCopilotChatProps { - containerId: string; - containerName: string; - isOpen: boolean; - onClose: () => void; -} - -/** - * SharePoint Embedded Copilot Chat using the official SDK. - * - * Prerequisites: - * 1. Install SDK: npm install @microsoft/sharepointembedded-copilotchat-react - * 2. Configure CopilotEmbeddedChatHosts via PowerShell - * 3. Set DiscoverabilityDisabled to false - * - * Reference: https://learn.microsoft.com/en-us/sharepoint/dev/embedded/development/declarative-agent/spe-da-adv - */ -export default function SDKCopilotChat({ - containerId, - containerName, - isOpen, - onClose, -}: SDKCopilotChatProps) { - const { getAccessToken } = useAuth(); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - const [chatApi, setChatApi] = useState(null); - const [sdkAvailable, setSdkAvailable] = useState(false); - - // Create auth provider with Container.Selected scope - const authProvider = useMemo( - () => new CopilotAuthProvider(getAccessToken), - [getAccessToken] - ); - - // SDK is now statically imported, mark as available - useEffect(() => { - setSdkAvailable(true); - console.log("SDKCopilotChat: SDK is available"); - }, []); - - // Initialize auth provider when opened - useEffect(() => { - if (!isOpen || !containerId || !sdkAvailable) return; - - const initAuth = async () => { - setIsLoading(true); - setError(null); - - try { - await authProvider.initialize(); - console.log("SDKCopilotChat: Auth provider initialized"); - setIsLoading(false); - } catch (err) { - console.error("SDKCopilotChat: Auth initialization failed", err); - setError("Authentication failed. Please try again."); - setIsLoading(false); - } - }; - - // Set timeout for initialization - const timeout = setTimeout(() => { - if (isLoading) { - setError( - "The SharePoint Embedded Copilot chat is not responding.\n\n" + - "Possible causes:\n" + - "• CopilotEmbeddedChatHosts not configured\n" + - "• DiscoverabilityDisabled is true\n" + - "• Copilot not enabled for your tenant" - ); - setIsLoading(false); - } - }, 15000); - - initAuth(); - - return () => clearTimeout(timeout); - }, [isOpen, containerId, sdkAvailable, authProvider]); - - // Open chat when API is ready - useEffect(() => { - if (!chatApi) return; - - const openChat = async () => { - try { - await chatApi.openChat({ - header: `Case Assistant - ${containerName}`, - zeroQueryPrompts: { - headerText: "How can I help you with this case?", - promptSuggestionList: [ - { suggestionText: "Summarize the key facts of this case" }, - { suggestionText: "Who are the parties involved?" }, - { suggestionText: "What are the important dates?" }, - { suggestionText: "List the key documents" }, - ], - }, - instruction: - "You are a legal case assistant. Provide clear, professional responses based on the case documents.", - locale: "en", - }); - console.log("SDKCopilotChat: Chat opened successfully"); - } catch (err) { - console.error("SDKCopilotChat: Failed to open chat", err); - setError("Failed to open chat interface"); - } - }; - - openChat(); - }, [chatApi, containerName]); - - const handleApiReady = useCallback((api: ChatEmbeddedAPI) => { - console.log("SDKCopilotChat: API ready"); - setChatApi(api); - setIsLoading(false); - setError(null); - }, []); - - const handleRetry = useCallback(() => { - setError(null); - setIsLoading(true); - setChatApi(null); - }, []); - - if (!isOpen) return null; - - return ( -
-
- {/* Header */} -
-
-
- -
-
-

Copilot Assistant

-

{containerName}

-
-
- -
- - {/* Content */} -
- {error ? ( -
-
- -
-

Copilot Unavailable

-

- {error} -

-
- - -
-
- ) : isLoading ? ( -
- -

Initializing Copilot...

-

Connecting to Microsoft services

-
- ) : sdkAvailable ? ( - -
- -
-
- ) : null} -
- - {/* Footer status */} - {!error && !isLoading && ( -
- - Copilot Active -
- )} -
-
- ); -} diff --git a/Custom Apps/legal-docs/src/components/copilot/index.ts b/Custom Apps/legal-docs/src/components/copilot/index.ts deleted file mode 100644 index aa25dcf..0000000 --- a/Custom Apps/legal-docs/src/components/copilot/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Copilot Chat Components -// Use CopilotChatContainer as the main entry point for Copilot chat -// It handles auth, config, and renders CopilotDesktopView - -export { default as CopilotChatContainer } from "./CopilotChatContainer"; -export { default as CustomCopilotChat } from "../CustomCopilotChat"; -export { default as SDKCopilotChat } from "./SDKCopilotChat"; -export { default as CopilotDesktopView } from "./CopilotDesktopView"; -export { CopilotAuthProvider } from "./CopilotAuthProvider"; -export { CopilotErrorBoundary } from "./CopilotErrorBoundary"; -export type { IChatEmbeddedApiAuthProvider } from "./CopilotAuthProvider"; diff --git a/Custom Apps/legal-docs/src/components/panels/CopilotPanel.tsx b/Custom Apps/legal-docs/src/components/panels/CopilotPanel.tsx deleted file mode 100644 index 8311296..0000000 --- a/Custom Apps/legal-docs/src/components/panels/CopilotPanel.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { CopilotChatContainer } from "@/components/copilot"; -import { CopilotErrorBoundary } from "@/components/copilot"; - -interface CopilotPanelProps { - containerId: string; - containerName: string; -} - -/** - * CopilotPanel - Wrapper component for the SharePoint Embedded Copilot chat - * Uses CopilotChatContainer which handles authentication, configuration, and rendering - */ -export default function CopilotPanel({ containerId, containerName }: CopilotPanelProps) { - return ( -
- - - -
- ); -} diff --git a/Custom Apps/legal-docs/src/config/appConfig.ts b/Custom Apps/legal-docs/src/config/appConfig.ts index 1b5ac1c..0cdcaac 100644 --- a/Custom Apps/legal-docs/src/config/appConfig.ts +++ b/Custom Apps/legal-docs/src/config/appConfig.ts @@ -1,17 +1,5 @@ // SharePoint Embedded & Azure AD Configuration -// Central configuration file for the Copilot Chat implementation - -// Helper to normalize SharePoint URLs (ensure https:// prefix) -const normalizeSharePointUrl = (url: string): string => { - if (!url) return ''; - // Remove trailing slashes - let normalized = url.replace(/\/+$/, ''); - // Ensure https:// prefix - if (!normalized.startsWith('https://') && !normalized.startsWith('http://')) { - normalized = `https://${normalized}`; - } - return normalized; -}; +// Central configuration file export const appConfig = { // Azure AD App Registration @@ -20,10 +8,6 @@ export const appConfig = { // SharePoint Embedded containerTypeId: "", - sharePointHostname: "https://.sharepoint.com", - - // Utility function for URL normalization - normalizeSharePointUrl, }; // Keep APP_CONFIG as alias for backward compatibility @@ -56,22 +40,6 @@ export const SCOPES = { "https://graph.microsoft.com/Files.Read.All", "https://graph.microsoft.com/Sites.Read.All", ] as string[], - // SharePoint Container.Selected scope for SDK authentication - sharePoint: [`${APP_CONFIG.sharePointHostname}/Container.Selected`] as string[], // Container management scope containerManagement: ["https://graph.microsoft.com/FileStorageContainer.Selected"] as string[], }; - -// Copilot Chat UI Configuration -export const COPILOT_CONFIG = { - header: "Case Assistant", - instruction: "You are a helpful legal case assistant. Answer questions about the documents in this case clearly and professionally.", - locale: "en-US", - suggestedPrompts: [ - "Summarize the key facts of this case", - "Who are the parties involved?", - "What are the important dates?", - "List the key documents", - ] as string[], - chatInputPlaceholder: "Ask about this case...", -}; diff --git a/Custom Apps/legal-docs/src/config/sharepoint.ts b/Custom Apps/legal-docs/src/config/sharepoint.ts index fdbd923..73c1f73 100644 --- a/Custom Apps/legal-docs/src/config/sharepoint.ts +++ b/Custom Apps/legal-docs/src/config/sharepoint.ts @@ -5,9 +5,6 @@ export const SHAREPOINT_CONFIG = { CLIENT_ID: "", TENANT_ID: "", CONTAINER_TYPE_ID: "", - // SharePoint hostname for Copilot API authentication (must include https://) - // Use tenant name format: https://{tenant}.sharepoint.com - SHAREPOINT_HOSTNAME: "https://.sharepoint.com", } as const; // MSAL Configuration @@ -28,37 +25,9 @@ export const MSAL_CONFIG = { export const GRAPH_ENDPOINT = "https://graph.microsoft.com/v1.0"; export const GRAPH_BETA_ENDPOINT = "https://graph.microsoft.com/beta"; -// Scopes for Copilot - using SharePoint Container.Selected as per SDK documentation -// The SDK requires this scope pattern: {hostname}/Container.Selected -export const COPILOT_SCOPES = [`${SHAREPOINT_CONFIG.SHAREPOINT_HOSTNAME}/Container.Selected`]; - -// Graph API scopes for search-based Copilot functionality -// Used when calling Graph API endpoints directly (current implementation) +// Graph API scopes export const GRAPH_SEARCH_SCOPES = [ "https://graph.microsoft.com/Files.Read.All", "https://graph.microsoft.com/Sites.Read.All", ]; -// SharePoint-specific scopes for container access -export const SHAREPOINT_CONTAINER_SCOPES = [`${SHAREPOINT_CONFIG.SHAREPOINT_HOSTNAME}/Container.Selected`]; - -// Copilot Chat Auth Provider Interface (matches SDK's IChatEmbeddedApiAuthProvider) -export interface IChatEmbeddedApiAuthProvider { - hostname: string; - getToken(): Promise; -} - -// Copilot Chat Launch Configuration (matches SDK's ChatLaunchConfig) -export interface ChatLaunchConfig { - header?: string; - zeroQueryPrompts?: { - headerText: string; - promptSuggestionList?: Array<{ - suggestionText: string; - }>; - }; - suggestedPrompts?: string[]; - instruction?: string; - locale?: string; - chatInputPlaceholder?: string; -} diff --git a/Custom Apps/legal-docs/src/context/AuthContext.tsx b/Custom Apps/legal-docs/src/context/AuthContext.tsx index d52029e..a00b45e 100644 --- a/Custom Apps/legal-docs/src/context/AuthContext.tsx +++ b/Custom Apps/legal-docs/src/context/AuthContext.tsx @@ -5,7 +5,7 @@ import { AuthenticationResult, InteractionRequiredAuthError } from "@azure/msal-browser"; -import { MSAL_CONFIG, APP_CONFIG, SCOPES } from "@/config/appConfig"; +import { MSAL_CONFIG } from "@/config/appConfig"; interface AuthContextType { isInitialized: boolean; @@ -14,7 +14,6 @@ interface AuthContextType { login: () => Promise; logout: () => Promise; getAccessToken: (scopes: string[]) => Promise; - getSharePointToken: () => Promise; isLoggingIn: boolean; } @@ -135,14 +134,6 @@ export function AuthProvider({ children }: { children: ReactNode }) { } }, [user]); - /** - * Get SharePoint-scoped token for Copilot SDK - * Uses the {hostname}/Container.Selected scope pattern - */ - const getSharePointToken = useCallback(async (): Promise => { - return getAccessToken(SCOPES.sharePoint); - }, [getAccessToken]); - return ( diff --git a/Custom Apps/legal-docs/src/hooks/useCopilotSite.ts b/Custom Apps/legal-docs/src/hooks/useCopilotSite.ts deleted file mode 100644 index 2854a11..0000000 --- a/Custom Apps/legal-docs/src/hooks/useCopilotSite.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { useState, useEffect } from 'react'; -import { useAuth } from '@/context/AuthContext'; -import { APP_CONFIG, ENDPOINTS, SCOPES } from '@/config/appConfig'; - -interface CopilotSiteState { - isLoading: boolean; - error: string | null; - containerId: string | null; - containerName: string | null; - webUrl: string | null; - sharePointHostname: string; -} - -/** - * Hook to fetch SharePoint container/site information for Copilot. - * - * - Normalizes container ID (adds b! prefix if missing) - * - Fetches container name and webUrl via Graph API - * - Extracts SharePoint hostname for authentication - */ -export function useCopilotSite(rawContainerId: string | null): CopilotSiteState { - const { getAccessToken, isAuthenticated } = useAuth(); - const [state, setState] = useState({ - isLoading: false, - error: null, - containerId: null, - containerName: null, - webUrl: null, - sharePointHostname: APP_CONFIG.sharePointHostname, - }); - - useEffect(() => { - let cancelled = false; - - const fetchContainerInfo = async () => { - if (!rawContainerId || !isAuthenticated) { - setState(prev => ({ - ...prev, - isLoading: false, - error: !rawContainerId ? null : 'Not authenticated', - containerId: null, - containerName: null, - webUrl: null, - })); - return; - } - - setState(prev => ({ ...prev, isLoading: true, error: null })); - - try { - // Use the raw container ID as-is (with b! prefix) for the drives endpoint - const normalizedId = rawContainerId; - - // Get token with container management scopes - const token = await getAccessToken(SCOPES.containerManagement); - - if (!token) { - if (!cancelled) { - setState(prev => ({ - ...prev, - isLoading: false, - error: 'Failed to acquire access token', - })); - } - return; - } - - // Use the /drives/{id} endpoint which accepts b!-prefixed IDs - // and returns both displayName and webUrl - const driveResponse = await fetch( - `${ENDPOINTS.graph}/drives/${normalizedId}`, - { - headers: { - Authorization: `Bearer ${token}`, - 'Content-Type': 'application/json', - }, - } - ); - - if (!driveResponse.ok) { - const errorText = await driveResponse.text(); - console.error('Drive fetch error:', driveResponse.status, errorText); - if (!cancelled) { - setState(prev => ({ - ...prev, - isLoading: false, - error: `Container not accessible: ${driveResponse.status}`, - })); - } - return; - } - - const driveData = await driveResponse.json(); - console.log('📦 Drive metadata:', { - id: driveData.id, - name: driveData.name, - webUrl: driveData.webUrl, - }); - - if (!cancelled) { - setState({ - isLoading: false, - error: null, - containerId: normalizedId, - containerName: driveData.name || driveData.description || 'SharePoint Container', - webUrl: driveData.webUrl || null, - sharePointHostname: APP_CONFIG.sharePointHostname, - }); - } - } catch (err) { - console.error('Error fetching container info:', err); - if (!cancelled) { - setState(prev => ({ - ...prev, - isLoading: false, - error: err instanceof Error ? err.message : 'Failed to fetch container info', - })); - } - } - }; - - fetchContainerInfo(); - - return () => { - cancelled = true; - }; - }, [rawContainerId, isAuthenticated, getAccessToken]); - - return state; -} diff --git a/Custom Apps/legal-docs/src/lib/sharepointembedded-copilotchat-react/index.tsx b/Custom Apps/legal-docs/src/lib/sharepointembedded-copilotchat-react/index.tsx deleted file mode 100644 index 5939d65..0000000 --- a/Custom Apps/legal-docs/src/lib/sharepointembedded-copilotchat-react/index.tsx +++ /dev/null @@ -1,228 +0,0 @@ -/** - * Local shim for @microsoft/sharepointembedded-copilotchat-react SDK - * - * This module provides the same interface as the official Microsoft SDK. - * The ChatEmbedded component renders an iframe that loads Microsoft's - * SharePoint Embedded Copilot experience. - * - * The actual SDK is distributed as a private preview tgz which cannot - * be installed via npm/bun in this environment. - */ - -import React, { useEffect, useRef, useCallback } from 'react'; - -// ==================== Type Definitions ==================== - -export interface IChatEmbeddedApiAuthProvider { - hostname: string; - getToken(): Promise; -} - -export interface ChatEmbeddedAPI { - openChat(config: ChatLaunchConfig): Promise; -} - -export interface PromptSuggestion { - suggestionText: string; -} - -export interface ZeroQueryPrompts { - headerText?: string; - promptSuggestionList?: PromptSuggestion[]; -} - -export interface ChatLaunchConfig { - header?: string; - instruction?: string; - locale?: string; - suggestedPrompts?: string[]; - zeroQueryPrompts?: ZeroQueryPrompts; - chatInputPlaceholder?: string; -} - -// ==================== ChatEmbedded Component ==================== - -interface ChatEmbeddedProps { - authProvider: IChatEmbeddedApiAuthProvider; - containerId: string; - onApiReady?: (api: ChatEmbeddedAPI) => void; - style?: React.CSSProperties; -} - -/** - * ChatEmbedded component - renders the SharePoint Embedded Copilot chat iframe. - * - * This component loads the Copilot experience from SharePoint's servers - * using the provided auth provider and container ID. - */ -export const ChatEmbedded: React.FC = ({ - authProvider, - containerId, - onApiReady, - style, -}) => { - const containerRef = useRef(null); - const iframeRef = useRef(null); - const initializedRef = useRef(false); - const chatConfigRef = useRef(null); - - // Build the Copilot iframe URL - const getCopilotUrl = useCallback(() => { - const hostname = authProvider.hostname.replace(/\/$/, ''); - // The SDK uses this endpoint pattern for the embedded Copilot chat - return `${hostname}/_layouts/15/copilotchat.aspx?containerId=${encodeURIComponent(containerId)}&embedded=true`; - }, [authProvider.hostname, containerId]); - - // Handle messages from the Copilot iframe - useEffect(() => { - const handleMessage = (event: MessageEvent) => { - // Only accept messages from our SharePoint hostname - const hostname = authProvider.hostname.replace(/\/$/, ''); - try { - const expectedOrigin = new URL(hostname).origin; - if (event.origin !== expectedOrigin) { - return; - } - } catch { - // Fallback: simple string comparison - if (!event.origin.includes(hostname.replace(/^https?:\/\//, ''))) { - return; - } - } - - // Handle both string (JSON) and object message formats - let data = event.data; - if (typeof data === 'string') { - try { - data = JSON.parse(data); - } catch { - console.log('ChatEmbedded: Ignoring non-JSON string message from iframe'); - return; - } - } - if (!data || typeof data !== 'object') return; - - // Handle token requests from the iframe - if (data.type === 'getToken' || data.messageType === 'getToken') { - authProvider.getToken().then(token => { - iframeRef.current?.contentWindow?.postMessage(JSON.stringify({ - type: 'tokenResponse', - messageType: 'tokenResponse', - token, - }), hostname); - }).catch(err => { - console.error('ChatEmbedded: Failed to get token for iframe:', err); - }); - } - - // Handle ready state - if (data.type === 'ready' || data.messageType === 'ready') { - console.log('ChatEmbedded: iframe ready'); - // If we have a pending config, send it - if (chatConfigRef.current) { - iframeRef.current?.contentWindow?.postMessage(JSON.stringify({ - type: 'openChat', - messageType: 'openChat', - config: chatConfigRef.current, - }), hostname); - } - } - }; - - window.addEventListener('message', handleMessage); - return () => window.removeEventListener('message', handleMessage); - }, [authProvider]); - - // Create and manage the iframe - useEffect(() => { - if (initializedRef.current || !containerRef.current) return; - initializedRef.current = true; - - const copilotUrl = getCopilotUrl(); - console.log('ChatEmbedded: Loading Copilot iframe from:', copilotUrl); - - // Create iframe - const iframe = document.createElement('iframe'); - iframe.src = copilotUrl; - iframe.style.width = '100%'; - iframe.style.height = '100%'; - iframe.style.border = 'none'; - iframe.setAttribute('allow', 'clipboard-write'); - iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox'); - - iframeRef.current = iframe; - containerRef.current.appendChild(iframe); - - // Create the API object - const api: ChatEmbeddedAPI = { - openChat: async (config: ChatLaunchConfig) => { - chatConfigRef.current = config; - const hostname = authProvider.hostname.replace(/\/$/, ''); - - // Get auth token first - try { - const token = await authProvider.getToken(); - - // Send config and token to iframe - iframe.contentWindow?.postMessage(JSON.stringify({ - type: 'openChat', - messageType: 'openChat', - config, - token, - }), hostname); - - console.log('ChatEmbedded: openChat config sent to iframe'); - } catch (err) { - console.error('ChatEmbedded: Failed to get token for openChat:', err); - throw err; - } - }, - }; - - // Notify parent that API is ready once iframe loads - iframe.addEventListener('load', () => { - console.log('ChatEmbedded: iframe loaded, firing onApiReady'); - onApiReady?.(api); - }); - - // Also fire onApiReady after a timeout in case load event doesn't fire - const timeout = setTimeout(() => { - if (!iframe.contentWindow) return; - console.log('ChatEmbedded: Timeout reached, firing onApiReady'); - onApiReady?.(api); - }, 5000); - - return () => { - clearTimeout(timeout); - }; - }, [getCopilotUrl, authProvider, onApiReady]); - - // Reset when containerId changes - useEffect(() => { - return () => { - initializedRef.current = false; - if (iframeRef.current && containerRef.current) { - try { - containerRef.current.removeChild(iframeRef.current); - } catch { - // ignore - } - iframeRef.current = null; - } - }; - }, [containerId]); - - return ( -
- ); -}; - -export default ChatEmbedded; diff --git a/Custom Apps/legal-docs/src/pages/Dashboard.tsx b/Custom Apps/legal-docs/src/pages/Dashboard.tsx index 01fd9be..10b3db9 100644 --- a/Custom Apps/legal-docs/src/pages/Dashboard.tsx +++ b/Custom Apps/legal-docs/src/pages/Dashboard.tsx @@ -26,7 +26,6 @@ import FlyoutButtons from "@/components/FlyoutButtons"; import CaseSummaryPanel from "@/components/panels/CaseSummaryPanel"; import ToolsPanel from "@/components/panels/ToolsPanel"; import ReportsPanel from "@/components/panels/ReportsPanel"; -import CopilotPanel from "@/components/panels/CopilotPanel"; import { PanelType } from "@/components/FlyoutButtons"; // Button column width @@ -282,7 +281,6 @@ export default function Dashboard() { {/* Flyout Panels */} @@ -318,23 +316,6 @@ export default function Dashboard() { > - - {/* Copilot Panel */} - {selectedContainer && ( - handlePanelClose("copilot")} - isPinned={pinnedPanels.has("copilot")} - onPinToggle={() => handlePinToggle("copilot")} - onWidthChange={handlePanelWidthChange} - > - - - )}
); diff --git a/Custom Apps/legal-docs/src/services/copilotChat.ts b/Custom Apps/legal-docs/src/services/copilotChat.ts deleted file mode 100644 index 8183e77..0000000 --- a/Custom Apps/legal-docs/src/services/copilotChat.ts +++ /dev/null @@ -1,351 +0,0 @@ -import { - SHAREPOINT_CONFIG, - GRAPH_ENDPOINT, - GRAPH_BETA_ENDPOINT, - COPILOT_SCOPES, - GRAPH_SEARCH_SCOPES, - SHAREPOINT_CONTAINER_SCOPES, - IChatEmbeddedApiAuthProvider, - ChatLaunchConfig -} from "@/config/sharepoint"; - -export type { ChatLaunchConfig }; - -export interface CopilotMessage { - role: "user" | "assistant"; - content: string; - timestamp: Date; -} - -// Response type with optional citations -export interface CopilotResponse { - content: string; - citations?: Array<{ - documentName: string; - webUrl: string; - snippet?: string; - }>; -} - -// Default launch configuration following SDK patterns -export const DEFAULT_CHAT_CONFIG: ChatLaunchConfig = { - header: "Case Assistant", - zeroQueryPrompts: { - headerText: "How can I help you with this case?", - promptSuggestionList: [ - { suggestionText: "Summarize the key facts of this case" }, - { suggestionText: "Who are the parties involved?" }, - { suggestionText: "What are the important dates?" }, - { suggestionText: "List the key documents" }, - ], - }, - suggestedPrompts: [ - "What are the main legal issues?", - "Summarize the evidence", - "What is the current status?", - ], - instruction: "You are a legal case assistant. Provide clear, professional responses based on the case documents.", - locale: "en", -}; - -// Clean up text from Copilot API responses -function cleanCopilotText(text: string): string { - let cleaned = text; - // Remove page markers - cleaned = cleaned.replace(//g, '').replace(/<\/page_\d+>/g, ''); - // Remove escaped markdown characters - cleaned = cleaned.replace(/\\_/g, '_').replace(/\\-/g, '-'); - cleaned = cleaned.replace(/\\\[/g, '[').replace(/\\\]/g, ']'); - cleaned = cleaned.replace(/\\\(/g, '(').replace(/\\\)/g, ')'); - cleaned = cleaned.replace(/\\\*/g, '*'); - // Remove standalone asterisks used as separators - cleaned = cleaned.replace(/(\s*\*\s*){2,}/g, ' '); - // Remove single asterisks at word boundaries - cleaned = cleaned.replace(/\*+/g, ''); - // Remove backslashes before common characters - cleaned = cleaned.replace(/\\([^\\])/g, '$1'); - // Clean up whitespace - cleaned = cleaned.replace(/\r\n/g, ' ').replace(/\n/g, ' ').replace(/\s+/g, ' ').trim(); - return cleaned; -} - -/** - * Create auth provider for Copilot chat. - * - * IMPORTANT: The Graph API endpoints require Graph tokens (audience: graph.microsoft.com), - * while the official SharePoint Embedded SDK requires Container.Selected scope. - * - * Since we're calling Graph API endpoints directly (not using the SDK), - * we must use Graph scopes for the token audience to be correct. - */ -export function createChatAuthProvider( - getToken: (scopes: string[]) => Promise -): IChatEmbeddedApiAuthProvider { - return { - hostname: SHAREPOINT_CONFIG.SHAREPOINT_HOSTNAME, - getToken: async () => { - // Use Graph scopes since we're calling Graph API endpoints directly - // The beta/copilot/retrieval endpoint requires Graph token audience - const token = await getToken(GRAPH_SEARCH_SCOPES); - if (!token) { - throw new Error("Failed to acquire token for Copilot chat"); - } - console.log("Acquired Graph token for Copilot chat"); - return token; - }, - }; -} - -/** - * Send a message to Copilot using the beta Copilot retrieval API. - * Falls back to Graph Search if the beta API is not available. - */ -export async function sendCopilotMessage( - authProvider: IChatEmbeddedApiAuthProvider, - containerId: string, - containerName: string, - userMessage: string, - conversationHistory: CopilotMessage[], - config: ChatLaunchConfig = DEFAULT_CHAT_CONFIG -): Promise { - const accessToken = await authProvider.getToken(); - - // Build conversation context for the Copilot API - const contextMessages = conversationHistory - .slice(-6) - .map((m) => ({ - role: m.role, - content: m.content, - })); - - const systemInstruction = config.instruction || DEFAULT_CHAT_CONFIG.instruction; - - // Try the beta Copilot retrieval API first (may not be available for all tenants) - const copilotResponse = await callCopilotRetrievalAPI( - accessToken, - containerId, - containerName, - userMessage, - contextMessages, - systemInstruction - ); - - if (copilotResponse) { - return copilotResponse; - } - - // Fallback to drive search when Copilot API is unavailable - console.log("Copilot API unavailable, using drive search fallback"); - return await searchBasedResponse(accessToken, containerId, containerName, userMessage, config); -} - -/** - * Call the Microsoft Graph beta Copilot retrieval API. - * This provides AI-generated responses grounded in container documents. - */ -async function callCopilotRetrievalAPI( - accessToken: string, - containerId: string, - containerName: string, - userMessage: string, - contextMessages: Array<{ role: string; content: string }>, - systemInstruction: string -): Promise { - const copilotUrl = `${GRAPH_BETA_ENDPOINT}/copilot/retrieval`; - - const requestBody = { - requests: [ - { - entityTypes: ["driveItem"], - contentSources: [`/drives/${containerId}`], - query: { - queryString: userMessage, - }, - groundingOptions: { - systemPrompt: systemInstruction, - conversationContext: contextMessages, - }, - }, - ], - }; - - const response = await fetch(copilotUrl, { - method: "POST", - headers: { - Authorization: `Bearer ${accessToken}`, - "Content-Type": "application/json", - }, - body: JSON.stringify(requestBody), - }); - - if (!response.ok) { - // 400/401/403 are expected when beta Copilot API is not enabled for the tenant - // Only log as warning, not error, to avoid console noise - if (response.status === 400 || response.status === 401 || response.status === 403) { - console.warn("Copilot retrieval API not available (expected for tenants without Copilot preview)"); - } else { - const errorText = await response.text(); - console.error("Copilot retrieval API error:", response.status, errorText); - } - return null; - } - - const data = await response.json(); - - // Extract response content from the Copilot API response - const responseContent = data.value?.response || data.value?.[0]?.response; - - if (responseContent) { - return cleanCopilotText(responseContent); - } - - // Check for any other response format - if (data.value?.content) { - return cleanCopilotText(data.value.content); - } - - return null; -} - -/** - * Search-based response using Graph Search API. - * Scoped to the specific container (drive) to only search documents in the selected case. - */ -async function searchBasedResponse( - accessToken: string, - containerId: string, - containerName: string, - userMessage: string, - config: ChatLaunchConfig -): Promise { - // Use drive-specific search endpoint directly for SharePoint Embedded containers - // This is more reliable than the /search/query endpoint for container-scoped searches - return await searchWithDriveFilter(accessToken, containerId, containerName, userMessage); -} - -/** - * Alternative search approach: directly query the container's drive for content. - */ -async function searchWithDriveFilter( - accessToken: string, - containerId: string, - containerName: string, - userMessage: string -): Promise { - // Sanitize the query - remove special characters that cause URL issues - const sanitizedQuery = userMessage - .replace(/[?&=#%]/g, ' ') - .replace(/\s+/g, ' ') - .trim(); - - // Use the drive's children endpoint with filter for broader content listing - // Then use search endpoint with properly encoded query - const driveSearchUrl = `${GRAPH_ENDPOINT}/drives/${containerId}/root/search(q='${encodeURIComponent(sanitizedQuery)}')`; - - console.log("Searching container:", containerId, "for:", sanitizedQuery); - - try { - const response = await fetch(driveSearchUrl, { - method: "GET", - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }); - - if (!response.ok) { - console.error("Drive search failed:", response.status); - // Fallback: list all files in the container - return await listContainerFiles(accessToken, containerId, containerName, userMessage); - } - - const data = await response.json(); - const items = data.value || []; - - if (items.length === 0) { - return await listContainerFiles(accessToken, containerId, containerName, userMessage); - } - - // Format results from drive search - const responses: string[] = items.slice(0, 5).map((item: any) => { - const name = item.name || 'Document'; - const size = item.size ? `(${Math.round(item.size / 1024)} KB)` : ''; - return `• **${name}** ${size}`; - }); - - return `Found ${items.length} document(s) in "${containerName}" matching "${sanitizedQuery}":\n\n${responses.join("\n")}\n\nWould you like more details about any of these documents?`; - } catch (error) { - console.error("Drive search error:", error); - return await listContainerFiles(accessToken, containerId, containerName, userMessage); - } -} - -/** - * Fallback: List files in the container when search fails. - */ -async function listContainerFiles( - accessToken: string, - containerId: string, - containerName: string, - userMessage: string -): Promise { - try { - const listUrl = `${GRAPH_ENDPOINT}/drives/${containerId}/root/children?$top=10`; - const response = await fetch(listUrl, { - method: "GET", - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }); - - if (!response.ok) { - return getNoResultsMessage(containerName, userMessage); - } - - const data = await response.json(); - const items = data.value || []; - - if (items.length === 0) { - return `The "${containerName}" case doesn't have any documents yet. Upload some files to get started!`; - } - - const fileList = items.slice(0, 5).map((item: any) => `• ${item.name}`).join("\n"); - return `Here are the documents in "${containerName}":\n\n${fileList}\n\nAsk me about any of these documents, or try a more specific search term.`; - } catch (error) { - console.error("List files error:", error); - return getNoResultsMessage(containerName, userMessage); - } -} - -/** - * Format search results into a readable response. - */ -function formatSearchResults(hits: any[], containerName: string): string { - const responses: string[] = []; - - for (const hit of hits.slice(0, 5)) { - if (hit.extracts && hit.extracts.length > 0) { - const extractText = cleanCopilotText(hit.extracts[0].text); - if (extractText) { - responses.push(`**${hit.resource?.name || 'Document'}:**\n${extractText}`); - } - } else if (hit.summary) { - responses.push(`**${hit.resource?.name || 'Document'}:**\n${cleanCopilotText(hit.summary)}`); - } - } - - if (responses.length > 0) { - return `Based on documents in the ${containerName} case:\n\n${responses.join("\n\n")}`; - } - - return getNoResultsMessage(containerName, "your query"); -} - -/** - * Generate a helpful message when no results are found. - */ -function getNoResultsMessage(containerName: string, userMessage: string): string { - return `I couldn't find specific information about "${userMessage}" in the ${containerName} case documents. Try: -• Rephrasing your question with different keywords -• Asking about specific document names or topics -• Checking if the documents have been uploaded to this case`; -} diff --git a/Custom Apps/legal-docs/tsconfig.app.json b/Custom Apps/legal-docs/tsconfig.app.json index eb60267..a981075 100644 --- a/Custom Apps/legal-docs/tsconfig.app.json +++ b/Custom Apps/legal-docs/tsconfig.app.json @@ -19,9 +19,6 @@ "paths": { "@/*": [ "./src/*" - ], - "@microsoft/sharepointembedded-copilotchat-react": [ - "./src/lib/sharepointembedded-copilotchat-react/index.tsx" ] }, "skipLibCheck": true, diff --git a/Custom Apps/legal-docs/vite.config.ts b/Custom Apps/legal-docs/vite.config.ts index 820a3a9..da25c6d 100644 --- a/Custom Apps/legal-docs/vite.config.ts +++ b/Custom Apps/legal-docs/vite.config.ts @@ -13,27 +13,6 @@ export default defineConfig(({ mode }) => ({ resolve: { alias: { "@": path.resolve(__dirname, "./src"), - // Local shim for the SharePoint Embedded Copilot SDK (tgz not installable via npm/bun) - - // Force all React imports to use the same instance - "react": path.resolve(__dirname, "./node_modules/react"), - "react-dom": path.resolve(__dirname, "./node_modules/react-dom"), - }, - // Deduplicate React to fix "Cannot read properties of null (reading 'useState')" - // This ensures the SharePoint SDK uses the same React instance as the app - dedupe: ["react", "react-dom", "react/jsx-runtime", "react/jsx-dev-runtime"], - }, - optimizeDeps: { - // Force pre-bundling of these to ensure single instance - include: ["react", "react-dom", "react/jsx-runtime", "react/jsx-dev-runtime"], - // Exclude the SDK from optimization to let it use our React - - }, - build: { - commonjsOptions: { - // Handle CommonJS modules that might bundle their own React - include: [/node_modules/], - transformMixedEsModules: true, }, }, })); diff --git a/Custom Apps/project-management/package.json b/Custom Apps/project-management/package.json index 4db5c8a..143a981 100644 --- a/Custom Apps/project-management/package.json +++ b/Custom Apps/project-management/package.json @@ -16,7 +16,6 @@ "@fluentui/react": "^8.112.9", "@fluentui/react-icons": "^2.0.220", "@hookform/resolvers": "^3.9.0", - "@microsoft/sharepointembedded-copilotchat-react": "https://download.microsoft.com/download/e2d6b1ec-7168-4787-b8de-4a9862f10744/microsoft-sharepointembedded-copilotchat-react-1.0.8.tgz", "@radix-ui/react-accordion": "^1.2.0", "@radix-ui/react-alert-dialog": "^1.1.1", "@radix-ui/react-aspect-ratio": "^1.1.0", diff --git a/Custom Apps/project-management/src/components/CopilotChat.tsx b/Custom Apps/project-management/src/components/CopilotChat.tsx deleted file mode 100644 index bb3f7c3..0000000 --- a/Custom Apps/project-management/src/components/CopilotChat.tsx +++ /dev/null @@ -1,88 +0,0 @@ - -import React, { useEffect, useState } from 'react'; -import CopilotChatContainer from './copilot/CopilotChatContainer'; -import { toast } from '@/hooks/use-toast'; -import { useAuth } from '../context/AuthContext'; -import { useIsMobile } from '@/hooks/use-mobile'; - -interface CopilotChatProps { - containerId: string; - className?: string; -} - -const CopilotChat: React.FC = ({ containerId, className }) => { - const { isAuthenticated } = useAuth(); - const isMobile = useIsMobile(); - const [errorShown, setErrorShown] = useState(false); - - useEffect(() => { - if (!containerId || typeof containerId !== 'string') { - const errorMsg = 'CopilotChat: No valid containerId provided'; - console.error(errorMsg); - - // Only show toast once to avoid spamming - if (!errorShown) { - setErrorShown(true); - toast({ - title: "Copilot Error", - description: "No valid container ID provided. Copilot chat cannot load.", - variant: "destructive", - }); - } - return; - } - - console.log('CopilotChat initialized with containerId:', containerId); - setErrorShown(false); - }, [containerId, errorShown]); - - // Add error boundary via window.addEventListener - useEffect(() => { - const handleError = (event: ErrorEvent) => { - if (event.error && event.error.message && event.error.message.includes('Cannot read properties of undefined')) { - console.error('Caught SharePoint Embedded error:', event.error); - if (!errorShown) { - setErrorShown(true); - toast({ - title: "Copilot Error", - description: "An error occurred while loading the chat component. Please try refreshing.", - variant: "destructive", - }); - } - event.preventDefault(); // Prevent default browser error handling - } - }; - - window.addEventListener('error', handleError); - return () => { - window.removeEventListener('error', handleError); - }; - }, [errorShown]); - - // Early return if no containerId is provided - if (!containerId || typeof containerId !== 'string') { - return ( -
- Error: No valid containerId provided for Copilot Chat -
- ); - } - - // Don't render on mobile devices - if (isMobile) { - return null; - } - - // Don't render if not authenticated - if (!isAuthenticated) { - return null; - } - - return ( -
- -
- ); -}; - -export default CopilotChat; diff --git a/Custom Apps/project-management/src/components/copilot/CopilotChatContainer.tsx b/Custom Apps/project-management/src/components/copilot/CopilotChatContainer.tsx deleted file mode 100644 index d70e85d..0000000 --- a/Custom Apps/project-management/src/components/copilot/CopilotChatContainer.tsx +++ /dev/null @@ -1,167 +0,0 @@ - -import React, { useState, useCallback, useEffect } from 'react'; -import { useCopilotSite } from '@/hooks/useCopilotSite'; -import CopilotDesktopView from './CopilotDesktopView'; -import { toast } from '@/hooks/use-toast'; -import { appConfig } from '@/config/appConfig'; -import { useAuth } from '@/context/AuthContext'; -import { - IChatEmbeddedApiAuthProvider, - ChatEmbeddedAPI, - ChatLaunchConfig -} from '@microsoft/sharepointembedded-copilotchat-react'; - -interface CopilotChatContainerProps { - containerId: string; -} - -const CopilotChatContainer: React.FC = ({ containerId }) => { - const [isOpen, setIsOpen] = useState(true); // Keep the chat component open within its container - const { getSharePointToken, isAuthenticated } = useAuth(); - const [chatApi, setChatApi] = useState(null); - const [chatKey, setChatKey] = useState(0); - - // Validate and normalize containerId - const normalizedContainerId = containerId && typeof containerId === 'string' - ? (containerId.startsWith('b!') ? containerId : `b!${containerId}`) - : ''; - - // Don't proceed if we don't have a valid container ID - if (!normalizedContainerId) { - console.error('CopilotChatContainer: Invalid containerId provided:', containerId); - return null; - } - - const { - isLoading, - error, - siteUrl, - siteName, - sharePointHostname, - } = useCopilotSite(normalizedContainerId); - - // Ensure we have valid hostnames and site names - const safeSharePointHostname = sharePointHostname || appConfig.sharePointHostname; - const safeSiteName = siteName || 'SharePoint Site'; - - const handleError = useCallback((errorMessage: string) => { - console.error('Copilot chat error:', errorMessage); - toast({ - title: "Copilot error", - description: errorMessage, - variant: "destructive", - }); - }, []); - - // Create auth provider for Copilot chat with better error handling - const authProvider = React.useMemo((): IChatEmbeddedApiAuthProvider => { - return { - hostname: safeSharePointHostname, - getToken: async () => { - try { - if (!isAuthenticated) { - console.error('User not authenticated, cannot get token'); - return ''; - } - - console.log('Getting SharePoint token for hostname:', safeSharePointHostname); - const token = await getSharePointToken(safeSharePointHostname); - console.log('SharePoint auth token retrieved:', token ? 'successfully' : 'failed'); - - if (!token) { - handleError('Failed to get authentication token for SharePoint.'); - return ''; - } - - return token; - } catch (err) { - console.error('Error getting token for Copilot chat:', err); - handleError('Failed to authenticate with SharePoint. Please try again.'); - return ''; - } - } - }; - }, [safeSharePointHostname, getSharePointToken, handleError, isAuthenticated]); - - // Create chat theme config - const chatTheme = React.useMemo(() => ({ - useDarkMode: false, - customTheme: { - themePrimary: '#4854EE', - themeSecondary: '#4854EE', - themeDark: '#4854EE', - themeDarker: '#4854EE', - themeTertiary: '#4854EE', - themeLight: '#dddeef', - themeDarkAlt: '#4854EE', - themeLighter: '#dddeef', - themeLighterAlt: '#dddeef', - themeDarkAltTransparent: '#4854EE', - themeLighterTransparent: '#dddeef', - themeLighterAltTransparent: '#dddeef', - themeMedium: '#4854EE', - neutralSecondary: '#4854EE', - neutralSecondaryAlt: '#4854EE', - neutralTertiary: '#4854EE', - neutralTertiaryAlt: '#4854EE', - neutralQuaternary: '#4854EE', - neutralQuaternaryAlt: '#4854EE', - neutralPrimaryAlt: '#4854EE', - neutralDark: '#4854EE', - themeBackground: 'white', - } - }), []); - - // Create chat configuration with instruction to ensure prompt visibility - const chatConfig = React.useMemo((): ChatLaunchConfig => ({ - header: `SharePoint Embedded - ${safeSiteName}`, - theme: chatTheme, - instruction: "You are a helpful assistant that helps users find and summarize information related to their files and documents.", - locale: "en-US", - // Removed the unsupported properties - }), [safeSiteName, chatTheme]); - - // Reset chat when there's an issue - const handleResetChat = useCallback(() => { - console.log('Resetting Copilot chat'); - setChatKey(prev => prev + 1); - setChatApi(null); - setIsOpen(false); - setTimeout(() => { - setIsOpen(true); - }, 500); - }, []); - - // Handles API ready event from ChatEmbedded component - const handleApiReady = useCallback((api: ChatEmbeddedAPI) => { - if (!api) { - console.error('Chat API is undefined'); - handleError('Chat API initialization failed'); - return; - } - - console.log('Copilot chat API is ready'); - setChatApi(api); - }, [handleError]); - - return ( - - ); -}; - -export default CopilotChatContainer; diff --git a/Custom Apps/project-management/src/components/copilot/CopilotDesktopView.tsx b/Custom Apps/project-management/src/components/copilot/CopilotDesktopView.tsx deleted file mode 100644 index 1d56ab1..0000000 --- a/Custom Apps/project-management/src/components/copilot/CopilotDesktopView.tsx +++ /dev/null @@ -1,166 +0,0 @@ - -import React, { useEffect } from 'react'; -import { Button } from '@/components/ui/button'; -import { RefreshCw } from 'lucide-react'; -import { ChatEmbedded, ChatEmbeddedAPI, IChatEmbeddedApiAuthProvider, ChatLaunchConfig } from '@microsoft/sharepointembedded-copilotchat-react'; - -interface CopilotDesktopViewProps { - isOpen: boolean; - setIsOpen: (value: boolean) => void; - siteName: string; - isLoading: boolean; - error: string | null; - containerId: string; - onError: (errorMessage: string) => void; - chatConfig: ChatLaunchConfig; - authProvider: IChatEmbeddedApiAuthProvider; - onApiReady: (api: ChatEmbeddedAPI) => void; - chatKey: number; - onResetChat?: () => void; - isAuthenticated?: boolean; - chatApi: ChatEmbeddedAPI | null; -} - -const CopilotDesktopView: React.FC = ({ - isOpen, - setIsOpen, - siteName, - isLoading, - error, - containerId, - onError, - chatConfig, - authProvider, - onApiReady, - chatKey, - onResetChat, - isAuthenticated = true, - chatApi -}) => { - // Early return if not authenticated - if (!isAuthenticated) { - console.log('CopilotDesktopView: Not rendering because not authenticated'); - return null; - } - - // Open the chat when the component is opened and we have a valid chat API - useEffect(() => { - if (isOpen && chatApi) { - console.log('Component opened, attempting to open chat...', containerId); - - const openChatOnOpen = async () => { - try { - // Ensure we have required config fields to avoid the undefined error - if (!chatConfig) { - console.error('Chat config is undefined or missing required fields'); - onError('Invalid chat configuration'); - return; - } - - // Add a small delay to ensure the container is ready - setTimeout(async () => { - try { - console.log('Opening chat with config:', JSON.stringify({ - header: chatConfig.header, - locale: chatConfig.locale, - hasTheme: !!chatConfig.theme, - containerId - // Removed references to unsupported properties - })); - - await chatApi.openChat(chatConfig); - console.log('Chat opened successfully'); - } catch (innerErr) { - console.error('Error in delayed chat open:', innerErr); - onError('Failed to load chat interface. Try resetting the chat.'); - } - }, 300); - } catch (err) { - console.error('Error opening chat:', err); - onError('Failed to load chat interface. Try resetting the chat.'); - } - }; - - openChatOnOpen(); - } - }, [isOpen, chatApi, chatConfig, onError, containerId]); - - // Reset chat when requested - const handleResetChat = () => { - if (onResetChat) { - console.log('Force refreshing chat component'); - onResetChat(); - } - }; - - return ( -
- {isOpen && ( - <> -
-
-

SharePoint Embedded Copilot

-

Connected to: {siteName || 'SharePoint Site'}

-
- {onResetChat && isAuthenticated && ( - - )} -
- -
- {isLoading ? ( -
-
- Loading... -
- ) : error ? ( -
-

- {error || "Unable to load the chat. Please try again."} -

- {onResetChat && ( - - )} -
- ) : ( -
- -
- )} -
- - )} -
- ); -}; - -export default CopilotDesktopView; diff --git a/Custom Apps/project-management/src/components/copilot/CopilotMobileView.tsx b/Custom Apps/project-management/src/components/copilot/CopilotMobileView.tsx deleted file mode 100644 index 912088e..0000000 --- a/Custom Apps/project-management/src/components/copilot/CopilotMobileView.tsx +++ /dev/null @@ -1,82 +0,0 @@ - -import React from 'react'; -import { Button } from '@/components/ui/button'; -import { - CustomDrawer, - CustomDrawerContent, - CustomDrawerTrigger, - CustomDrawerTitle -} from '@/components/ui/custom-drawer'; -import { MessageSquare, ExternalLink, Monitor } from 'lucide-react'; - -interface CopilotMobileViewProps { - isOpen: boolean; - setIsOpen: (value: boolean) => void; - siteName: string | null; - isLoading: boolean; - error: string | null; - openExternalChat: (() => void) | null; -} - -const CopilotMobileView: React.FC = ({ - isOpen, - setIsOpen, - siteName, - isLoading, - error, - openExternalChat, -}) => { - return ( - - - - - -
- - SharePoint Embedded Copilot - -
-
- {siteName &&

Connected to: {siteName}

} -
-
- {isLoading ? ( -
-
-
- ) : error ? ( -
-

Could not load Copilot Chat: {error}

-
- ) : ( -
-
- -

Desktop View Recommended

-

For the best experience with Copilot Chat, please use a desktop device or switch to desktop view on your browser.

-
- {openExternalChat && ( - - )} -
- )} -
-
-
- ); -}; - -export default CopilotMobileView; diff --git a/Custom Apps/project-management/src/config/appConfig.ts b/Custom Apps/project-management/src/config/appConfig.ts index 84c30f5..32a4ac6 100644 --- a/Custom Apps/project-management/src/config/appConfig.ts +++ b/Custom Apps/project-management/src/config/appConfig.ts @@ -7,9 +7,6 @@ export const appConfig = { containerTypeId: "", // Replace with your container type ID appName: "Project Management using SharePoint Embedded", - // Add the SharePoint hostname explicitly - sharePointHostname: "https://.sharepoint.com", - // MSAL configuration msalConfig: { auth: { @@ -30,33 +27,4 @@ export const appConfig = { containers: "/containers", drives: "/drives", }, - - // Copilot theme configuration - copilotTheme: { - useDarkMode: false, - customTheme: { - themePrimary: '#6941C6', - themeSecondary: '#7F56D9', - themeDark: '#5E37BF', - themeDarker: '#4924A1', - themeTertiary: '#9E77ED', - themeLight: '#E9D7FE', - themeDarkAlt: '#7F56D9', - themeLighter: '#F4EBFF', - themeLighterAlt: '#FAF5FF', - themeDarkAltTransparent: 'rgba(111, 66, 193, 0.9)', - themeLighterTransparent: 'rgba(233, 215, 254, 0.9)', - themeLighterAltTransparent: 'rgba(250, 245, 255, 0.9)', - themeMedium: '#9E77ED', - neutralSecondary: '#6941C6', - neutralSecondaryAlt: '#7F56D9', - neutralTertiary: '#9E77ED', - neutralTertiaryAlt: '#B692F6', - neutralQuaternary: '#D6BBFB', - neutralQuaternaryAlt: '#E9D7FE', - neutralPrimaryAlt: '#4924A1', - neutralDark: '#5E37BF', - themeBackground: 'white', - } - } }; diff --git a/Custom Apps/project-management/src/context/AuthContext.tsx b/Custom Apps/project-management/src/context/AuthContext.tsx index 5939dfa..785aca3 100644 --- a/Custom Apps/project-management/src/context/AuthContext.tsx +++ b/Custom Apps/project-management/src/context/AuthContext.tsx @@ -14,7 +14,6 @@ interface AuthContextType { login: () => Promise; logout: () => void; getAccessToken: (resource?: string) => Promise; - getSharePointToken: (hostname: string) => Promise; } const AuthContext = createContext(undefined); @@ -148,20 +147,6 @@ export const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) => } } }; - - // Get a token specifically for SharePoint - const getSharePointToken = async (hostname: string): Promise => { - try { - // Extract the hostname without protocol - const domain = hostname.replace(/^https?:\/\//, ''); - - // Use the SharePoint Online scope format with the specific domain - return await getAccessToken(`https://${domain}`); - } catch (error) { - console.error('Failed to get SharePoint token:', error); - return null; - } - }; return ( = ({ children }) => user, login, logout, - getAccessToken, - getSharePointToken + getAccessToken }}> {children} diff --git a/Custom Apps/project-management/src/hooks/useCopilotSite.ts b/Custom Apps/project-management/src/hooks/useCopilotSite.ts deleted file mode 100644 index ee7baca..0000000 --- a/Custom Apps/project-management/src/hooks/useCopilotSite.ts +++ /dev/null @@ -1,142 +0,0 @@ - -import { useState, useEffect, useMemo } from 'react'; -import { useAuth } from '../context/AuthContext'; -import { sharePointService } from '../services/sharePointService'; -import { appConfig } from '../config/appConfig'; - -export const useCopilotSite = (containerId: string) => { - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(null); - const [siteUrl, setSiteUrl] = useState(null); - const [siteName, setSiteName] = useState(null); - const { getAccessToken, isAuthenticated } = useAuth(); - const [fetchAttempted, setFetchAttempted] = useState(false); - - // Skip all processing if not authenticated - const shouldProcess = isAuthenticated && !!containerId; - - // Normalize container ID to handle different formats - const normalizedContainerId = useMemo(() => { - if (!containerId || !shouldProcess) { - console.log('No containerId provided to useCopilotSite or user not authenticated'); - return ''; - } - - // If it already starts with b!, keep it as is - if (containerId.startsWith('b!')) { - return containerId; - } - - // Otherwise, add the b! prefix - return `b!${containerId}`; - }, [containerId, shouldProcess]); - - useEffect(() => { - // Set default values immediately for safety - if (!siteUrl) { - setSiteUrl(appConfig.sharePointHostname.replace(/\/+$/, '')); - } - - if (!siteName) { - setSiteName('SharePoint Site'); - } - - // Early return if conditions aren't met - if (!shouldProcess || !normalizedContainerId) { - console.log('Skipping site info fetch - not authenticated or no valid containerId'); - return; - } - - // Avoid refetching unnecessarily - if (fetchAttempted) { - console.log('Already attempted to fetch site info, skipping'); - return; - } - - const fetchSiteInfo = async () => { - // Skip if already loading - if (isLoading) return; - - try { - setIsLoading(true); - setError(null); - const token = await getAccessToken(); - if (!token) { - console.error('Authentication token not available'); - setError('Authentication token not available'); - return; - } - - console.log('Fetching container details for:', normalizedContainerId); - const containerDetails = await sharePointService.getContainerDetails(token, normalizedContainerId); - - // Mark as attempted regardless of outcome - setFetchAttempted(true); - - // Set fallback values and handle missing data - if (!containerDetails) { - console.error('Container details are undefined'); - setError('Container details are undefined'); - return; - } - - // Handle name specifically - ensure it's never undefined - const name = containerDetails.name || 'SharePoint Site'; - setSiteName(name); - console.log('Container name retrieved:', name); - - if (!containerDetails.webUrl) { - console.error('Container webUrl is undefined'); - setError('Container webUrl is undefined'); - return; - } - - // Store the site URL without any trailing slashes - const normalizedUrl = containerDetails.webUrl.replace(/\/+$/, ''); - setSiteUrl(normalizedUrl); - console.log('Container webUrl retrieved:', normalizedUrl); - } catch (err) { - console.error('Error fetching site info:', err); - setError('Failed to load site information'); - } finally { - setIsLoading(false); - } - }; - - fetchSiteInfo(); - }, [normalizedContainerId, getAccessToken, isAuthenticated, shouldProcess, fetchAttempted]); - - // Get the base SharePoint hostname (without any paths or trailing slashes) - // This is used for authentication and CSP compatibility - const sharePointHostname = useMemo(() => { - try { - // If no site URL yet, use the default from config - if (!siteUrl) { - const defaultHostname = appConfig.sharePointHostname.replace(/\/+$/, ''); - console.log('Using default SharePoint hostname:', defaultHostname); - return defaultHostname; - } - - // Parse only the hostname part from the URL with protocol - const url = new URL(siteUrl); - const hostname = `${url.protocol}//${url.hostname}`; - console.log('Extracted SharePoint hostname from URL:', hostname); - return hostname; - } catch (e) { - console.error('Error parsing site URL:', e); - // Return default from config as fallback - const fallback = appConfig.sharePointHostname.replace(/\/+$/, ''); - console.log('Using fallback SharePoint hostname after error:', fallback); - return fallback; - } - }, [siteUrl]); - - return { - isLoading, - error, - siteUrl, - siteName, - sharePointHostname, - fetchAttempted - }; -}; diff --git a/Custom Apps/project-management/src/pages/Files.tsx b/Custom Apps/project-management/src/pages/Files.tsx index bf7495f..0f8dc87 100644 --- a/Custom Apps/project-management/src/pages/Files.tsx +++ b/Custom Apps/project-management/src/pages/Files.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useState } from 'react'; import { useParams } from 'react-router-dom'; -import { AlertCircle, FolderPlus, Upload, MessageSquare, FilePlus } from 'lucide-react'; +import { AlertCircle, FolderPlus, Upload, FilePlus } from 'lucide-react'; import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert"; import { Button } from "@/components/ui/button"; import { @@ -24,14 +24,12 @@ import FolderNavigation from '@/components/files/FolderNavigation'; import FilePreviewDialog from '@/components/files/FilePreviewDialog'; import FileUploadProgress from '@/components/files/FileUploadProgress'; import CreateOfficeFileDialog from '@/components/files/CreateOfficeFileDialog'; -import CopilotChat from '@/components/CopilotChat'; import { useFiles } from '@/hooks/useFiles'; import { useContainerDetails } from '@/hooks/useContainerDetails'; import { useFilePreview } from '@/hooks/useFilePreview'; import { useAuth } from '@/context/AuthContext'; import { sharePointService } from '@/services/sharePointService'; import { toast } from '@/hooks/use-toast'; -import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from "@/components/ui/resizable"; const Files = () => { const { containerId } = useParams<{ containerId: string }>(); @@ -42,8 +40,6 @@ const Files = () => { const [isFolderDialogOpen, setIsFolderDialogOpen] = useState(false); const [isCreatingFolder, setIsCreatingFolder] = useState(false); const [isOfficeFileDialogOpen, setIsOfficeFileDialogOpen] = useState(false); - const [isCopilotOpen, setIsCopilotOpen] = useState(false); - const [copilotSize, setCopilotSize] = useState(30); const { files, @@ -208,18 +204,6 @@ const Files = () => { }); }; - // Handle resize event from the resizable panel - const handleResize = (sizes: number[]) => { - if (sizes.length > 0) { - setCopilotSize(100 - sizes[0]); - } - }; - - // Toggle the Copilot panel - const toggleCopilot = () => { - setIsCopilotOpen(!isCopilotOpen); - }; - // Get project name with proper loading and error handling const getProjectDisplayName = () => { if (detailsLoading) { @@ -300,18 +284,6 @@ const Files = () => { /> - - {/* Copilot Chat Button */} - {containerId && ( - - )} @@ -344,58 +316,16 @@ const Files = () => { /> )} - {/* Main content with resizable panels */} -
- - {/* File List panel - always visible */} - -
- handleFolderClick(item.id, item.name)} - onFileClick={handleViewFile} - onViewFile={handleViewFile} - onDeleteFile={handleDeleteFile} - containerId={containerId ? normalizeContainerId(containerId) : ''} - /> -
-
- - {/* Copilot panel - only visible when opened */} - {isCopilotOpen && ( - <> - - - -
-
-
-

SharePoint AI Copilot

-

- {containerDetails?.name || 'AI Assistant'} -

-
- -
- - {/* CopilotChat with full height to ensure prompt is visible */} - {containerId && ( -
- -
- )} -
-
- - )} -
+
+ handleFolderClick(item.id, item.name)} + onFileClick={handleViewFile} + onViewFile={handleViewFile} + onDeleteFile={handleDeleteFile} + containerId={containerId ? normalizeContainerId(containerId) : ''} + />